@agimon-ai/po-web-dashboard 0.0.0-alpha.0
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/LICENSE +29 -0
- package/README.md +10 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/core.cjs +222 -0
- package/dist/core.d.mts +21 -0
- package/dist/core.mjs +21 -0
- package/dist/index.cjs +546 -0
- package/dist/index.d.mts +81 -0
- package/dist/index.mjs +81 -0
- package/dist/testing.cjs +18 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/types/auth.cjs +20 -0
- package/dist/types/auth.cjs.map +1 -0
- package/dist/types/auth.d.mts +160 -0
- package/dist/types/auth.d.mts.map +1 -0
- package/dist/types/auth.mjs +19 -0
- package/dist/types/auth.mjs.map +1 -0
- package/dist/types/bridge.d.mts +18 -0
- package/dist/types/bridge.d.mts.map +1 -0
- package/dist/types/devProxy.cjs +41 -0
- package/dist/types/devProxy.cjs.map +1 -0
- package/dist/types/devProxy.d.mts +54 -0
- package/dist/types/devProxy.d.mts.map +1 -0
- package/dist/types/devProxy.mjs +39 -0
- package/dist/types/devProxy.mjs.map +1 -0
- package/dist/types/hub.cjs +220 -0
- package/dist/types/hub.cjs.map +1 -0
- package/dist/types/hub.d.mts +447 -0
- package/dist/types/hub.d.mts.map +1 -0
- package/dist/types/hub.mjs +179 -0
- package/dist/types/hub.mjs.map +1 -0
- package/dist/types/media.cjs +75 -0
- package/dist/types/media.cjs.map +1 -0
- package/dist/types/media.d.mts +22 -0
- package/dist/types/media.d.mts.map +1 -0
- package/dist/types/media.mjs +70 -0
- package/dist/types/media.mjs.map +1 -0
- package/dist/types/notification.cjs +19 -0
- package/dist/types/notification.cjs.map +1 -0
- package/dist/types/notification.d.mts +10 -0
- package/dist/types/notification.d.mts.map +1 -0
- package/dist/types/notification.mjs +19 -0
- package/dist/types/notification.mjs.map +1 -0
- package/dist/types/remoteAccess.cjs +92 -0
- package/dist/types/remoteAccess.cjs.map +1 -0
- package/dist/types/remoteAccess.d.mts +214 -0
- package/dist/types/remoteAccess.d.mts.map +1 -0
- package/dist/types/remoteAccess.mjs +68 -0
- package/dist/types/remoteAccess.mjs.map +1 -0
- package/dist/types/session.cjs +23 -0
- package/dist/types/session.cjs.map +1 -0
- package/dist/types/session.d.mts +29 -0
- package/dist/types/session.d.mts.map +1 -0
- package/dist/types/session.mjs +18 -0
- package/dist/types/session.mjs.map +1 -0
- package/dist/types/sessionMcp.d.mts +56 -0
- package/dist/types/sessionMcp.d.mts.map +1 -0
- package/dist/types/settings.cjs +18 -0
- package/dist/types/settings.cjs.map +1 -0
- package/dist/types/settings.d.mts +126 -0
- package/dist/types/settings.d.mts.map +1 -0
- package/dist/types/settings.mjs +12 -0
- package/dist/types/settings.mjs.map +1 -0
- package/dist/types.cjs +101 -0
- package/dist/types.d.mts +11 -0
- package/dist/types.mjs +9 -0
- package/dist/views.cjs +120 -0
- package/dist/views.d.mts +56 -0
- package/dist/views.mjs +56 -0
- package/dist/web/components/MascotMark.cjs +18 -0
- package/dist/web/components/MascotMark.cjs.map +1 -0
- package/dist/web/components/MascotMark.d.mts +9 -0
- package/dist/web/components/MascotMark.d.mts.map +1 -0
- package/dist/web/components/MascotMark.mjs +18 -0
- package/dist/web/components/MascotMark.mjs.map +1 -0
- package/dist/web/components/PluginSurface.cjs +15 -0
- package/dist/web/components/PluginSurface.cjs.map +1 -0
- package/dist/web/components/PluginSurface.d.mts +13 -0
- package/dist/web/components/PluginSurface.d.mts.map +1 -0
- package/dist/web/components/PluginSurface.mjs +15 -0
- package/dist/web/components/PluginSurface.mjs.map +1 -0
- package/dist/web/components/QrCode.cjs +37 -0
- package/dist/web/components/QrCode.cjs.map +1 -0
- package/dist/web/components/QrCode.d.mts +22 -0
- package/dist/web/components/QrCode.d.mts.map +1 -0
- package/dist/web/components/QrCode.mjs +37 -0
- package/dist/web/components/QrCode.mjs.map +1 -0
- package/dist/web/components/Remote.fixture.cjs +73 -0
- package/dist/web/components/Remote.fixture.cjs.map +1 -0
- package/dist/web/components/Remote.fixture.mjs +72 -0
- package/dist/web/components/Remote.fixture.mjs.map +1 -0
- package/dist/web/components/SessionMcp.cjs +279 -0
- package/dist/web/components/SessionMcp.cjs.map +1 -0
- package/dist/web/components/SessionMcp.d.mts +12 -0
- package/dist/web/components/SessionMcp.d.mts.map +1 -0
- package/dist/web/components/SessionMcp.mjs +278 -0
- package/dist/web/components/SessionMcp.mjs.map +1 -0
- package/dist/web/components/Story.fixture.cjs +124 -0
- package/dist/web/components/Story.fixture.cjs.map +1 -0
- package/dist/web/components/Story.fixture.d.mts +19 -0
- package/dist/web/components/Story.fixture.d.mts.map +1 -0
- package/dist/web/components/Story.fixture.mjs +119 -0
- package/dist/web/components/Story.fixture.mjs.map +1 -0
- package/dist/web/components/Template.fixture.cjs +67 -0
- package/dist/web/components/Template.fixture.cjs.map +1 -0
- package/dist/web/components/Template.fixture.d.mts +7 -0
- package/dist/web/components/Template.fixture.d.mts.map +1 -0
- package/dist/web/components/Template.fixture.mjs +65 -0
- package/dist/web/components/Template.fixture.mjs.map +1 -0
- package/dist/web/components/ToolRendererBoundary.cjs +23 -0
- package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
- package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
- package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
- package/dist/web/components/ToolRendererBoundary.mjs +23 -0
- package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
- package/dist/web/features/activity/ActivityDock.cjs +271 -0
- package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
- package/dist/web/features/activity/ActivityDock.d.mts +22 -0
- package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
- package/dist/web/features/activity/ActivityDock.mjs +271 -0
- package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
- package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
- package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
- package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
- package/dist/web/features/activity/ContextPanel.cjs +248 -0
- package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
- package/dist/web/features/activity/ContextPanel.d.mts +4 -0
- package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
- package/dist/web/features/activity/ContextPanel.mjs +248 -0
- package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
- package/dist/web/features/activity/DockTabs.cjs +47 -0
- package/dist/web/features/activity/DockTabs.cjs.map +1 -0
- package/dist/web/features/activity/DockTabs.d.mts +9 -0
- package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
- package/dist/web/features/activity/DockTabs.mjs +47 -0
- package/dist/web/features/activity/DockTabs.mjs.map +1 -0
- package/dist/web/features/connection/RefusedCard.cjs +76 -0
- package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
- package/dist/web/features/connection/RefusedCard.d.mts +5 -0
- package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
- package/dist/web/features/connection/RefusedCard.mjs +76 -0
- package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
- package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
- package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
- package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
- package/dist/web/features/leader/CommandPalette.cjs +390 -0
- package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
- package/dist/web/features/leader/CommandPalette.d.mts +14 -0
- package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
- package/dist/web/features/leader/CommandPalette.mjs +390 -0
- package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
- package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
- package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
- package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
- package/dist/web/features/remote/HandoverProgress.cjs +28 -0
- package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
- package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
- package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
- package/dist/web/features/remote/HandoverProgress.mjs +28 -0
- package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
- package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
- package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
- package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
- package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
- package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
- package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
- package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
- package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
- package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
- package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
- package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
- package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
- package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
- package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
- package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
- package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
- package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
- package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
- package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
- package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
- package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
- package/dist/web/features/selection/SelectionBar.cjs +401 -0
- package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
- package/dist/web/features/selection/SelectionBar.d.mts +14 -0
- package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
- package/dist/web/features/selection/SelectionBar.mjs +400 -0
- package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
- package/dist/web/features/session/AgentLockPanel.cjs +31 -0
- package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
- package/dist/web/features/session/AgentLockPanel.mjs +31 -0
- package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
- package/dist/web/features/session/Composer.cjs +808 -0
- package/dist/web/features/session/Composer.cjs.map +1 -0
- package/dist/web/features/session/Composer.d.mts +21 -0
- package/dist/web/features/session/Composer.d.mts.map +1 -0
- package/dist/web/features/session/Composer.mjs +806 -0
- package/dist/web/features/session/Composer.mjs.map +1 -0
- package/dist/web/features/session/ComposerPrompt.cjs +47 -0
- package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
- package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
- package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
- package/dist/web/features/session/ComposerPrompt.mjs +47 -0
- package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
- package/dist/web/features/session/DormantPanel.cjs +61 -0
- package/dist/web/features/session/DormantPanel.cjs.map +1 -0
- package/dist/web/features/session/DormantPanel.d.mts +8 -0
- package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
- package/dist/web/features/session/DormantPanel.mjs +61 -0
- package/dist/web/features/session/DormantPanel.mjs.map +1 -0
- package/dist/web/features/session/MentionPreviews.cjs +128 -0
- package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
- package/dist/web/features/session/MentionPreviews.d.mts +17 -0
- package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
- package/dist/web/features/session/MentionPreviews.mjs +127 -0
- package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
- package/dist/web/features/session/MessageMarkdown.cjs +20 -0
- package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
- package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
- package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
- package/dist/web/features/session/MessageMarkdown.mjs +20 -0
- package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
- package/dist/web/features/session/QueueSheet.cjs +189 -0
- package/dist/web/features/session/QueueSheet.cjs.map +1 -0
- package/dist/web/features/session/QueueSheet.d.mts +16 -0
- package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
- package/dist/web/features/session/QueueSheet.mjs +189 -0
- package/dist/web/features/session/QueueSheet.mjs.map +1 -0
- package/dist/web/features/session/SessionActivity.cjs +88 -0
- package/dist/web/features/session/SessionActivity.cjs.map +1 -0
- package/dist/web/features/session/SessionActivity.d.mts +16 -0
- package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
- package/dist/web/features/session/SessionActivity.mjs +87 -0
- package/dist/web/features/session/SessionActivity.mjs.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
- package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
- package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
- package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
- package/dist/web/features/session/ThreadView.cjs +40 -0
- package/dist/web/features/session/ThreadView.cjs.map +1 -0
- package/dist/web/features/session/ThreadView.d.mts +18 -0
- package/dist/web/features/session/ThreadView.d.mts.map +1 -0
- package/dist/web/features/session/ThreadView.mjs +40 -0
- package/dist/web/features/session/ThreadView.mjs.map +1 -0
- package/dist/web/features/session/Timeline.cjs +620 -0
- package/dist/web/features/session/Timeline.cjs.map +1 -0
- package/dist/web/features/session/Timeline.d.mts +28 -0
- package/dist/web/features/session/Timeline.d.mts.map +1 -0
- package/dist/web/features/session/Timeline.mjs +619 -0
- package/dist/web/features/session/Timeline.mjs.map +1 -0
- package/dist/web/features/session/ToolCard.cjs +210 -0
- package/dist/web/features/session/ToolCard.cjs.map +1 -0
- package/dist/web/features/session/ToolCard.d.mts +16 -0
- package/dist/web/features/session/ToolCard.d.mts.map +1 -0
- package/dist/web/features/session/ToolCard.mjs +210 -0
- package/dist/web/features/session/ToolCard.mjs.map +1 -0
- package/dist/web/features/session/session.fixture.cjs +76 -0
- package/dist/web/features/session/session.fixture.cjs.map +1 -0
- package/dist/web/features/session/session.fixture.d.mts +6 -0
- package/dist/web/features/session/session.fixture.d.mts.map +1 -0
- package/dist/web/features/session/session.fixture.mjs +74 -0
- package/dist/web/features/session/session.fixture.mjs.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
- package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
- package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
- package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
- package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
- package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
- package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
- package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
- package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
- package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
- package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
- package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
- package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
- package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
- package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
- package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
- package/dist/web/features/sessions/useSessionRail.cjs +302 -0
- package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
- package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
- package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
- package/dist/web/features/sessions/useSessionRail.mjs +302 -0
- package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
- package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
- package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
- package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
- package/dist/web/features/settings/ContributedSettings.cjs +257 -0
- package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
- package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
- package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ContributedSettings.mjs +257 -0
- package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
- package/dist/web/features/settings/ImageSettings.cjs +146 -0
- package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
- package/dist/web/features/settings/ImageSettings.d.mts +12 -0
- package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ImageSettings.mjs +146 -0
- package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
- package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
- package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
- package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
- package/dist/web/features/settings/NotificationSettings.cjs +69 -0
- package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
- package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
- package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
- package/dist/web/features/settings/NotificationSettings.mjs +69 -0
- package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
- package/dist/web/features/settings/PluginSettings.cjs +106 -0
- package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
- package/dist/web/features/settings/PluginSettings.d.mts +10 -0
- package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
- package/dist/web/features/settings/PluginSettings.mjs +106 -0
- package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
- package/dist/web/features/settings/ProviderSettings.cjs +323 -0
- package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
- package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
- package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ProviderSettings.mjs +323 -0
- package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
- package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
- package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
- package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
- package/dist/web/features/settings/RepositorySettings.cjs +318 -0
- package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
- package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
- package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
- package/dist/web/features/settings/RepositorySettings.mjs +318 -0
- package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
- package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
- package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
- package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
- package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
- package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
- package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
- package/dist/web/features/settings/SettingsMenu.cjs +135 -0
- package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
- package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
- package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
- package/dist/web/features/settings/SettingsMenu.mjs +135 -0
- package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
- package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
- package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
- package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
- package/dist/web/features/settings/TemplateSettings.cjs +177 -0
- package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
- package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
- package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
- package/dist/web/features/settings/TemplateSettings.mjs +177 -0
- package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
- package/dist/web/features/settings/TunnelSettings.cjs +182 -0
- package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
- package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
- package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
- package/dist/web/features/settings/TunnelSettings.mjs +182 -0
- package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
- package/dist/web/features/settings/settings.fixture.cjs +230 -0
- package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
- package/dist/web/features/settings/settings.fixture.d.mts +6 -0
- package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
- package/dist/web/features/settings/settings.fixture.mjs +223 -0
- package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
- package/dist/web/features/status/TopBar.cjs +200 -0
- package/dist/web/features/status/TopBar.cjs.map +1 -0
- package/dist/web/features/status/TopBar.d.mts +11 -0
- package/dist/web/features/status/TopBar.d.mts.map +1 -0
- package/dist/web/features/status/TopBar.mjs +200 -0
- package/dist/web/features/status/TopBar.mjs.map +1 -0
- package/dist/web/lib/authApi.cjs +77 -0
- package/dist/web/lib/authApi.cjs.map +1 -0
- package/dist/web/lib/authApi.d.mts +28 -0
- package/dist/web/lib/authApi.d.mts.map +1 -0
- package/dist/web/lib/authApi.mjs +72 -0
- package/dist/web/lib/authApi.mjs.map +1 -0
- package/dist/web/lib/browserNotifications.cjs +37 -0
- package/dist/web/lib/browserNotifications.cjs.map +1 -0
- package/dist/web/lib/browserNotifications.d.mts +12 -0
- package/dist/web/lib/browserNotifications.d.mts.map +1 -0
- package/dist/web/lib/browserNotifications.mjs +35 -0
- package/dist/web/lib/browserNotifications.mjs.map +1 -0
- package/dist/web/lib/browserTelemetry.cjs +158 -0
- package/dist/web/lib/browserTelemetry.cjs.map +1 -0
- package/dist/web/lib/browserTelemetry.d.mts +28 -0
- package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
- package/dist/web/lib/browserTelemetry.mjs +154 -0
- package/dist/web/lib/browserTelemetry.mjs.map +1 -0
- package/dist/web/lib/commands.cjs +176 -0
- package/dist/web/lib/commands.cjs.map +1 -0
- package/dist/web/lib/commands.d.mts +53 -0
- package/dist/web/lib/commands.d.mts.map +1 -0
- package/dist/web/lib/commands.mjs +153 -0
- package/dist/web/lib/commands.mjs.map +1 -0
- package/dist/web/lib/composerSubmissions.cjs +20 -0
- package/dist/web/lib/composerSubmissions.cjs.map +1 -0
- package/dist/web/lib/composerSubmissions.d.mts +7 -0
- package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
- package/dist/web/lib/composerSubmissions.mjs +19 -0
- package/dist/web/lib/composerSubmissions.mjs.map +1 -0
- package/dist/web/lib/composition.cjs +403 -0
- package/dist/web/lib/composition.cjs.map +1 -0
- package/dist/web/lib/composition.d.mts +137 -0
- package/dist/web/lib/composition.d.mts.map +1 -0
- package/dist/web/lib/composition.mjs +392 -0
- package/dist/web/lib/composition.mjs.map +1 -0
- package/dist/web/lib/contextComposition.cjs +132 -0
- package/dist/web/lib/contextComposition.cjs.map +1 -0
- package/dist/web/lib/contextComposition.d.mts +75 -0
- package/dist/web/lib/contextComposition.d.mts.map +1 -0
- package/dist/web/lib/contextComposition.mjs +127 -0
- package/dist/web/lib/contextComposition.mjs.map +1 -0
- package/dist/web/lib/contextDetailApi.cjs +61 -0
- package/dist/web/lib/contextDetailApi.cjs.map +1 -0
- package/dist/web/lib/contextDetailApi.d.mts +12 -0
- package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
- package/dist/web/lib/contextDetailApi.mjs +61 -0
- package/dist/web/lib/contextDetailApi.mjs.map +1 -0
- package/dist/web/lib/dashboardRenderers.cjs +9 -0
- package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
- package/dist/web/lib/dashboardRenderers.d.mts +12 -0
- package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
- package/dist/web/lib/dashboardRenderers.mjs +9 -0
- package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
- package/dist/web/lib/dashboardRoute.cjs +27 -0
- package/dist/web/lib/dashboardRoute.cjs.map +1 -0
- package/dist/web/lib/dashboardRoute.d.mts +29 -0
- package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
- package/dist/web/lib/dashboardRoute.mjs +26 -0
- package/dist/web/lib/dashboardRoute.mjs.map +1 -0
- package/dist/web/lib/dashboardTranscript.cjs +15 -0
- package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
- package/dist/web/lib/dashboardTranscript.d.mts +6 -0
- package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
- package/dist/web/lib/dashboardTranscript.mjs +14 -0
- package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
- package/dist/web/lib/devProxyApi.cjs +74 -0
- package/dist/web/lib/devProxyApi.cjs.map +1 -0
- package/dist/web/lib/devProxyApi.d.mts +21 -0
- package/dist/web/lib/devProxyApi.d.mts.map +1 -0
- package/dist/web/lib/devProxyApi.mjs +72 -0
- package/dist/web/lib/devProxyApi.mjs.map +1 -0
- package/dist/web/lib/fileMentions.cjs +30 -0
- package/dist/web/lib/fileMentions.cjs.map +1 -0
- package/dist/web/lib/fileMentions.d.mts +13 -0
- package/dist/web/lib/fileMentions.d.mts.map +1 -0
- package/dist/web/lib/fileMentions.mjs +29 -0
- package/dist/web/lib/fileMentions.mjs.map +1 -0
- package/dist/web/lib/hubApi.cjs +283 -0
- package/dist/web/lib/hubApi.cjs.map +1 -0
- package/dist/web/lib/hubApi.d.mts +109 -0
- package/dist/web/lib/hubApi.d.mts.map +1 -0
- package/dist/web/lib/hubApi.mjs +268 -0
- package/dist/web/lib/hubApi.mjs.map +1 -0
- package/dist/web/lib/leaderTree.cjs +150 -0
- package/dist/web/lib/leaderTree.cjs.map +1 -0
- package/dist/web/lib/leaderTree.d.mts +41 -0
- package/dist/web/lib/leaderTree.d.mts.map +1 -0
- package/dist/web/lib/leaderTree.mjs +149 -0
- package/dist/web/lib/leaderTree.mjs.map +1 -0
- package/dist/web/lib/livePush.cjs +97 -0
- package/dist/web/lib/livePush.cjs.map +1 -0
- package/dist/web/lib/livePush.d.mts +10 -0
- package/dist/web/lib/livePush.d.mts.map +1 -0
- package/dist/web/lib/livePush.mjs +94 -0
- package/dist/web/lib/livePush.mjs.map +1 -0
- package/dist/web/lib/modelContextAdapter.cjs +63 -0
- package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
- package/dist/web/lib/modelContextAdapter.d.mts +11 -0
- package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
- package/dist/web/lib/modelContextAdapter.mjs +62 -0
- package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
- package/dist/web/lib/piTransport.cjs +103 -0
- package/dist/web/lib/piTransport.cjs.map +1 -0
- package/dist/web/lib/piTransport.d.mts +8 -0
- package/dist/web/lib/piTransport.d.mts.map +1 -0
- package/dist/web/lib/piTransport.mjs +102 -0
- package/dist/web/lib/piTransport.mjs.map +1 -0
- package/dist/web/lib/pluginCompositions.cjs +57 -0
- package/dist/web/lib/pluginCompositions.cjs.map +1 -0
- package/dist/web/lib/pluginCompositions.d.mts +37 -0
- package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
- package/dist/web/lib/pluginCompositions.mjs +52 -0
- package/dist/web/lib/pluginCompositions.mjs.map +1 -0
- package/dist/web/lib/pluginRegistry.cjs +675 -0
- package/dist/web/lib/pluginRegistry.cjs.map +1 -0
- package/dist/web/lib/pluginRegistry.d.mts +155 -0
- package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
- package/dist/web/lib/pluginRegistry.mjs +633 -0
- package/dist/web/lib/pluginRegistry.mjs.map +1 -0
- package/dist/web/lib/pluginScopes.cjs +48 -0
- package/dist/web/lib/pluginScopes.cjs.map +1 -0
- package/dist/web/lib/pluginScopes.d.mts +8 -0
- package/dist/web/lib/pluginScopes.d.mts.map +1 -0
- package/dist/web/lib/pluginScopes.mjs +47 -0
- package/dist/web/lib/pluginScopes.mjs.map +1 -0
- package/dist/web/lib/pluginSlotProps.cjs +83 -0
- package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
- package/dist/web/lib/pluginSlotProps.d.mts +21 -0
- package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
- package/dist/web/lib/pluginSlotProps.mjs +82 -0
- package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
- package/dist/web/lib/promptFocus.cjs +30 -0
- package/dist/web/lib/promptFocus.cjs.map +1 -0
- package/dist/web/lib/promptFocus.d.mts +7 -0
- package/dist/web/lib/promptFocus.d.mts.map +1 -0
- package/dist/web/lib/promptFocus.mjs +29 -0
- package/dist/web/lib/promptFocus.mjs.map +1 -0
- package/dist/web/lib/protocolHubSocket.cjs +107 -0
- package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
- package/dist/web/lib/protocolHubSocket.d.mts +18 -0
- package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
- package/dist/web/lib/protocolHubSocket.mjs +107 -0
- package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
- package/dist/web/lib/protocolTimeline.cjs +86 -0
- package/dist/web/lib/protocolTimeline.cjs.map +1 -0
- package/dist/web/lib/protocolTimeline.d.mts +9 -0
- package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
- package/dist/web/lib/protocolTimeline.mjs +85 -0
- package/dist/web/lib/protocolTimeline.mjs.map +1 -0
- package/dist/web/lib/qrMatrix.cjs +37 -0
- package/dist/web/lib/qrMatrix.cjs.map +1 -0
- package/dist/web/lib/qrMatrix.d.mts +5 -0
- package/dist/web/lib/qrMatrix.d.mts.map +1 -0
- package/dist/web/lib/qrMatrix.mjs +35 -0
- package/dist/web/lib/qrMatrix.mjs.map +1 -0
- package/dist/web/lib/remoteApi.cjs +100 -0
- package/dist/web/lib/remoteApi.cjs.map +1 -0
- package/dist/web/lib/remoteApi.d.mts +45 -0
- package/dist/web/lib/remoteApi.d.mts.map +1 -0
- package/dist/web/lib/remoteApi.mjs +92 -0
- package/dist/web/lib/remoteApi.mjs.map +1 -0
- package/dist/web/lib/sealedSession.cjs +81 -0
- package/dist/web/lib/sealedSession.cjs.map +1 -0
- package/dist/web/lib/sealedSession.d.mts +24 -0
- package/dist/web/lib/sealedSession.d.mts.map +1 -0
- package/dist/web/lib/sealedSession.mjs +75 -0
- package/dist/web/lib/sealedSession.mjs.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
- package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
- package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
- package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
- package/dist/web/lib/sessionAsset.cjs +45 -0
- package/dist/web/lib/sessionAsset.cjs.map +1 -0
- package/dist/web/lib/sessionAsset.d.mts +17 -0
- package/dist/web/lib/sessionAsset.d.mts.map +1 -0
- package/dist/web/lib/sessionAsset.mjs +44 -0
- package/dist/web/lib/sessionAsset.mjs.map +1 -0
- package/dist/web/lib/sessionAvatar.cjs +18 -0
- package/dist/web/lib/sessionAvatar.cjs.map +1 -0
- package/dist/web/lib/sessionAvatar.d.mts +10 -0
- package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
- package/dist/web/lib/sessionAvatar.mjs +18 -0
- package/dist/web/lib/sessionAvatar.mjs.map +1 -0
- package/dist/web/lib/sessionMcpApi.cjs +120 -0
- package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
- package/dist/web/lib/sessionMcpApi.d.mts +27 -0
- package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
- package/dist/web/lib/sessionMcpApi.mjs +114 -0
- package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
- package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
- package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
- package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
- package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
- package/dist/web/lib/sessionModel.cjs +970 -0
- package/dist/web/lib/sessionModel.cjs.map +1 -0
- package/dist/web/lib/sessionModel.d.mts +254 -0
- package/dist/web/lib/sessionModel.d.mts.map +1 -0
- package/dist/web/lib/sessionModel.mjs +958 -0
- package/dist/web/lib/sessionModel.mjs.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
- package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
- package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
- package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
- package/dist/web/lib/sessionRailModel.cjs +107 -0
- package/dist/web/lib/sessionRailModel.cjs.map +1 -0
- package/dist/web/lib/sessionRailModel.d.mts +38 -0
- package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
- package/dist/web/lib/sessionRailModel.mjs +104 -0
- package/dist/web/lib/sessionRailModel.mjs.map +1 -0
- package/dist/web/lib/sessionSummary.cjs +58 -0
- package/dist/web/lib/sessionSummary.cjs.map +1 -0
- package/dist/web/lib/sessionSummary.d.mts +39 -0
- package/dist/web/lib/sessionSummary.d.mts.map +1 -0
- package/dist/web/lib/sessionSummary.mjs +54 -0
- package/dist/web/lib/sessionSummary.mjs.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
- package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
- package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
- package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
- package/dist/web/lib/settingsApi.cjs +237 -0
- package/dist/web/lib/settingsApi.cjs.map +1 -0
- package/dist/web/lib/settingsApi.d.mts +57 -0
- package/dist/web/lib/settingsApi.d.mts.map +1 -0
- package/dist/web/lib/settingsApi.mjs +230 -0
- package/dist/web/lib/settingsApi.mjs.map +1 -0
- package/dist/web/lib/settingsDraft.cjs +48 -0
- package/dist/web/lib/settingsDraft.cjs.map +1 -0
- package/dist/web/lib/settingsDraft.d.mts +28 -0
- package/dist/web/lib/settingsDraft.d.mts.map +1 -0
- package/dist/web/lib/settingsDraft.mjs +45 -0
- package/dist/web/lib/settingsDraft.mjs.map +1 -0
- package/dist/web/lib/settingsSections.cjs +108 -0
- package/dist/web/lib/settingsSections.cjs.map +1 -0
- package/dist/web/lib/settingsSections.d.mts +36 -0
- package/dist/web/lib/settingsSections.d.mts.map +1 -0
- package/dist/web/lib/settingsSections.mjs +105 -0
- package/dist/web/lib/settingsSections.mjs.map +1 -0
- package/dist/web/lib/statusLine.cjs +82 -0
- package/dist/web/lib/statusLine.cjs.map +1 -0
- package/dist/web/lib/statusLine.d.mts +27 -0
- package/dist/web/lib/statusLine.d.mts.map +1 -0
- package/dist/web/lib/statusLine.mjs +79 -0
- package/dist/web/lib/statusLine.mjs.map +1 -0
- package/dist/web/lib/stepUp.cjs +41 -0
- package/dist/web/lib/stepUp.cjs.map +1 -0
- package/dist/web/lib/stepUp.d.mts +18 -0
- package/dist/web/lib/stepUp.d.mts.map +1 -0
- package/dist/web/lib/stepUp.mjs +41 -0
- package/dist/web/lib/stepUp.mjs.map +1 -0
- package/dist/web/lib/templateCatalog.cjs +123 -0
- package/dist/web/lib/templateCatalog.cjs.map +1 -0
- package/dist/web/lib/templateCatalog.d.mts +38 -0
- package/dist/web/lib/templateCatalog.d.mts.map +1 -0
- package/dist/web/lib/templateCatalog.mjs +118 -0
- package/dist/web/lib/templateCatalog.mjs.map +1 -0
- package/dist/web/lib/threadRenderer.cjs +25 -0
- package/dist/web/lib/threadRenderer.cjs.map +1 -0
- package/dist/web/lib/threadRenderer.d.mts +17 -0
- package/dist/web/lib/threadRenderer.d.mts.map +1 -0
- package/dist/web/lib/threadRenderer.mjs +23 -0
- package/dist/web/lib/threadRenderer.mjs.map +1 -0
- package/dist/web/lib/timelineGroups.cjs +83 -0
- package/dist/web/lib/timelineGroups.cjs.map +1 -0
- package/dist/web/lib/timelineGroups.d.mts +36 -0
- package/dist/web/lib/timelineGroups.d.mts.map +1 -0
- package/dist/web/lib/timelineGroups.mjs +81 -0
- package/dist/web/lib/timelineGroups.mjs.map +1 -0
- package/dist/web/lib/toolCompletionTabs.cjs +98 -0
- package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
- package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
- package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
- package/dist/web/lib/toolCompletionTabs.mjs +98 -0
- package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
- package/dist/web/lib/toolMessageProps.cjs +19 -0
- package/dist/web/lib/toolMessageProps.cjs.map +1 -0
- package/dist/web/lib/toolMessageProps.d.mts +7 -0
- package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
- package/dist/web/lib/toolMessageProps.mjs +19 -0
- package/dist/web/lib/toolMessageProps.mjs.map +1 -0
- package/dist/web/lib/toolPrompt.cjs +44 -0
- package/dist/web/lib/toolPrompt.cjs.map +1 -0
- package/dist/web/lib/toolPrompt.d.mts +34 -0
- package/dist/web/lib/toolPrompt.d.mts.map +1 -0
- package/dist/web/lib/toolPrompt.mjs +44 -0
- package/dist/web/lib/toolPrompt.mjs.map +1 -0
- package/dist/web/lib/transport.cjs +57 -0
- package/dist/web/lib/transport.cjs.map +1 -0
- package/dist/web/lib/transport.d.mts +40 -0
- package/dist/web/lib/transport.d.mts.map +1 -0
- package/dist/web/lib/transport.mjs +50 -0
- package/dist/web/lib/transport.mjs.map +1 -0
- package/dist/web/lib/useSessionMcp.cjs +65 -0
- package/dist/web/lib/useSessionMcp.cjs.map +1 -0
- package/dist/web/lib/useSessionMcp.d.mts +15 -0
- package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
- package/dist/web/lib/useSessionMcp.mjs +65 -0
- package/dist/web/lib/useSessionMcp.mjs.map +1 -0
- package/dist/web/lib/webauthnClient.cjs +110 -0
- package/dist/web/lib/webauthnClient.cjs.map +1 -0
- package/dist/web/lib/webauthnClient.d.mts +32 -0
- package/dist/web/lib/webauthnClient.d.mts.map +1 -0
- package/dist/web/lib/webauthnClient.mjs +106 -0
- package/dist/web/lib/webauthnClient.mjs.map +1 -0
- package/dist/web/lib/webmcpSimulator.cjs +105 -0
- package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
- package/dist/web/lib/webmcpSimulator.mjs +105 -0
- package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
- package/dist/web/stores/captureStore.cjs +137 -0
- package/dist/web/stores/captureStore.cjs.map +1 -0
- package/dist/web/stores/captureStore.d.mts +13 -0
- package/dist/web/stores/captureStore.d.mts.map +1 -0
- package/dist/web/stores/captureStore.mjs +133 -0
- package/dist/web/stores/captureStore.mjs.map +1 -0
- package/dist/web/stores/composerStore.cjs +390 -0
- package/dist/web/stores/composerStore.cjs.map +1 -0
- package/dist/web/stores/composerStore.d.mts +101 -0
- package/dist/web/stores/composerStore.d.mts.map +1 -0
- package/dist/web/stores/composerStore.mjs +370 -0
- package/dist/web/stores/composerStore.mjs.map +1 -0
- package/dist/web/stores/composerSubmissionStore.cjs +88 -0
- package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
- package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
- package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
- package/dist/web/stores/composerSubmissionStore.mjs +87 -0
- package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
- package/dist/web/stores/dashboardStateStore.cjs +35 -0
- package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
- package/dist/web/stores/dashboardStateStore.d.mts +11 -0
- package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
- package/dist/web/stores/dashboardStateStore.mjs +33 -0
- package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
- package/dist/web/stores/devProxyStore.cjs +76 -0
- package/dist/web/stores/devProxyStore.cjs.map +1 -0
- package/dist/web/stores/devProxyStore.d.mts +25 -0
- package/dist/web/stores/devProxyStore.d.mts.map +1 -0
- package/dist/web/stores/devProxyStore.mjs +73 -0
- package/dist/web/stores/devProxyStore.mjs.map +1 -0
- package/dist/web/stores/dialogDraftStore.cjs +38 -0
- package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
- package/dist/web/stores/dialogDraftStore.d.mts +13 -0
- package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
- package/dist/web/stores/dialogDraftStore.mjs +36 -0
- package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
- package/dist/web/stores/fileLinkModesStore.cjs +20 -0
- package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
- package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
- package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
- package/dist/web/stores/fileLinkModesStore.mjs +20 -0
- package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
- package/dist/web/stores/menuStore.cjs +85 -0
- package/dist/web/stores/menuStore.cjs.map +1 -0
- package/dist/web/stores/menuStore.d.mts +42 -0
- package/dist/web/stores/menuStore.d.mts.map +1 -0
- package/dist/web/stores/menuStore.mjs +79 -0
- package/dist/web/stores/menuStore.mjs.map +1 -0
- package/dist/web/stores/newSessionStore.cjs +93 -0
- package/dist/web/stores/newSessionStore.cjs.map +1 -0
- package/dist/web/stores/newSessionStore.d.mts +30 -0
- package/dist/web/stores/newSessionStore.d.mts.map +1 -0
- package/dist/web/stores/newSessionStore.mjs +86 -0
- package/dist/web/stores/newSessionStore.mjs.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
- package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
- package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
- package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
- package/dist/web/stores/paletteStore.cjs +37 -0
- package/dist/web/stores/paletteStore.cjs.map +1 -0
- package/dist/web/stores/paletteStore.d.mts +14 -0
- package/dist/web/stores/paletteStore.d.mts.map +1 -0
- package/dist/web/stores/paletteStore.mjs +34 -0
- package/dist/web/stores/paletteStore.mjs.map +1 -0
- package/dist/web/stores/railDialogStore.cjs +105 -0
- package/dist/web/stores/railDialogStore.cjs.map +1 -0
- package/dist/web/stores/railDialogStore.d.mts +32 -0
- package/dist/web/stores/railDialogStore.d.mts.map +1 -0
- package/dist/web/stores/railDialogStore.mjs +97 -0
- package/dist/web/stores/railDialogStore.mjs.map +1 -0
- package/dist/web/stores/remoteAccessStore.cjs +216 -0
- package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
- package/dist/web/stores/remoteAccessStore.d.mts +48 -0
- package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
- package/dist/web/stores/remoteAccessStore.mjs +202 -0
- package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
- package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
- package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
- package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
- package/dist/web/stores/sessionStore.cjs +610 -0
- package/dist/web/stores/sessionStore.cjs.map +1 -0
- package/dist/web/stores/sessionStore.d.mts +116 -0
- package/dist/web/stores/sessionStore.d.mts.map +1 -0
- package/dist/web/stores/sessionStore.mjs +568 -0
- package/dist/web/stores/sessionStore.mjs.map +1 -0
- package/dist/web/stores/sessionsStore.cjs +272 -0
- package/dist/web/stores/sessionsStore.cjs.map +1 -0
- package/dist/web/stores/sessionsStore.d.mts +74 -0
- package/dist/web/stores/sessionsStore.d.mts.map +1 -0
- package/dist/web/stores/sessionsStore.mjs +257 -0
- package/dist/web/stores/sessionsStore.mjs.map +1 -0
- package/dist/web/stores/settingsDraftStore.cjs +138 -0
- package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
- package/dist/web/stores/settingsDraftStore.d.mts +27 -0
- package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
- package/dist/web/stores/settingsDraftStore.mjs +132 -0
- package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
- package/dist/web/stores/templateStore.cjs +136 -0
- package/dist/web/stores/templateStore.cjs.map +1 -0
- package/dist/web/stores/templateStore.d.mts +20 -0
- package/dist/web/stores/templateStore.d.mts.map +1 -0
- package/dist/web/stores/templateStore.mjs +131 -0
- package/dist/web/stores/templateStore.mjs.map +1 -0
- package/dist/web/stores/themeStore.cjs +42 -0
- package/dist/web/stores/themeStore.cjs.map +1 -0
- package/dist/web/stores/themeStore.d.mts +20 -0
- package/dist/web/stores/themeStore.d.mts.map +1 -0
- package/dist/web/stores/themeStore.mjs +39 -0
- package/dist/web/stores/themeStore.mjs.map +1 -0
- package/dist/web/stores/threadStore.cjs +122 -0
- package/dist/web/stores/threadStore.cjs.map +1 -0
- package/dist/web/stores/threadStore.d.mts +24 -0
- package/dist/web/stores/threadStore.d.mts.map +1 -0
- package/dist/web/stores/threadStore.mjs +114 -0
- package/dist/web/stores/threadStore.mjs.map +1 -0
- package/dist/web/stores/toolPromptStore.cjs +15 -0
- package/dist/web/stores/toolPromptStore.cjs.map +1 -0
- package/dist/web/stores/toolPromptStore.d.mts +23 -0
- package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
- package/dist/web/stores/toolPromptStore.mjs +14 -0
- package/dist/web/stores/toolPromptStore.mjs.map +1 -0
- package/dist/web/stores/transientTabsStore.cjs +66 -0
- package/dist/web/stores/transientTabsStore.cjs.map +1 -0
- package/dist/web/stores/transientTabsStore.d.mts +21 -0
- package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
- package/dist/web/stores/transientTabsStore.mjs +59 -0
- package/dist/web/stores/transientTabsStore.mjs.map +1 -0
- package/dist/web/stores/uiStore.cjs +47 -0
- package/dist/web/stores/uiStore.cjs.map +1 -0
- package/dist/web/stores/uiStore.d.mts +18 -0
- package/dist/web/stores/uiStore.d.mts.map +1 -0
- package/dist/web/stores/uiStore.mjs +45 -0
- package/dist/web/stores/uiStore.mjs.map +1 -0
- package/dist/web/stores/useOpenTab.cjs +31 -0
- package/dist/web/stores/useOpenTab.cjs.map +1 -0
- package/dist/web/stores/useOpenTab.d.mts +9 -0
- package/dist/web/stores/useOpenTab.d.mts.map +1 -0
- package/dist/web/stores/useOpenTab.mjs +31 -0
- package/dist/web/stores/useOpenTab.mjs.map +1 -0
- package/dist/web/stores/usePluginSlotProps.cjs +115 -0
- package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
- package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
- package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
- package/dist/web/stores/usePluginSlotProps.mjs +115 -0
- package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
- package/dist/web/stores/useToolPrompt.cjs +42 -0
- package/dist/web/stores/useToolPrompt.cjs.map +1 -0
- package/dist/web/stores/useToolPrompt.d.mts +14 -0
- package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
- package/dist/web/stores/useToolPrompt.mjs +42 -0
- package/dist/web/stores/useToolPrompt.mjs.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
- package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
- package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
- package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
- package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
- package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
- package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
- package/dist/web/stores/workspacesStore.cjs +83 -0
- package/dist/web/stores/workspacesStore.cjs.map +1 -0
- package/dist/web/stores/workspacesStore.d.mts +17 -0
- package/dist/web/stores/workspacesStore.d.mts.map +1 -0
- package/dist/web/stores/workspacesStore.mjs +78 -0
- package/dist/web/stores/workspacesStore.mjs.map +1 -0
- package/llms.txt +3 -0
- package/package.json +107 -0
- package/styles/dashboard.css +2 -0
- package/styles/preview.css +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionRail.mjs","names":[],"sources":["../../../../src/web/features/sessions/useSessionRail.tsx"],"sourcesContent":["import type { WebTemplateRail } from '@agimon-ai/po-core/web';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useStore } from '@tanstack/react-store';\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\n\nimport { PluginSurface } from '../../components/PluginSurface';\nimport { activityGroups, subscribeActivitySources } from '../../lib/composition';\nimport { listDirectory, listWorkspaces, removeWorkspace, searchDirectories, stopSession } from '../../lib/hubApi';\nimport { HOST_SLOTS } from '../../lib/pluginRegistry';\nimport { loadSessionAvatar } from '../../lib/sessionAvatar';\nimport { removeSessionMcpSetup } from '../../lib/sessionMcpApi';\nimport { buildRailWorkspaces } from '../../lib/sessionRailModel';\nimport { DEFAULT_REPOSITORY_SETTINGS_SECTION, DEFAULT_SETTINGS_SECTION } from '../../lib/settingsSections';\nimport { closeNewSession, newSessionStore, openNewSession } from '../../stores/newSessionStore';\nimport { paletteStore } from '../../stores/paletteStore';\nimport { openResumeDialog, railRestartStore, restartDashboardSession } from '../../stores/railDialogStore';\nimport { openRemoteDialog, remoteAccessStore, turnRemoteAccessOff } from '../../stores/remoteAccessStore';\nimport { applySessionRemoved, resolveParentId, sessionsStore, type SessionMeta } from '../../stores/sessionsStore';\nimport { renameSession, sessionStoreFor } from '../../stores/sessionStore';\nimport {\n admitDashboardWorkspace,\n resetWorkspaceAdmission,\n workspaceAdmissionStore,\n} from '../../stores/workspaceAdmissionStore';\nimport {\n applyWorkspaceRemoved,\n applyWorkspacesSnapshot,\n selectWorkspace,\n workspacesStore,\n} from '../../stores/workspacesStore';\n\nconst STATUS_REFRESH_MS = 30_000;\n\nfunction isEditable(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return target.isContentEditable || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA';\n}\n\n/** A key pressed inside an overlay belongs to that overlay, never to the rail. */\nfunction insideOverlay(target: EventTarget | null): boolean {\n return target instanceof Element && target.closest('[role=\"dialog\"], [role=\"menu\"], [role=\"alertdialog\"]') !== null;\n}\n\n/**\n * Loads each distinct profile avatar once, keyed by profile and icon version so\n * sessions sharing a persona share one image, and revokes images no card shows.\n */\nfunction useSessionAvatars(order: readonly string[], byId: Readonly<Record<string, SessionMeta>>) {\n const wanted = new Map<string, string>();\n for (const id of order) {\n const profile = byId[id]?.summary.profile;\n if (profile?.iconVersion !== undefined) wanted.set(id, `${profile.name}:${profile.iconVersion}`);\n }\n const wantedKey = [...wanted].map(([id, key]) => `${id}=${key}`).join('\\n');\n const [loaded, setLoaded] = useState<Readonly<Record<string, string>>>({});\n const requested = useRef(new Set<string>());\n\n useEffect(() => {\n const keys = new Set(wanted.values());\n for (const [id, key] of wanted) {\n if (requested.current.has(key)) continue;\n requested.current.add(key);\n const version = key.slice(key.lastIndexOf(':') + 1);\n void loadSessionAvatar(id, version).then(\n (url) => setLoaded((previous) => ({ ...previous, [key]: url })),\n // A missing image leaves the initials in place; the next icon version retries.\n () => undefined,\n );\n }\n setLoaded((previous) => {\n const stale = Object.keys(previous).filter((key) => !keys.has(key));\n if (stale.length === 0) return previous;\n const next = { ...previous };\n for (const key of stale) {\n URL.revokeObjectURL(next[key]!);\n delete next[key];\n requested.current.delete(key);\n }\n return next;\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `wanted` is rebuilt each render; `wantedKey` tracks its content.\n }, [wantedKey]);\n\n useEffect(\n () => () => {\n setLoaded((previous) => {\n for (const url of Object.values(previous)) URL.revokeObjectURL(url);\n return {};\n });\n },\n [],\n );\n\n const urls: Record<string, string> = {};\n for (const [id, key] of wanted) {\n const url = loaded[key];\n if (url !== undefined) urls[id] = url;\n }\n return urls;\n}\n\n/**\n * The session rail as data and actions for the active template.\n *\n * Owns what must keep working whichever template renders (or hides) the rail:\n * the status clock, workspace hydration, the Ctrl+T and 1-9 shortcuts, and the\n * actions that reach the hub and the router.\n */\nexport function useSessionRail({ onDismiss }: { onDismiss?: () => void }): WebTemplateRail {\n const navigate = useNavigate();\n const scrollTop = useRef(0);\n const scrollRef = useCallback((element: HTMLElement | null) => {\n if (element === null) return;\n element.scrollTop = scrollTop.current;\n return () => {\n scrollTop.current = element.scrollTop;\n };\n }, []);\n const order = useStore(sessionsStore, (state) => state.order);\n const byId = useStore(sessionsStore, (state) => state.byId);\n const activeId = useStore(sessionsStore, (state) => state.activeId);\n const workspaceOrder = useStore(workspacesStore, (state) => state.order);\n const workspacesById = useStore(workspacesStore, (state) => state.byId);\n const selectedWorkspaceId = useStore(workspacesStore, (state) => state.selectedId);\n const workspacesHydrated = useStore(workspacesStore, (state) => state.hydrated);\n const hasDialog = useStore(sessionStoreFor(activeId), (state) => state.dialog !== null);\n const remote = useStore(remoteAccessStore, (state) => state.view);\n const creating = useStore(newSessionStore, (state) => state);\n const [now, setNow] = useState(() => Date.now());\n const restarts = useStore(railRestartStore);\n const avatarUrls = useSessionAvatars(order, byId);\n const backgroundWorkKey = useSyncExternalStore(\n useCallback(\n (listener: () => void) => {\n const releases = [\n subscribeActivitySources(listener),\n ...order.map((id) => {\n const subscription = sessionStoreFor(id).subscribe(listener);\n return () => subscription.unsubscribe();\n }),\n ];\n return () => releases.forEach((release) => release());\n },\n [order],\n ),\n () =>\n JSON.stringify(\n order.filter((id) => {\n const { statuses, widgets } = sessionStoreFor(id).state;\n return activityGroups(statuses, widgets, id).some(\n (group) => group.active && group.marksBackgroundWork !== false,\n );\n }),\n ),\n );\n const backgroundWorkSessions = useMemo<ReadonlySet<string>>(\n () => new Set(JSON.parse(backgroundWorkKey) as string[]),\n [backgroundWorkKey],\n );\n\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), STATUS_REFRESH_MS);\n return () => clearInterval(timer);\n }, []);\n\n useEffect(() => {\n if (workspacesHydrated) return;\n let stale = false;\n void listWorkspaces().then((result) => {\n if (!stale && 'workspaces' in result) applyWorkspacesSnapshot(result);\n });\n return () => {\n stale = true;\n };\n }, [workspacesHydrated]);\n\n useEffect(() => {\n const workspaceId = activeId === null ? undefined : byId[activeId]?.summary.workspaceId;\n if (workspaceId !== undefined && workspacesById[workspaceId] !== undefined) selectWorkspace(workspaceId);\n }, [activeId, byId, workspacesById]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.ctrlKey && !event.metaKey && !event.altKey && event.key === 't') {\n event.preventDefault();\n onDismiss?.();\n openNewSession(selectedWorkspaceId);\n return;\n }\n if (event.ctrlKey || event.metaKey || event.altKey || event.defaultPrevented) return;\n if (isEditable(event.target) || insideOverlay(event.target) || paletteStore.state.open || hasDialog) return;\n const ordinal = Number.parseInt(event.key, 10);\n if (!Number.isInteger(ordinal) || ordinal < 1 || ordinal > 9) return;\n const target = order[ordinal - 1];\n if (target === undefined) return;\n event.preventDefault();\n onDismiss?.();\n void navigate({ to: '/session/$sessionId', params: { sessionId: target } });\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [order, hasDialog, navigate, onDismiss, selectedWorkspaceId]);\n\n const workspaces = useMemo(\n () =>\n buildRailWorkspaces({\n order,\n byId,\n activeId,\n workspaceOrder,\n workspacesById,\n nested: new Set(order.filter((id) => resolveParentId(byId, id) !== undefined)),\n now,\n restarts,\n avatarUrls,\n backgroundWorkSessions,\n }),\n [order, byId, activeId, workspaceOrder, workspacesById, now, restarts, avatarUrls, backgroundWorkSessions],\n );\n\n const addingWorkspace =\n creating.open && (creating.workspaceId === null || workspacesById[creating.workspaceId] === undefined);\n\n return {\n workspaces,\n scrollRef,\n remote: {\n status: remote?.status ?? 'off',\n deviceCount: remote?.devices.length ?? 0,\n ...(remote?.publicUrl === undefined ? {} : { host: new URL(remote.publicUrl).host }),\n ...(remote?.error === undefined ? {} : { error: remote.error }),\n },\n pluginContent: <PluginSurface slot={HOST_SLOTS.rail} sessionId={activeId} />,\n ...(addingWorkspace ? { addWorkspace: { suggestedPaths: remote?.settings.sandbox.workspaces ?? [] } } : {}),\n actions: {\n openSession(sessionId) {\n onDismiss?.();\n void navigate({ to: '/session/$sessionId', params: { sessionId } });\n },\n renameSession(sessionId, name) {\n const trimmed = name.trim();\n if (trimmed !== '' && trimmed !== byId[sessionId]?.summary.name) renameSession(trimmed, sessionId);\n },\n restartSession(sessionId) {\n void restartDashboardSession(sessionId);\n },\n async removeSession(sessionId) {\n const result = await stopSession(sessionId);\n if ('error' in result) return { error: result.error };\n applySessionRemoved({ sessionId });\n return undefined;\n },\n resumeSession(sessionId) {\n openResumeDialog({ sessionId });\n },\n createSession(workspaceId) {\n selectWorkspace(workspaceId);\n onDismiss?.();\n openNewSession(workspaceId);\n },\n resumeInWorkspace(workspaceId) {\n openResumeDialog({ workspaceId });\n },\n openWorkspaceSettings(workspaceId) {\n selectWorkspace(workspaceId);\n onDismiss?.();\n void navigate({\n to: '/settings/$section',\n params: { section: DEFAULT_REPOSITORY_SETTINGS_SECTION },\n search: { workspace: workspaceId },\n });\n },\n async deleteWorkspace(workspaceId) {\n const result = await removeWorkspace(workspaceId);\n if ('error' in result) return { error: result.error };\n applyWorkspaceRemoved({ workspaceId });\n return undefined;\n },\n openAddWorkspace() {\n onDismiss?.();\n openNewSession(null);\n },\n closeAddWorkspace() {\n if (workspaceAdmissionStore.state.pending) return;\n resetWorkspaceAdmission();\n closeNewSession();\n },\n async addWorkspace(input) {\n const result = await admitDashboardWorkspace(input);\n if (result === undefined) closeNewSession();\n return result;\n },\n searchDirectories,\n listDirectory,\n async removePendingSetup(sessionId, setupId) {\n const workspaceId = byId[sessionId]?.summary.workspaceId;\n if (workspaceId === undefined) return { error: 'This session belongs to no workspace.' };\n const result = await removeSessionMcpSetup(workspaceId, sessionId, setupId);\n return 'error' in result ? { error: result.error } : undefined;\n },\n openSettings() {\n onDismiss?.();\n void navigate({\n to: '/settings/$section',\n params: { section: DEFAULT_SETTINGS_SECTION },\n search: { workspace: selectedWorkspaceId ?? undefined },\n });\n },\n openRemoteAccess() {\n onDismiss?.();\n openRemoteDialog();\n },\n turnRemoteAccessOff() {\n void turnRemoteAccessOff();\n },\n renderSessionMenuItems: (sessionId) => <PluginSurface slot={HOST_SLOTS.sessionMenu} sessionId={sessionId} />,\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const require_themeStore = require("../../stores/themeStore.cjs");
|
|
2
|
+
const require_TemplateSettings = require("./TemplateSettings.cjs");
|
|
3
|
+
let _tanstack_react_store = require("@tanstack/react-store");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
|
|
6
|
+
//#region src/web/features/settings/AppearanceSettings.tsx
|
|
7
|
+
/** The accents a swatch previews, in the order the bar shows them. */
|
|
8
|
+
const SWATCH_ACCENTS = [
|
|
9
|
+
"blue",
|
|
10
|
+
"green",
|
|
11
|
+
"yellow",
|
|
12
|
+
"red",
|
|
13
|
+
"magenta",
|
|
14
|
+
"cyan"
|
|
15
|
+
];
|
|
16
|
+
/** A miniature of the cockpit in the theme's own colours, drawn from its tokens rather than the page's. */
|
|
17
|
+
function ThemeSwatch({ theme }) {
|
|
18
|
+
const { tokens } = theme;
|
|
19
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
20
|
+
"aria-hidden": true,
|
|
21
|
+
className: "flex h-[74px] w-full overflow-hidden rounded border",
|
|
22
|
+
style: {
|
|
23
|
+
backgroundColor: tokens.bg,
|
|
24
|
+
borderColor: tokens.border
|
|
25
|
+
},
|
|
26
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
27
|
+
className: "flex w-[34%] flex-col gap-1 p-1.5",
|
|
28
|
+
style: { backgroundColor: tokens.rail },
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
31
|
+
className: "h-[7px] w-full rounded-sm",
|
|
32
|
+
style: { backgroundColor: tokens.selected }
|
|
33
|
+
}),
|
|
34
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
35
|
+
className: "h-[7px] w-3/4 rounded-sm",
|
|
36
|
+
style: { backgroundColor: tokens.panel }
|
|
37
|
+
}),
|
|
38
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
39
|
+
className: "h-[7px] w-3/4 rounded-sm",
|
|
40
|
+
style: { backgroundColor: tokens.panel }
|
|
41
|
+
})
|
|
42
|
+
]
|
|
43
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
44
|
+
className: "flex flex-1 flex-col justify-between p-1.5",
|
|
45
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
46
|
+
className: "flex flex-col gap-1",
|
|
47
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
48
|
+
className: "h-[5px] w-2/3 rounded-sm",
|
|
49
|
+
style: { backgroundColor: tokens.text }
|
|
50
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
51
|
+
className: "h-[5px] w-1/2 rounded-sm",
|
|
52
|
+
style: { backgroundColor: tokens.dim }
|
|
53
|
+
})]
|
|
54
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
55
|
+
className: "flex gap-1",
|
|
56
|
+
children: SWATCH_ACCENTS.map((accent) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
57
|
+
className: "h-2 w-2 rounded-full",
|
|
58
|
+
style: { backgroundColor: tokens[accent] }
|
|
59
|
+
}, accent))
|
|
60
|
+
})]
|
|
61
|
+
})]
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The appearance page: the colour theme, then the layout Po opens with. A
|
|
66
|
+
* theme applies at once and is remembered per browser; a layout is saved to
|
|
67
|
+
* Po config and needs an explicit save, because it can differ per workspace.
|
|
68
|
+
*/
|
|
69
|
+
function AppearanceSettings({ templateTarget, onTemplateTargetChange }) {
|
|
70
|
+
const current = (0, _tanstack_react_store.useStore)(require_themeStore.themeStore, (state) => state.name);
|
|
71
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsPage, {
|
|
72
|
+
"data-testid": "appearance-settings",
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsTitle, { children: "Appearance" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsDescription, { children: "Choose how Po looks and which layout it opens with." })] }),
|
|
75
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSection, { children: [
|
|
76
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsSectionHeader, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionTitle, { children: "Theme" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsSectionDescription, { children: "Applies straight away and is remembered in this browser. Plugin tabs follow it too." })] }),
|
|
77
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.RadioGroup, {
|
|
78
|
+
"aria-label": "Theme",
|
|
79
|
+
"data-testid": "theme-list",
|
|
80
|
+
className: "grid grid-cols-1 gap-3 min-[480px]:grid-cols-2 lg:grid-cols-3",
|
|
81
|
+
value: current,
|
|
82
|
+
onValueChange: require_themeStore.selectTheme,
|
|
83
|
+
children: require_themeStore.availableThemes().map((theme) => {
|
|
84
|
+
const selected = theme.name === current;
|
|
85
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.RadioGroupCard, {
|
|
86
|
+
value: theme.name,
|
|
87
|
+
"data-testid": `theme-${theme.name}`,
|
|
88
|
+
"data-selected": selected,
|
|
89
|
+
className: "flex flex-col gap-3 rounded-lg p-3",
|
|
90
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThemeSwatch, { theme }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
91
|
+
className: "flex items-center gap-2",
|
|
92
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
93
|
+
className: "flex min-w-0 flex-1 flex-col",
|
|
94
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
95
|
+
className: "truncate text-base font-semibold text-doom-hi",
|
|
96
|
+
children: theme.label
|
|
97
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
98
|
+
className: "text-sm text-doom-dim first-letter:uppercase",
|
|
99
|
+
children: theme.scheme
|
|
100
|
+
})]
|
|
101
|
+
}), selected ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
|
|
102
|
+
})]
|
|
103
|
+
}, theme.name);
|
|
104
|
+
})
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsNote, { children: [
|
|
107
|
+
"A theme is a JSON file of twenty colour tokens. The format lives in",
|
|
108
|
+
" ",
|
|
109
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
110
|
+
className: "font-mono",
|
|
111
|
+
children: "@agimon-ai/po-web-components"
|
|
112
|
+
}),
|
|
113
|
+
"."
|
|
114
|
+
] })
|
|
115
|
+
] }),
|
|
116
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_TemplateSettings.TemplateSettings, {
|
|
117
|
+
target: templateTarget,
|
|
118
|
+
onTargetChange: onTemplateTargetChange
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
exports.AppearanceSettings = AppearanceSettings;
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=AppearanceSettings.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppearanceSettings.cjs","names":["useStore","themeStore","SettingsPage","SettingsHeader","SettingsTitle","SettingsDescription","SettingsSection","SettingsSectionHeader","SettingsSectionTitle","SettingsSectionDescription","RadioGroup","selectTheme","availableThemes","RadioGroupCard","CheckIcon","SettingsNote","TemplateSettings"],"sources":["../../../../src/web/features/settings/AppearanceSettings.tsx"],"sourcesContent":["import {\n CheckIcon,\n RadioGroup,\n RadioGroupCard,\n SettingsDescription,\n SettingsHeader,\n SettingsNote,\n SettingsPage,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n SettingsTitle,\n} from '@agimon-ai/po-web-components';\nimport type { ThemeConfig } from '@agimon-ai/po-web-components/theme';\nimport { useStore } from '@tanstack/react-store';\n\nimport { availableThemes, selectTheme, themeStore } from '../../stores/themeStore';\nimport { TemplateSettings } from './TemplateSettings';\n\n/** The accents a swatch previews, in the order the bar shows them. */\nconst SWATCH_ACCENTS = ['blue', 'green', 'yellow', 'red', 'magenta', 'cyan'] as const;\n\n/** A miniature of the cockpit in the theme's own colours, drawn from its tokens rather than the page's. */\nfunction ThemeSwatch({ theme }: { theme: ThemeConfig }) {\n const { tokens } = theme;\n return (\n <div\n aria-hidden\n className=\"flex h-[74px] w-full overflow-hidden rounded border\"\n style={{ backgroundColor: tokens.bg, borderColor: tokens.border }}\n >\n <div className=\"flex w-[34%] flex-col gap-1 p-1.5\" style={{ backgroundColor: tokens.rail }}>\n <span className=\"h-[7px] w-full rounded-sm\" style={{ backgroundColor: tokens.selected }} />\n <span className=\"h-[7px] w-3/4 rounded-sm\" style={{ backgroundColor: tokens.panel }} />\n <span className=\"h-[7px] w-3/4 rounded-sm\" style={{ backgroundColor: tokens.panel }} />\n </div>\n <div className=\"flex flex-1 flex-col justify-between p-1.5\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"h-[5px] w-2/3 rounded-sm\" style={{ backgroundColor: tokens.text }} />\n <span className=\"h-[5px] w-1/2 rounded-sm\" style={{ backgroundColor: tokens.dim }} />\n </div>\n <div className=\"flex gap-1\">\n {SWATCH_ACCENTS.map((accent) => (\n <span key={accent} className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: tokens[accent] }} />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * The appearance page: the colour theme, then the layout Po opens with. A\n * theme applies at once and is remembered per browser; a layout is saved to\n * Po config and needs an explicit save, because it can differ per workspace.\n */\nexport function AppearanceSettings({\n templateTarget,\n onTemplateTargetChange,\n}: {\n templateTarget: string;\n onTemplateTargetChange: (target: string) => void;\n}) {\n const current = useStore(themeStore, (state) => state.name);\n return (\n <SettingsPage data-testid=\"appearance-settings\">\n <SettingsHeader>\n <SettingsTitle>Appearance</SettingsTitle>\n <SettingsDescription>Choose how Po looks and which layout it opens with.</SettingsDescription>\n </SettingsHeader>\n <SettingsSection>\n <SettingsSectionHeader>\n <SettingsSectionTitle>Theme</SettingsSectionTitle>\n <SettingsSectionDescription>\n Applies straight away and is remembered in this browser. Plugin tabs follow it too.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n <RadioGroup\n aria-label=\"Theme\"\n data-testid=\"theme-list\"\n className=\"grid grid-cols-1 gap-3 min-[480px]:grid-cols-2 lg:grid-cols-3\"\n value={current}\n onValueChange={selectTheme}\n >\n {availableThemes().map((theme) => {\n const selected = theme.name === current;\n return (\n <RadioGroupCard\n key={theme.name}\n value={theme.name}\n data-testid={`theme-${theme.name}`}\n data-selected={selected}\n className=\"flex flex-col gap-3 rounded-lg p-3\"\n >\n <ThemeSwatch theme={theme} />\n <span className=\"flex items-center gap-2\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-base font-semibold text-doom-hi\">{theme.label}</span>\n <span className=\"text-sm text-doom-dim first-letter:uppercase\">{theme.scheme}</span>\n </span>\n {selected ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </span>\n </RadioGroupCard>\n );\n })}\n </RadioGroup>\n <SettingsNote>\n A theme is a JSON file of twenty colour tokens. The format lives in{' '}\n <code className=\"font-mono\">@agimon-ai/po-web-components</code>.\n </SettingsNote>\n </SettingsSection>\n <TemplateSettings target={templateTarget} onTargetChange={onTemplateTargetChange} />\n </SettingsPage>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/web/features/settings/AppearanceSettings.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The appearance page: the colour theme, then the layout Po opens with. A
|
|
4
|
+
* theme applies at once and is remembered per browser; a layout is saved to
|
|
5
|
+
* Po config and needs an explicit save, because it can differ per workspace.
|
|
6
|
+
*/
|
|
7
|
+
export declare function AppearanceSettings({ templateTarget, onTemplateTargetChange }: {
|
|
8
|
+
templateTarget: string;
|
|
9
|
+
onTemplateTargetChange: (target: string) => void;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=AppearanceSettings.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppearanceSettings.d.mts","names":[],"sources":["../../../../src/web/features/settings/AppearanceSettings.tsx"],"mappings":";;;;;;wBAyDgB,qBACd,gBACA;EAEA;EACA,yBAAyB;oBAC1B,IAAA"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { availableThemes, selectTheme, themeStore } from "../../stores/themeStore.mjs";
|
|
2
|
+
import { TemplateSettings } from "./TemplateSettings.mjs";
|
|
3
|
+
import { useStore } from "@tanstack/react-store";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { CheckIcon, RadioGroup, RadioGroupCard, SettingsDescription, SettingsHeader, SettingsNote, SettingsPage, SettingsSection, SettingsSectionDescription, SettingsSectionHeader, SettingsSectionTitle, SettingsTitle } from "@agimon-ai/po-web-components";
|
|
6
|
+
//#region src/web/features/settings/AppearanceSettings.tsx
|
|
7
|
+
/** The accents a swatch previews, in the order the bar shows them. */
|
|
8
|
+
const SWATCH_ACCENTS = [
|
|
9
|
+
"blue",
|
|
10
|
+
"green",
|
|
11
|
+
"yellow",
|
|
12
|
+
"red",
|
|
13
|
+
"magenta",
|
|
14
|
+
"cyan"
|
|
15
|
+
];
|
|
16
|
+
/** A miniature of the cockpit in the theme's own colours, drawn from its tokens rather than the page's. */
|
|
17
|
+
function ThemeSwatch({ theme }) {
|
|
18
|
+
const { tokens } = theme;
|
|
19
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
20
|
+
"aria-hidden": true,
|
|
21
|
+
className: "flex h-[74px] w-full overflow-hidden rounded border",
|
|
22
|
+
style: {
|
|
23
|
+
backgroundColor: tokens.bg,
|
|
24
|
+
borderColor: tokens.border
|
|
25
|
+
},
|
|
26
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
27
|
+
className: "flex w-[34%] flex-col gap-1 p-1.5",
|
|
28
|
+
style: { backgroundColor: tokens.rail },
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsx("span", {
|
|
31
|
+
className: "h-[7px] w-full rounded-sm",
|
|
32
|
+
style: { backgroundColor: tokens.selected }
|
|
33
|
+
}),
|
|
34
|
+
/* @__PURE__ */ jsx("span", {
|
|
35
|
+
className: "h-[7px] w-3/4 rounded-sm",
|
|
36
|
+
style: { backgroundColor: tokens.panel }
|
|
37
|
+
}),
|
|
38
|
+
/* @__PURE__ */ jsx("span", {
|
|
39
|
+
className: "h-[7px] w-3/4 rounded-sm",
|
|
40
|
+
style: { backgroundColor: tokens.panel }
|
|
41
|
+
})
|
|
42
|
+
]
|
|
43
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
44
|
+
className: "flex flex-1 flex-col justify-between p-1.5",
|
|
45
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
46
|
+
className: "flex flex-col gap-1",
|
|
47
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
48
|
+
className: "h-[5px] w-2/3 rounded-sm",
|
|
49
|
+
style: { backgroundColor: tokens.text }
|
|
50
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
51
|
+
className: "h-[5px] w-1/2 rounded-sm",
|
|
52
|
+
style: { backgroundColor: tokens.dim }
|
|
53
|
+
})]
|
|
54
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
55
|
+
className: "flex gap-1",
|
|
56
|
+
children: SWATCH_ACCENTS.map((accent) => /* @__PURE__ */ jsx("span", {
|
|
57
|
+
className: "h-2 w-2 rounded-full",
|
|
58
|
+
style: { backgroundColor: tokens[accent] }
|
|
59
|
+
}, accent))
|
|
60
|
+
})]
|
|
61
|
+
})]
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The appearance page: the colour theme, then the layout Po opens with. A
|
|
66
|
+
* theme applies at once and is remembered per browser; a layout is saved to
|
|
67
|
+
* Po config and needs an explicit save, because it can differ per workspace.
|
|
68
|
+
*/
|
|
69
|
+
function AppearanceSettings({ templateTarget, onTemplateTargetChange }) {
|
|
70
|
+
const current = useStore(themeStore, (state) => state.name);
|
|
71
|
+
return /* @__PURE__ */ jsxs(SettingsPage, {
|
|
72
|
+
"data-testid": "appearance-settings",
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ jsxs(SettingsHeader, { children: [/* @__PURE__ */ jsx(SettingsTitle, { children: "Appearance" }), /* @__PURE__ */ jsx(SettingsDescription, { children: "Choose how Po looks and which layout it opens with." })] }),
|
|
75
|
+
/* @__PURE__ */ jsxs(SettingsSection, { children: [
|
|
76
|
+
/* @__PURE__ */ jsxs(SettingsSectionHeader, { children: [/* @__PURE__ */ jsx(SettingsSectionTitle, { children: "Theme" }), /* @__PURE__ */ jsx(SettingsSectionDescription, { children: "Applies straight away and is remembered in this browser. Plugin tabs follow it too." })] }),
|
|
77
|
+
/* @__PURE__ */ jsx(RadioGroup, {
|
|
78
|
+
"aria-label": "Theme",
|
|
79
|
+
"data-testid": "theme-list",
|
|
80
|
+
className: "grid grid-cols-1 gap-3 min-[480px]:grid-cols-2 lg:grid-cols-3",
|
|
81
|
+
value: current,
|
|
82
|
+
onValueChange: selectTheme,
|
|
83
|
+
children: availableThemes().map((theme) => {
|
|
84
|
+
const selected = theme.name === current;
|
|
85
|
+
return /* @__PURE__ */ jsxs(RadioGroupCard, {
|
|
86
|
+
value: theme.name,
|
|
87
|
+
"data-testid": `theme-${theme.name}`,
|
|
88
|
+
"data-selected": selected,
|
|
89
|
+
className: "flex flex-col gap-3 rounded-lg p-3",
|
|
90
|
+
children: [/* @__PURE__ */ jsx(ThemeSwatch, { theme }), /* @__PURE__ */ jsxs("span", {
|
|
91
|
+
className: "flex items-center gap-2",
|
|
92
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
93
|
+
className: "flex min-w-0 flex-1 flex-col",
|
|
94
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
95
|
+
className: "truncate text-base font-semibold text-doom-hi",
|
|
96
|
+
children: theme.label
|
|
97
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
98
|
+
className: "text-sm text-doom-dim first-letter:uppercase",
|
|
99
|
+
children: theme.scheme
|
|
100
|
+
})]
|
|
101
|
+
}), selected ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-4 shrink-0 text-doom-green" }) : null]
|
|
102
|
+
})]
|
|
103
|
+
}, theme.name);
|
|
104
|
+
})
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ jsxs(SettingsNote, { children: [
|
|
107
|
+
"A theme is a JSON file of twenty colour tokens. The format lives in",
|
|
108
|
+
" ",
|
|
109
|
+
/* @__PURE__ */ jsx("code", {
|
|
110
|
+
className: "font-mono",
|
|
111
|
+
children: "@agimon-ai/po-web-components"
|
|
112
|
+
}),
|
|
113
|
+
"."
|
|
114
|
+
] })
|
|
115
|
+
] }),
|
|
116
|
+
/* @__PURE__ */ jsx(TemplateSettings, {
|
|
117
|
+
target: templateTarget,
|
|
118
|
+
onTargetChange: onTemplateTargetChange
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
export { AppearanceSettings };
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=AppearanceSettings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppearanceSettings.mjs","names":[],"sources":["../../../../src/web/features/settings/AppearanceSettings.tsx"],"sourcesContent":["import {\n CheckIcon,\n RadioGroup,\n RadioGroupCard,\n SettingsDescription,\n SettingsHeader,\n SettingsNote,\n SettingsPage,\n SettingsSection,\n SettingsSectionDescription,\n SettingsSectionHeader,\n SettingsSectionTitle,\n SettingsTitle,\n} from '@agimon-ai/po-web-components';\nimport type { ThemeConfig } from '@agimon-ai/po-web-components/theme';\nimport { useStore } from '@tanstack/react-store';\n\nimport { availableThemes, selectTheme, themeStore } from '../../stores/themeStore';\nimport { TemplateSettings } from './TemplateSettings';\n\n/** The accents a swatch previews, in the order the bar shows them. */\nconst SWATCH_ACCENTS = ['blue', 'green', 'yellow', 'red', 'magenta', 'cyan'] as const;\n\n/** A miniature of the cockpit in the theme's own colours, drawn from its tokens rather than the page's. */\nfunction ThemeSwatch({ theme }: { theme: ThemeConfig }) {\n const { tokens } = theme;\n return (\n <div\n aria-hidden\n className=\"flex h-[74px] w-full overflow-hidden rounded border\"\n style={{ backgroundColor: tokens.bg, borderColor: tokens.border }}\n >\n <div className=\"flex w-[34%] flex-col gap-1 p-1.5\" style={{ backgroundColor: tokens.rail }}>\n <span className=\"h-[7px] w-full rounded-sm\" style={{ backgroundColor: tokens.selected }} />\n <span className=\"h-[7px] w-3/4 rounded-sm\" style={{ backgroundColor: tokens.panel }} />\n <span className=\"h-[7px] w-3/4 rounded-sm\" style={{ backgroundColor: tokens.panel }} />\n </div>\n <div className=\"flex flex-1 flex-col justify-between p-1.5\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"h-[5px] w-2/3 rounded-sm\" style={{ backgroundColor: tokens.text }} />\n <span className=\"h-[5px] w-1/2 rounded-sm\" style={{ backgroundColor: tokens.dim }} />\n </div>\n <div className=\"flex gap-1\">\n {SWATCH_ACCENTS.map((accent) => (\n <span key={accent} className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: tokens[accent] }} />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * The appearance page: the colour theme, then the layout Po opens with. A\n * theme applies at once and is remembered per browser; a layout is saved to\n * Po config and needs an explicit save, because it can differ per workspace.\n */\nexport function AppearanceSettings({\n templateTarget,\n onTemplateTargetChange,\n}: {\n templateTarget: string;\n onTemplateTargetChange: (target: string) => void;\n}) {\n const current = useStore(themeStore, (state) => state.name);\n return (\n <SettingsPage data-testid=\"appearance-settings\">\n <SettingsHeader>\n <SettingsTitle>Appearance</SettingsTitle>\n <SettingsDescription>Choose how Po looks and which layout it opens with.</SettingsDescription>\n </SettingsHeader>\n <SettingsSection>\n <SettingsSectionHeader>\n <SettingsSectionTitle>Theme</SettingsSectionTitle>\n <SettingsSectionDescription>\n Applies straight away and is remembered in this browser. Plugin tabs follow it too.\n </SettingsSectionDescription>\n </SettingsSectionHeader>\n <RadioGroup\n aria-label=\"Theme\"\n data-testid=\"theme-list\"\n className=\"grid grid-cols-1 gap-3 min-[480px]:grid-cols-2 lg:grid-cols-3\"\n value={current}\n onValueChange={selectTheme}\n >\n {availableThemes().map((theme) => {\n const selected = theme.name === current;\n return (\n <RadioGroupCard\n key={theme.name}\n value={theme.name}\n data-testid={`theme-${theme.name}`}\n data-selected={selected}\n className=\"flex flex-col gap-3 rounded-lg p-3\"\n >\n <ThemeSwatch theme={theme} />\n <span className=\"flex items-center gap-2\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-base font-semibold text-doom-hi\">{theme.label}</span>\n <span className=\"text-sm text-doom-dim first-letter:uppercase\">{theme.scheme}</span>\n </span>\n {selected ? <CheckIcon className=\"size-4 shrink-0 text-doom-green\" /> : null}\n </span>\n </RadioGroupCard>\n );\n })}\n </RadioGroup>\n <SettingsNote>\n A theme is a JSON file of twenty colour tokens. The format lives in{' '}\n <code className=\"font-mono\">@agimon-ai/po-web-components</code>.\n </SettingsNote>\n </SettingsSection>\n <TemplateSettings target={templateTarget} onTargetChange={onTemplateTargetChange} />\n </SettingsPage>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
const require_settingsApi = require("../../lib/settingsApi.cjs");
|
|
2
|
+
const require_settingsDraft = require("../../lib/settingsDraft.cjs");
|
|
3
|
+
const require_settingsDraftStore = require("../../stores/settingsDraftStore.cjs");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
let _tanstack_react_store = require("@tanstack/react-store");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let _agimon_ai_po_web_components = require("@agimon-ai/po-web-components");
|
|
8
|
+
//#region src/web/features/settings/ContributedSettings.tsx
|
|
9
|
+
/** Optional contributed-settings view. Drafts, admission and hash-checked writes live outside this component. */
|
|
10
|
+
/** The select entry that clears a key, since unset is how the file spells "inherit". */
|
|
11
|
+
const INHERIT_VALUE = "__inherit__";
|
|
12
|
+
/**
|
|
13
|
+
* Where a value came from, read from the seat the reader is in, and said as
|
|
14
|
+
* quietly as it can be. A default says nothing. A value set at this scope is
|
|
15
|
+
* marked by the row's jade edge, named here only for assistive tech. A value
|
|
16
|
+
* from the global config is faint text. An override the reader is not
|
|
17
|
+
* currently editing is the one thing worth colouring: it is why an edit at
|
|
18
|
+
* this scope would appear to do nothing.
|
|
19
|
+
*/
|
|
20
|
+
function Origin({ origin, scope }) {
|
|
21
|
+
if (origin === "default") return null;
|
|
22
|
+
if (origin === scope) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23
|
+
className: "sr-only",
|
|
24
|
+
children: ", set here"
|
|
25
|
+
});
|
|
26
|
+
if (origin === "global") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
27
|
+
className: "text-sm font-normal text-doom-dim",
|
|
28
|
+
children: "From global"
|
|
29
|
+
});
|
|
30
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Badge, {
|
|
31
|
+
tone: "yellow",
|
|
32
|
+
className: "shrink-0",
|
|
33
|
+
children: "Overridden by repository"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function FieldRow({ field, view, scope, models, draft, busy, onDraft }) {
|
|
37
|
+
const locked = require_settingsDraft.settingsLockedReason(view, scope);
|
|
38
|
+
const dirty = draft !== void 0;
|
|
39
|
+
const value = draft === void 0 ? view?.value ?? "" : draft ?? "";
|
|
40
|
+
const options = (0, react.useMemo)(() => {
|
|
41
|
+
if (field.optionsFrom !== "models") return field.options ?? [];
|
|
42
|
+
return models.map((model) => ({
|
|
43
|
+
value: model.value,
|
|
44
|
+
label: model.label,
|
|
45
|
+
group: model.group
|
|
46
|
+
}));
|
|
47
|
+
}, [
|
|
48
|
+
field.options,
|
|
49
|
+
field.optionsFrom,
|
|
50
|
+
models
|
|
51
|
+
]);
|
|
52
|
+
const groups = (0, react.useMemo)(() => [...new Set(options.map((option) => option.group ?? ""))], [options]);
|
|
53
|
+
const kind = field.kind === "select" && options.length === 0 ? "text" : field.kind;
|
|
54
|
+
const orphan = kind === "select" && value !== "" && !options.some((option) => option.value === value) ? value : void 0;
|
|
55
|
+
const control = kind === "info" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
56
|
+
className: "text-sm text-doom-text",
|
|
57
|
+
children: value || "-"
|
|
58
|
+
}) : kind === "toggle" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Switch, {
|
|
59
|
+
"data-testid": `settings-toggle-${field.id}`,
|
|
60
|
+
"aria-label": field.label,
|
|
61
|
+
checked: value === "true",
|
|
62
|
+
disabled: busy || locked !== void 0,
|
|
63
|
+
onCheckedChange: (checked) => onDraft(field, String(checked))
|
|
64
|
+
}) : kind === "select" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.Select, {
|
|
65
|
+
value: value === "" ? INHERIT_VALUE : value,
|
|
66
|
+
disabled: busy || locked !== void 0,
|
|
67
|
+
onValueChange: (next) => onDraft(field, next === INHERIT_VALUE ? null : next),
|
|
68
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectTrigger, {
|
|
69
|
+
"data-testid": `settings-select-${field.id}`,
|
|
70
|
+
"aria-label": field.label,
|
|
71
|
+
className: "w-full text-sm sm:w-64",
|
|
72
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectValue, { placeholder: field.placeholder ?? "Inherit" })
|
|
73
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SelectContent, { children: [
|
|
74
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectItem, {
|
|
75
|
+
value: INHERIT_VALUE,
|
|
76
|
+
children: field.placeholder ?? "Inherit"
|
|
77
|
+
}),
|
|
78
|
+
orphan === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SelectItem, {
|
|
79
|
+
value: orphan,
|
|
80
|
+
children: [orphan, " · not in catalog"]
|
|
81
|
+
}),
|
|
82
|
+
groups.map((group) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SelectGroup, { children: [group === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectLabel, { children: group }), options.filter((option) => (option.group ?? "") === group).map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SelectItem, {
|
|
83
|
+
value: option.value,
|
|
84
|
+
children: option.label
|
|
85
|
+
}, option.value))] }, group))
|
|
86
|
+
] })]
|
|
87
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Input, {
|
|
88
|
+
"data-testid": `settings-input-${field.id}`,
|
|
89
|
+
"aria-label": field.label,
|
|
90
|
+
value,
|
|
91
|
+
type: kind === "number" ? "number" : "text",
|
|
92
|
+
spellCheck: false,
|
|
93
|
+
disabled: busy || locked !== void 0,
|
|
94
|
+
placeholder: field.placeholder ?? "Inherit",
|
|
95
|
+
onChange: (event) => onDraft(field, event.target.value === "" ? null : event.target.value),
|
|
96
|
+
className: "w-full text-sm sm:w-64"
|
|
97
|
+
});
|
|
98
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRow, {
|
|
99
|
+
"data-testid": `settings-field-${field.id}`,
|
|
100
|
+
"data-dirty": dirty,
|
|
101
|
+
changed: kind !== "info" && view?.origin === scope,
|
|
102
|
+
className: "items-start",
|
|
103
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowText, {
|
|
104
|
+
className: "gap-1",
|
|
105
|
+
children: [
|
|
106
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowTitle, {
|
|
107
|
+
className: "flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1",
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
110
|
+
className: "inline-block min-w-0 first-letter:uppercase",
|
|
111
|
+
children: field.label
|
|
112
|
+
}),
|
|
113
|
+
view === void 0 || kind === "info" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Origin, {
|
|
114
|
+
origin: view.origin,
|
|
115
|
+
scope
|
|
116
|
+
}),
|
|
117
|
+
locked === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
118
|
+
"data-testid": `settings-locked-${field.id}`,
|
|
119
|
+
className: "inline-flex items-center gap-1 text-sm font-normal text-doom-dim",
|
|
120
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.LockIcon, {
|
|
121
|
+
"aria-hidden": true,
|
|
122
|
+
className: "size-3"
|
|
123
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
124
|
+
className: "inline-block first-letter:uppercase",
|
|
125
|
+
children: locked
|
|
126
|
+
})]
|
|
127
|
+
}),
|
|
128
|
+
dirty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Badge, {
|
|
129
|
+
tone: "cyan",
|
|
130
|
+
"data-testid": `settings-dirty-${field.id}`,
|
|
131
|
+
className: "shrink-0",
|
|
132
|
+
children: "Unsaved"
|
|
133
|
+
}) : null,
|
|
134
|
+
dirty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
135
|
+
variant: "ghost",
|
|
136
|
+
size: "xs",
|
|
137
|
+
"data-testid": `settings-revert-${field.id}`,
|
|
138
|
+
disabled: busy,
|
|
139
|
+
onClick: () => onDraft(field, void 0),
|
|
140
|
+
className: "text-doom-dim",
|
|
141
|
+
children: "Revert"
|
|
142
|
+
}) : kind !== "info" && view?.origin === scope && locked === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
143
|
+
variant: "ghost",
|
|
144
|
+
size: "xs",
|
|
145
|
+
"data-testid": `settings-clear-${field.id}`,
|
|
146
|
+
disabled: busy,
|
|
147
|
+
onClick: () => onDraft(field, null),
|
|
148
|
+
className: "text-doom-dim",
|
|
149
|
+
children: "Reset"
|
|
150
|
+
}) : null
|
|
151
|
+
]
|
|
152
|
+
}),
|
|
153
|
+
field.detail === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowDescription, { children: field.detail }),
|
|
154
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
|
|
155
|
+
className: "min-w-0 max-w-full break-all font-mono text-sm text-doom-dim",
|
|
156
|
+
children: require_settingsDraft.settingsKeyOf(field)
|
|
157
|
+
})
|
|
158
|
+
]
|
|
159
|
+
}), control]
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
function ContributedSettings({ section, scope, repoRoot = "", workspaceId }) {
|
|
163
|
+
const [models, setModels] = (0, react.useState)([]);
|
|
164
|
+
const target = (0, react.useMemo)(() => ({
|
|
165
|
+
section,
|
|
166
|
+
scope,
|
|
167
|
+
repoRoot,
|
|
168
|
+
workspaceId
|
|
169
|
+
}), [
|
|
170
|
+
section,
|
|
171
|
+
scope,
|
|
172
|
+
repoRoot,
|
|
173
|
+
workspaceId
|
|
174
|
+
]);
|
|
175
|
+
const key = require_settingsDraftStore.settingsDraftKey(target);
|
|
176
|
+
const { config, drafts, error, note, busy } = (0, _tanstack_react_store.useStore)(require_settingsDraftStore.settingsDraftStore, (state) => state[key] ?? require_settingsDraftStore.EMPTY_SETTINGS_DRAFT);
|
|
177
|
+
const wantsModels = section.fields.some((field) => field.optionsFrom === "models");
|
|
178
|
+
const dirtyFields = section.fields.filter((field) => require_settingsDraft.settingsKeyOf(field) in drafts);
|
|
179
|
+
(0, react.useEffect)(() => {
|
|
180
|
+
if (wantsModels) require_settingsApi.listSettingsModels().then(setModels);
|
|
181
|
+
}, [wantsModels]);
|
|
182
|
+
(0, react.useEffect)(() => {
|
|
183
|
+
require_settingsDraftStore.loadSettingsDraft(target);
|
|
184
|
+
}, [target]);
|
|
185
|
+
const setDraft = (field, value) => require_settingsDraftStore.setSettingsDraft(target, field, value);
|
|
186
|
+
const save = () => require_settingsDraftStore.saveSettingsDraft(target);
|
|
187
|
+
const discard = () => require_settingsDraftStore.discardSettingsDraft(target);
|
|
188
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsPage, {
|
|
189
|
+
"data-testid": `settings-contributed-${section.id}`,
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsHeader, { children: [
|
|
192
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsTitle, { children: section.label }),
|
|
193
|
+
section.detail ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsDescription, { children: section.detail }) : null,
|
|
194
|
+
scope === "repository" && repoRoot === "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsNote, {
|
|
195
|
+
"data-testid": "settings-no-repositories",
|
|
196
|
+
children: "Pick a repository above to edit its config."
|
|
197
|
+
}) : null
|
|
198
|
+
] }),
|
|
199
|
+
error === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsCard, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsRowText, {
|
|
200
|
+
role: "alert",
|
|
201
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowTitle, { children: "Po couldn't load or save these settings" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsRowDescription, {
|
|
202
|
+
"data-testid": "settings-error",
|
|
203
|
+
className: "text-doom-red",
|
|
204
|
+
children: error
|
|
205
|
+
})]
|
|
206
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
207
|
+
size: "sm",
|
|
208
|
+
variant: "outline",
|
|
209
|
+
disabled: busy,
|
|
210
|
+
onClick: () => void require_settingsDraftStore.loadSettingsDraft(target),
|
|
211
|
+
children: "Reload configuration"
|
|
212
|
+
})] }) }),
|
|
213
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
214
|
+
className: "flex min-w-0 flex-col gap-4",
|
|
215
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsCard, { children: section.fields.map((field) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldRow, {
|
|
216
|
+
field,
|
|
217
|
+
view: config?.values[require_settingsDraft.settingsKeyOf(field)],
|
|
218
|
+
scope,
|
|
219
|
+
models,
|
|
220
|
+
draft: require_settingsDraft.settingsKeyOf(field) in drafts ? drafts[require_settingsDraft.settingsKeyOf(field)] : void 0,
|
|
221
|
+
busy,
|
|
222
|
+
onDraft: setDraft
|
|
223
|
+
}, field.id)) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_agimon_ai_po_web_components.SettingsActions, { children: [
|
|
224
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
225
|
+
variant: dirtyFields.length > 0 ? "primary" : "outline",
|
|
226
|
+
size: "sm",
|
|
227
|
+
"data-testid": "settings-save",
|
|
228
|
+
loading: busy,
|
|
229
|
+
disabled: busy || !require_settingsDraft.canSaveSettings({
|
|
230
|
+
dirty: dirtyFields.length,
|
|
231
|
+
scope,
|
|
232
|
+
repoRoot
|
|
233
|
+
}),
|
|
234
|
+
onClick: () => void save(),
|
|
235
|
+
children: "Save"
|
|
236
|
+
}),
|
|
237
|
+
dirtyFields.length === 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.Button, {
|
|
238
|
+
variant: "ghost",
|
|
239
|
+
size: "sm",
|
|
240
|
+
"data-testid": "settings-discard",
|
|
241
|
+
disabled: busy,
|
|
242
|
+
onClick: discard,
|
|
243
|
+
children: "Discard"
|
|
244
|
+
}),
|
|
245
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_agimon_ai_po_web_components.SettingsNote, {
|
|
246
|
+
"data-testid": "settings-save-note",
|
|
247
|
+
children: dirtyFields.length > 0 ? `${String(dirtyFields.length)} unsaved. Saves to ${scope === "global" ? "the global config" : "this repository"}.` : note
|
|
248
|
+
})
|
|
249
|
+
] })]
|
|
250
|
+
})
|
|
251
|
+
]
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
//#endregion
|
|
255
|
+
exports.ContributedSettings = ContributedSettings;
|
|
256
|
+
|
|
257
|
+
//# sourceMappingURL=ContributedSettings.cjs.map
|