diff --git a/apps/web/.cross-domain-allowlist.json b/apps/web/.cross-domain-allowlist.json index d43243b9af7..bf864dc21fc 100644 --- a/apps/web/.cross-domain-allowlist.json +++ b/apps/web/.cross-domain-allowlist.json @@ -141,15 +141,6 @@ "src/domains/chat/utils/stream-handlers/types.ts": [ "messaging" ], - "src/domains/contacts/components/assistant-channels-detail.tsx": [ - "settings" - ], - "src/domains/contacts/components/contact-detail-view.tsx": [ - "settings" - ], - "src/domains/contacts/components/guardian-detail-view.tsx": [ - "settings" - ], "src/domains/conversations/conversation-queries.test.ts": [ "chat" ], @@ -199,21 +190,6 @@ "src/domains/logs/components/usage-tab.tsx": [ "chat" ], - "src/domains/logs/logs-layout.tsx": [ - "settings" - ], - "src/domains/logs/pages/emails-page.tsx": [ - "settings" - ], - "src/domains/logs/pages/system-events-page.tsx": [ - "settings" - ], - "src/domains/logs/pages/trace-page.tsx": [ - "settings" - ], - "src/domains/logs/pages/usage-page.tsx": [ - "settings" - ], "src/domains/onboarding/pages/pre-chat-flow.tsx": [ "nudges" ], diff --git a/apps/web/src/domains/settings/components/settings-card.tsx b/apps/web/src/components/detail-card.tsx similarity index 95% rename from apps/web/src/domains/settings/components/settings-card.tsx rename to apps/web/src/components/detail-card.tsx index ced26c2ab6e..2844bed2f68 100644 --- a/apps/web/src/domains/settings/components/settings-card.tsx +++ b/apps/web/src/components/detail-card.tsx @@ -3,7 +3,7 @@ import type { ReactNode } from "react"; import { Card } from "@vellum/design-library"; import { cn } from "@vellum/design-library"; -export interface SettingsCardProps { +export interface DetailCardProps { id?: string; title?: string; subtitle?: string; @@ -15,7 +15,7 @@ export interface SettingsCardProps { className?: string; } -export function SettingsCard({ +export function DetailCard({ id, title, subtitle, @@ -25,7 +25,7 @@ export function SettingsCard({ showBorder = true, variant = "default", className, -}: SettingsCardProps) { +}: DetailCardProps) { const hasHeader = Boolean(title || subtitle || accessory); const body = ( <> diff --git a/apps/web/src/domains/settings/components/settings-shell.tsx b/apps/web/src/components/sidebar-shell.tsx similarity index 94% rename from apps/web/src/domains/settings/components/settings-shell.tsx rename to apps/web/src/components/sidebar-shell.tsx index 36f62806032..b7c5e7e2406 100644 --- a/apps/web/src/domains/settings/components/settings-shell.tsx +++ b/apps/web/src/components/sidebar-shell.tsx @@ -5,7 +5,7 @@ import { Link, useLocation, useNavigate } from "react-router"; import { Button, Typography } from "@vellum/design-library"; import { routes } from "@/utils/routes.js"; -interface SettingsShellProps { +interface SidebarShellProps { sidebar: ReactNode; children: ReactNode; actions?: ReactNode; @@ -15,20 +15,20 @@ interface SettingsShellProps { } /** - * Settings shell — overlay panel treatment. + * Sidebar shell — overlay panel treatment. * * Desktop: one outer card containing sidebar + content side-by-side. * Mobile: two-page flow — root shows sidebar, sub-pages show content * with a back arrow returning to the root. */ -export function SettingsShell({ +export function SidebarShell({ sidebar, children, actions, backHref, title = "Settings", menuRoute = routes.settings.root, -}: SettingsShellProps) { +}: SidebarShellProps) { const { pathname } = useLocation(); const navigate = useNavigate(); const isMenuRoute = pathname === menuRoute; @@ -36,7 +36,7 @@ export function SettingsShell({ const mobileBackHref = isMenuRoute ? backHref : menuRoute; const mobileBackLabel = isMenuRoute ? `Back from ${title}` - : "Back to settings menu"; + : `Back to ${title} menu`; const mobileBackButton = ( - + - @@ -161,7 +161,7 @@ function ContactDetailViewInner({ onSetupChannel={onSetupChannel} onRevokeChannel={onRevokeChannel} /> - + - } compactAccessory @@ -121,9 +121,9 @@ function GuardianDetailViewInner({ ) : null} - + - @@ -137,7 +137,7 @@ function GuardianDetailViewInner({ onVerifyChannel={onVerifyChannel} onRevokeChannel={onRevokeChannel} /> - + {onGenerateInviteLink ? : null} diff --git a/apps/web/src/domains/logs/logs-layout.tsx b/apps/web/src/domains/logs/logs-layout.tsx index d3fcf4b4bc6..890ea1f2dcb 100644 --- a/apps/web/src/domains/logs/logs-layout.tsx +++ b/apps/web/src/domains/logs/logs-layout.tsx @@ -3,13 +3,13 @@ import { Outlet, useLocation } from "react-router"; import { routes } from "@/utils/routes.js"; import { LOGS_SIDEBAR } from "@/domains/logs/navigation.js"; -import { SettingsShell } from "@/domains/settings/components/settings-shell.js"; -import { SettingsSidebarTree } from "@/domains/settings/components/settings-sidebar-tree.js"; +import { SidebarShell } from "@/components/sidebar-shell.js"; +import { SidebarTree } from "@/components/sidebar-tree.js"; /** * React Router layout route for `/assistant/logs/*`. * - * Renders the SettingsShell (full-screen overlay with sidebar navigation) + * Renders the SidebarShell (full-screen overlay with sidebar navigation) * and an `` for the active logs tab page. Uses the same shell * component as Settings for visual consistency. */ @@ -31,13 +31,13 @@ export function LogsLayout() { }, [pathname]); return ( - } + sidebar={} title={pageTitle} menuRoute={routes.logs.root} > - + ); } diff --git a/apps/web/src/domains/logs/pages/emails-page.tsx b/apps/web/src/domains/logs/pages/emails-page.tsx index 88727ebcb1b..739a0bf1fb7 100644 --- a/apps/web/src/domains/logs/pages/emails-page.tsx +++ b/apps/web/src/domains/logs/pages/emails-page.tsx @@ -1,4 +1,4 @@ -import { useCurrentPlatformAssistant } from "@/domains/settings/hooks/use-current-platform-assistant.js"; +import { useCurrentPlatformAssistant } from "@/hooks/use-current-platform-assistant.js"; import { EmailsTab } from "@/domains/logs/components/emails-tab.js"; export function EmailsPage() { diff --git a/apps/web/src/domains/logs/pages/system-events-page.tsx b/apps/web/src/domains/logs/pages/system-events-page.tsx index c74b69bbfbe..ed68e011a20 100644 --- a/apps/web/src/domains/logs/pages/system-events-page.tsx +++ b/apps/web/src/domains/logs/pages/system-events-page.tsx @@ -1,4 +1,4 @@ -import { useCurrentPlatformAssistant } from "@/domains/settings/hooks/use-current-platform-assistant.js"; +import { useCurrentPlatformAssistant } from "@/hooks/use-current-platform-assistant.js"; import { SystemEventsTab } from "@/domains/logs/components/system-events-tab.js"; export function SystemEventsPage() { diff --git a/apps/web/src/domains/logs/pages/trace-page.tsx b/apps/web/src/domains/logs/pages/trace-page.tsx index 210611e4da5..6b3f34427ed 100644 --- a/apps/web/src/domains/logs/pages/trace-page.tsx +++ b/apps/web/src/domains/logs/pages/trace-page.tsx @@ -1,4 +1,4 @@ -import { useCurrentPlatformAssistant } from "@/domains/settings/hooks/use-current-platform-assistant.js"; +import { useCurrentPlatformAssistant } from "@/hooks/use-current-platform-assistant.js"; import { LogsTab } from "@/domains/logs/components/logs-tab.js"; export function TracePage() { diff --git a/apps/web/src/domains/logs/pages/usage-page.tsx b/apps/web/src/domains/logs/pages/usage-page.tsx index 1bfe47859a1..14e33cd91e4 100644 --- a/apps/web/src/domains/logs/pages/usage-page.tsx +++ b/apps/web/src/domains/logs/pages/usage-page.tsx @@ -1,4 +1,4 @@ -import { useCurrentPlatformAssistant } from "@/domains/settings/hooks/use-current-platform-assistant.js"; +import { useCurrentPlatformAssistant } from "@/hooks/use-current-platform-assistant.js"; import { UsageTab } from "@/domains/logs/components/usage-tab.js"; export function UsagePage() { diff --git a/apps/web/src/domains/settings/ai/ai-page.tsx b/apps/web/src/domains/settings/ai/ai-page.tsx index 1676e2f2ce9..8fa80bcf836 100644 --- a/apps/web/src/domains/settings/ai/ai-page.tsx +++ b/apps/web/src/domains/settings/ai/ai-page.tsx @@ -27,7 +27,7 @@ import { Input } from "@vellum/design-library/components/input"; import { Notice } from "@vellum/design-library/components/notice"; import { SegmentControl } from "@vellum/design-library/components/segment-control"; import { DomainField } from "@/domains/settings/components/domain-field.js"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { Typography } from "@vellum/design-library/components/typography"; import { toast } from "@vellum/design-library/components/toast"; @@ -452,7 +452,7 @@ interface ServiceCardProps { function ServiceCard({ id, title, subtitle, mode, onModeChange, children }: ServiceCardProps) { return ( -
{children}
- + ); } @@ -500,10 +500,10 @@ interface ByoServiceCardProps { // own key" services that don't offer a managed mode (TTS / STT). function ByoServiceCard({ title, subtitle, children }: ByoServiceCardProps) { return ( - +
{children}
- + ); } diff --git a/apps/web/src/domains/settings/components/assistant-picker.tsx b/apps/web/src/domains/settings/components/assistant-picker.tsx index 72e37c95fe7..ab322a26b4b 100644 --- a/apps/web/src/domains/settings/components/assistant-picker.tsx +++ b/apps/web/src/domains/settings/components/assistant-picker.tsx @@ -3,8 +3,8 @@ import { Check, Monitor } from "lucide-react"; import { Button } from "@vellum/design-library/components/button"; import { Tag } from "@vellum/design-library/components/tag"; import { toast } from "@vellum/design-library/components/toast"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; -import { useCurrentPlatformAssistant } from "@/domains/settings/hooks/use-current-platform-assistant.js"; +import { DetailCard } from "@/components/detail-card.js"; +import { useCurrentPlatformAssistant } from "@/hooks/use-current-platform-assistant.js"; export function AssistantPicker() { const { @@ -19,7 +19,7 @@ export function AssistantPicker() { } return ( - @@ -74,6 +74,6 @@ export function AssistantPicker() { ); })}
-
+ ); } diff --git a/apps/web/src/domains/settings/components/biometric-settings-card.tsx b/apps/web/src/domains/settings/components/biometric-settings-card.tsx index 57069237954..b322de11fb5 100644 --- a/apps/web/src/domains/settings/components/biometric-settings-card.tsx +++ b/apps/web/src/domains/settings/components/biometric-settings-card.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from "react"; import { Toggle } from "@vellum/design-library/components/toggle"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { useIsNativePlatform, getSessionTokenFromCookies } from "@/runtime/native-auth.js"; import { deleteBiometricToken, @@ -49,7 +49,7 @@ export function BiometricSettingsCard() { }; return ( - +
@@ -66,6 +66,6 @@ export function BiometricSettingsCard() { disabled={toggling} />
- + ); } diff --git a/apps/web/src/domains/settings/components/delete-account-section.tsx b/apps/web/src/domains/settings/components/delete-account-section.tsx index 93ff76e903e..05aa4b47cb1 100644 --- a/apps/web/src/domains/settings/components/delete-account-section.tsx +++ b/apps/web/src/domains/settings/components/delete-account-section.tsx @@ -5,7 +5,7 @@ import { useNavigate } from "react-router"; import { Button } from "@vellum/design-library/components/button"; import { ConfirmDialog } from "@vellum/design-library/components/confirm-dialog"; import { toast } from "@vellum/design-library/components/toast"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { userDeletionRequestCreateMutation } from "@/generated/api/@tanstack/react-query.gen.js"; import { useAuthStore } from "@/stores/auth-store.js"; import { routes } from "@/utils/routes.js"; @@ -31,7 +31,7 @@ export function DeleteAccountSection() { return ( <> - Delete My Account - + d === DEFAULT_VIDEO_ALLOWLIST[i]); return ( - @@ -192,6 +192,6 @@ export function MediaEmbedsCard() { )} )} - + ); } diff --git a/apps/web/src/domains/settings/components/nudge-settings-card.tsx b/apps/web/src/domains/settings/components/nudge-settings-card.tsx index 277f735cb0e..dfc91865b72 100644 --- a/apps/web/src/domains/settings/components/nudge-settings-card.tsx +++ b/apps/web/src/domains/settings/components/nudge-settings-card.tsx @@ -1,7 +1,7 @@ import type { ComponentType, CSSProperties, ReactNode } from "react"; import { Button } from "@vellum/design-library/components/button"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; export interface NudgeBenefit { icon: ComponentType<{ @@ -30,7 +30,7 @@ export function NudgeSettingsCard({ onAction, }: NudgeSettingsCardProps) { return ( - +
    {benefits.map(({ icon: Icon, text }) => ( @@ -61,6 +61,6 @@ export function NudgeSettingsCard({ {ctaLabel}
-
+ ); } diff --git a/apps/web/src/domains/settings/components/panels/assistant-lifecycle-panel.tsx b/apps/web/src/domains/settings/components/panels/assistant-lifecycle-panel.tsx index c7bcc001f51..317835f9d11 100644 --- a/apps/web/src/domains/settings/components/panels/assistant-lifecycle-panel.tsx +++ b/apps/web/src/domains/settings/components/panels/assistant-lifecycle-panel.tsx @@ -6,7 +6,7 @@ import { Button } from "@vellum/design-library/components/button"; import { ConfirmDialog } from "@vellum/design-library/components/confirm-dialog"; import { Tag } from "@vellum/design-library/components/tag"; import { toast } from "@vellum/design-library/components/toast"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { assistantsActiveRetrieveOptions, assistantsListOptions, @@ -62,7 +62,7 @@ export function AssistantLifecyclePanel() { loading={loading} /> - @@ -90,7 +90,7 @@ export function AssistantLifecyclePanel() { onConfirm={handleHatch} onCancel={() => setHatchConfirmOpen(false)} /> - +
); } @@ -103,27 +103,27 @@ interface AssistantInfoCardProps { function AssistantInfoCard({ assistant, loading }: AssistantInfoCardProps) { if (loading) { return ( - +
Loading assistant info...
-
+ ); } if (!assistant) { return ( - +

No assistant found. Hatch an assistant to get started.

-
+ ); } return ( - +
Name {assistant.name ?? "Unnamed"} @@ -166,7 +166,7 @@ function AssistantInfoCard({ assistant, loading }: AssistantInfoCardProps) { )}
-
+ ); } @@ -186,7 +186,7 @@ function AssistantListCard({ } return ( - @@ -222,7 +222,7 @@ function AssistantListCard({ ); })}
-
+ ); } diff --git a/apps/web/src/domains/settings/components/panels/environment-config-panel.tsx b/apps/web/src/domains/settings/components/panels/environment-config-panel.tsx index 7fa7c1d72d3..f3bb73f3272 100644 --- a/apps/web/src/domains/settings/components/panels/environment-config-panel.tsx +++ b/apps/web/src/domains/settings/components/panels/environment-config-panel.tsx @@ -1,6 +1,6 @@ import { Tag } from "@vellum/design-library/components/tag"; import { Toggle } from "@vellum/design-library/components/toggle"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { useEnvironmentStore } from "@/lib/environment/environment-store.js"; export function EnvironmentConfigPanel() { @@ -9,7 +9,7 @@ export function EnvironmentConfigPanel() { const setEnvironment = useEnvironmentStore.use.setEnvironment(); return ( - @@ -47,6 +47,6 @@ export function EnvironmentConfigPanel() {
-
+ ); } diff --git a/apps/web/src/domains/settings/components/panels/feature-flags-panel.tsx b/apps/web/src/domains/settings/components/panels/feature-flags-panel.tsx index 4876f9f5793..536dd73f7a7 100644 --- a/apps/web/src/domains/settings/components/panels/feature-flags-panel.tsx +++ b/apps/web/src/domains/settings/components/panels/feature-flags-panel.tsx @@ -4,7 +4,7 @@ import { useMemo, useState } from "react"; import { Tag, type TagTone } from "@vellum/design-library/components/tag"; import { Toggle } from "@vellum/design-library/components/toggle"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { assistantsActiveRetrieveOptions } from "@/generated/api/@tanstack/react-query.gen.js"; import { useClientFeatureFlagStore } from "@/lib/feature-flags/client-feature-flag-store.js"; import { useAssistantFeatureFlagStore } from "@/lib/feature-flags/assistant-feature-flag-store.js"; @@ -100,7 +100,7 @@ export function FeatureFlagsPanel() { }, [flags, searchText]); return ( - @@ -134,7 +134,7 @@ export function FeatureFlagsPanel() { )} - + ); } diff --git a/apps/web/src/domains/settings/components/panels/sentry-testing-panel.tsx b/apps/web/src/domains/settings/components/panels/sentry-testing-panel.tsx index 381b0fdaaa4..0efd941aa1e 100644 --- a/apps/web/src/domains/settings/components/panels/sentry-testing-panel.tsx +++ b/apps/web/src/domains/settings/components/panels/sentry-testing-panel.tsx @@ -11,7 +11,7 @@ import { type ReactNode, useCallback } from "react"; import { Button } from "@vellum/design-library/components/button"; import { toast } from "@vellum/design-library/components/toast"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; export function SentryTestingPanel() { const handleCaptureError = useCallback(() => { @@ -45,7 +45,7 @@ export function SentryTestingPanel() { }, []); return ( - @@ -91,7 +91,7 @@ export function SentryTestingPanel() { onClick={handleCaptureTransaction} /> - + ); } diff --git a/apps/web/src/domains/settings/components/profile-card.test.tsx b/apps/web/src/domains/settings/components/profile-card.test.tsx index 7d1adfda484..4bed091ca60 100644 --- a/apps/web/src/domains/settings/components/profile-card.test.tsx +++ b/apps/web/src/domains/settings/components/profile-card.test.tsx @@ -67,7 +67,7 @@ mock.module("@/stores/auth-store.js", () => { }); // Toast mock needs to satisfy the design-library barrel's re-exports too — -// `settings-card.tsx` pulls `Card`/`cn` from the barrel index, which itself +// `detail-card.tsx` pulls `Card`/`cn` from the barrel index, which itself // re-exports `Toaster`/`ToastContent` from this module. Missing exports // here surface as parse-time "export not found" errors during barrel // resolution, not as runtime failures, so stub them with no-op components. diff --git a/apps/web/src/domains/settings/components/profile-card.tsx b/apps/web/src/domains/settings/components/profile-card.tsx index d5d11bdc0a3..72704aaaca8 100644 --- a/apps/web/src/domains/settings/components/profile-card.tsx +++ b/apps/web/src/domains/settings/components/profile-card.tsx @@ -8,7 +8,7 @@ import { useQuery } from "@tanstack/react-query"; import { Button } from "@vellum/design-library/components/button"; import { Input } from "@vellum/design-library/components/input"; import { toast } from "@vellum/design-library/components/toast"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { useAuthStore } from "@/stores/auth-store.js"; import { looksAutoGenerated } from "@/domains/account/username-heuristics.js"; import { @@ -613,7 +613,7 @@ export function ProfileCard({ }, []); return ( - + {error ? (

{error} @@ -630,7 +630,7 @@ export function ProfileCard({ <> {/* Inline divider — keeps the two sections visually grouped inside a single card while letting them act independently. - Two-tone border to match the SettingsCard surface. */} + Two-tone border to match the DetailCard surface. */}

)} - + ); } diff --git a/apps/web/src/domains/settings/components/resize-card.tsx b/apps/web/src/domains/settings/components/resize-card.tsx index 561b646e550..d467d71550f 100644 --- a/apps/web/src/domains/settings/components/resize-card.tsx +++ b/apps/web/src/domains/settings/components/resize-card.tsx @@ -10,7 +10,7 @@ import { Notice } from "@vellum/design-library/components/notice"; import { Tag } from "@vellum/design-library/components/tag"; import { toast } from "@vellum/design-library/components/toast"; import { CapacityBar } from "@/domains/settings/components/capacity-bar.js"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { extractResizeError } from "@/domains/settings/components/resize-errors.js"; import { formatResourceMb } from "@/domains/settings/components/assistant-status-panel.js"; import { @@ -130,7 +130,7 @@ export function ResizeCard({ if (subscriptionQuery.isError && subscription == null) { return ( - Could not load your subscription. Please try again. - + ); } @@ -236,7 +236,7 @@ export function ResizeCard({ return ( <> -
-
+ {/* Upgrade modal (free plan) */} {platformAssistant && ( - - + )} ); diff --git a/apps/web/src/domains/settings/pages/devices-page.tsx b/apps/web/src/domains/settings/pages/devices-page.tsx index 5263b18c6d3..ecb6a509920 100644 --- a/apps/web/src/domains/settings/pages/devices-page.tsx +++ b/apps/web/src/domains/settings/pages/devices-page.tsx @@ -2,7 +2,7 @@ import { Loader2 } from "lucide-react"; import { useQuery } from "@tanstack/react-query"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { DeviceRow } from "@/domains/settings/components/devices/device-row.js"; import { assistantsListOptions } from "@/generated/api/@tanstack/react-query.gen.js"; import type { Assistant } from "@/generated/api/types.gen.js"; @@ -16,7 +16,7 @@ export function DevicesPage() { return (
- @@ -36,7 +36,7 @@ export function DevicesPage() { ))}
)} - + ); } diff --git a/apps/web/src/domains/settings/pages/general-page.tsx b/apps/web/src/domains/settings/pages/general-page.tsx index c9205a0a39a..a15a3c5ed99 100644 --- a/apps/web/src/domains/settings/pages/general-page.tsx +++ b/apps/web/src/domains/settings/pages/general-page.tsx @@ -11,7 +11,7 @@ import { IOSAppCard } from "@/domains/settings/components/ios-app-card.js"; import { MediaEmbedsCard } from "@/domains/settings/components/media-embeds-card.js"; import { PreviewReleaseChannel } from "@/domains/settings/components/preview-release-channel.js"; import { RetireAssistant } from "@/domains/settings/components/retire-assistant.js"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { TimezonePicker } from "@/domains/settings/components/timezone-picker.js"; import { ProfileCard } from "@/domains/settings/components/profile-card.js"; import { AssistantOutOfStorageBanner } from "@/domains/settings/components/assistant-out-of-storage-banner.js"; @@ -101,7 +101,7 @@ function ThemeCard() { ]; return ( - +
ariaLabel="Theme" @@ -110,7 +110,7 @@ function ThemeCard() { items={themeItems} />
-
+ ); } @@ -125,12 +125,12 @@ function TimezoneCard() { }; return ( - - + ); } @@ -168,14 +168,14 @@ export function GeneralPage() { {platformAssistant && ( )} - + - + {isLoggedIn && } @@ -193,7 +193,7 @@ export function GeneralPage() { {platformAssistant && ( - + - + )} {platformAssistant && settingsSleepPolicy && ( - - + )} @@ -233,13 +233,13 @@ export function GeneralPage() { {multiPlatformAssistant && } {platformAssistant && ( - - + )} {accountDeletion && } diff --git a/apps/web/src/domains/settings/pages/privacy-page.tsx b/apps/web/src/domains/settings/pages/privacy-page.tsx index 6312a701245..e9f24fb792c 100644 --- a/apps/web/src/domains/settings/pages/privacy-page.tsx +++ b/apps/web/src/domains/settings/pages/privacy-page.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { Dropdown } from "@vellum/design-library/components/dropdown"; import { Toggle } from "@vellum/design-library/components/toggle"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { BiometricSettingsCard } from "@/domains/settings/components/biometric-settings-card.js"; import { AccessConsentSetting } from "@/domains/settings/components/access-consent-setting.js"; import { RiskToleranceSettings } from "@/domains/settings/components/risk-tolerance-settings.js"; @@ -93,7 +93,7 @@ export function PrivacyPage() { - +
-
+ ); } diff --git a/apps/web/src/domains/settings/pages/schedules-page.tsx b/apps/web/src/domains/settings/pages/schedules-page.tsx index 38eb59602c0..99e02159d20 100644 --- a/apps/web/src/domains/settings/pages/schedules-page.tsx +++ b/apps/web/src/domains/settings/pages/schedules-page.tsx @@ -16,7 +16,7 @@ import { PanelItem } from "@vellum/design-library/components/panel-item"; import { Tag } from "@vellum/design-library/components/tag"; import { Toggle } from "@vellum/design-library/components/toggle"; import { toast } from "@vellum/design-library/components/toast"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { assistantsListOptions } from "@/generated/api/@tanstack/react-query.gen.js"; import { deleteSchedule, @@ -158,7 +158,7 @@ function RunLogView({ run, onBack }: { run: ScheduleRun; onBack: () => void }) { Back to runs - +
Status @@ -176,30 +176,30 @@ function RunLogView({ run, onBack }: { run: ScheduleRun; onBack: () => void }) { {formatDuration(run.durationMs)}
-
+ {run.output && ( - +
             {run.output}
           
-
+ )} {run.error && ( - +
             {run.error}
           
-
+ )} {!run.output && !run.error && ( - +

No output or errors captured for this run.

-
+ )} ); @@ -219,7 +219,7 @@ function RecentRunsCard({ emptyMessage = "No runs yet.", }: RecentRunsCardProps) { return ( - + {isLoading ? (
@@ -261,7 +261,7 @@ function RecentRunsCard({ ))}
)} -
+ ); } @@ -343,7 +343,7 @@ export function ScheduleDetailView({ Back to schedules - )} - + - +

@@ -449,7 +449,7 @@ export function ScheduleDetailView({

)}
-
+ ); } @@ -596,7 +596,7 @@ function SystemTaskDetailView({ Back to schedules - {formatTimestamp(lastRunAt)} - + @@ -829,7 +829,7 @@ function SystemTasksSection({ ) : null} )} - + ); } @@ -1094,7 +1094,7 @@ export function SchedulesPage() { {recurring.length > 0 && ( - @@ -1108,7 +1108,7 @@ export function SchedulesPage() { /> ))} - + )} {oneTime.length > 0 && ( - @@ -1140,7 +1140,7 @@ export function SchedulesPage() { /> ))} - + )} {assistantId ? ( diff --git a/apps/web/src/domains/settings/pages/voice-page.tsx b/apps/web/src/domains/settings/pages/voice-page.tsx index 4ca242ac745..1f193f29346 100644 --- a/apps/web/src/domains/settings/pages/voice-page.tsx +++ b/apps/web/src/domains/settings/pages/voice-page.tsx @@ -11,7 +11,7 @@ import { Link } from "react-router"; import { Dropdown } from "@vellum/design-library/components/dropdown"; import { Toggle } from "@vellum/design-library/components/toggle"; -import { SettingsCard } from "@/domains/settings/components/settings-card.js"; +import { DetailCard } from "@/components/detail-card.js"; import { getLocalSetting, setLocalSetting, @@ -216,7 +216,7 @@ function PushToTalkCard() { !PTT_PRESETS.some((p) => activatorsEqual(p.activator, activator)); return ( - @@ -290,7 +290,7 @@ function PushToTalkCard() { )} - + ); } @@ -347,7 +347,7 @@ function ConversationTimeoutCard() { }, []); return ( - @@ -359,6 +359,6 @@ function ConversationTimeoutCard() { aria-label="Conversation timeout" /> - + ); } diff --git a/apps/web/src/domains/settings/settings-layout.tsx b/apps/web/src/domains/settings/settings-layout.tsx index 6981c2a6980..29224c4c563 100644 --- a/apps/web/src/domains/settings/settings-layout.tsx +++ b/apps/web/src/domains/settings/settings-layout.tsx @@ -5,14 +5,14 @@ import { useClientFeatureFlagStore } from "@/lib/feature-flags/client-feature-fl import { useAssistantFeatureFlagStore } from "@/lib/feature-flags/assistant-feature-flag-store.js"; import { routes } from "@/utils/routes.js"; import { SETTINGS_SIDEBAR } from "@/domains/settings/navigation.js"; -import { SettingsShell } from "@/domains/settings/components/settings-shell.js"; -import { SettingsSidebarTree } from "@/domains/settings/components/settings-sidebar-tree.js"; +import { SidebarShell } from "@/components/sidebar-shell.js"; +import { SidebarTree } from "@/components/sidebar-tree.js"; import { useSettingsSync } from "@/domains/settings/hooks/use-settings-sync.js"; /** * React Router layout route for `/assistant/settings/*`. * - * Renders the SettingsShell (responsive overlay panel with sidebar + * Renders the SidebarShell (responsive overlay panel with sidebar * navigation) and an `` for the active settings tab page. * Also mounts the settings sync bridge to keep TanStack Query caches * fresh while the user is on any settings page. @@ -61,14 +61,14 @@ export function SettingsLayout() { useSettingsSync(); return ( - + } title={pageTitle} > - + ); } diff --git a/apps/web/src/domains/settings/hooks/use-current-platform-assistant.ts b/apps/web/src/hooks/use-current-platform-assistant.ts similarity index 95% rename from apps/web/src/domains/settings/hooks/use-current-platform-assistant.ts rename to apps/web/src/hooks/use-current-platform-assistant.ts index 77ba7169d7b..c78047bb615 100644 --- a/apps/web/src/domains/settings/hooks/use-current-platform-assistant.ts +++ b/apps/web/src/hooks/use-current-platform-assistant.ts @@ -3,7 +3,7 @@ import { useCallback, useEffect } from "react"; import { assistantsListOptions } from "@/generated/api/@tanstack/react-query.gen.js"; import type { Assistant } from "@/generated/api/types.gen.js"; -import { useCurrentPlatformAssistantStore } from "@/domains/settings/current-platform-assistant-store.js"; +import { useCurrentPlatformAssistantStore } from "@/stores/current-platform-assistant-store.js"; import { useOrganizationStore } from "@/stores/organization-store.js"; const PLATFORM_LIST_OPTIONS = assistantsListOptions({ diff --git a/apps/web/src/routes.tsx b/apps/web/src/routes.tsx index 2b6e7fa8b1e..3e7b8457577 100644 --- a/apps/web/src/routes.tsx +++ b/apps/web/src/routes.tsx @@ -71,7 +71,7 @@ export const router = createBrowserRouter( }, // Settings routes — full-screen overlay panel (no ChatLayout sidebar). - // SettingsShell provides its own layout with back-arrow, sidebar nav, + // SidebarShell provides its own layout with back-arrow, sidebar nav, // and content area — the main app sidebar is intentionally hidden. // Lazy-loaded: visited occasionally, heavy deps (Stripe, schedules, voice). { @@ -102,7 +102,7 @@ export const router = createBrowserRouter( }, // Logs routes — full-screen overlay panel (like SettingsLayout). - // LogsLayout reuses SettingsShell for visual consistency. + // LogsLayout reuses SidebarShell for visual consistency. // Lazy-loaded: analytics-only, pulls in recharts. { path: "logs", diff --git a/apps/web/src/domains/settings/current-platform-assistant-store.ts b/apps/web/src/stores/current-platform-assistant-store.ts similarity index 100% rename from apps/web/src/domains/settings/current-platform-assistant-store.ts rename to apps/web/src/stores/current-platform-assistant-store.ts