onToggle(process.pid)}
>
-
+
) : (
diff --git a/apps/web/src/components/settings/ProviderInstanceCard.tsx b/apps/web/src/components/settings/ProviderInstanceCard.tsx
index b0a727f9ee5a..226043c7ce1f 100644
--- a/apps/web/src/components/settings/ProviderInstanceCard.tsx
+++ b/apps/web/src/components/settings/ProviderInstanceCard.tsx
@@ -7,13 +7,12 @@ import {
ArrowUpCircleIcon,
CopyIcon,
DownloadIcon,
- LockIcon,
- LockOpenIcon,
ExternalLinkIcon,
PlusIcon,
Trash2Icon,
XIcon,
} from "lucide-react";
+import { Lock as LockGlyph, LockOpen } from "lucide";
import * as Arr from "effect/Array";
import * as Result from "effect/Result";
import { useEffect, useRef, useState, type ReactElement, type ReactNode } from "react";
@@ -41,6 +40,7 @@ import { useCopyToClipboard } from "../../hooks/useCopyToClipboard";
import { normalizeProviderAccentColor } from "../../providerInstances";
import { Badge } from "../ui/badge";
import { Button } from "../ui/button";
+import { MorphIcon } from "~/components/MorphIcon";
import { DraftInput } from "../ui/draft-input";
import { Popover, PopoverPopup, PopoverTrigger } from "../ui/popover";
import { Switch } from "../ui/switch";
@@ -438,11 +438,10 @@ function ProviderEnvironmentSection(props: {
aria-pressed={variable.sensitive}
aria-label={`Mark environment variable ${variable.name || index + 1} as sensitive`}
>
- {variable.sensitive ? (
-
- ) : (
-
- )}
+
}
/>
diff --git a/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx b/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx
index 7f0a5f497bc9..7a9965d91ecf 100644
--- a/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx
+++ b/apps/web/src/components/settings/ResourceTelemetryDiagnostics.tsx
@@ -4,14 +4,13 @@ import {
ActivityIcon,
AlertTriangleIcon,
BatteryIcon,
- ChevronDownIcon,
- ChevronRightIcon,
CpuIcon,
DatabaseIcon,
GaugeIcon,
HardDriveIcon,
MemoryStickIcon,
} from "lucide-react";
+import { ChevronDown, ChevronRight } from "lucide";
import type {
BackgroundBooleanState,
EnvironmentId,
@@ -44,6 +43,7 @@ import { serverEnvironment } from "../../state/server";
import { useAtomCommand } from "../../state/use-atom-command";
import { formatRelativeTime } from "../../timestampFormat";
import { Button } from "../ui/button";
+import { MorphIcon } from "~/components/MorphIcon";
import { ScrollArea } from "../ui/scroll-area";
import { Toggle, ToggleGroup } from "../ui/toggle-group";
import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip";
@@ -480,7 +480,6 @@ function ProcessTreeName({
}) {
const name = formatProcessName(process);
const hasChildren = process.childPids.length > 0;
- const ChevronIcon = collapsed ? ChevronRightIcon : ChevronDownIcon;
return (
onToggle(process)}
aria-label={collapsed ? `Expand ${name}` : `Collapse ${name}`}
>
-
+
) : (
diff --git a/apps/web/src/components/settings/ThemeEditorPanel.tsx b/apps/web/src/components/settings/ThemeEditorPanel.tsx
index 339fc4b0c72b..27176181768e 100644
--- a/apps/web/src/components/settings/ThemeEditorPanel.tsx
+++ b/apps/web/src/components/settings/ThemeEditorPanel.tsx
@@ -1,11 +1,5 @@
-import {
- ChevronDownIcon,
- ChevronUpIcon,
- MousePointer2Icon,
- PaintbrushIcon,
- PlusIcon,
- XIcon,
-} from "lucide-react";
+import { MousePointer2Icon, PaintbrushIcon, PlusIcon, XIcon } from "lucide-react";
+import { ChevronDown, ChevronUp } from "lucide";
import {
useCallback,
useEffect,
@@ -36,6 +30,7 @@ import {
} from "../../themePalette";
import { cn } from "../../lib/utils";
import { Button } from "../ui/button";
+import { MorphIcon } from "~/components/MorphIcon";
import { Input } from "../ui/input";
import { Switch } from "../ui/switch";
import { Toggle, ToggleGroup } from "../ui/toggle-group";
@@ -1221,7 +1216,7 @@ export function ThemeEditorPanel({
variant="ghost"
onClick={() => setIsMinimized(!isMinimized)}
>
- {isMinimized ?
:
}
+
);
diff --git a/apps/web/src/components/ui/toast.tsx b/apps/web/src/components/ui/toast.tsx
index 391156f85e90..59cdf358dfab 100644
--- a/apps/web/src/components/ui/toast.tsx
+++ b/apps/web/src/components/ui/toast.tsx
@@ -14,20 +14,12 @@ import {
} from "react";
import { useParams } from "@tanstack/react-router";
import { type ScopedThreadRef, type ThreadId } from "@t3tools/contracts";
-import {
- CheckIcon,
- ChevronDownIcon,
- ChevronUpIcon,
- CircleAlertIcon,
- CircleCheckIcon,
- CopyIcon,
- InfoIcon,
- TriangleAlertIcon,
- XIcon,
-} from "lucide-react";
+import { CircleAlertIcon, CircleCheckIcon, InfoIcon, TriangleAlertIcon, XIcon } from "lucide-react";
+import { Check, ChevronDown, ChevronUp, Copy } from "lucide";
import { cn } from "~/lib/utils";
import { Button, buttonVariants } from "~/components/ui/button";
+import { MorphIcon } from "~/components/MorphIcon";
import { useComposerDraftStore } from "~/composerDraftStore";
import { useCopyToClipboard } from "~/hooks/useCopyToClipboard";
import { resolveThreadRouteTarget } from "~/threadRoutes";
@@ -135,7 +127,10 @@ function CopyErrorButton({ text }: { text: string }) {
/>
}
>
- {isCopied ?
:
}
+
{label}
@@ -165,11 +160,11 @@ function ToastExpandableSection({
onClick={() => setOpen((prev) => !prev)}
type="button"
>
- {open ? (
-
- ) : (
-
- )}
+
{open ? collapseLabel : expandLabel}
{open ?
{children}
: null}
@@ -249,19 +244,12 @@ function ToastDescriptionAndExpandable({
data-slot="toast-description"
/>
- {open ? (
-
- ) : (
-
- )}
+
{open ? collapseLabel : expandLabel}
diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx
index c8963ea635ee..68bab78c1c64 100644
--- a/apps/web/src/routes/__root.tsx
+++ b/apps/web/src/routes/__root.tsx
@@ -11,7 +11,7 @@ import {
useNavigate,
useRouter,
} from "@tanstack/react-router";
-import { CheckIcon, CopyIcon } from "lucide-react";
+import { Check, Copy } from "lucide";
import { useEffect, useEffectEvent, useMemo, useRef, useState } from "react";
import { APP_BASE_NAME, APP_DISPLAY_NAME, APP_STAGE_LABEL, APP_VERSION } from "../branding";
@@ -40,6 +40,7 @@ import { useCopyToClipboard } from "../hooks/useCopyToClipboard";
import { useDefaultThemeAdoption } from "../hooks/useDefaultTheme";
import { useEnvironmentThemeSync } from "../hooks/useEnvironmentTheme";
import { Button } from "../components/ui/button";
+import { MorphIcon } from "~/components/MorphIcon";
import { StandalonePage, StandalonePageHeader } from "../components/ui/standalone-page";
import {
AnchoredToastProvider,
@@ -49,6 +50,7 @@ import {
} from "../components/ui/toast";
import { resolveAndPersistPreferredEditor } from "../editorPreferences";
import { isElectron } from "../env";
+import { cn } from "../lib/utils";
import { applyAppearanceFontVariables } from "~/appearanceFonts";
import { applyAppearanceContrast } from "~/appearanceContrast";
import { useClientSettings } from "../hooks/useSettings";
@@ -418,7 +420,7 @@ function CopyErrorButton({ report }: { report: string }) {
return (
);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 963f68b03ae3..1590a7223b3b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -640,7 +640,7 @@ importers:
version: 0.9.0
'@legendapp/list':
specifier: 'catalog:'
- version: 3.3.5(patch_hash=680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
+ version: 3.3.5(patch_hash=680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806)(react-dom@19.2.6(react@19.2.6))(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)
'@noble/hashes':
specifier: 'catalog:'
version: 1.8.0
@@ -716,12 +716,18 @@ importers:
jszip:
specifier: 3.10.1
version: 3.10.1
+ lucide:
+ specifier: ^0.564.0
+ version: 0.564.0
lucide-react:
specifier: ^0.564.0
version: 0.564.0(react@19.2.6)
mermaid:
specifier: ^11.17.2
version: 11.17.2
+ morphicons:
+ specifier: ^1.7.1
+ version: 1.7.1(react-native-svg@15.15.5(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)
react:
specifier: 19.2.6
version: 19.2.6
@@ -8814,6 +8820,9 @@ packages:
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ lucide@0.564.0:
+ resolution: {integrity: sha512-FasyXKHWon773WIl3HeCQpd5xS6E0aLjqxiQStlHNKktni+HDncc1sqY+6vRUbCfmDsIaKQz43EEQLAUDLZO0g==}
+
lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
@@ -9200,6 +9209,26 @@ packages:
socks:
optional: true
+ morphicons@1.7.1:
+ resolution: {integrity: sha512-q5ylxy5/d7vBg0OAzanlooXf05PekovMYDuuQVpr6vAQZxl99lrJbaIi+jJ32PXQf9WEEaDO2pbNBsx1ZhEnFQ==}
+ peerDependencies:
+ react: '>=18'
+ react-native: '>=0.71'
+ react-native-svg: '>=14'
+ svelte: '>=5'
+ vue: '>=3.3'
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-native:
+ optional: true
+ react-native-svg:
+ optional: true
+ svelte:
+ optional: true
+ vue:
+ optional: true
+
mrmime@2.0.1:
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
@@ -13988,12 +14017,13 @@ snapshots:
dependencies:
jsbi: 4.3.2
- '@legendapp/list@3.3.5(patch_hash=680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
+ '@legendapp/list@3.3.5(patch_hash=680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806)(react-dom@19.2.6(react@19.2.6))(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)':
dependencies:
react: 19.2.6
use-sync-external-store: 1.6.0(react@19.2.6)
optionalDependencies:
react-dom: 19.2.6(react@19.2.6)
+ react-native: 0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)
'@legendapp/list@3.3.5(patch_hash=680cc6a5c5b4a4032e467e7b3fde22f89a84c0ee2e6eac6fda737d6277cc0806)(react-dom@19.3.0(react@19.3.0))(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(utf-8-validate@6.0.6))(react@19.3.0)':
dependencies:
@@ -14921,6 +14951,16 @@ snapshots:
'@react-native/normalize-colors@0.88.0-rc.3': {}
+ '@react-native/virtualized-lists@0.88.0-rc.3(@types/react@19.3.0)(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)':
+ dependencies:
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ react: 19.2.6
+ react-native: 0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)
+ optionalDependencies:
+ '@types/react': 19.3.0
+ optional: true
+
'@react-native/virtualized-lists@0.88.0-rc.3(@types/react@19.3.0)(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(utf-8-validate@6.0.6))(react@19.3.0)':
dependencies:
invariant: 2.2.4
@@ -19285,6 +19325,8 @@ snapshots:
dependencies:
react: 19.2.6
+ lucide@0.564.0: {}
+
lz-string@1.5.0: {}
magic-string@0.30.21:
@@ -19986,6 +20028,12 @@ snapshots:
socks: 2.8.9
optional: true
+ morphicons@1.7.1(react-native-svg@15.15.5(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6))(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6):
+ optionalDependencies:
+ react: 19.2.6
+ react-native: 0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)
+ react-native-svg: 15.15.5(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)
+
mrmime@2.0.1: {}
ms@2.0.0: {}
@@ -20885,6 +20933,14 @@ snapshots:
react: 19.3.0
react-native: 0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(utf-8-validate@6.0.6)
+ react-native-svg@15.15.5(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6):
+ dependencies:
+ css-select: 5.2.2
+ css-tree: 1.1.3
+ react: 19.2.6
+ react-native: 0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6)
+ optional: true
+
react-native-svg@15.15.5(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(utf-8-validate@6.0.6))(react@19.3.0):
dependencies:
css-select: 5.2.2
@@ -20928,6 +20984,49 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6):
+ dependencies:
+ '@react-native/asset-utils': 0.88.0-rc.3
+ '@react-native/codegen': 0.88.0-rc.3(@babel/core@7.29.7)
+ '@react-native/community-cli-plugin': 0.88.0-rc.3(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ '@react-native/gradle-plugin': 0.88.0-rc.3
+ '@react-native/normalize-colors': 0.88.0-rc.3
+ '@react-native/virtualized-lists': 0.88.0-rc.3(@types/react@19.3.0)(react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.2.6)(utf-8-validate@6.0.6))(react@19.2.6)
+ anser: 1.4.10
+ ansi-regex: 5.0.1
+ base64-js: 1.5.1
+ flow-enums-runtime: 0.0.6
+ flow-parser: 0.327.0
+ hermes-compiler: 260318099.0.4
+ invariant: 2.2.4
+ memoize-one: 5.2.1
+ metro-runtime: 0.87.1
+ metro-source-map: 0.87.1
+ nullthrows: 1.1.1
+ pretty-format: 29.7.0
+ promise: 8.3.0
+ react: 19.2.6
+ react-devtools-core: 6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ react-refresh: 0.14.2
+ regenerator-runtime: 0.13.11
+ scheduler: 0.28.0
+ semver: 7.8.5
+ stacktrace-parser: 0.1.11
+ tinyglobby: 0.2.17
+ whatwg-fetch: 3.6.20
+ ws: 7.5.11(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ yargs: 17.7.2
+ optionalDependencies:
+ '@types/react': 19.3.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@react-native-community/cli'
+ - '@react-native/metro-config'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ optional: true
+
react-native@0.88.0-rc.3(@babel/core@7.29.7)(@react-native/metro-config@0.88.0-rc.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.3.0)(bufferutil@4.1.0)(react@19.3.0)(utf-8-validate@6.0.6):
dependencies:
'@react-native/asset-utils': 0.88.0-rc.3