@burdenoff/microfe-vibecontrols 2026.623.1 → 2026.623.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/actions/ActionCard.js +2 -2
- package/dist/components/actions/ActionCard.js.map +1 -1
- package/dist/components/actions/ExecutionHistory.js +1 -1
- package/dist/components/actions/ExecutionHistory.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerAdminBar.js +1 -1
- package/dist/components/agent-manager/AgentManagerAdminBar.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerChatPane.js +2 -2
- package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerInputArea.js +4 -4
- package/dist/components/agent-manager/AgentManagerInputArea.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerLayout.js +1 -1
- package/dist/components/agent-manager/AgentManagerLayout.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.js +1 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerSidebar.js +5 -5
- package/dist/components/agent-manager/AgentManagerSidebar.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerTab.js +1 -1
- package/dist/components/agent-manager/AgentManagerTab.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerTabBar.js +1 -1
- package/dist/components/agent-manager/AgentManagerTabBar.js.map +1 -1
- package/dist/components/agent-manager/BridleConfigPanel.js +23 -23
- package/dist/components/agent-manager/BridleConfigPanel.js.map +1 -1
- package/dist/components/agent-manager/PluginInstallModal.js +1 -1
- package/dist/components/agent-manager/PluginInstallModal.js.map +1 -1
- package/dist/components/agent-manager/ProfilesPanel.js +5 -5
- package/dist/components/agent-manager/ProfilesPanel.js.map +1 -1
- package/dist/components/agent-manager/controls/AutonomySelector.js +1 -1
- package/dist/components/agent-manager/controls/AutonomySelector.js.map +1 -1
- package/dist/components/agent-manager/controls/SdkSelector.js +1 -1
- package/dist/components/agent-manager/controls/SdkSelector.js.map +1 -1
- package/dist/components/agent-manager/controls/VoiceToggle.js +1 -1
- package/dist/components/agent-manager/controls/VoiceToggle.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionConfigPanel.js +6 -6
- package/dist/components/agent-manager/detail/SessionConfigPanel.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionLogsPanel.js +5 -5
- package/dist/components/agent-manager/detail/SessionLogsPanel.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.js +1 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.js.map +1 -1
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js +2 -2
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js.map +1 -1
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.js +1 -1
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.js.map +1 -1
- package/dist/components/agents/AgentCard.js +14 -11
- package/dist/components/agents/AgentCard.js.map +1 -1
- package/dist/components/ai/AIContextsTab.js +1 -1
- package/dist/components/ai/AIContextsTab.js.map +1 -1
- package/dist/components/ai/AIOverviewTab.js +4 -4
- package/dist/components/ai/AIOverviewTab.js.map +1 -1
- package/dist/components/ai/AIPlanPanel.js +4 -4
- package/dist/components/ai/AIPlanPanel.js.map +1 -1
- package/dist/components/ai/AIPlaygroundTab.js +1 -1
- package/dist/components/ai/AIPlaygroundTab.js.map +1 -1
- package/dist/components/ai/AIPromptsTab.js +2 -2
- package/dist/components/ai/AIPromptsTab.js.map +1 -1
- package/dist/components/ai/AIProviderCredentialsCard.js +4 -4
- package/dist/components/ai/AIProviderCredentialsCard.js.map +1 -1
- package/dist/components/ai/AIQueueTab.js +4 -4
- package/dist/components/ai/AIQueueTab.js.map +1 -1
- package/dist/components/ai/AISessionsTab.js +4 -4
- package/dist/components/ai/AISessionsTab.js.map +1 -1
- package/dist/components/ai/AITasksTab.js +1 -1
- package/dist/components/ai/AITasksTab.js.map +1 -1
- package/dist/components/ai/ClaudeCredentialsCard.js +3 -3
- package/dist/components/ai/ClaudeCredentialsCard.js.map +1 -1
- package/dist/components/ai/PluginHarnessPicker.js +3 -3
- package/dist/components/ai/PluginHarnessPicker.js.map +1 -1
- package/dist/components/analytics/AnalyticsBreakdownChart.js +8 -8
- package/dist/components/analytics/AnalyticsBreakdownChart.js.map +1 -1
- package/dist/components/analytics/AnalyticsTimeSeriesChart.js +5 -5
- package/dist/components/analytics/AnalyticsTimeSeriesChart.js.map +1 -1
- package/dist/components/audit/AuditDeleteDialog.js +2 -2
- package/dist/components/audit/AuditDeleteDialog.js.map +1 -1
- package/dist/components/audit/AuditExportButton.js +5 -5
- package/dist/components/audit/AuditExportButton.js.map +1 -1
- package/dist/components/audit/AuditLogDetail.js +9 -9
- package/dist/components/audit/AuditLogDetail.js.map +1 -1
- package/dist/components/audit/AuditLogFilters.js +1 -1
- package/dist/components/audit/AuditLogFilters.js.map +1 -1
- package/dist/components/audit/AuditLogStats.js +1 -1
- package/dist/components/audit/AuditLogStats.js.map +1 -1
- package/dist/components/audit/AuditLogTable.js +28 -28
- package/dist/components/audit/AuditLogTable.js.map +1 -1
- package/dist/components/catalog/CatalogCard.js +3 -3
- package/dist/components/catalog/CatalogCard.js.map +1 -1
- package/dist/components/catalog/CatalogForm.js +1 -1
- package/dist/components/catalog/CatalogForm.js.map +1 -1
- package/dist/components/common/ActionAgentTargetNotice.js +6 -6
- package/dist/components/common/ActionAgentTargetNotice.js.map +1 -1
- package/dist/components/common/CommandEditor.js +1 -1
- package/dist/components/common/CommandEditor.js.map +1 -1
- package/dist/components/docs/DocsPageTree.js +1 -1
- package/dist/components/docs/DocsPageTree.js.map +1 -1
- package/dist/components/docs/DocsPreviewPanel.js +1 -1
- package/dist/components/docs/DocsPreviewPanel.js.map +1 -1
- package/dist/components/docs/DocsRevisionHistory.js +4 -4
- package/dist/components/docs/DocsRevisionHistory.js.map +1 -1
- package/dist/components/docs/DocsSettingsPanel.js +7 -7
- package/dist/components/docs/DocsSettingsPanel.js.map +1 -1
- package/dist/components/docs/DocsTabPanel.js +1 -1
- package/dist/components/docs/DocsTabPanel.js.map +1 -1
- package/dist/components/graph/ConnectionPermissionsDialog.js +2 -2
- package/dist/components/graph/ConnectionPermissionsDialog.js.map +1 -1
- package/dist/components/graph/MeshDeployWizard.js +3 -3
- package/dist/components/graph/MeshDeployWizard.js.map +1 -1
- package/dist/components/graph/MeshRequestPanel.js +2 -2
- package/dist/components/graph/MeshRequestPanel.js.map +1 -1
- package/dist/components/idp-components/ComponentCard.js +5 -5
- package/dist/components/idp-components/ComponentCard.js.map +1 -1
- package/dist/components/idp-components/ComponentForm.js +1 -1
- package/dist/components/idp-components/ComponentForm.js.map +1 -1
- package/dist/components/idp-components/DependencyGraphTab.js +7 -7
- package/dist/components/idp-components/DependencyGraphTab.js.map +1 -1
- package/dist/components/logs/LogViewer.js +14 -14
- package/dist/components/logs/LogViewer.js.map +1 -1
- package/dist/components/notes/NoteCard.js +1 -1
- package/dist/components/notes/NoteCard.js.map +1 -1
- package/dist/components/notes/NoteEditor.js +2 -2
- package/dist/components/notes/NoteEditor.js.map +1 -1
- package/dist/components/notes/NoteList.js +1 -1
- package/dist/components/notes/NoteList.js.map +1 -1
- package/dist/components/notes/NotesTabPanel.js +1 -1
- package/dist/components/notes/NotesTabPanel.js.map +1 -1
- package/dist/components/scorecard/ScorecardEmptyState.js +1 -1
- package/dist/components/scorecard/ScorecardEmptyState.js.map +1 -1
- package/dist/components/scorecard/ScorecardPanel.js +3 -3
- package/dist/components/scorecard/ScorecardPanel.js.map +1 -1
- package/dist/components/security/SecurityScanList.js +11 -11
- package/dist/components/security/SecurityScanList.js.map +1 -1
- package/dist/components/sessions/SessionCard.js +26 -19
- package/dist/components/sessions/SessionCard.js.map +1 -1
- package/dist/components/sessions/SessionStatusBadge.js +7 -7
- package/dist/components/sessions/SessionStatusBadge.js.map +1 -1
- package/dist/components/shared/AgentSelector.js +4 -4
- package/dist/components/shared/AgentSelector.js.map +1 -1
- package/dist/components/shared/AgentSetupBanner.js +3 -3
- package/dist/components/shared/AgentSetupBanner.js.map +1 -1
- package/dist/components/shared/Card.js +4 -4
- package/dist/components/shared/Card.js.map +1 -1
- package/dist/components/shared/ErrorState.js +15 -9
- package/dist/components/shared/ErrorState.js.map +1 -1
- package/dist/components/shared/FilterDropdown.js +2 -2
- package/dist/components/shared/FilterDropdown.js.map +1 -1
- package/dist/components/shared/PageSkeleton.js +6 -6
- package/dist/components/shared/PageSkeleton.js.map +1 -1
- package/dist/components/shared/SearchInput.js +1 -1
- package/dist/components/shared/SearchInput.js.map +1 -1
- package/dist/components/shared/StatCard.js +7 -7
- package/dist/components/shared/StatCard.js.map +1 -1
- package/dist/components/templates/PublishTemplateForm.js +2 -2
- package/dist/components/templates/PublishTemplateForm.js.map +1 -1
- package/dist/components/templates/TemplateCard.js +5 -5
- package/dist/components/templates/TemplateCard.js.map +1 -1
- package/dist/components/templates/TemplateWizard.js +2 -2
- package/dist/components/templates/TemplateWizard.js.map +1 -1
- package/dist/components/tunnels/DomainVerificationBadge.js +4 -4
- package/dist/components/tunnels/DomainVerificationBadge.js.map +1 -1
- package/dist/components/tunnels/ProviderBadge.js +1 -1
- package/dist/components/tunnels/ProviderBadge.js.map +1 -1
- package/dist/components/tunnels/TunnelCard.js +16 -16
- package/dist/components/tunnels/TunnelCard.js.map +1 -1
- package/dist/components/tunnels/TunnelCreateWizard.js +1 -1
- package/dist/components/tunnels/TunnelCreateWizard.js.map +1 -1
- package/dist/components/tunnels/TunnelPublicAccessPanel.js +1 -1
- package/dist/components/tunnels/TunnelPublicAccessPanel.js.map +1 -1
- package/dist/components/tunnels/TunnelStatusBadge.js +4 -4
- package/dist/components/tunnels/TunnelStatusBadge.js.map +1 -1
- package/dist/components/vibecalendar/LogsDrawer.js +2 -2
- package/dist/components/vibecalendar/LogsDrawer.js.map +1 -1
- package/dist/components/vibecalendar/ScheduleTaskModal.js +5 -5
- package/dist/components/vibecalendar/ScheduleTaskModal.js.map +1 -1
- package/dist/components/vibecalendar/VibeCalAgendaView.js +2 -2
- package/dist/components/vibecalendar/VibeCalAgendaView.js.map +1 -1
- package/dist/components/vibecalendar/VibeCalDayView.js +3 -3
- package/dist/components/vibecalendar/VibeCalDayView.js.map +1 -1
- package/dist/components/vibecalendar/VibeCalMonthView.js +1 -1
- package/dist/components/vibecalendar/VibeCalMonthView.js.map +1 -1
- package/dist/components/vibecalendar/VibeCalWeekView.js +4 -4
- package/dist/components/vibecalendar/VibeCalWeekView.js.map +1 -1
- package/dist/components/vibecalendar/VibeCalendarHeader.js +4 -4
- package/dist/components/vibecalendar/VibeCalendarHeader.js.map +1 -1
- package/dist/components/vibecalendar/VibeTaskBlock.js +2 -2
- package/dist/components/vibecalendar/VibeTaskBlock.js.map +1 -1
- package/dist/components/vibecalendar/types.js +6 -6
- package/dist/components/vibecalendar/types.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckButtonForm.js +9 -9
- package/dist/components/vibedeck/VibeDeckButtonForm.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckButtonTile.js +6 -6
- package/dist/components/vibedeck/VibeDeckButtonTile.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckExecutionLog.js +10 -10
- package/dist/components/vibedeck/VibeDeckExecutionLog.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckForm.js +8 -8
- package/dist/components/vibedeck/VibeDeckForm.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckGrid.js +2 -2
- package/dist/components/vibedeck/VibeDeckGrid.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckPublicLinkPanel.js +2 -2
- package/dist/components/vibedeck/VibeDeckPublicLinkPanel.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckSwitcher.js +8 -8
- package/dist/components/vibedeck/VibeDeckSwitcher.js.map +1 -1
- package/dist/components/vibes/VibeCard.js +22 -18
- package/dist/components/vibes/VibeCard.js.map +1 -1
- package/dist/components/vibes/VibeList.js +16 -12
- package/dist/components/vibes/VibeList.js.map +1 -1
- package/dist/pages/ActionsPage.js +4 -3
- package/dist/pages/ActionsPage.js.map +1 -1
- package/dist/pages/AgentDetailsPage.js +9 -9
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/AgentsLandingPage.js +4 -4
- package/dist/pages/AgentsLandingPage.js.map +1 -1
- package/dist/pages/AgentsPage.js +14 -14
- package/dist/pages/AgentsPage.js.map +1 -1
- package/dist/pages/AnalyticsPage.js +8 -8
- package/dist/pages/AnalyticsPage.js.map +1 -1
- package/dist/pages/CatalogDetailPage.js +11 -11
- package/dist/pages/CatalogDetailPage.js.map +1 -1
- package/dist/pages/CatalogPage.js +12 -9
- package/dist/pages/CatalogPage.js.map +1 -1
- package/dist/pages/ComponentDetailPage.js +7 -7
- package/dist/pages/ComponentDetailPage.js.map +1 -1
- package/dist/pages/ComponentsPage.js +12 -9
- package/dist/pages/ComponentsPage.js.map +1 -1
- package/dist/pages/EnvTopologyPage.js +2 -2
- package/dist/pages/EnvTopologyPage.js.map +1 -1
- package/dist/pages/GettingStartedPage.js +12 -12
- package/dist/pages/GettingStartedPage.js.map +1 -1
- package/dist/pages/HealthPage.js +12 -12
- package/dist/pages/HealthPage.js.map +1 -1
- package/dist/pages/LogsPage.js +4 -4
- package/dist/pages/LogsPage.js.map +1 -1
- package/dist/pages/NoteDetailsPage.js +5 -5
- package/dist/pages/NoteDetailsPage.js.map +1 -1
- package/dist/pages/OverviewPage.js +74 -41
- package/dist/pages/OverviewPage.js.map +1 -1
- package/dist/pages/PluginsCatalogPage.js +6 -3
- package/dist/pages/PluginsCatalogPage.js.map +1 -1
- package/dist/pages/ScheduledJobDetailPage.js +7 -7
- package/dist/pages/ScheduledJobDetailPage.js.map +1 -1
- package/dist/pages/SessionDetailsPage.js +21 -21
- package/dist/pages/SessionDetailsPage.js.map +1 -1
- package/dist/pages/SessionsPage.js +20 -20
- package/dist/pages/SessionsPage.js.map +1 -1
- package/dist/pages/SettingsPage.js +64 -52
- package/dist/pages/SettingsPage.js.map +1 -1
- package/dist/pages/SharedSessionPage.js +21 -21
- package/dist/pages/SharedSessionPage.js.map +1 -1
- package/dist/pages/SharedVibeDeckPage.js +5 -5
- package/dist/pages/SharedVibeDeckPage.js.map +1 -1
- package/dist/pages/TargetDetailsPage.js +56 -65
- package/dist/pages/TargetDetailsPage.js.map +1 -1
- package/dist/pages/TargetsPage.js +4 -4
- package/dist/pages/TargetsPage.js.map +1 -1
- package/dist/pages/TemplateDetailPage.js +10 -10
- package/dist/pages/TemplateDetailPage.js.map +1 -1
- package/dist/pages/TemplatesPage.js +6 -5
- package/dist/pages/TemplatesPage.js.map +1 -1
- package/dist/pages/VibeAuditPage.js +3 -3
- package/dist/pages/VibeAuditPage.js.map +1 -1
- package/dist/pages/VibeCalendarPage.js +3 -3
- package/dist/pages/VibeCalendarPage.js.map +1 -1
- package/dist/pages/VibeDeckPage.js +3 -3
- package/dist/pages/VibeDeckPage.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +15 -15
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/VibeTaskDetailPage.js +5 -5
- package/dist/pages/VibeTaskDetailPage.js.map +1 -1
- package/dist/pages/VibesPage.js +18 -18
- package/dist/pages/VibesPage.js.map +1 -1
- package/dist/pages/WebhooksPage.js +11 -11
- package/dist/pages/WebhooksPage.js.map +1 -1
- package/dist/pages/ai/AIBookmarksPage.js +1 -1
- package/dist/pages/ai/AIBookmarksPage.js.map +1 -1
- package/dist/pages/ai/AISessionDetailPage.js +6 -6
- package/dist/pages/ai/AISessionDetailPage.js.map +1 -1
- package/dist/pages/tunnels/AuditTab.js +1 -1
- package/dist/pages/tunnels/AuditTab.js.map +1 -1
- package/dist/pages/tunnels/DomainsTab.js +1 -1
- package/dist/pages/tunnels/DomainsTab.js.map +1 -1
- package/dist/pages/tunnels/ProvidersTab.js +1 -1
- package/dist/pages/tunnels/ProvidersTab.js.map +1 -1
- package/dist/pages/tunnels/SessionsTab.js +1 -1
- package/dist/pages/tunnels/SessionsTab.js.map +1 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js +3 -3
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
- package/dist/pages/tunnels/UsageTab.js +1 -1
- package/dist/pages/tunnels/UsageTab.js.map +1 -1
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.js +16 -16
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.js.map +1 -1
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.js +1 -1
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.js.map +1 -1
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.js +52 -49
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.js.map +1 -1
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.js +9 -9
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { useMySettingsQuery as e, useResetSettingsMutation as t, useSettingsPageDataQuery as n, useUpdateNotificationPreferencesMutation as
|
|
2
|
-
import { useVibeControls as
|
|
3
|
-
import
|
|
4
|
-
import { PageHeader as
|
|
5
|
-
import { LoadingState as
|
|
6
|
-
import { Card as
|
|
1
|
+
import { useMySettingsQuery as e, useResetSettingsMutation as t, useSettingsPageDataQuery as n, useUpdateNotificationPreferencesMutation as r, useUpdateWorkspaceDefaultsMutation as ee } from "../generated/wspace-operations.js";
|
|
2
|
+
import { useVibeControls as te } from "../providers/VibeControlsProvider.js";
|
|
3
|
+
import ne from "../hooks/useCachedInitialData.js";
|
|
4
|
+
import { PageHeader as re } from "../components/shared/PageHeader.js";
|
|
5
|
+
import { LoadingState as i } from "../components/shared/LoadingState.js";
|
|
6
|
+
import { Card as a } from "../components/shared/Card.js";
|
|
7
7
|
import "../components/shared/index.js";
|
|
8
|
-
import { VIBE_PERMISSIONS as
|
|
9
|
-
import { AdvancedSection as
|
|
10
|
-
import { NotificationsSection as
|
|
11
|
-
import { WorkspaceDefaultsSection as
|
|
12
|
-
import { IdePreferencesSection as
|
|
13
|
-
import { useCallback as
|
|
14
|
-
import { useI18n as
|
|
15
|
-
import { ChevronRight as
|
|
8
|
+
import { VIBE_PERMISSIONS as o } from "../constants/permissions.js";
|
|
9
|
+
import { AdvancedSection as s } from "../components/settings/AdvancedSection.js";
|
|
10
|
+
import { NotificationsSection as c } from "../components/settings/NotificationsSection.js";
|
|
11
|
+
import { WorkspaceDefaultsSection as l } from "../components/settings/WorkspaceDefaultsSection.js";
|
|
12
|
+
import { IdePreferencesSection as u } from "../components/settings/IdePreferencesSection.js";
|
|
13
|
+
import { useCallback as d, useEffect as f, useMemo as p, useState as m } from "react";
|
|
14
|
+
import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
15
|
+
import { ChevronRight as g, RefreshCw as _, RotateCcw as ie, Save as v } from "lucide-react";
|
|
16
16
|
import { usePermissions as y } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
17
17
|
import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
18
18
|
import { PermissionButton as C } from "@burdenoff/fe-libs/shared/components";
|
|
19
19
|
import { MotionItem as w, MotionList as T, MotionPage as E } from "@burdenoff/fe-libs/shared/motion";
|
|
20
20
|
//#region src/pages/SettingsPage.tsx
|
|
21
21
|
function D() {
|
|
22
|
-
let { hasPermission: D, isLoading: O } = y(), { workspaceId: ae } =
|
|
22
|
+
let { hasPermission: D, isLoading: O } = y(), { workspaceId: ae } = te(), { t: k } = h(), A = D(o.CONFIG_UPDATE), [j, M] = m("notifications"), [N, P] = m(!1), [F, I] = m(null), { agents: L } = ne(), R = p(() => L.map((e) => ({
|
|
23
23
|
id: e.id,
|
|
24
24
|
name: e.name,
|
|
25
25
|
isActive: e.isActive
|
|
26
|
-
})), [L]), z =
|
|
26
|
+
})), [L]), z = d((e, t) => {
|
|
27
27
|
let n = k(e);
|
|
28
28
|
return n === e ? t : n;
|
|
29
29
|
}, [k]), B = n({
|
|
@@ -34,12 +34,12 @@ function D() {
|
|
|
34
34
|
skip: O || A,
|
|
35
35
|
fetchPolicy: "cache-and-network",
|
|
36
36
|
notifyOnNetworkStatusChange: !0
|
|
37
|
-
}), H = B.data?.mySettings ?? V.data?.mySettings, U = B.loading || V.loading, W =
|
|
37
|
+
}), H = B.data?.mySettings ?? V.data?.mySettings, U = B.loading || V.loading, W = p(() => (B.data?.listSettingsSecrets ?? []).map((e) => ({
|
|
38
38
|
id: e.id,
|
|
39
39
|
key: e.key,
|
|
40
40
|
value: e.value ?? null,
|
|
41
41
|
isSecret: e.isSecret
|
|
42
|
-
})), [B.data?.listSettingsSecrets]), G =
|
|
42
|
+
})), [B.data?.listSettingsSecrets]), G = d(async () => {
|
|
43
43
|
if (A) {
|
|
44
44
|
await B.refetch();
|
|
45
45
|
return;
|
|
@@ -49,13 +49,13 @@ function D() {
|
|
|
49
49
|
A,
|
|
50
50
|
V,
|
|
51
51
|
B
|
|
52
|
-
]), [K, q] =
|
|
52
|
+
]), [K, q] = m({
|
|
53
53
|
agentOffline: !0,
|
|
54
54
|
sessionError: !0,
|
|
55
55
|
vibeStatusChange: !1,
|
|
56
56
|
emailDigest: !1,
|
|
57
57
|
digestFrequency: "none"
|
|
58
|
-
}), [J, Y] =
|
|
58
|
+
}), [J, Y] = m({
|
|
59
59
|
defaultAgent: null,
|
|
60
60
|
defaultSessionType: "TMUX",
|
|
61
61
|
autoStartSessions: !0,
|
|
@@ -69,10 +69,10 @@ function D() {
|
|
|
69
69
|
autoUpdate: !0,
|
|
70
70
|
defaultEnvironmentVariables: null
|
|
71
71
|
});
|
|
72
|
-
|
|
72
|
+
f(() => {
|
|
73
73
|
H && (q(H.notifications), Y(H.workspaceDefaults));
|
|
74
74
|
}, [H]);
|
|
75
|
-
let [X] =
|
|
75
|
+
let [X] = r({ refetchQueries: ["MySettings", "SettingsPageData"] }), [Z] = ee({ refetchQueries: ["MySettings", "SettingsPageData"] }), [Q] = t({ refetchQueries: ["MySettings", "SettingsPageData"] }), oe = d(async () => {
|
|
76
76
|
P(!0), I(null);
|
|
77
77
|
try {
|
|
78
78
|
j === "notifications" && await X({ variables: { input: {
|
|
@@ -117,7 +117,7 @@ function D() {
|
|
|
117
117
|
X,
|
|
118
118
|
Z,
|
|
119
119
|
J
|
|
120
|
-
]), se =
|
|
120
|
+
]), se = d(async () => {
|
|
121
121
|
let e = {
|
|
122
122
|
notifications: "NOTIFICATIONS",
|
|
123
123
|
workspace: "WORKSPACE_DEFAULTS",
|
|
@@ -162,15 +162,15 @@ function D() {
|
|
|
162
162
|
description: z("settings.advancedDesc", "Logging, telemetry, secrets")
|
|
163
163
|
}
|
|
164
164
|
], ce = A ? $ : $.filter((e) => e.id === "notifications");
|
|
165
|
-
return
|
|
165
|
+
return f(() => {
|
|
166
166
|
!A && j !== "notifications" && M("notifications");
|
|
167
167
|
}, [j, A]), O || U && !H ? /* @__PURE__ */ x(E, {
|
|
168
|
-
className: "min-h-screen flex items-center justify-center bg-bg-
|
|
169
|
-
children: /* @__PURE__ */ x(
|
|
168
|
+
className: "min-h-screen flex items-center justify-center bg-bg-canvas px-6 lg:px-8 py-6",
|
|
169
|
+
children: /* @__PURE__ */ x(i, { message: z("settings.loading", "Loading settings...") })
|
|
170
170
|
}) : /* @__PURE__ */ S(E, {
|
|
171
|
-
className: "min-h-screen space-y-6 bg-bg-
|
|
171
|
+
className: "min-h-screen space-y-6 bg-bg-canvas px-6 lg:px-8 py-6",
|
|
172
172
|
children: [
|
|
173
|
-
/* @__PURE__ */ x(
|
|
173
|
+
/* @__PURE__ */ x(re, {
|
|
174
174
|
title: z("nav.settings", "Settings"),
|
|
175
175
|
description: z("settings.description", "Configure VibeControls preferences and workspace defaults"),
|
|
176
176
|
actions: A ? /* @__PURE__ */ S("div", {
|
|
@@ -179,24 +179,24 @@ function D() {
|
|
|
179
179
|
children: [/* @__PURE__ */ S("button", {
|
|
180
180
|
type: "button",
|
|
181
181
|
onClick: se,
|
|
182
|
-
className: "flex items-center gap-2 rounded-
|
|
182
|
+
className: "flex items-center gap-2 rounded-button border border-border-default px-3 py-2 text-sm text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary hover:border-border-strong",
|
|
183
183
|
title: z("settings.resetToDefaults", "Reset to defaults"),
|
|
184
|
-
children: [/* @__PURE__ */ x(
|
|
184
|
+
children: [/* @__PURE__ */ x(ie, { className: "size-4" }), z("settings.reset", "Reset")]
|
|
185
185
|
}), /* @__PURE__ */ x(C, {
|
|
186
|
-
permission:
|
|
186
|
+
permission: o.CONFIG_UPDATE,
|
|
187
187
|
children: /* @__PURE__ */ S("button", {
|
|
188
188
|
type: "button",
|
|
189
189
|
onClick: oe,
|
|
190
190
|
disabled: N || U,
|
|
191
|
-
className: "flex items-center gap-2 rounded-
|
|
192
|
-
children: [N ? /* @__PURE__ */ x(
|
|
191
|
+
className: "flex items-center gap-2 rounded-button bg-action-primary-bg px-4 py-2 text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50",
|
|
192
|
+
children: [N ? /* @__PURE__ */ x(_, { className: "size-4 animate-spin" }) : /* @__PURE__ */ x(v, { className: "size-4" }), z("common.save", "Save")]
|
|
193
193
|
})
|
|
194
194
|
})]
|
|
195
195
|
}) : void 0
|
|
196
196
|
}),
|
|
197
197
|
F ? /* @__PURE__ */ x("div", {
|
|
198
198
|
role: F.tone === "error" ? "alert" : "status",
|
|
199
|
-
className: `rounded-
|
|
199
|
+
className: `rounded-card border px-4 py-3 text-sm ${F.tone === "error" ? "border-status-error-border bg-status-error-bg-subtle text-status-error-text" : "border-status-success-border bg-status-success-bg-subtle text-status-success-text"}`,
|
|
200
200
|
children: F.message
|
|
201
201
|
}) : null,
|
|
202
202
|
/* @__PURE__ */ S("div", {
|
|
@@ -205,22 +205,34 @@ function D() {
|
|
|
205
205
|
"data-tour": "settings-section-nav",
|
|
206
206
|
className: "w-full flex-shrink-0 lg:w-64",
|
|
207
207
|
"aria-label": z("settings.sections", "Settings sections"),
|
|
208
|
-
children: /* @__PURE__ */ x(
|
|
208
|
+
children: /* @__PURE__ */ x(a, {
|
|
209
209
|
className: "p-2",
|
|
210
210
|
children: /* @__PURE__ */ x(T, {
|
|
211
211
|
stagger: .04,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
212
|
+
className: "space-y-0.5",
|
|
213
|
+
children: ce.map((e) => {
|
|
214
|
+
let t = j === e.id;
|
|
215
|
+
return /* @__PURE__ */ x(w, { children: /* @__PURE__ */ S("button", {
|
|
216
|
+
type: "button",
|
|
217
|
+
onClick: () => M(e.id),
|
|
218
|
+
"aria-current": t ? "true" : void 0,
|
|
219
|
+
className: `relative flex w-full items-center justify-between rounded-button px-3 py-2 text-left transition-colors ${t ? "bg-[var(--color-accent-soft)] font-medium text-text-primary" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"}`,
|
|
220
|
+
children: [
|
|
221
|
+
t && /* @__PURE__ */ x("span", {
|
|
222
|
+
"aria-hidden": "true",
|
|
223
|
+
className: "absolute left-0 top-1/2 h-5 w-0.5 -translate-y-1/2 rounded-full bg-action-primary-bg"
|
|
224
|
+
}),
|
|
225
|
+
/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("div", {
|
|
226
|
+
className: "text-sm font-medium",
|
|
227
|
+
children: e.label
|
|
228
|
+
}), /* @__PURE__ */ x("div", {
|
|
229
|
+
className: "text-xs text-text-muted",
|
|
230
|
+
children: e.description
|
|
231
|
+
})] }),
|
|
232
|
+
/* @__PURE__ */ x(g, { className: "size-4" })
|
|
233
|
+
]
|
|
234
|
+
}) }, e.id);
|
|
235
|
+
})
|
|
224
236
|
})
|
|
225
237
|
})
|
|
226
238
|
}), /* @__PURE__ */ x("div", {
|
|
@@ -228,22 +240,22 @@ function D() {
|
|
|
228
240
|
className: "flex-1",
|
|
229
241
|
children: U && !H ? /* @__PURE__ */ S("div", {
|
|
230
242
|
className: "flex items-center justify-center py-12 text-text-secondary",
|
|
231
|
-
children: [/* @__PURE__ */ x(
|
|
243
|
+
children: [/* @__PURE__ */ x(_, { className: "size-5 animate-spin" }), /* @__PURE__ */ x("span", {
|
|
232
244
|
className: "ml-2",
|
|
233
245
|
children: z("settings.loading", "Loading settings...")
|
|
234
246
|
})]
|
|
235
247
|
}) : /* @__PURE__ */ S(b, { children: [
|
|
236
|
-
j === "notifications" ? /* @__PURE__ */ x(
|
|
248
|
+
j === "notifications" ? /* @__PURE__ */ x(c, {
|
|
237
249
|
data: K,
|
|
238
250
|
onChange: q
|
|
239
251
|
}) : null,
|
|
240
|
-
j === "editor" ? /* @__PURE__ */ x(
|
|
241
|
-
j === "workspace" ? /* @__PURE__ */ x(
|
|
252
|
+
j === "editor" ? /* @__PURE__ */ x(u, {}) : null,
|
|
253
|
+
j === "workspace" ? /* @__PURE__ */ x(l, {
|
|
242
254
|
data: J,
|
|
243
255
|
onChange: Y,
|
|
244
256
|
agents: R
|
|
245
257
|
}) : null,
|
|
246
|
-
j === "advanced" ? /* @__PURE__ */ x(
|
|
258
|
+
j === "advanced" ? /* @__PURE__ */ x(s, {
|
|
247
259
|
data: {
|
|
248
260
|
logLevel: J.logLevel,
|
|
249
261
|
telemetryEnabled: J.telemetryEnabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsPage.js","names":[],"sources":["../../src/pages/SettingsPage.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ChevronRight, RefreshCw, RotateCcw, Save } from 'lucide-react';\nimport { MotionItem, MotionList, MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport { PermissionButton } from '@burdenoff/fe-libs/shared/components';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Card, PageHeader, LoadingState } from '@/components/shared';\nimport { AdvancedSection } from '@/components/settings/AdvancedSection';\nimport { NotificationsSection } from '@/components/settings/NotificationsSection';\nimport { WorkspaceDefaultsSection } from '@/components/settings/WorkspaceDefaultsSection';\nimport { IdePreferencesSection } from '@/components/settings/IdePreferencesSection';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { useCachedInitialData } from '@/hooks/useCachedInitialData';\nimport {\n useMySettingsQuery,\n useResetSettingsMutation,\n useSettingsPageDataQuery,\n useUpdateNotificationPreferencesMutation,\n useUpdateWorkspaceDefaultsMutation,\n} from '@/generated/wspace-operations';\nimport { useVibeControls } from '@/providers/VibeControlsProvider';\n\ntype SettingsSection = 'notifications' | 'workspace' | 'advanced' | 'editor';\n\nexport function SettingsPage() {\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { workspaceId } = useVibeControls();\n const { t } = useI18n();\n const canUpdateConfigs = hasPermission(VIBE_PERMISSIONS.CONFIG_UPDATE);\n\n const [activeSection, setActiveSection] = useState<SettingsSection>('notifications');\n const [isSaving, setIsSaving] = useState(false);\n const [feedback, setFeedback] = useState<{ tone: 'success' | 'error'; message: string } | null>(\n null\n );\n\n const { agents: cachedAgents } = useCachedInitialData();\n const agents = useMemo(\n () =>\n cachedAgents.map((agent) => ({ id: agent.id, name: agent.name, isActive: agent.isActive })),\n [cachedAgents]\n );\n\n const tr = useCallback(\n (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n },\n [t]\n );\n\n const settingsPageQuery = useSettingsPageDataQuery({\n skip: permissionsLoading || !canUpdateConfigs,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const mySettingsQuery = useMySettingsQuery({\n skip: permissionsLoading || canUpdateConfigs,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const settingsData = settingsPageQuery.data?.mySettings ?? mySettingsQuery.data?.mySettings;\n const settingsLoading = settingsPageQuery.loading || mySettingsQuery.loading;\n const secrets = useMemo(\n () =>\n (settingsPageQuery.data?.listSettingsSecrets ?? []).map(\n (secret: NonNullable<(typeof settingsPageQuery.data)['listSettingsSecrets']>[number]) => ({\n id: secret.id,\n key: secret.key,\n value: secret.value ?? null,\n isSecret: secret.isSecret,\n })\n ),\n [settingsPageQuery.data?.listSettingsSecrets]\n );\n\n const refetchSettings = useCallback(async () => {\n if (canUpdateConfigs) {\n await settingsPageQuery.refetch();\n return;\n }\n\n await mySettingsQuery.refetch();\n }, [canUpdateConfigs, mySettingsQuery, settingsPageQuery]);\n\n const [notifications, setNotifications] = useState({\n agentOffline: true,\n sessionError: true,\n vibeStatusChange: false,\n emailDigest: false,\n digestFrequency: 'none' as string | null,\n });\n\n const [workspaceDefaults, setWorkspaceDefaults] = useState({\n defaultAgent: null as string | null,\n defaultSessionType: 'TMUX',\n autoStartSessions: true,\n defaultVibeType: 'PROJECT',\n autoGitSync: false,\n agentHeartbeatInterval: 30,\n agentAutoReconnect: true,\n agentMaxSessions: 10,\n logLevel: 'info',\n telemetryEnabled: true,\n autoUpdate: true,\n defaultEnvironmentVariables: null as string | null,\n });\n\n useEffect(() => {\n if (!settingsData) {\n return;\n }\n\n setNotifications(settingsData.notifications);\n setWorkspaceDefaults(settingsData.workspaceDefaults);\n }, [settingsData]);\n\n const [updateNotificationsMutation] = useUpdateNotificationPreferencesMutation({\n refetchQueries: ['MySettings', 'SettingsPageData'],\n });\n const [updateWorkspaceDefaultsMutation] = useUpdateWorkspaceDefaultsMutation({\n refetchQueries: ['MySettings', 'SettingsPageData'],\n });\n const [resetSettingsMutation] = useResetSettingsMutation({\n refetchQueries: ['MySettings', 'SettingsPageData'],\n });\n\n const handleSave = useCallback(async () => {\n setIsSaving(true);\n setFeedback(null);\n\n try {\n if (activeSection === 'notifications') {\n await updateNotificationsMutation({\n variables: {\n input: {\n agentOffline: notifications.agentOffline,\n sessionError: notifications.sessionError,\n vibeStatusChange: notifications.vibeStatusChange,\n emailDigest: notifications.emailDigest,\n digestFrequency: notifications.digestFrequency,\n },\n },\n });\n }\n\n if (activeSection === 'workspace') {\n await updateWorkspaceDefaultsMutation({\n variables: {\n input: {\n defaultAgent: workspaceDefaults.defaultAgent,\n defaultSessionType: workspaceDefaults.defaultSessionType,\n autoStartSessions: workspaceDefaults.autoStartSessions,\n defaultVibeType: workspaceDefaults.defaultVibeType,\n autoGitSync: workspaceDefaults.autoGitSync,\n agentHeartbeatInterval: workspaceDefaults.agentHeartbeatInterval,\n agentAutoReconnect: workspaceDefaults.agentAutoReconnect,\n agentMaxSessions: workspaceDefaults.agentMaxSessions,\n logLevel: workspaceDefaults.logLevel,\n telemetryEnabled: workspaceDefaults.telemetryEnabled,\n autoUpdate: workspaceDefaults.autoUpdate,\n defaultEnvironmentVariables: workspaceDefaults.defaultEnvironmentVariables,\n },\n },\n });\n }\n\n if (activeSection === 'advanced') {\n await updateWorkspaceDefaultsMutation({\n variables: {\n input: {\n logLevel: workspaceDefaults.logLevel,\n telemetryEnabled: workspaceDefaults.telemetryEnabled,\n autoUpdate: workspaceDefaults.autoUpdate,\n },\n },\n });\n }\n\n setFeedback({\n tone: 'success',\n message: tr('settings.saveSuccess', 'Settings saved successfully.'),\n });\n } catch (saveError) {\n console.error('Failed to save settings:', saveError);\n setFeedback({\n tone: 'error',\n message:\n saveError instanceof Error\n ? saveError.message\n : tr('settings.saveFailed', 'Failed to save settings.'),\n });\n } finally {\n setIsSaving(false);\n }\n }, [\n activeSection,\n notifications,\n tr,\n updateNotificationsMutation,\n updateWorkspaceDefaultsMutation,\n workspaceDefaults,\n ]);\n\n const handleReset = useCallback(async () => {\n const categoryMap: Record<\n SettingsSection,\n 'NOTIFICATIONS' | 'WORKSPACE_DEFAULTS' | 'ADVANCED' | 'PREFERENCES'\n > = {\n notifications: 'NOTIFICATIONS',\n workspace: 'WORKSPACE_DEFAULTS',\n editor: 'PREFERENCES',\n advanced: 'ADVANCED',\n };\n\n try {\n setFeedback(null);\n await resetSettingsMutation({ variables: { category: categoryMap[activeSection] as never } });\n await refetchSettings();\n setFeedback({\n tone: 'success',\n message: tr('settings.resetSuccess', 'Settings reset to defaults.'),\n });\n } catch (resetError) {\n console.error('Failed to reset settings:', resetError);\n setFeedback({\n tone: 'error',\n message:\n resetError instanceof Error\n ? resetError.message\n : tr('settings.resetFailed', 'Failed to reset settings.'),\n });\n }\n }, [activeSection, refetchSettings, resetSettingsMutation, tr]);\n\n const sections: Array<{ id: SettingsSection; label: string; description: string }> = [\n {\n id: 'notifications',\n label: tr('settings.notifications', 'Notifications'),\n description: tr('settings.notificationsDesc', 'Alert preferences'),\n },\n {\n id: 'workspace',\n label: tr('settings.workspace', 'Workspace'),\n description: tr('settings.workspaceDesc', 'Agent, session, vibe defaults'),\n },\n {\n id: 'editor',\n label: tr('settings.editor', 'Code Editor'),\n description: tr('settings.editorDesc', 'Default IDE + per-Vibe overrides'),\n },\n {\n id: 'advanced',\n label: tr('settings.advanced', 'Advanced'),\n description: tr('settings.advancedDesc', 'Logging, telemetry, secrets'),\n },\n ];\n\n const visibleSections = canUpdateConfigs\n ? sections\n : sections.filter((section) => section.id === 'notifications');\n\n useEffect(() => {\n if (!canUpdateConfigs && activeSection !== 'notifications') {\n setActiveSection('notifications');\n }\n }, [activeSection, canUpdateConfigs]);\n\n if (permissionsLoading || (settingsLoading && !settingsData)) {\n return (\n <MotionPage className=\"min-h-screen flex items-center justify-center bg-bg-surface p-4 sm:p-6\">\n <LoadingState message={tr('settings.loading', 'Loading settings...')} />\n </MotionPage>\n );\n }\n\n return (\n <MotionPage className=\"min-h-screen space-y-6 bg-bg-surface p-4 sm:p-6\">\n <PageHeader\n title={tr('nav.settings', 'Settings')}\n description={tr(\n 'settings.description',\n 'Configure VibeControls preferences and workspace defaults'\n )}\n actions={\n canUpdateConfigs ? (\n <div data-tour=\"settings-actions\" className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleReset}\n className=\"flex items-center gap-2 rounded-md border border-border-default px-3 py-2 text-sm text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary\"\n title={tr('settings.resetToDefaults', 'Reset to defaults')}\n >\n <RotateCcw className=\"size-4\" />\n {tr('settings.reset', 'Reset')}\n </button>\n\n <PermissionButton permission={VIBE_PERMISSIONS.CONFIG_UPDATE}>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={isSaving || settingsLoading}\n className=\"flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n {isSaving ? (\n <RefreshCw className=\"size-4 animate-spin\" />\n ) : (\n <Save className=\"size-4\" />\n )}\n {tr('common.save', 'Save')}\n </button>\n </PermissionButton>\n </div>\n ) : undefined\n }\n />\n\n {feedback ? (\n <div\n role={feedback.tone === 'error' ? 'alert' : 'status'}\n className={`rounded-lg border px-4 py-3 text-sm ${\n feedback.tone === 'error'\n ? 'border-status-error-border bg-status-error-bg/10 text-status-error-text'\n : 'border-status-success-border bg-status-success-bg/10 text-status-success-text'\n }`}\n >\n {feedback.message}\n </div>\n ) : null}\n\n <div className=\"flex flex-col gap-6 lg:flex-row\">\n <nav\n data-tour=\"settings-section-nav\"\n className=\"w-full flex-shrink-0 lg:w-64\"\n aria-label={tr('settings.sections', 'Settings sections')}\n >\n <Card className=\"p-2\">\n <MotionList stagger={0.04}>\n {visibleSections.map((section) => (\n <MotionItem key={section.id}>\n <button\n type=\"button\"\n onClick={() => setActiveSection(section.id)}\n className={`flex w-full items-center justify-between rounded-md px-3 py-2 text-left transition-colors ${\n activeSection === section.id\n ? 'bg-action-primary-bg/10 font-medium text-action-primary-bg'\n : 'text-text-secondary hover:bg-bg-sunken hover:text-text-primary'\n }`}\n >\n <div>\n <div className=\"text-sm font-medium\">{section.label}</div>\n <div className=\"text-xs opacity-70\">{section.description}</div>\n </div>\n <ChevronRight className=\"size-4\" />\n </button>\n </MotionItem>\n ))}\n </MotionList>\n </Card>\n </nav>\n\n <div data-tour=\"settings-content-area\" className=\"flex-1\">\n {settingsLoading && !settingsData ? (\n <div className=\"flex items-center justify-center py-12 text-text-secondary\">\n <RefreshCw className=\"size-5 animate-spin\" />\n <span className=\"ml-2\">{tr('settings.loading', 'Loading settings...')}</span>\n </div>\n ) : (\n <>\n {activeSection === 'notifications' ? (\n <NotificationsSection data={notifications} onChange={setNotifications} />\n ) : null}\n\n {activeSection === 'editor' ? <IdePreferencesSection /> : null}\n\n {activeSection === 'workspace' ? (\n <WorkspaceDefaultsSection\n data={workspaceDefaults}\n onChange={setWorkspaceDefaults}\n agents={agents}\n />\n ) : null}\n\n {activeSection === 'advanced' ? (\n <AdvancedSection\n data={{\n logLevel: workspaceDefaults.logLevel,\n telemetryEnabled: workspaceDefaults.telemetryEnabled,\n autoUpdate: workspaceDefaults.autoUpdate,\n }}\n onChange={(advanced) =>\n setWorkspaceDefaults((previous) => ({\n ...previous,\n logLevel: advanced.logLevel,\n telemetryEnabled: advanced.telemetryEnabled,\n autoUpdate: advanced.autoUpdate,\n }))\n }\n secrets={secrets}\n secretsLoading={settingsPageQuery.loading && canUpdateConfigs}\n onRefreshSecrets={async () => {\n if (canUpdateConfigs) {\n await settingsPageQuery.refetch();\n }\n }}\n workspaceId={workspaceId || ''}\n />\n ) : null}\n </>\n )}\n </div>\n </div>\n </MotionPage>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsPage.js","names":[],"sources":["../../src/pages/SettingsPage.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ChevronRight, RefreshCw, RotateCcw, Save } from 'lucide-react';\nimport { MotionItem, MotionList, MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport { PermissionButton } from '@burdenoff/fe-libs/shared/components';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Card, PageHeader, LoadingState } from '@/components/shared';\nimport { AdvancedSection } from '@/components/settings/AdvancedSection';\nimport { NotificationsSection } from '@/components/settings/NotificationsSection';\nimport { WorkspaceDefaultsSection } from '@/components/settings/WorkspaceDefaultsSection';\nimport { IdePreferencesSection } from '@/components/settings/IdePreferencesSection';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { useCachedInitialData } from '@/hooks/useCachedInitialData';\nimport {\n useMySettingsQuery,\n useResetSettingsMutation,\n useSettingsPageDataQuery,\n useUpdateNotificationPreferencesMutation,\n useUpdateWorkspaceDefaultsMutation,\n} from '@/generated/wspace-operations';\nimport { useVibeControls } from '@/providers/VibeControlsProvider';\n\ntype SettingsSection = 'notifications' | 'workspace' | 'advanced' | 'editor';\n\nexport function SettingsPage() {\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { workspaceId } = useVibeControls();\n const { t } = useI18n();\n const canUpdateConfigs = hasPermission(VIBE_PERMISSIONS.CONFIG_UPDATE);\n\n const [activeSection, setActiveSection] = useState<SettingsSection>('notifications');\n const [isSaving, setIsSaving] = useState(false);\n const [feedback, setFeedback] = useState<{ tone: 'success' | 'error'; message: string } | null>(\n null\n );\n\n const { agents: cachedAgents } = useCachedInitialData();\n const agents = useMemo(\n () =>\n cachedAgents.map((agent) => ({ id: agent.id, name: agent.name, isActive: agent.isActive })),\n [cachedAgents]\n );\n\n const tr = useCallback(\n (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n },\n [t]\n );\n\n const settingsPageQuery = useSettingsPageDataQuery({\n skip: permissionsLoading || !canUpdateConfigs,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const mySettingsQuery = useMySettingsQuery({\n skip: permissionsLoading || canUpdateConfigs,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const settingsData = settingsPageQuery.data?.mySettings ?? mySettingsQuery.data?.mySettings;\n const settingsLoading = settingsPageQuery.loading || mySettingsQuery.loading;\n const secrets = useMemo(\n () =>\n (settingsPageQuery.data?.listSettingsSecrets ?? []).map(\n (secret: NonNullable<(typeof settingsPageQuery.data)['listSettingsSecrets']>[number]) => ({\n id: secret.id,\n key: secret.key,\n value: secret.value ?? null,\n isSecret: secret.isSecret,\n })\n ),\n [settingsPageQuery.data?.listSettingsSecrets]\n );\n\n const refetchSettings = useCallback(async () => {\n if (canUpdateConfigs) {\n await settingsPageQuery.refetch();\n return;\n }\n\n await mySettingsQuery.refetch();\n }, [canUpdateConfigs, mySettingsQuery, settingsPageQuery]);\n\n const [notifications, setNotifications] = useState({\n agentOffline: true,\n sessionError: true,\n vibeStatusChange: false,\n emailDigest: false,\n digestFrequency: 'none' as string | null,\n });\n\n const [workspaceDefaults, setWorkspaceDefaults] = useState({\n defaultAgent: null as string | null,\n defaultSessionType: 'TMUX',\n autoStartSessions: true,\n defaultVibeType: 'PROJECT',\n autoGitSync: false,\n agentHeartbeatInterval: 30,\n agentAutoReconnect: true,\n agentMaxSessions: 10,\n logLevel: 'info',\n telemetryEnabled: true,\n autoUpdate: true,\n defaultEnvironmentVariables: null as string | null,\n });\n\n useEffect(() => {\n if (!settingsData) {\n return;\n }\n\n setNotifications(settingsData.notifications);\n setWorkspaceDefaults(settingsData.workspaceDefaults);\n }, [settingsData]);\n\n const [updateNotificationsMutation] = useUpdateNotificationPreferencesMutation({\n refetchQueries: ['MySettings', 'SettingsPageData'],\n });\n const [updateWorkspaceDefaultsMutation] = useUpdateWorkspaceDefaultsMutation({\n refetchQueries: ['MySettings', 'SettingsPageData'],\n });\n const [resetSettingsMutation] = useResetSettingsMutation({\n refetchQueries: ['MySettings', 'SettingsPageData'],\n });\n\n const handleSave = useCallback(async () => {\n setIsSaving(true);\n setFeedback(null);\n\n try {\n if (activeSection === 'notifications') {\n await updateNotificationsMutation({\n variables: {\n input: {\n agentOffline: notifications.agentOffline,\n sessionError: notifications.sessionError,\n vibeStatusChange: notifications.vibeStatusChange,\n emailDigest: notifications.emailDigest,\n digestFrequency: notifications.digestFrequency,\n },\n },\n });\n }\n\n if (activeSection === 'workspace') {\n await updateWorkspaceDefaultsMutation({\n variables: {\n input: {\n defaultAgent: workspaceDefaults.defaultAgent,\n defaultSessionType: workspaceDefaults.defaultSessionType,\n autoStartSessions: workspaceDefaults.autoStartSessions,\n defaultVibeType: workspaceDefaults.defaultVibeType,\n autoGitSync: workspaceDefaults.autoGitSync,\n agentHeartbeatInterval: workspaceDefaults.agentHeartbeatInterval,\n agentAutoReconnect: workspaceDefaults.agentAutoReconnect,\n agentMaxSessions: workspaceDefaults.agentMaxSessions,\n logLevel: workspaceDefaults.logLevel,\n telemetryEnabled: workspaceDefaults.telemetryEnabled,\n autoUpdate: workspaceDefaults.autoUpdate,\n defaultEnvironmentVariables: workspaceDefaults.defaultEnvironmentVariables,\n },\n },\n });\n }\n\n if (activeSection === 'advanced') {\n await updateWorkspaceDefaultsMutation({\n variables: {\n input: {\n logLevel: workspaceDefaults.logLevel,\n telemetryEnabled: workspaceDefaults.telemetryEnabled,\n autoUpdate: workspaceDefaults.autoUpdate,\n },\n },\n });\n }\n\n setFeedback({\n tone: 'success',\n message: tr('settings.saveSuccess', 'Settings saved successfully.'),\n });\n } catch (saveError) {\n console.error('Failed to save settings:', saveError);\n setFeedback({\n tone: 'error',\n message:\n saveError instanceof Error\n ? saveError.message\n : tr('settings.saveFailed', 'Failed to save settings.'),\n });\n } finally {\n setIsSaving(false);\n }\n }, [\n activeSection,\n notifications,\n tr,\n updateNotificationsMutation,\n updateWorkspaceDefaultsMutation,\n workspaceDefaults,\n ]);\n\n const handleReset = useCallback(async () => {\n const categoryMap: Record<\n SettingsSection,\n 'NOTIFICATIONS' | 'WORKSPACE_DEFAULTS' | 'ADVANCED' | 'PREFERENCES'\n > = {\n notifications: 'NOTIFICATIONS',\n workspace: 'WORKSPACE_DEFAULTS',\n editor: 'PREFERENCES',\n advanced: 'ADVANCED',\n };\n\n try {\n setFeedback(null);\n await resetSettingsMutation({ variables: { category: categoryMap[activeSection] as never } });\n await refetchSettings();\n setFeedback({\n tone: 'success',\n message: tr('settings.resetSuccess', 'Settings reset to defaults.'),\n });\n } catch (resetError) {\n console.error('Failed to reset settings:', resetError);\n setFeedback({\n tone: 'error',\n message:\n resetError instanceof Error\n ? resetError.message\n : tr('settings.resetFailed', 'Failed to reset settings.'),\n });\n }\n }, [activeSection, refetchSettings, resetSettingsMutation, tr]);\n\n const sections: Array<{ id: SettingsSection; label: string; description: string }> = [\n {\n id: 'notifications',\n label: tr('settings.notifications', 'Notifications'),\n description: tr('settings.notificationsDesc', 'Alert preferences'),\n },\n {\n id: 'workspace',\n label: tr('settings.workspace', 'Workspace'),\n description: tr('settings.workspaceDesc', 'Agent, session, vibe defaults'),\n },\n {\n id: 'editor',\n label: tr('settings.editor', 'Code Editor'),\n description: tr('settings.editorDesc', 'Default IDE + per-Vibe overrides'),\n },\n {\n id: 'advanced',\n label: tr('settings.advanced', 'Advanced'),\n description: tr('settings.advancedDesc', 'Logging, telemetry, secrets'),\n },\n ];\n\n const visibleSections = canUpdateConfigs\n ? sections\n : sections.filter((section) => section.id === 'notifications');\n\n useEffect(() => {\n if (!canUpdateConfigs && activeSection !== 'notifications') {\n setActiveSection('notifications');\n }\n }, [activeSection, canUpdateConfigs]);\n\n if (permissionsLoading || (settingsLoading && !settingsData)) {\n return (\n <MotionPage className=\"min-h-screen flex items-center justify-center bg-bg-canvas px-6 lg:px-8 py-6\">\n <LoadingState message={tr('settings.loading', 'Loading settings...')} />\n </MotionPage>\n );\n }\n\n return (\n <MotionPage className=\"min-h-screen space-y-6 bg-bg-canvas px-6 lg:px-8 py-6\">\n <PageHeader\n title={tr('nav.settings', 'Settings')}\n description={tr(\n 'settings.description',\n 'Configure VibeControls preferences and workspace defaults'\n )}\n actions={\n canUpdateConfigs ? (\n <div data-tour=\"settings-actions\" className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleReset}\n className=\"flex items-center gap-2 rounded-button border border-border-default px-3 py-2 text-sm text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary hover:border-border-strong\"\n title={tr('settings.resetToDefaults', 'Reset to defaults')}\n >\n <RotateCcw className=\"size-4\" />\n {tr('settings.reset', 'Reset')}\n </button>\n\n <PermissionButton permission={VIBE_PERMISSIONS.CONFIG_UPDATE}>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={isSaving || settingsLoading}\n className=\"flex items-center gap-2 rounded-button bg-action-primary-bg px-4 py-2 text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n {isSaving ? (\n <RefreshCw className=\"size-4 animate-spin\" />\n ) : (\n <Save className=\"size-4\" />\n )}\n {tr('common.save', 'Save')}\n </button>\n </PermissionButton>\n </div>\n ) : undefined\n }\n />\n\n {feedback ? (\n <div\n role={feedback.tone === 'error' ? 'alert' : 'status'}\n className={`rounded-card border px-4 py-3 text-sm ${\n feedback.tone === 'error'\n ? 'border-status-error-border bg-status-error-bg-subtle text-status-error-text'\n : 'border-status-success-border bg-status-success-bg-subtle text-status-success-text'\n }`}\n >\n {feedback.message}\n </div>\n ) : null}\n\n <div className=\"flex flex-col gap-6 lg:flex-row\">\n <nav\n data-tour=\"settings-section-nav\"\n className=\"w-full flex-shrink-0 lg:w-64\"\n aria-label={tr('settings.sections', 'Settings sections')}\n >\n <Card className=\"p-2\">\n <MotionList stagger={0.04} className=\"space-y-0.5\">\n {visibleSections.map((section) => {\n const isActive = activeSection === section.id;\n return (\n <MotionItem key={section.id}>\n <button\n type=\"button\"\n onClick={() => setActiveSection(section.id)}\n aria-current={isActive ? 'true' : undefined}\n className={`relative flex w-full items-center justify-between rounded-button px-3 py-2 text-left transition-colors ${\n isActive\n ? 'bg-[var(--color-accent-soft)] font-medium text-text-primary'\n : 'text-text-secondary hover:bg-bg-sunken hover:text-text-primary'\n }`}\n >\n {isActive && (\n <span\n aria-hidden=\"true\"\n className=\"absolute left-0 top-1/2 h-5 w-0.5 -translate-y-1/2 rounded-full bg-action-primary-bg\"\n />\n )}\n <div>\n <div className=\"text-sm font-medium\">{section.label}</div>\n <div className=\"text-xs text-text-muted\">{section.description}</div>\n </div>\n <ChevronRight className=\"size-4\" />\n </button>\n </MotionItem>\n );\n })}\n </MotionList>\n </Card>\n </nav>\n\n <div data-tour=\"settings-content-area\" className=\"flex-1\">\n {settingsLoading && !settingsData ? (\n <div className=\"flex items-center justify-center py-12 text-text-secondary\">\n <RefreshCw className=\"size-5 animate-spin\" />\n <span className=\"ml-2\">{tr('settings.loading', 'Loading settings...')}</span>\n </div>\n ) : (\n <>\n {activeSection === 'notifications' ? (\n <NotificationsSection data={notifications} onChange={setNotifications} />\n ) : null}\n\n {activeSection === 'editor' ? <IdePreferencesSection /> : null}\n\n {activeSection === 'workspace' ? (\n <WorkspaceDefaultsSection\n data={workspaceDefaults}\n onChange={setWorkspaceDefaults}\n agents={agents}\n />\n ) : null}\n\n {activeSection === 'advanced' ? (\n <AdvancedSection\n data={{\n logLevel: workspaceDefaults.logLevel,\n telemetryEnabled: workspaceDefaults.telemetryEnabled,\n autoUpdate: workspaceDefaults.autoUpdate,\n }}\n onChange={(advanced) =>\n setWorkspaceDefaults((previous) => ({\n ...previous,\n logLevel: advanced.logLevel,\n telemetryEnabled: advanced.telemetryEnabled,\n autoUpdate: advanced.autoUpdate,\n }))\n }\n secrets={secrets}\n secretsLoading={settingsPageQuery.loading && canUpdateConfigs}\n onRefreshSecrets={async () => {\n if (canUpdateConfigs) {\n await settingsPageQuery.refetch();\n }\n }}\n workspaceId={workspaceId || ''}\n />\n ) : null}\n </>\n )}\n </div>\n </div>\n </MotionPage>\n );\n}\n"],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ function pe({ onSubmit: e, isLoading: t, error: n }) {
|
|
|
35
35
|
})]
|
|
36
36
|
})] }),
|
|
37
37
|
n && /* @__PURE__ */ b("div", {
|
|
38
|
-
className: "flex items-center gap-2 p-3 bg-status-error-bg
|
|
38
|
+
className: "flex items-center gap-2 p-3 bg-status-error-bg-subtle border border-status-error-border rounded-lg",
|
|
39
39
|
children: [/* @__PURE__ */ y(u, { className: "size-4 text-status-error-text" }), /* @__PURE__ */ y("span", {
|
|
40
40
|
className: "text-sm text-status-error-text",
|
|
41
41
|
children: n
|
|
@@ -147,7 +147,7 @@ function x() {
|
|
|
147
147
|
}
|
|
148
148
|
}, [T, V]), Ce = K.find((e) => e.userId === F), Q = R?.permission || a.View, $ = se(() => R?.ttydUrl || null, [R?.ttydUrl]);
|
|
149
149
|
return ve ? /* @__PURE__ */ y("div", {
|
|
150
|
-
className: "min-h-screen bg-bg-
|
|
150
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center",
|
|
151
151
|
children: /* @__PURE__ */ b("div", {
|
|
152
152
|
className: "text-center",
|
|
153
153
|
children: [/* @__PURE__ */ y(m, { className: "size-8 text-action-primary-bg animate-spin mx-auto mb-4" }), /* @__PURE__ */ y("p", {
|
|
@@ -156,12 +156,12 @@ function x() {
|
|
|
156
156
|
})]
|
|
157
157
|
})
|
|
158
158
|
}) : I || !R ? /* @__PURE__ */ y("div", {
|
|
159
|
-
className: "min-h-screen bg-bg-
|
|
159
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center p-4",
|
|
160
160
|
children: /* @__PURE__ */ b("div", {
|
|
161
161
|
className: "text-center max-w-md",
|
|
162
162
|
children: [
|
|
163
163
|
/* @__PURE__ */ y("div", {
|
|
164
|
-
className: "size-16 bg-status-error-bg
|
|
164
|
+
className: "size-16 bg-status-error-bg-subtle rounded-full flex items-center justify-center mx-auto mb-4",
|
|
165
165
|
children: /* @__PURE__ */ y(u, { className: "size-8 text-status-error-text" })
|
|
166
166
|
}),
|
|
167
167
|
/* @__PURE__ */ y("h2", {
|
|
@@ -175,23 +175,23 @@ function x() {
|
|
|
175
175
|
/* @__PURE__ */ b("button", {
|
|
176
176
|
type: "button",
|
|
177
177
|
onClick: () => window.history.back(),
|
|
178
|
-
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-
|
|
178
|
+
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-button hover:bg-bg-elevated hover:border-border-strong transition-colors",
|
|
179
179
|
children: [/* @__PURE__ */ y(d, { className: "size-4" }), x("sharedSession.goBack", "Go Back")]
|
|
180
180
|
})
|
|
181
181
|
]
|
|
182
182
|
})
|
|
183
183
|
}) : R.isValid ? R.requiresPassword && !C ? /* @__PURE__ */ y("div", {
|
|
184
|
-
className: "min-h-screen bg-bg-
|
|
184
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center p-4",
|
|
185
185
|
children: /* @__PURE__ */ y("div", {
|
|
186
186
|
className: "w-full max-w-md",
|
|
187
187
|
children: /* @__PURE__ */ b("div", {
|
|
188
|
-
className: "bg-bg-surface border border-border-
|
|
188
|
+
className: "bg-bg-surface border border-border-subtle rounded-card p-6 shadow-elevation-1",
|
|
189
189
|
children: [
|
|
190
190
|
/* @__PURE__ */ b("div", {
|
|
191
191
|
className: "text-center mb-6",
|
|
192
192
|
children: [
|
|
193
193
|
/* @__PURE__ */ y("div", {
|
|
194
|
-
className: "size-12 bg-
|
|
194
|
+
className: "size-12 bg-[var(--color-accent-soft)] rounded-full flex items-center justify-center mx-auto mb-4",
|
|
195
195
|
children: /* @__PURE__ */ y(_, { className: "size-6 text-action-primary-bg" })
|
|
196
196
|
}),
|
|
197
197
|
/* @__PURE__ */ y("h2", {
|
|
@@ -211,7 +211,7 @@ function x() {
|
|
|
211
211
|
/* @__PURE__ */ y("div", {
|
|
212
212
|
className: "flex justify-center mb-6",
|
|
213
213
|
children: /* @__PURE__ */ y("div", {
|
|
214
|
-
className: `inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-sm ${R.permission === a.View ? "bg-bg-sunken text-text-secondary" : "bg-
|
|
214
|
+
className: `inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-sm ${R.permission === a.View ? "bg-bg-sunken text-text-secondary" : "bg-[var(--color-accent-soft)] text-action-primary-bg"}`,
|
|
215
215
|
children: R.permission === a.View ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(f, { className: "size-4" }), x("sharedSession.viewOnly", "View Only")] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(p, { className: "size-4" }), x("sharedSession.canControl", "Can Control")] })
|
|
216
216
|
})
|
|
217
217
|
}),
|
|
@@ -234,7 +234,7 @@ function x() {
|
|
|
234
234
|
})
|
|
235
235
|
})
|
|
236
236
|
}) : j ? /* @__PURE__ */ y("div", {
|
|
237
|
-
className: "min-h-screen bg-bg-
|
|
237
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center p-4",
|
|
238
238
|
children: /* @__PURE__ */ b("div", {
|
|
239
239
|
className: "text-center max-w-md",
|
|
240
240
|
children: [
|
|
@@ -255,7 +255,7 @@ function x() {
|
|
|
255
255
|
children: [/* @__PURE__ */ b("button", {
|
|
256
256
|
type: "button",
|
|
257
257
|
onClick: () => window.history.back(),
|
|
258
|
-
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-
|
|
258
|
+
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-button hover:bg-bg-elevated hover:border-border-strong transition-colors",
|
|
259
259
|
children: [/* @__PURE__ */ y(d, { className: "size-4" }), x("sharedSession.goBack", "Go Back")]
|
|
260
260
|
}), /* @__PURE__ */ b("button", {
|
|
261
261
|
type: "button",
|
|
@@ -270,12 +270,12 @@ function x() {
|
|
|
270
270
|
]
|
|
271
271
|
})
|
|
272
272
|
}) : !C && !R.requiresPassword ? k ? /* @__PURE__ */ y("div", {
|
|
273
|
-
className: "min-h-screen bg-bg-
|
|
273
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center p-4",
|
|
274
274
|
children: /* @__PURE__ */ b("div", {
|
|
275
275
|
className: "text-center max-w-md",
|
|
276
276
|
children: [
|
|
277
277
|
/* @__PURE__ */ y("div", {
|
|
278
|
-
className: "size-16 bg-status-error-bg
|
|
278
|
+
className: "size-16 bg-status-error-bg-subtle rounded-full flex items-center justify-center mx-auto mb-4",
|
|
279
279
|
children: /* @__PURE__ */ y(u, { className: "size-8 text-status-error-text" })
|
|
280
280
|
}),
|
|
281
281
|
/* @__PURE__ */ y("h2", {
|
|
@@ -291,7 +291,7 @@ function x() {
|
|
|
291
291
|
children: [/* @__PURE__ */ b("button", {
|
|
292
292
|
type: "button",
|
|
293
293
|
onClick: () => window.history.back(),
|
|
294
|
-
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-
|
|
294
|
+
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-button hover:bg-bg-elevated hover:border-border-strong transition-colors",
|
|
295
295
|
children: [/* @__PURE__ */ y(d, { className: "size-4" }), x("sharedSession.goBack", "Go Back")]
|
|
296
296
|
}), /* @__PURE__ */ b("button", {
|
|
297
297
|
type: "button",
|
|
@@ -306,7 +306,7 @@ function x() {
|
|
|
306
306
|
]
|
|
307
307
|
})
|
|
308
308
|
}) : /* @__PURE__ */ y("div", {
|
|
309
|
-
className: "min-h-screen bg-bg-
|
|
309
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center",
|
|
310
310
|
children: /* @__PURE__ */ b("div", {
|
|
311
311
|
className: "text-center",
|
|
312
312
|
children: [/* @__PURE__ */ y(m, { className: "size-8 text-action-primary-bg animate-spin mx-auto mb-4" }), /* @__PURE__ */ y("p", {
|
|
@@ -315,7 +315,7 @@ function x() {
|
|
|
315
315
|
})]
|
|
316
316
|
})
|
|
317
317
|
}) : /* @__PURE__ */ b(fe, {
|
|
318
|
-
className: "min-h-screen bg-bg-
|
|
318
|
+
className: "min-h-screen bg-bg-canvas flex flex-col",
|
|
319
319
|
children: [/* @__PURE__ */ y("header", {
|
|
320
320
|
className: "bg-bg-surface border-b border-border-default px-4 py-3",
|
|
321
321
|
children: /* @__PURE__ */ b("div", {
|
|
@@ -332,7 +332,7 @@ function x() {
|
|
|
332
332
|
}), /* @__PURE__ */ b("div", {
|
|
333
333
|
className: "flex items-center gap-3",
|
|
334
334
|
children: [/* @__PURE__ */ y("div", {
|
|
335
|
-
className: "p-2 bg-
|
|
335
|
+
className: "p-2 bg-[var(--color-accent-soft)] rounded-lg",
|
|
336
336
|
children: /* @__PURE__ */ y(_, { className: "size-5 text-action-primary-bg" })
|
|
337
337
|
}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h1", {
|
|
338
338
|
className: "font-semibold text-text-primary",
|
|
@@ -349,7 +349,7 @@ function x() {
|
|
|
349
349
|
}), /* @__PURE__ */ b("div", {
|
|
350
350
|
className: "flex items-center gap-3",
|
|
351
351
|
children: [/* @__PURE__ */ y("div", {
|
|
352
|
-
className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${Q === a.View ? "bg-bg-sunken text-text-secondary" : "bg-
|
|
352
|
+
className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${Q === a.View ? "bg-bg-sunken text-text-secondary" : "bg-[var(--color-accent-soft)] text-action-primary-bg"}`,
|
|
353
353
|
children: Q === a.View ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(f, { className: "size-3.5" }), x("sharedSession.viewOnly", "View Only")] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(p, { className: "size-3.5" }), x("sharedSession.interactive", "Interactive")] })
|
|
354
354
|
}), /* @__PURE__ */ b("div", {
|
|
355
355
|
className: "flex items-center gap-1.5 px-2.5 py-1 bg-bg-sunken rounded-full text-xs text-text-secondary",
|
|
@@ -446,12 +446,12 @@ function x() {
|
|
|
446
446
|
})]
|
|
447
447
|
})]
|
|
448
448
|
}) : /* @__PURE__ */ y("div", {
|
|
449
|
-
className: "min-h-screen bg-bg-
|
|
449
|
+
className: "min-h-screen bg-bg-canvas flex items-center justify-center p-4",
|
|
450
450
|
children: /* @__PURE__ */ b("div", {
|
|
451
451
|
className: "text-center max-w-md",
|
|
452
452
|
children: [
|
|
453
453
|
/* @__PURE__ */ y("div", {
|
|
454
|
-
className: "size-16 bg-status-warning-bg
|
|
454
|
+
className: "size-16 bg-status-warning-bg-subtle rounded-full flex items-center justify-center mx-auto mb-4",
|
|
455
455
|
children: /* @__PURE__ */ y(u, { className: "size-8 text-status-warning-text" })
|
|
456
456
|
}),
|
|
457
457
|
/* @__PURE__ */ y("h2", {
|
|
@@ -465,7 +465,7 @@ function x() {
|
|
|
465
465
|
/* @__PURE__ */ b("button", {
|
|
466
466
|
type: "button",
|
|
467
467
|
onClick: () => window.history.back(),
|
|
468
|
-
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-
|
|
468
|
+
className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken border border-border-default rounded-button hover:bg-bg-elevated hover:border-border-strong transition-colors",
|
|
469
469
|
children: [/* @__PURE__ */ y(d, { className: "size-4" }), x("sharedSession.goBack", "Go Back")]
|
|
470
470
|
})
|
|
471
471
|
]
|