@parhelia/core 0.1.12485 → 0.1.12515
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-view/AgentCard.js +22 -20
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsInbox.js +2 -13
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsView.js +9 -56
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +14 -16
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.js +2 -1
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/components/ui/copy-button.d.ts +2 -1
- package/dist/components/ui/copy-button.js +2 -2
- package/dist/components/ui/copy-button.js.map +1 -1
- package/dist/components/ui/input.js +1 -1
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/paste-button.d.ts +2 -1
- package/dist/components/ui/paste-button.js +2 -2
- package/dist/components/ui/paste-button.js.map +1 -1
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/components/ui/tabs.js +4 -11
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/config/config.js +73 -8
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +30 -5
- package/dist/config/types.js.map +1 -1
- package/dist/editor/ContentTree.js +36 -4
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/FieldHistory.js +49 -31
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldListField.js +4 -4
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +23 -2
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +1 -1
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/ItemInfo.js +36 -1
- package/dist/editor/ItemInfo.js.map +1 -1
- package/dist/editor/MainLayout.d.ts +0 -2
- package/dist/editor/MainLayout.js +0 -1
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/Titlebar.js +2 -2
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/ai/AgentDocumentList.js +32 -14
- package/dist/editor/ai/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/AgentGreeting.js +3 -2
- package/dist/editor/ai/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +2 -1
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +0 -5
- package/dist/editor/ai/AgentStatusBadge.js +57 -71
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +585 -248
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/Agents.js +33 -88
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.js +3 -4
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +17 -11
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.js +4 -8
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/MediaImage.js +40 -8
- package/dist/editor/ai/MediaImage.js.map +1 -1
- package/dist/editor/ai/SpawnedAgentsPanel.js +10 -12
- package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
- package/dist/editor/ai/ToolCallDisplay.js +156 -64
- package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/agentDiagnostics.js +1 -3
- package/dist/editor/ai/agentDiagnostics.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +1 -8
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +89 -12
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +62 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js +2 -0
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/dialogs/browserBoundCapture.d.ts +29 -0
- package/dist/editor/ai/dialogs/browserBoundCapture.js +117 -0
- package/dist/editor/ai/dialogs/browserBoundCapture.js.map +1 -0
- package/dist/editor/ai/dialogs/capturePageDom.d.ts +3 -0
- package/dist/editor/ai/dialogs/capturePageDom.js +64 -0
- package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -0
- package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +3 -0
- package/dist/editor/ai/dialogs/capturePageScreenshot.js +446 -0
- package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -0
- package/dist/editor/ai/useAgentStatus.js +23 -85
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/client/EditorShell.js +88 -100
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +8 -16
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/hooks/useEditorUrlSync.js +1 -2
- package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.js +56 -44
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +19 -6
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.js +10 -6
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/operations.js +15 -3
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +1 -1
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.d.ts +0 -4
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/client/waitForEditOperationTerminal.d.ts +8 -3
- package/dist/editor/client/waitForEditOperationTerminal.js +5 -1
- package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +3 -49
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/customCommandConverter.js +2 -1
- package/dist/editor/commands/customCommandConverter.js.map +1 -1
- package/dist/editor/commands/handlers/agentHandler.js +2 -1
- package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
- package/dist/editor/commands/itemCommands.js +5 -0
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/content-tree/IndicatorSettings.d.ts +11 -0
- package/dist/editor/content-tree/IndicatorSettings.js +60 -0
- package/dist/editor/content-tree/IndicatorSettings.js.map +1 -0
- package/dist/editor/content-tree/TreeOptions.d.ts +6 -0
- package/dist/editor/content-tree/TreeOptions.js +8 -0
- package/dist/editor/content-tree/TreeOptions.js.map +1 -0
- package/dist/editor/content-tree/TreeSettingsMenu.d.ts +2 -0
- package/dist/editor/content-tree/TreeSettingsMenu.js +30 -0
- package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -0
- package/dist/editor/hooks/useNavigationPanelLogic.js +2 -6
- package/dist/editor/hooks/useNavigationPanelLogic.js.map +1 -1
- package/dist/editor/manualActionEvents.d.ts +8 -0
- package/dist/editor/manualActionEvents.js +48 -0
- package/dist/editor/manualActionEvents.js.map +1 -0
- package/dist/editor/menubar/PageSelector.js +9 -12
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +23 -23
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +3 -9
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +225 -71
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/notifications/WatchButton.js +2 -2
- package/dist/editor/notifications/WatchButton.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +11 -11
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +2 -0
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +8 -2
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +21 -8
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +107 -49
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
- package/dist/editor/page-viewer/pageViewContext.d.ts +1 -0
- package/dist/editor/page-viewer/pageViewContext.js +51 -14
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +1 -3
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DiffView.js +7 -14
- package/dist/editor/reviews/DiffView.js.map +1 -1
- package/dist/editor/reviews/useMultiReview.js +2 -2
- package/dist/editor/reviews/useMultiReview.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +34 -3
- package/dist/editor/services/agentService.js +107 -72
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/agentStatus.d.ts +12 -0
- package/dist/editor/services/agentStatus.js +59 -0
- package/dist/editor/services/agentStatus.js.map +1 -0
- package/dist/editor/services/aiService.d.ts +3 -1
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/indexService.js +1 -1
- package/dist/editor/services/indexService.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +22 -20
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/Status.js +5 -4
- package/dist/editor/settings/Status.js.map +1 -1
- package/dist/editor/settings/index/useIndexStatus.js +20 -22
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.d.ts +7 -0
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +48 -0
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -0
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.d.ts +2 -1
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +2 -2
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.d.ts +12 -0
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +46 -0
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -0
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.d.ts +9 -0
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +34 -0
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/JavaScriptToolsPanel.d.ts +2 -0
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js +285 -0
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -0
- package/dist/editor/settings/panels/ModelConfigPanel.d.ts +2 -1
- package/dist/editor/settings/panels/ModelConfigPanel.js +88 -7
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +129 -70
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.d.ts +1 -4
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +3 -3
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +78 -22
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.d.ts +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +40 -55
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +1 -0
- package/dist/editor/settings/panels/index.js +1 -0
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/settings/status/coreStatusChecks.js +28 -17
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +2 -1
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +210 -49
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/EditHistory.js +3 -38
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- package/dist/editor/sidebar/MainContentTree.js +4 -3
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/MorePanelsButton.js +1 -1
- package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
- package/dist/editor/sidebar/NavigationPanelItem.js +3 -6
- package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.js +20 -4
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/SidebarStack.js +1 -0
- package/dist/editor/sidebar/SidebarStack.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +53 -3
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.d.ts +3 -1
- package/dist/editor/tree-indicators/GutterColumns.js +4 -3
- package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
- package/dist/editor/tree-indicators/GutterContext.d.ts +4 -0
- package/dist/editor/tree-indicators/GutterContext.js +23 -0
- package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
- package/dist/editor/tree-indicators/index.d.ts +0 -1
- package/dist/editor/tree-indicators/index.js +0 -1
- package/dist/editor/tree-indicators/index.js.map +1 -1
- package/dist/editor/tree-indicators/types.d.ts +2 -1
- package/dist/editor/ui/HomeButton.js +1 -1
- package/dist/editor/ui/HomeButton.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.d.ts +2 -0
- package/dist/editor/ui/ItemNameDialogNew.js +17 -7
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/ItemSearch.js +7 -11
- package/dist/editor/ui/ItemSearch.js.map +1 -1
- package/dist/editor/ui/SimpleTabs.js +33 -16
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.js +1 -1
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/views/CompareView.js +3 -1
- package/dist/editor/views/CompareView.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +2 -2
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ParheliaView.js +5 -6
- package/dist/editor/views/ParheliaView.js.map +1 -1
- package/dist/editor/views/SingleEditView.js +2 -0
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/editor/views/editorSlotContext.js +35 -6
- package/dist/editor/views/editorSlotContext.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/sanitize.d.ts +10 -0
- package/dist/lib/sanitize.js +40 -0
- package/dist/lib/sanitize.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +28 -0
- package/dist/setup/services/setupWizardService.js +34 -0
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +12 -3
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +3 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/NewPage.js +24 -24
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +29 -10
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/AssignAgentDialog.js +0 -8
- package/dist/task-board/components/AssignAgentDialog.js.map +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js +5 -12
- package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
- package/dist/task-board/components/ProjectAgentsPanel.js +2 -27
- package/dist/task-board/components/ProjectAgentsPanel.js.map +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js +2 -2
- package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.js +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.js +2 -6
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +1 -1
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
- package/dist/task-board/taskAgentLink.js +1 -3
- package/dist/task-board/taskAgentLink.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.js +19 -1
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/tour/Tour.js +10 -4
- package/dist/tour/Tour.js.map +1 -1
- package/dist/tour/default-tour.js +51 -11
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/types.d.ts +4 -13
- package/package.json +4 -1
- package/dist/editor/ComponentInfo.d.ts +0 -4
- package/dist/editor/ComponentInfo.js +0 -41
- package/dist/editor/ComponentInfo.js.map +0 -1
- package/dist/editor/tree-indicators/GutterSelector.d.ts +0 -5
- package/dist/editor/tree-indicators/GutterSelector.js +0 -91
- package/dist/editor/tree-indicators/GutterSelector.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowButton.js","sourceRoot":"","sources":["../../../src/editor/menubar/WorkflowButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,IAAI,CAAC,WAAW,EAAE,qBAAqB;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,WAAW,EAAE,IAAI,EAAE,oBAAoB;QAAE,OAAO,IAAI,CAAC;IAEzD,qEAAqE;IACrE,MAAM,kBAAkB,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,CACvD,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,EAAE,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,IAAI,EAAE,QAAQ;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,IAAI,EAAE,OAAO,CAClD,CAAC;IAEF,8CAA8C;IAC9C,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkflowButton.js","sourceRoot":"","sources":["../../../src/editor/menubar/WorkflowButton.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export function EditControls({ hideSuggestions, hideEdit, hidePreview, } = {}) {
|
|
|
10
10
|
const suggestionsCount = editContext.suggestedEdits?.filter((x) => x.status === "pending").length ||
|
|
11
11
|
0;
|
|
12
12
|
const totalCount = suggestionsCount;
|
|
13
|
-
return (_jsxs(_Fragment, { children: [!hideEdit && !editContext.user?.isLimitedPreviewUser && (_jsx(SimpleIconButton, { icon: _jsx(Pencil, { className: "h-6 w-6 p-1", strokeWidth: 1 }), label: "Edit", size: "large", "data-testid": "edit-mode-button", selected: editContext.mode === "edit", onClick: () => editContext.setMode("edit") })), !hidePreview && (_jsx(SimpleIconButton, { icon: _jsx(EyeIcon, { className: "h-6 w-6 p-1", strokeWidth: 1 }), label: "Preview", size: "large", "data-testid": "preview-mode-button", selected: editContext.mode === "preview", onClick: () => editContext.setMode("preview") })), !hideSuggestions && (_jsx(SimpleIconButton, { className: "relative", selected: editContext?.mode === "suggestions", icon: _jsx(Lightbulb, { strokeWidth: 1, className: "h-6 w-6 p-1" }), label: "Write suggestions", size: "large", "data-testid": "suggestions-mode-button", onClick: () => {
|
|
13
|
+
return (_jsxs(_Fragment, { children: [!hideEdit && !editContext.user?.isLimitedPreviewUser && (_jsx(SimpleIconButton, { icon: _jsx(Pencil, { className: "h-6 w-6 p-1", strokeWidth: 1 }), label: "Edit", size: "large", "data-testid": "edit-mode-button", selected: editContext.mode === "edit", onClick: () => editContext.setMode("edit") })), !hidePreview && (_jsx(SimpleIconButton, { icon: _jsx(EyeIcon, { className: "h-6 w-6 p-1", strokeWidth: 1 }), label: "Preview", showTooltip: false, size: "large", "data-testid": "preview-mode-button", selected: editContext.mode === "preview", onClick: () => editContext.setMode("preview") })), !hideSuggestions && (_jsx(SimpleIconButton, { className: "relative", selected: editContext?.mode === "suggestions", icon: _jsx(Lightbulb, { strokeWidth: 1, className: "h-6 w-6 p-1" }), label: "Write suggestions", size: "large", "data-testid": "suggestions-mode-button", onClick: () => {
|
|
14
14
|
editContext?.setMode("suggestions");
|
|
15
15
|
editContext?.openSidebar("feedback");
|
|
16
16
|
}, children: totalCount > 0 && (_jsx("div", { className: "bg-theme-secondary absolute -top-1 -right-1 h-4 min-w-[16px] rounded-full px-1 text-center text-[10px] font-bold leading-4 text-white tabular-nums", style: { paddingBottom: "1px" }, "data-affects-toolbar-height": true, children: totalCount > 99 ? "99+" : totalCount })) }))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditControls.js","sourceRoot":"","sources":["../../../../src/editor/menubar/toolbar-sections/EditControls.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,MAAM,UAAU,YAAY,CAAC,EAC3B,eAAe,EACf,QAAQ,EACR,WAAW,MACU,EAAE;IACvB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,oDAAoD;IAEpD,MAAM,gBAAgB,GACpB,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACxE,CAAC,CAAC;IACJ,MAAM,UAAU,GAAG,gBAAgB,CAAC;IAEpC,OAAO,CACL,8BACG,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,IAAI,CACvD,KAAC,gBAAgB,IACf,IAAI,EAAE,KAAC,MAAM,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,CAAC,GAAI,EACxD,KAAK,EAAC,MAAM,EACZ,IAAI,EAAC,OAAO,iBACA,kBAAkB,EAC9B,QAAQ,EAAE,WAAW,CAAC,IAAI,KAAK,MAAM,EACrC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAC1C,CACH,EAEA,CAAC,WAAW,IAAI,CACf,KAAC,gBAAgB,IACf,IAAI,EAAE,KAAC,OAAO,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,CAAC,GAAI,EACzD,KAAK,EAAC,SAAS,EACf,IAAI,EAAC,OAAO,iBACA,qBAAqB,EACjC,QAAQ,EAAE,WAAW,CAAC,IAAI,KAAK,SAAS,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,GAC7C,CACH,EAEA,CAAC,eAAe,IAAI,CACnB,KAAC,gBAAgB,IACf,SAAS,EAAC,UAAU,EACpB,QAAQ,EAAE,WAAW,EAAE,IAAI,KAAK,aAAa,EAC7C,IAAI,EAAE,KAAC,SAAS,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,aAAa,GAAG,EAC3D,KAAK,EAAC,mBAAmB,EACzB,IAAI,EAAC,OAAO,iBACA,yBAAyB,EACrC,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBACpC,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC,YAEA,UAAU,GAAG,CAAC,IAAI,CACjB,cACE,SAAS,EAAC,oJAAoJ,EAC9J,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,iDAG9B,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GACjC,CACP,GACgB,CACpB,IACA,CACJ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"EditControls.js","sourceRoot":"","sources":["../../../../src/editor/menubar/toolbar-sections/EditControls.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,MAAM,UAAU,YAAY,CAAC,EAC3B,eAAe,EACf,QAAQ,EACR,WAAW,MACU,EAAE;IACvB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,oDAAoD;IAEpD,MAAM,gBAAgB,GACpB,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACxE,CAAC,CAAC;IACJ,MAAM,UAAU,GAAG,gBAAgB,CAAC;IAEpC,OAAO,CACL,8BACG,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,IAAI,CACvD,KAAC,gBAAgB,IACf,IAAI,EAAE,KAAC,MAAM,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,CAAC,GAAI,EACxD,KAAK,EAAC,MAAM,EACZ,IAAI,EAAC,OAAO,iBACA,kBAAkB,EAC9B,QAAQ,EAAE,WAAW,CAAC,IAAI,KAAK,MAAM,EACrC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAC1C,CACH,EAEA,CAAC,WAAW,IAAI,CACf,KAAC,gBAAgB,IACf,IAAI,EAAE,KAAC,OAAO,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,CAAC,GAAI,EACzD,KAAK,EAAC,SAAS,EACf,WAAW,EAAE,KAAK,EAClB,IAAI,EAAC,OAAO,iBACA,qBAAqB,EACjC,QAAQ,EAAE,WAAW,CAAC,IAAI,KAAK,SAAS,EACxC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,GAC7C,CACH,EAEA,CAAC,eAAe,IAAI,CACnB,KAAC,gBAAgB,IACf,SAAS,EAAC,UAAU,EACpB,QAAQ,EAAE,WAAW,EAAE,IAAI,KAAK,aAAa,EAC7C,IAAI,EAAE,KAAC,SAAS,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,aAAa,GAAG,EAC3D,KAAK,EAAC,mBAAmB,EACzB,IAAI,EAAC,OAAO,iBACA,yBAAyB,EACrC,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBACpC,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC,YAEA,UAAU,GAAG,CAAC,IAAI,CACjB,cACE,SAAS,EAAC,oJAAoJ,EAC9J,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,iDAG9B,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GACjC,CACP,GACgB,CACpB,IACA,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
selector: string;
|
|
4
|
-
description: string;
|
|
5
|
-
notFoundMessage?: string;
|
|
6
|
-
location?: string;
|
|
7
|
-
isSidebarOnly?: boolean;
|
|
8
|
-
};
|
|
1
|
+
import type { ManualSelectorDefinition } from "../../../config/types";
|
|
2
|
+
export type ParsedUiSelector = ManualSelectorDefinition;
|
|
9
3
|
export declare function parseUiSelectors(uiSelectors: string | undefined): Map<string, ParsedUiSelector>;
|
|
10
4
|
export declare function expandSelector(selectorShorthand: string): string;
|
|
11
|
-
export declare function highlightElement(selector: string, duration?: number): void
|
|
5
|
+
export declare function highlightElement(selector: string, duration?: number): Promise<void>;
|
|
12
6
|
export declare function ManualBrowser({ onClose }: {
|
|
13
7
|
onClose?: () => void;
|
|
14
8
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import React, { useState, useEffect, useCallback, useMemo, useRef, } from "react";
|
|
3
|
-
import { Book, Loader2, Edit, ArrowLeft, ArrowRight, ChevronRight, LocateFixed, X, } from "lucide-react";
|
|
3
|
+
import { Book, BookOpen, Loader2, Edit, ArrowLeft, ArrowRight, ChevronRight, LocateFixed, Rocket, FileEdit, X, } from "lucide-react";
|
|
4
4
|
import { loadManualToc, loadManualSection, invalidateManualSectionCache, } from "../../services/aiService";
|
|
5
5
|
import { executeSearch } from "../../services/searchService";
|
|
6
6
|
import { FilterInput } from "../../../components/FilterInput";
|
|
7
|
-
import { MarkdownDisplay } from "../../../components/MarkdownDisplay";
|
|
7
|
+
import { MarkdownDisplay, } from "../../../components/MarkdownDisplay";
|
|
8
8
|
import { Tooltip, TooltipTrigger, TooltipContent, } from "../../../components/ui/tooltip";
|
|
9
9
|
import { useEditContext } from "../../client/editContext";
|
|
10
10
|
import { cn } from "../../../lib/utils";
|
|
11
|
+
const HIGHLIGHT_DURATION_MS = 2000;
|
|
12
|
+
const manualMarkdownComponents = {
|
|
13
|
+
h1: ({ children }) => (_jsx("h1", { className: "mt-4 mb-0 text-xl font-bold text-gray-900", children: children })),
|
|
14
|
+
h2: ({ children }) => (_jsx("h2", { className: "mt-3 mb-0 text-lg font-semibold text-gray-800", children: children })),
|
|
15
|
+
h3: ({ children }) => (_jsx("h3", { className: "mt-2 mb-0 text-base font-semibold text-gray-700", children: children })),
|
|
16
|
+
h4: ({ children }) => (_jsx("h4", { className: "mt-2 mb-0 text-sm font-semibold text-gray-700", children: children })),
|
|
17
|
+
};
|
|
11
18
|
// Parse the uiSelectors field
|
|
12
19
|
// Formats:
|
|
13
20
|
// - @selector-name: Description | Not found message
|
|
@@ -16,7 +23,10 @@ export function parseUiSelectors(uiSelectors) {
|
|
|
16
23
|
const map = new Map();
|
|
17
24
|
if (!uiSelectors)
|
|
18
25
|
return map;
|
|
19
|
-
const lines = uiSelectors
|
|
26
|
+
const lines = uiSelectors
|
|
27
|
+
.split(/\r?\n/)
|
|
28
|
+
.map((line) => line.trim())
|
|
29
|
+
.filter(Boolean);
|
|
20
30
|
for (const line of lines) {
|
|
21
31
|
// Format: @selector-name: ...
|
|
22
32
|
const match = line.match(/^@([\w\-]+):\s*(.+)$/);
|
|
@@ -25,10 +35,34 @@ export function parseUiSelectors(uiSelectors) {
|
|
|
25
35
|
const rest = match[2];
|
|
26
36
|
if (!name || !rest)
|
|
27
37
|
continue;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
const segments = rest
|
|
39
|
+
.split("|")
|
|
40
|
+
.map((segment) => segment.trim())
|
|
41
|
+
.filter(Boolean);
|
|
42
|
+
const description = segments.shift() ?? "";
|
|
43
|
+
let notFoundMessage;
|
|
44
|
+
let beforeAction;
|
|
45
|
+
let afterAction;
|
|
46
|
+
let availabilitySelector;
|
|
47
|
+
for (const segment of segments) {
|
|
48
|
+
if (segment.startsWith("beforeAction=")) {
|
|
49
|
+
beforeAction = segment.substring("beforeAction=".length).trim();
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (segment.startsWith("afterAction=")) {
|
|
53
|
+
afterAction = segment.substring("afterAction=".length).trim();
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (segment.startsWith("availabilitySelector=")) {
|
|
57
|
+
availabilitySelector = segment
|
|
58
|
+
.substring("availabilitySelector=".length)
|
|
59
|
+
.trim();
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (!notFoundMessage) {
|
|
63
|
+
notFoundMessage = segment;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
32
66
|
// Check if this is a sidebar-only selector (e.g., @reviews-sidebar)
|
|
33
67
|
// These end with -sidebar
|
|
34
68
|
const isSidebarOnly = name.endsWith("-sidebar");
|
|
@@ -39,10 +73,13 @@ export function parseUiSelectors(uiSelectors) {
|
|
|
39
73
|
const parsed = {
|
|
40
74
|
name,
|
|
41
75
|
selector: isSidebarOnly ? "" : `@${name}`, // Empty selector for sidebar-only
|
|
76
|
+
availabilitySelector,
|
|
42
77
|
description,
|
|
43
78
|
notFoundMessage: notFoundMessage || undefined,
|
|
44
79
|
location: isSidebarOnly ? sidebarId : undefined, // Use actual sidebar ID (without -sidebar suffix) for sidebar-only
|
|
45
80
|
isSidebarOnly,
|
|
81
|
+
beforeAction,
|
|
82
|
+
afterAction,
|
|
46
83
|
};
|
|
47
84
|
// Primary key remains the selector name
|
|
48
85
|
map.set(name, parsed);
|
|
@@ -96,60 +133,95 @@ export function expandSelector(selectorShorthand) {
|
|
|
96
133
|
// Default: data-testid selector: @name → [data-testid="name"]
|
|
97
134
|
return `[data-testid="${selector}"]`;
|
|
98
135
|
}
|
|
99
|
-
|
|
100
|
-
export function highlightElement(selector, duration = 2000) {
|
|
101
|
-
const scrollDelayMs = 220;
|
|
136
|
+
function getElementsForSelector(selector) {
|
|
102
137
|
const cssSelector = expandSelector(selector);
|
|
103
|
-
// Handle iframe selectors
|
|
104
138
|
if (cssSelector.startsWith("iframe:")) {
|
|
105
139
|
const iframeSelector = cssSelector.substring(7);
|
|
106
140
|
const iframe = document.querySelector("iframe.page-iframe");
|
|
107
|
-
if (iframe?.contentDocument) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
141
|
+
if (!iframe?.contentDocument) {
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
return Array.from(iframe.contentDocument.querySelectorAll(iframeSelector));
|
|
145
|
+
}
|
|
146
|
+
return Array.from(document.querySelectorAll(cssSelector));
|
|
147
|
+
}
|
|
148
|
+
function shouldSkipHighlightScroll(element) {
|
|
149
|
+
const rect = element.getBoundingClientRect();
|
|
150
|
+
const computedStyle = window.getComputedStyle(element);
|
|
151
|
+
const viewportPadding = 24;
|
|
152
|
+
const isFixedLike = computedStyle.position === "fixed" || computedStyle.position === "sticky";
|
|
153
|
+
const isFullyVisible = rect.top >= viewportPadding &&
|
|
154
|
+
rect.bottom <= window.innerHeight - viewportPadding &&
|
|
155
|
+
rect.left >= 0 &&
|
|
156
|
+
rect.right <= window.innerWidth;
|
|
157
|
+
const isLargeTarget = rect.height >= window.innerHeight * 0.6;
|
|
158
|
+
return isFixedLike || isFullyVisible || isLargeTarget;
|
|
159
|
+
}
|
|
160
|
+
function waitForNextFrame() {
|
|
161
|
+
return new Promise((resolve) => {
|
|
162
|
+
window.requestAnimationFrame(() => resolve());
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
async function waitForScrollToFinish(element) {
|
|
166
|
+
let stableFrames = 0;
|
|
167
|
+
let previousRect = element.getBoundingClientRect();
|
|
168
|
+
for (let frame = 0; frame < 30; frame++) {
|
|
169
|
+
await waitForNextFrame();
|
|
170
|
+
const currentRect = element.getBoundingClientRect();
|
|
171
|
+
const moved = Math.abs(currentRect.top - previousRect.top) > 0.5 ||
|
|
172
|
+
Math.abs(currentRect.left - previousRect.left) > 0.5;
|
|
173
|
+
if (moved) {
|
|
174
|
+
stableFrames = 0;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
stableFrames += 1;
|
|
178
|
+
if (stableFrames >= 2) {
|
|
179
|
+
return;
|
|
123
180
|
}
|
|
124
181
|
}
|
|
125
|
-
|
|
182
|
+
previousRect = currentRect;
|
|
126
183
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (
|
|
130
|
-
|
|
131
|
-
elements[0]?.scrollIntoView({
|
|
132
|
-
behavior: "smooth",
|
|
133
|
-
block: "center",
|
|
134
|
-
inline: "center",
|
|
135
|
-
});
|
|
136
|
-
window.setTimeout(() => {
|
|
137
|
-
elements.forEach((element) => {
|
|
138
|
-
const rect = element.getBoundingClientRect();
|
|
139
|
-
showHighlightOverlay(rect.left, rect.top, rect.width, rect.height, duration);
|
|
140
|
-
});
|
|
141
|
-
}, scrollDelayMs);
|
|
184
|
+
}
|
|
185
|
+
async function scrollElementForHighlight(element) {
|
|
186
|
+
if (shouldSkipHighlightScroll(element)) {
|
|
187
|
+
return;
|
|
142
188
|
}
|
|
189
|
+
element.scrollIntoView({
|
|
190
|
+
behavior: "smooth",
|
|
191
|
+
block: "nearest",
|
|
192
|
+
inline: "nearest",
|
|
193
|
+
});
|
|
194
|
+
await waitForScrollToFinish(element);
|
|
143
195
|
}
|
|
144
|
-
//
|
|
145
|
-
function
|
|
196
|
+
// Highlight an element temporarily
|
|
197
|
+
export async function highlightElement(selector, duration = HIGHLIGHT_DURATION_MS) {
|
|
146
198
|
const cssSelector = expandSelector(selector);
|
|
199
|
+
const elements = getElementsForSelector(selector);
|
|
200
|
+
if (elements.length === 0)
|
|
201
|
+
return;
|
|
147
202
|
if (cssSelector.startsWith("iframe:")) {
|
|
148
|
-
const iframeSelector = cssSelector.substring(7);
|
|
149
203
|
const iframe = document.querySelector("iframe.page-iframe");
|
|
150
|
-
|
|
204
|
+
const iframeRect = iframe?.getBoundingClientRect();
|
|
205
|
+
if (elements[0]) {
|
|
206
|
+
await scrollElementForHighlight(elements[0]);
|
|
207
|
+
}
|
|
208
|
+
elements.forEach((element) => {
|
|
209
|
+
const elementRect = element.getBoundingClientRect();
|
|
210
|
+
showHighlightOverlay(elementRect.left + (iframeRect?.left ?? 0), elementRect.top + (iframeRect?.top ?? 0), elementRect.width, elementRect.height, duration);
|
|
211
|
+
});
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (elements[0]) {
|
|
215
|
+
await scrollElementForHighlight(elements[0]);
|
|
151
216
|
}
|
|
152
|
-
|
|
217
|
+
elements.forEach((element) => {
|
|
218
|
+
const rect = element.getBoundingClientRect();
|
|
219
|
+
showHighlightOverlay(rect.left, rect.top, rect.width, rect.height, duration);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
// Check if an element is currently available in the DOM
|
|
223
|
+
function isElementAvailable(selector) {
|
|
224
|
+
return getElementsForSelector(selector).length > 0;
|
|
153
225
|
}
|
|
154
226
|
// Create a temporary highlight overlay
|
|
155
227
|
function showHighlightOverlay(x, y, width, height, duration) {
|
|
@@ -205,6 +277,8 @@ function showHighlightOverlay(x, y, width, height, duration) {
|
|
|
205
277
|
// Button component for "Show me" functionality with availability detection
|
|
206
278
|
function SelectorButton({ selectorDef, keyProp, }) {
|
|
207
279
|
const editContext = useEditContext();
|
|
280
|
+
const manualActions = editContext?.configuration.editor.manualActions;
|
|
281
|
+
const availabilitySelector = selectorDef.availabilitySelector || selectorDef.selector;
|
|
208
282
|
// For sidebar-only selectors, we don't need to check for an element
|
|
209
283
|
const isSidebarOnly = selectorDef.isSidebarOnly;
|
|
210
284
|
// Initialize to true for sidebar-only, false otherwise to avoid hydration mismatch
|
|
@@ -212,9 +286,12 @@ function SelectorButton({ selectorDef, keyProp, }) {
|
|
|
212
286
|
const [isAvailable, setIsAvailable] = useState(isSidebarOnly ? true : false);
|
|
213
287
|
// Can open sidebar if: sidebar-only selector
|
|
214
288
|
const canAutoOpenSidebar = Boolean(isSidebarOnly && editContext?.openSidebar && selectorDef.location);
|
|
289
|
+
const hasBeforeAction = Boolean(selectorDef.beforeAction &&
|
|
290
|
+
manualActions?.[selectorDef.beforeAction] &&
|
|
291
|
+
editContext);
|
|
215
292
|
const isActionable = isSidebarOnly
|
|
216
|
-
? canAutoOpenSidebar
|
|
217
|
-
: isAvailable || canAutoOpenSidebar;
|
|
293
|
+
? canAutoOpenSidebar || hasBeforeAction
|
|
294
|
+
: isAvailable || canAutoOpenSidebar || hasBeforeAction;
|
|
218
295
|
// Monitor for element availability changes (skip for sidebar-only selectors)
|
|
219
296
|
useEffect(() => {
|
|
220
297
|
// Sidebar-only selectors are always "available" if openSidebar exists
|
|
@@ -223,10 +300,11 @@ function SelectorButton({ selectorDef, keyProp, }) {
|
|
|
223
300
|
return;
|
|
224
301
|
}
|
|
225
302
|
// Initial check
|
|
226
|
-
|
|
303
|
+
const initialAvailable = isElementAvailable(availabilitySelector);
|
|
304
|
+
setIsAvailable(initialAvailable);
|
|
227
305
|
// Set up MutationObserver to watch for DOM changes
|
|
228
306
|
const checkAvailability = () => {
|
|
229
|
-
const available = isElementAvailable(
|
|
307
|
+
const available = isElementAvailable(availabilitySelector);
|
|
230
308
|
setIsAvailable(available);
|
|
231
309
|
};
|
|
232
310
|
// Watch the main document for changes
|
|
@@ -256,13 +334,31 @@ function SelectorButton({ selectorDef, keyProp, }) {
|
|
|
256
334
|
iframeObserver?.disconnect();
|
|
257
335
|
clearInterval(intervalId);
|
|
258
336
|
};
|
|
259
|
-
}, [
|
|
260
|
-
const tooltipText =
|
|
337
|
+
}, [availabilitySelector, isSidebarOnly]);
|
|
338
|
+
const tooltipText = isActionable
|
|
261
339
|
? selectorDef.description
|
|
262
340
|
: selectorDef.notFoundMessage || selectorDef.description;
|
|
263
341
|
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { "aria-label": "Show me", onClick: async () => {
|
|
264
342
|
if (!isActionable)
|
|
265
343
|
return;
|
|
344
|
+
const runId = globalThis.crypto?.randomUUID?.() ??
|
|
345
|
+
`manual-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
346
|
+
const resolveElements = (selector = selectorDef.selector) => selector ? getElementsForSelector(selector) : [];
|
|
347
|
+
const runManualAction = async (actionName, elements) => {
|
|
348
|
+
if (!actionName || !editContext || !manualActions?.[actionName]) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
const action = manualActions[actionName];
|
|
352
|
+
const actionProps = {
|
|
353
|
+
editContext,
|
|
354
|
+
selectorDef,
|
|
355
|
+
duration: HIGHLIGHT_DURATION_MS,
|
|
356
|
+
runId,
|
|
357
|
+
elements,
|
|
358
|
+
resolveElements,
|
|
359
|
+
};
|
|
360
|
+
await action(actionProps);
|
|
361
|
+
};
|
|
266
362
|
// If this selector is sidebar-only, open the sidebar before highlighting.
|
|
267
363
|
// For sidebar-only selectors, location is the sidebar ID (without -sidebar suffix)
|
|
268
364
|
if (selectorDef.isSidebarOnly &&
|
|
@@ -276,10 +372,17 @@ function SelectorButton({ selectorDef, keyProp, }) {
|
|
|
276
372
|
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
277
373
|
}
|
|
278
374
|
}
|
|
375
|
+
const resolvedElements = !isSidebarOnly ? resolveElements() : [];
|
|
376
|
+
await runManualAction(selectorDef.beforeAction, resolvedElements);
|
|
279
377
|
// For sidebar-only selectors, we just open the sidebar (done above)
|
|
280
378
|
// For regular selectors, also highlight the element
|
|
281
379
|
if (!isSidebarOnly && selectorDef.selector) {
|
|
282
|
-
highlightElement(selectorDef.selector);
|
|
380
|
+
await highlightElement(selectorDef.selector, HIGHLIGHT_DURATION_MS);
|
|
381
|
+
}
|
|
382
|
+
if (selectorDef.afterAction) {
|
|
383
|
+
window.setTimeout(() => {
|
|
384
|
+
void runManualAction(selectorDef.afterAction, !isSidebarOnly ? resolveElements() : []);
|
|
385
|
+
}, HIGHLIGHT_DURATION_MS);
|
|
283
386
|
}
|
|
284
387
|
}, disabled: !isActionable, className: cn("inline-flex h-5 w-5 items-center justify-center rounded border transition-colors", isActionable
|
|
285
388
|
? "cursor-pointer border-blue-200 bg-blue-50 text-blue-700 hover:bg-blue-100"
|
|
@@ -288,7 +391,7 @@ function SelectorButton({ selectorDef, keyProp, }) {
|
|
|
288
391
|
// Render markdown content with clickable selectors
|
|
289
392
|
// Supports both {{selectorName}} syntax (looks up in uiSelectors) and legacy @selector syntax
|
|
290
393
|
function renderMarkdownWithSelectors(content, uiSelectors, manualLinkTargets, onManualLinkClick) {
|
|
291
|
-
return (_jsx(MarkdownDisplay, { source: content, renderInline: (line) => renderLineWithSelectors(line, uiSelectors, manualLinkTargets, onManualLinkClick) }));
|
|
394
|
+
return (_jsx(MarkdownDisplay, { source: content, className: "space-y-0", components: manualMarkdownComponents, renderInline: (line) => renderLineWithSelectors(line, uiSelectors, manualLinkTargets, onManualLinkClick) }));
|
|
292
395
|
}
|
|
293
396
|
// Render a line with clickable selectors and basic formatting
|
|
294
397
|
// Supports: {{selectorName}} for named selectors, @selector for legacy direct selectors, **bold** text
|
|
@@ -367,7 +470,9 @@ function renderInlineSelectorsAndFormatting(text, uiSelectors) {
|
|
|
367
470
|
// @selector match (legacy direct selector syntax) - create ad-hoc selector def
|
|
368
471
|
const selectorToken = match[5];
|
|
369
472
|
const parsed = parseSelectorToken(selectorToken);
|
|
370
|
-
const
|
|
473
|
+
const selectorName = selectorToken.replace(/^@/, "");
|
|
474
|
+
const registeredSelectorDef = uiSelectors.get(selectorName);
|
|
475
|
+
const effectiveSelectorDef = registeredSelectorDef ?? {
|
|
371
476
|
name: selectorToken,
|
|
372
477
|
selector: parsed.selector,
|
|
373
478
|
description: parsed.isSidebarOnly
|
|
@@ -379,7 +484,7 @@ function renderInlineSelectorsAndFormatting(text, uiSelectors) {
|
|
|
379
484
|
// Check if there's a closing paren after this selector
|
|
380
485
|
const afterMatch = match.index + match[0].length;
|
|
381
486
|
const hasCloseParen = text[afterMatch] === ")";
|
|
382
|
-
parts.push(_jsx(SelectorButton, { selectorDef:
|
|
487
|
+
parts.push(_jsx(SelectorButton, { selectorDef: effectiveSelectorDef, keyProp: match.index }, match.index));
|
|
383
488
|
// Skip the closing paren if present
|
|
384
489
|
if (hasCloseParen && hasOpenParen) {
|
|
385
490
|
lastIndex = afterMatch + 1;
|
|
@@ -417,13 +522,51 @@ function findNearestAncestor(path) {
|
|
|
417
522
|
return null;
|
|
418
523
|
return path[path.length - 2] ?? null;
|
|
419
524
|
}
|
|
525
|
+
const SECTION_THEMES = {
|
|
526
|
+
"getting started": {
|
|
527
|
+
icon: Rocket,
|
|
528
|
+
color: "text-emerald-600",
|
|
529
|
+
bg: "bg-emerald-50",
|
|
530
|
+
border: "border-emerald-100",
|
|
531
|
+
accent: "bg-emerald-500",
|
|
532
|
+
},
|
|
533
|
+
"page editing": {
|
|
534
|
+
icon: FileEdit,
|
|
535
|
+
color: "text-blue-600",
|
|
536
|
+
bg: "bg-blue-50",
|
|
537
|
+
border: "border-blue-100",
|
|
538
|
+
accent: "bg-blue-500",
|
|
539
|
+
},
|
|
540
|
+
};
|
|
541
|
+
const DEFAULT_THEME = {
|
|
542
|
+
icon: BookOpen,
|
|
543
|
+
color: "text-violet-600",
|
|
544
|
+
bg: "bg-violet-50",
|
|
545
|
+
border: "border-violet-100",
|
|
546
|
+
accent: "bg-violet-500",
|
|
547
|
+
};
|
|
548
|
+
function getSectionTheme(title) {
|
|
549
|
+
if (!title)
|
|
550
|
+
return DEFAULT_THEME;
|
|
551
|
+
return SECTION_THEMES[title.toLowerCase()] ?? DEFAULT_THEME;
|
|
552
|
+
}
|
|
553
|
+
function TocSectionCard({ section, onSelect, onToggleCollapse, isCollapsed, }) {
|
|
554
|
+
const theme = getSectionTheme(section.title);
|
|
555
|
+
const Icon = theme.icon;
|
|
556
|
+
const hasChildren = !!(section.children && section.children.length > 0);
|
|
557
|
+
return (_jsxs("div", { className: "group", children: [_jsx("button", { type: "button", onClick: () => onSelect(section.id), className: cn("w-full rounded-lg p-3 text-left transition-all", "bg-white hover:bg-gray-50/50"), children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: cn("flex h-9 w-9 shrink-0 items-center justify-center rounded-lg", theme.bg), children: _jsx(Icon, { className: cn("h-[18px] w-[18px]", theme.color), strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx("span", { className: "text-sm font-semibold text-gray-900", children: section.title || "Untitled" }) }), section.summary && (_jsx("p", { className: "mt-0.5 line-clamp-2 text-xs leading-relaxed text-gray-500", children: section.summary }))] })] }) }), hasChildren && (_jsxs("div", { className: "mt-1", children: [_jsxs("button", { type: "button", onClick: () => onToggleCollapse(section.id), className: "ml-[60px] flex w-fit items-center gap-1.5 rounded-md py-1 text-xs text-gray-400 transition-colors hover:text-gray-600", children: [_jsx(ChevronRight, { className: cn("h-3 w-3 shrink-0 transition-transform", !isCollapsed && "rotate-90") }), _jsx("span", { children: isCollapsed ? "Show articles" : "Hide articles" })] }), !isCollapsed && (_jsx("div", { className: "mt-0.5 ml-[60px] space-y-px border-l-2 border-gray-100 pl-3", children: section.children.map((child) => (_jsxs("button", { type: "button", onClick: () => onSelect(child.id), className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm text-gray-600 transition-colors hover:bg-gray-50 hover:text-gray-900", children: [_jsx("span", { className: cn("h-1.5 w-1.5 shrink-0 rounded-full", theme.accent, "opacity-40 transition-opacity group-hover:opacity-70") }), _jsx("span", { className: "truncate", children: child.title || "Untitled" })] }, child.id))) }))] }))] }));
|
|
558
|
+
}
|
|
420
559
|
function renderTocTree(sections, onSelect, onToggleCollapse, collapsedSectionIds, depth = 0) {
|
|
560
|
+
if (depth === 0) {
|
|
561
|
+
return (_jsx("div", { className: "space-y-3", children: sections.map((section) => {
|
|
562
|
+
const isCollapsed = collapsedSectionIds.has(section.id);
|
|
563
|
+
return (_jsx(TocSectionCard, { section: section, onSelect: onSelect, onToggleCollapse: onToggleCollapse, isCollapsed: isCollapsed }, section.id));
|
|
564
|
+
}) }));
|
|
565
|
+
}
|
|
421
566
|
return (_jsx("div", { className: cn(depth > 0 && "ml-3 border-l border-gray-100 pl-2"), children: sections.map((section) => {
|
|
422
567
|
const hasChildren = !!(section.children && section.children.length > 0);
|
|
423
568
|
const isCollapsed = hasChildren && collapsedSectionIds.has(section.id);
|
|
424
|
-
return (_jsxs("div", { className: "my-0.5", children: [_jsxs("div", { className: cn("group flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 transition-colors hover:bg-gray-50",
|
|
425
|
-
? "text-sm font-medium text-gray-800 hover:text-gray-900"
|
|
426
|
-
: "text-sm text-gray-500 hover:text-gray-700"), children: [hasChildren ? (_jsx("button", { type: "button", onClick: () => onToggleCollapse(section.id), className: "rounded p-0.5 text-gray-300 transition-colors hover:bg-gray-100 hover:text-gray-500", "aria-label": isCollapsed
|
|
569
|
+
return (_jsxs("div", { className: "my-0.5", children: [_jsxs("div", { className: cn("group flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 transition-colors hover:bg-gray-50", "text-sm text-gray-500 hover:text-gray-700"), children: [hasChildren ? (_jsx("button", { type: "button", onClick: () => onToggleCollapse(section.id), className: "rounded p-0.5 text-gray-300 transition-colors hover:bg-gray-100 hover:text-gray-500", "aria-label": isCollapsed
|
|
427
570
|
? `Expand ${section.title || "section"}`
|
|
428
571
|
: `Collapse ${section.title || "section"}`, title: isCollapsed ? "Expand section" : "Collapse section", children: _jsx(ChevronRight, { className: cn("h-3.5 w-3.5 shrink-0 transition-transform", !isCollapsed && "rotate-90") }) })) : (_jsx("span", { className: "h-3.5 w-3.5 shrink-0" })), _jsx("button", { type: "button", onClick: () => onSelect(section.id), className: "flex-1 text-left", children: section.title || "Untitled" })] }), hasChildren &&
|
|
429
572
|
!isCollapsed &&
|
|
@@ -444,7 +587,7 @@ const MANUAL_SECTION_TEMPLATE_ID = "c5f1e8a2-9b50-4fe2-9b6d-3db00c3b3b8a";
|
|
|
444
587
|
export function ManualBrowser({ onClose }) {
|
|
445
588
|
const editContext = useEditContext();
|
|
446
589
|
const [toc, setToc] = useState([]);
|
|
447
|
-
const
|
|
590
|
+
const selectedSectionId = editContext?.selectedHelpSectionId ?? null;
|
|
448
591
|
const [currentSection, setCurrentSection] = useState(null);
|
|
449
592
|
const [loadingToc, setLoadingToc] = useState(false);
|
|
450
593
|
const [loadingSection, setLoadingSection] = useState(false);
|
|
@@ -642,13 +785,13 @@ export function ManualBrowser({ onClose }) {
|
|
|
642
785
|
return removeListener;
|
|
643
786
|
}, [selectedSectionId]); // Only re-register when selectedSectionId changes, not when editContext object changes
|
|
644
787
|
const handleSelectSection = useCallback((id) => {
|
|
645
|
-
|
|
646
|
-
}, []);
|
|
788
|
+
editContext?.setSelectedHelpSectionId(id);
|
|
789
|
+
}, [editContext]);
|
|
647
790
|
const handleSelectSearchResult = useCallback((id) => {
|
|
648
|
-
|
|
791
|
+
editContext?.setSelectedHelpSectionId(id);
|
|
649
792
|
setSearchQuery("");
|
|
650
793
|
setSearchResults([]);
|
|
651
|
-
}, []);
|
|
794
|
+
}, [editContext]);
|
|
652
795
|
const handleToggleTocSection = useCallback((id) => {
|
|
653
796
|
setCollapsedTocSectionIds((prev) => {
|
|
654
797
|
const next = new Set(prev);
|
|
@@ -670,7 +813,7 @@ export function ManualBrowser({ onClose }) {
|
|
|
670
813
|
if (toc.length === 0) {
|
|
671
814
|
return (_jsxs("div", { className: "px-4 py-8 text-center text-sm text-gray-500", children: [_jsx(Book, { className: "mx-auto mb-2 h-8 w-8 text-gray-300" }), _jsx("p", { children: "No manual content available yet." })] }));
|
|
672
815
|
}
|
|
673
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "shrink-0 border-b border-gray-
|
|
816
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "shrink-0 border-b border-gray-200/60 bg-linear-to-b from-gray-50 to-white px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-lg bg-blue-50", children: _jsx(Book, { className: "h-4 w-4 text-blue-600", strokeWidth: 1.75 }) }), _jsx("h2", { className: "text-base font-semibold text-gray-900", children: "User Manual" })] }), onClose && (_jsx("button", { onClick: onClose, className: "shrink-0 rounded p-1 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-600", "aria-label": "Close", children: _jsx(X, { size: 16, strokeWidth: 1.5 }) }))] }), _jsx("div", { className: "mt-2", children: _jsx(FilterInput, { value: searchQuery, onChange: setSearchQuery, placeholder: "Search manual pages...", size: "xs", loading: searching }) }), searchQuery.trim().length > 0 && (_jsx("div", { className: "mt-2 max-h-52 overflow-y-auto rounded-lg border border-gray-200 bg-white shadow-sm", children: searching ? (_jsxs("div", { className: "flex items-center gap-2 px-3 py-3 text-xs text-gray-500", children: [_jsx(Loader2, { className: "h-3 w-3 animate-spin" }), "Searching manual..."] })) : searchResults.length > 0 ? (searchResults.map((section) => (_jsxs("button", { type: "button", onClick: () => handleSelectSearchResult(section.id), className: "group block w-full border-b border-gray-50 px-3 py-2.5 text-left transition-colors last:border-b-0 hover:bg-blue-50/50", children: [_jsx("span", { className: "block text-sm font-medium text-gray-900 transition-colors group-hover:text-blue-700", children: section.title || "Untitled" }), section.summary && (_jsx("span", { className: "mt-0.5 line-clamp-2 block text-xs leading-relaxed text-gray-500", children: section.summary }))] }, section.id)))) : (_jsx("div", { className: "px-3 py-3 text-center text-xs text-gray-500", children: "No manual pages matched your search." })) }))] }), _jsx("div", { className: "flex-1 overflow-y-auto p-4 select-text", children: loadingSection ? (_jsx("div", { className: "flex items-center justify-center py-8", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin text-gray-400" }) })) : !selectedSectionId ? (_jsx("div", { children: renderTocTree(toc, handleSelectSection, handleToggleTocSection, collapsedTocSectionIds) })) : currentSection ? (_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-start gap-1", children: [parentTocSection ? (_jsxs("button", { type: "button", onClick: () => handleSelectSection(parentTocSection.id), className: "inline-flex shrink-0 items-center gap-1 rounded px-2 py-1 text-sm text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-900", "aria-label": `Back to ${parentTocSection.title}`, title: `Back to ${parentTocSection.title}`, children: [_jsx(ArrowLeft, { className: "h-4 w-4" }), _jsx("span", { className: "hidden sm:inline", children: "Back" })] })) : (_jsxs("button", { type: "button", onClick: () => editContext?.setSelectedHelpSectionId(null), className: "inline-flex shrink-0 items-center gap-1 rounded px-2 py-1 text-sm text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-900", "aria-label": "Back to contents", title: "Back to contents", children: [_jsx(ArrowLeft, { className: "h-4 w-4" }), _jsx("span", { className: "hidden sm:inline", children: "Contents" })] })), _jsx("h2", { className: "ml-1 min-w-0 flex-1 text-xl font-bold text-gray-900", children: currentSection.title })] }), editContext?.user?.isAdministrator && editContext?.loadItem && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: async (e) => {
|
|
674
817
|
e.preventDefault();
|
|
675
818
|
e.stopPropagation();
|
|
676
819
|
if (!editContext?.loadItem) {
|
|
@@ -693,9 +836,20 @@ export function ManualBrowser({ onClose }) {
|
|
|
693
836
|
catch (error) {
|
|
694
837
|
console.error("Failed to load manual section:", error);
|
|
695
838
|
}
|
|
696
|
-
}, className: "shrink-0 rounded p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700", "aria-label": "Edit item", title: "Edit item", children: _jsx(Edit, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { children: "Edit item" })] }))] }), currentSection.summary &&
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
839
|
+
}, className: "shrink-0 rounded p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700", "aria-label": "Edit item", title: "Edit item", children: _jsx(Edit, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { children: "Edit item" })] }))] }), currentSection.summary &&
|
|
840
|
+
(() => {
|
|
841
|
+
const theme = parentTocSection
|
|
842
|
+
? getSectionTheme(parentTocSection.title)
|
|
843
|
+
: getSectionTheme(currentSection.title);
|
|
844
|
+
return (_jsx("p", { className: cn("my-4 mb-8 border-l-2 pl-3 text-sm text-gray-500 italic", theme.border), children: currentSection.summary }));
|
|
845
|
+
})(), _jsx("div", { className: "prose prose-sm max-w-none select-text", children: renderMarkdownWithSelectors(currentSection.content || "", parseUiSelectors(currentSection.uiSelectors), manualLinkTargets, handleSelectSection) }), currentSection.subsections &&
|
|
846
|
+
currentSection.subsections.length > 0 && (_jsxs("div", { className: "mt-8 border-t border-gray-100 pt-4", children: [_jsx("h3", { className: "mb-3 text-[11px] font-bold tracking-widest text-gray-400 uppercase", children: "In this section" }), _jsx("div", { className: "space-y-0.5", children: currentSection.subsections.map((subsection) => {
|
|
847
|
+
const theme = getSectionTheme(currentSection.title);
|
|
848
|
+
return (_jsxs("button", { onClick: () => handleSelectSection(subsection.id), className: "group flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-sm text-gray-600 transition-all hover:bg-gray-50 hover:text-gray-900", children: [_jsx("span", { className: cn("h-1.5 w-1.5 shrink-0 rounded-full transition-transform group-hover:scale-125", theme.accent, "opacity-50 group-hover:opacity-80") }), _jsx("span", { className: "flex-1 truncate font-medium", children: subsection.title }), _jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-gray-300 transition-colors group-hover:text-gray-500" })] }, subsection.id));
|
|
849
|
+
}) })] }))] })) : (_jsx("div", { className: "py-8 text-center text-sm text-gray-500", children: "Select a section to view its content" })) }), selectedSectionId &&
|
|
850
|
+
currentSection &&
|
|
851
|
+
(chapterNavigation.previous || chapterNavigation.next) && (_jsx("div", { className: "shrink-0 border-t border-gray-200/60 bg-white px-4 py-3", children: _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [chapterNavigation.previous ? (_jsxs("button", { type: "button", onClick: () => chapterNavigation.previous &&
|
|
852
|
+
handleSelectSection(chapterNavigation.previous.id), className: "group rounded-lg border border-gray-200 px-3 py-2 text-left transition-all hover:border-blue-200 hover:bg-blue-50/30", children: [_jsxs("span", { className: "mb-0.5 inline-flex items-center gap-1 text-xs font-medium text-gray-400 transition-colors group-hover:text-blue-500", children: [_jsx(ArrowLeft, { className: "h-3 w-3" }), "Previous"] }), _jsx("span", { className: "block truncate text-sm font-medium text-gray-700 transition-colors group-hover:text-gray-900", children: chapterNavigation.previous.title })] })) : (_jsx("div", {})), chapterNavigation.next ? (_jsxs("button", { type: "button", onClick: () => chapterNavigation.next &&
|
|
853
|
+
handleSelectSection(chapterNavigation.next.id), className: "group rounded-lg border border-gray-200 px-3 py-2 text-right transition-all hover:border-blue-200 hover:bg-blue-50/30", children: [_jsxs("span", { className: "mb-0.5 inline-flex items-center justify-end gap-1 text-xs font-medium text-gray-400 transition-colors group-hover:text-blue-500", children: ["Next", _jsx(ArrowRight, { className: "h-3 w-3" })] }), _jsx("span", { className: "block truncate text-sm font-medium text-gray-700 transition-colors group-hover:text-gray-900", children: chapterNavigation.next.title })] })) : (_jsx("div", {}))] }) }))] }));
|
|
700
854
|
}
|
|
701
855
|
//# sourceMappingURL=ManualBrowser.js.map
|