@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.
Files changed (310) hide show
  1. package/dist/agents-view/AgentCard.js +22 -20
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentsInbox.js +2 -13
  4. package/dist/agents-view/AgentsInbox.js.map +1 -1
  5. package/dist/agents-view/AgentsView.js +9 -56
  6. package/dist/agents-view/AgentsView.js.map +1 -1
  7. package/dist/agents-view/AgentsWorkspaceView.js +14 -16
  8. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  9. package/dist/agents-view/ProfileAgentsGroup.js +2 -1
  10. package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
  11. package/dist/components/ui/copy-button.d.ts +2 -1
  12. package/dist/components/ui/copy-button.js +2 -2
  13. package/dist/components/ui/copy-button.js.map +1 -1
  14. package/dist/components/ui/input.js +1 -1
  15. package/dist/components/ui/input.js.map +1 -1
  16. package/dist/components/ui/paste-button.d.ts +2 -1
  17. package/dist/components/ui/paste-button.js +2 -2
  18. package/dist/components/ui/paste-button.js.map +1 -1
  19. package/dist/components/ui/tabs.d.ts +1 -1
  20. package/dist/components/ui/tabs.js +4 -11
  21. package/dist/components/ui/tabs.js.map +1 -1
  22. package/dist/config/config.js +73 -8
  23. package/dist/config/config.js.map +1 -1
  24. package/dist/config/types.d.ts +30 -5
  25. package/dist/config/types.js.map +1 -1
  26. package/dist/editor/ContentTree.js +36 -4
  27. package/dist/editor/ContentTree.js.map +1 -1
  28. package/dist/editor/FieldHistory.js +49 -31
  29. package/dist/editor/FieldHistory.js.map +1 -1
  30. package/dist/editor/FieldListField.js +4 -4
  31. package/dist/editor/FieldListField.js.map +1 -1
  32. package/dist/editor/FieldListFieldWithFallbacks.js +23 -2
  33. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  34. package/dist/editor/GlobalMenuBar.js +1 -1
  35. package/dist/editor/GlobalMenuBar.js.map +1 -1
  36. package/dist/editor/ItemInfo.js +36 -1
  37. package/dist/editor/ItemInfo.js.map +1 -1
  38. package/dist/editor/MainLayout.d.ts +0 -2
  39. package/dist/editor/MainLayout.js +0 -1
  40. package/dist/editor/MainLayout.js.map +1 -1
  41. package/dist/editor/Titlebar.js +2 -2
  42. package/dist/editor/Titlebar.js.map +1 -1
  43. package/dist/editor/ai/AgentDocumentList.js +32 -14
  44. package/dist/editor/ai/AgentDocumentList.js.map +1 -1
  45. package/dist/editor/ai/AgentGreeting.js +3 -2
  46. package/dist/editor/ai/AgentGreeting.js.map +1 -1
  47. package/dist/editor/ai/AgentProfileSelector.js +2 -1
  48. package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
  49. package/dist/editor/ai/AgentStatusBadge.d.ts +0 -5
  50. package/dist/editor/ai/AgentStatusBadge.js +57 -71
  51. package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
  52. package/dist/editor/ai/AgentTerminal.js +585 -248
  53. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  54. package/dist/editor/ai/Agents.js +33 -88
  55. package/dist/editor/ai/Agents.js.map +1 -1
  56. package/dist/editor/ai/AiResponseMessage.js +3 -4
  57. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  58. package/dist/editor/ai/GuidanceOverlay.js +17 -11
  59. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  60. package/dist/editor/ai/InlineAiDialog.js +4 -8
  61. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  62. package/dist/editor/ai/MediaImage.js +40 -8
  63. package/dist/editor/ai/MediaImage.js.map +1 -1
  64. package/dist/editor/ai/SpawnedAgentsPanel.js +10 -12
  65. package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
  66. package/dist/editor/ai/ToolCallDisplay.js +156 -64
  67. package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
  68. package/dist/editor/ai/agentDiagnostics.js +1 -3
  69. package/dist/editor/ai/agentDiagnostics.js.map +1 -1
  70. package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +1 -8
  71. package/dist/editor/ai/dialogs/AgentDialogHandler.js +89 -12
  72. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  73. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +62 -0
  74. package/dist/editor/ai/dialogs/agentDialogTypes.js +2 -0
  75. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  76. package/dist/editor/ai/dialogs/browserBoundCapture.d.ts +29 -0
  77. package/dist/editor/ai/dialogs/browserBoundCapture.js +117 -0
  78. package/dist/editor/ai/dialogs/browserBoundCapture.js.map +1 -0
  79. package/dist/editor/ai/dialogs/capturePageDom.d.ts +3 -0
  80. package/dist/editor/ai/dialogs/capturePageDom.js +64 -0
  81. package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -0
  82. package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +3 -0
  83. package/dist/editor/ai/dialogs/capturePageScreenshot.js +446 -0
  84. package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -0
  85. package/dist/editor/ai/useAgentStatus.js +23 -85
  86. package/dist/editor/ai/useAgentStatus.js.map +1 -1
  87. package/dist/editor/client/EditorShell.js +88 -100
  88. package/dist/editor/client/EditorShell.js.map +1 -1
  89. package/dist/editor/client/editContext.d.ts +8 -16
  90. package/dist/editor/client/editContext.js.map +1 -1
  91. package/dist/editor/client/hooks/useEditorUrlSync.js +1 -2
  92. package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
  93. package/dist/editor/client/hooks/useEditorWebSocket.js +56 -44
  94. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  95. package/dist/editor/client/hooks/useSocketMessageHandler.js +19 -6
  96. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  97. package/dist/editor/client/itemsRepository.js +10 -6
  98. package/dist/editor/client/itemsRepository.js.map +1 -1
  99. package/dist/editor/client/operations.js +15 -3
  100. package/dist/editor/client/operations.js.map +1 -1
  101. package/dist/editor/client/pageModelBuilder.js +1 -1
  102. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  103. package/dist/editor/client/ui/EditorChrome.d.ts +0 -4
  104. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  105. package/dist/editor/client/waitForEditOperationTerminal.d.ts +8 -3
  106. package/dist/editor/client/waitForEditOperationTerminal.js +5 -1
  107. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
  108. package/dist/editor/commands/componentCommands.js +3 -49
  109. package/dist/editor/commands/componentCommands.js.map +1 -1
  110. package/dist/editor/commands/customCommandConverter.js +2 -1
  111. package/dist/editor/commands/customCommandConverter.js.map +1 -1
  112. package/dist/editor/commands/handlers/agentHandler.js +2 -1
  113. package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
  114. package/dist/editor/commands/itemCommands.js +5 -0
  115. package/dist/editor/commands/itemCommands.js.map +1 -1
  116. package/dist/editor/content-tree/IndicatorSettings.d.ts +11 -0
  117. package/dist/editor/content-tree/IndicatorSettings.js +60 -0
  118. package/dist/editor/content-tree/IndicatorSettings.js.map +1 -0
  119. package/dist/editor/content-tree/TreeOptions.d.ts +6 -0
  120. package/dist/editor/content-tree/TreeOptions.js +8 -0
  121. package/dist/editor/content-tree/TreeOptions.js.map +1 -0
  122. package/dist/editor/content-tree/TreeSettingsMenu.d.ts +2 -0
  123. package/dist/editor/content-tree/TreeSettingsMenu.js +30 -0
  124. package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -0
  125. package/dist/editor/hooks/useNavigationPanelLogic.js +2 -6
  126. package/dist/editor/hooks/useNavigationPanelLogic.js.map +1 -1
  127. package/dist/editor/manualActionEvents.d.ts +8 -0
  128. package/dist/editor/manualActionEvents.js +48 -0
  129. package/dist/editor/manualActionEvents.js.map +1 -0
  130. package/dist/editor/menubar/PageSelector.js +9 -12
  131. package/dist/editor/menubar/PageSelector.js.map +1 -1
  132. package/dist/editor/menubar/WorkflowButton.js +23 -23
  133. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  134. package/dist/editor/menubar/toolbar-sections/EditControls.js +1 -1
  135. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  136. package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +3 -9
  137. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +225 -71
  138. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  139. package/dist/editor/notifications/WatchButton.js +2 -2
  140. package/dist/editor/notifications/WatchButton.js.map +1 -1
  141. package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
  142. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  143. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +11 -11
  144. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  145. package/dist/editor/page-viewer/EditorForm.js +2 -0
  146. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  147. package/dist/editor/page-viewer/PageViewer.js +8 -2
  148. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  149. package/dist/editor/page-viewer/PageViewerFrame.js +21 -8
  150. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  151. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +107 -49
  152. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
  153. package/dist/editor/page-viewer/pageViewContext.d.ts +1 -0
  154. package/dist/editor/page-viewer/pageViewContext.js +51 -14
  155. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  156. package/dist/editor/reviews/CreateReviewDialog.js +1 -3
  157. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  158. package/dist/editor/reviews/DiffView.js +7 -14
  159. package/dist/editor/reviews/DiffView.js.map +1 -1
  160. package/dist/editor/reviews/useMultiReview.js +2 -2
  161. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  162. package/dist/editor/services/agentService.d.ts +34 -3
  163. package/dist/editor/services/agentService.js +107 -72
  164. package/dist/editor/services/agentService.js.map +1 -1
  165. package/dist/editor/services/agentStatus.d.ts +12 -0
  166. package/dist/editor/services/agentStatus.js +59 -0
  167. package/dist/editor/services/agentStatus.js.map +1 -0
  168. package/dist/editor/services/aiService.d.ts +3 -1
  169. package/dist/editor/services/aiService.js.map +1 -1
  170. package/dist/editor/services/indexService.js +1 -1
  171. package/dist/editor/services/indexService.js.map +1 -1
  172. package/dist/editor/settings/SettingsView.js +22 -20
  173. package/dist/editor/settings/SettingsView.js.map +1 -1
  174. package/dist/editor/settings/Status.js +5 -4
  175. package/dist/editor/settings/Status.js.map +1 -1
  176. package/dist/editor/settings/index/useIndexStatus.js +20 -22
  177. package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
  178. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.d.ts +7 -0
  179. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +48 -0
  180. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -0
  181. package/dist/editor/settings/panels/GroupedFieldConfigPanel.d.ts +2 -1
  182. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +2 -2
  183. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
  184. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.d.ts +12 -0
  185. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +46 -0
  186. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -0
  187. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.d.ts +9 -0
  188. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +34 -0
  189. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -0
  190. package/dist/editor/settings/panels/JavaScriptToolsPanel.d.ts +2 -0
  191. package/dist/editor/settings/panels/JavaScriptToolsPanel.js +285 -0
  192. package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -0
  193. package/dist/editor/settings/panels/ModelConfigPanel.d.ts +2 -1
  194. package/dist/editor/settings/panels/ModelConfigPanel.js +88 -7
  195. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
  196. package/dist/editor/settings/panels/ModelsPanel.js +129 -70
  197. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  198. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.d.ts +1 -4
  199. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +3 -3
  200. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
  201. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +78 -22
  202. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  203. package/dist/editor/settings/panels/ProvidersPanel.d.ts +1 -1
  204. package/dist/editor/settings/panels/ProvidersPanel.js +40 -55
  205. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  206. package/dist/editor/settings/panels/index.d.ts +1 -0
  207. package/dist/editor/settings/panels/index.js +1 -0
  208. package/dist/editor/settings/panels/index.js.map +1 -1
  209. package/dist/editor/settings/status/coreStatusChecks.js +28 -17
  210. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
  211. package/dist/editor/sidebar/ComponentPalette.js +2 -1
  212. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  213. package/dist/editor/sidebar/ComponentTree.js +210 -49
  214. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  215. package/dist/editor/sidebar/EditHistory.js +3 -38
  216. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  217. package/dist/editor/sidebar/MainContentTree.js +4 -3
  218. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  219. package/dist/editor/sidebar/MorePanelsButton.js +1 -1
  220. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  221. package/dist/editor/sidebar/NavigationPanelItem.js +3 -6
  222. package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
  223. package/dist/editor/sidebar/SidebarPanel.js +20 -4
  224. package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
  225. package/dist/editor/sidebar/SidebarStack.js +1 -0
  226. package/dist/editor/sidebar/SidebarStack.js.map +1 -1
  227. package/dist/editor/sidebar/Workbox.js +53 -3
  228. package/dist/editor/sidebar/Workbox.js.map +1 -1
  229. package/dist/editor/tree-indicators/GutterColumns.d.ts +3 -1
  230. package/dist/editor/tree-indicators/GutterColumns.js +4 -3
  231. package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
  232. package/dist/editor/tree-indicators/GutterContext.d.ts +4 -0
  233. package/dist/editor/tree-indicators/GutterContext.js +23 -0
  234. package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
  235. package/dist/editor/tree-indicators/index.d.ts +0 -1
  236. package/dist/editor/tree-indicators/index.js +0 -1
  237. package/dist/editor/tree-indicators/index.js.map +1 -1
  238. package/dist/editor/tree-indicators/types.d.ts +2 -1
  239. package/dist/editor/ui/HomeButton.js +1 -1
  240. package/dist/editor/ui/HomeButton.js.map +1 -1
  241. package/dist/editor/ui/ItemNameDialogNew.d.ts +2 -0
  242. package/dist/editor/ui/ItemNameDialogNew.js +17 -7
  243. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  244. package/dist/editor/ui/ItemSearch.js +7 -11
  245. package/dist/editor/ui/ItemSearch.js.map +1 -1
  246. package/dist/editor/ui/SimpleTabs.js +33 -16
  247. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  248. package/dist/editor/ui/Splitter.js +1 -1
  249. package/dist/editor/ui/Splitter.js.map +1 -1
  250. package/dist/editor/views/CompareView.js +3 -1
  251. package/dist/editor/views/CompareView.js.map +1 -1
  252. package/dist/editor/views/EditorSlot.js +2 -2
  253. package/dist/editor/views/EditorSlot.js.map +1 -1
  254. package/dist/editor/views/ParheliaView.js +5 -6
  255. package/dist/editor/views/ParheliaView.js.map +1 -1
  256. package/dist/editor/views/SingleEditView.js +2 -0
  257. package/dist/editor/views/SingleEditView.js.map +1 -1
  258. package/dist/editor/views/editorSlotContext.js +35 -6
  259. package/dist/editor/views/editorSlotContext.js.map +1 -1
  260. package/dist/index.d.ts +4 -1
  261. package/dist/index.js +1 -0
  262. package/dist/index.js.map +1 -1
  263. package/dist/lib/sanitize.d.ts +10 -0
  264. package/dist/lib/sanitize.js +40 -0
  265. package/dist/lib/sanitize.js.map +1 -0
  266. package/dist/revision.d.ts +2 -2
  267. package/dist/revision.js +2 -2
  268. package/dist/setup/services/setupWizardService.d.ts +28 -0
  269. package/dist/setup/services/setupWizardService.js +34 -0
  270. package/dist/setup/services/setupWizardService.js.map +1 -1
  271. package/dist/setup/wizard/steps/AddModelDialog.js +12 -3
  272. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
  273. package/dist/setup/wizard/steps/ImportModelDialog.js +3 -1
  274. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  275. package/dist/splash-screen/NewPage.js +24 -24
  276. package/dist/splash-screen/NewPage.js.map +1 -1
  277. package/dist/task-board/TaskBoardWorkspace.js +29 -10
  278. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  279. package/dist/task-board/components/AssignAgentDialog.js +0 -8
  280. package/dist/task-board/components/AssignAgentDialog.js.map +1 -1
  281. package/dist/task-board/components/ItemCollectionEditorDialog.js +5 -12
  282. package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
  283. package/dist/task-board/components/ProjectAgentsPanel.js +2 -27
  284. package/dist/task-board/components/ProjectAgentsPanel.js.map +1 -1
  285. package/dist/task-board/components/ProjectOverviewContent.js +2 -2
  286. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
  287. package/dist/task-board/components/ProjectPropertiesPanel.js +1 -1
  288. package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
  289. package/dist/task-board/components/TaskAgentPanel.js +2 -6
  290. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  291. package/dist/task-board/components/TaskDetailPanel.js +1 -1
  292. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  293. package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -1
  294. package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
  295. package/dist/task-board/taskAgentLink.js +1 -3
  296. package/dist/task-board/taskAgentLink.js.map +1 -1
  297. package/dist/task-board/views/DependencyGraphView.js +19 -1
  298. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  299. package/dist/tour/Tour.js +10 -4
  300. package/dist/tour/Tour.js.map +1 -1
  301. package/dist/tour/default-tour.js +51 -11
  302. package/dist/tour/default-tour.js.map +1 -1
  303. package/dist/types.d.ts +4 -13
  304. package/package.json +4 -1
  305. package/dist/editor/ComponentInfo.d.ts +0 -4
  306. package/dist/editor/ComponentInfo.js +0 -41
  307. package/dist/editor/ComponentInfo.js.map +0 -1
  308. package/dist/editor/tree-indicators/GutterSelector.d.ts +0 -5
  309. package/dist/editor/tree-indicators/GutterSelector.js +0 -91
  310. 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;IAC/B,CAAC;IAED,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,gBAAgB,IAAI,EAAE,CAAC;IAEpE,yDAAyD;IACzD,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,kBAAkB;YAAE,OAAO,iCAAiC,CAAC;QAElE,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,qBAAqB;QACrB,IAAI,kBAAkB,CAAC,aAAa,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,aAAa,kBAAkB,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,qCAAqC;QACrC,IAAI,kBAAkB,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB;gBACzD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBACxD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;oBACrC,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,IAAI,kBAAkB,CAAC,YAAY;YAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,kBAAkB,CAAC,aAAa;YAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,kBAAkB,CAAC,WAAW;YAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAElE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB;YACvC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iCAAiC,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,IAAI,KAAK,CAAC;IAEhD,sDAAsD;IACtD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,MAAM,EACN,kBAAkB,EAAE,YAAY;gCAC9B,iCAAiC,CACpC,iBACW,yBAAyB,EACrC,OAAO,EAAE,GAAG,EAAE;gCACZ,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gCAEnC,MAAM,WAAW,GACf,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAC5B,CAAC;gCAEJ,IAAI,WAAW;oCAAE,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;4BAClE,CAAC,YAED,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,GAAG,GAAI,GAChD,GACM,EACjB,KAAC,cAAc,cACb,cAAK,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,EAAE,GAAO,GACjD,IACT,CACX,CAAC;QACJ,CAAC;QACD,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,EAAE,CACX,MAAM,EACN,kBAAkB,EAAE,YAAY;4BAC9B,iCAAiC,CACpC,iBACW,yBAAyB,EACrC,OAAO,EAAE,GAAG,EAAE;4BACZ,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;4BAEnC,MAAM,WAAW,GAAG,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAC/D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAC5B,CAAC;4BAEF,IAAI,WAAW;gCAAE,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAClE,CAAC,6BAGM,GACM,EACjB,KAAC,cAAc,cACb,cAAK,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,EAAE,GAAO,GACjD,IACT,CACX,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,MAAM,EACN,kBAAkB,EAAE,YAAY;gCAC9B,iCAAiC,CACpC,iBACW,4BAA4B,EACxC,OAAO,EAAE,GAAG,EAAE;gCACZ,WAAW,CAAC,UAAU,CAAC,sBAAsB,CAC3C,WAAW,CAAC,qBAAsB,EAClC,OAAO,CAAC,EAAE,CACX,CAAC;4BACJ,CAAC,YAED,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,GAAG,GAAI,GAChD,GACM,EACjB,KAAC,cAAc,cACb,cAAK,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,EAAE,GAAO,GACjD,IACT,CACX,CAAC;QACJ,CAAC;QACD,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,EAAE,CACX,MAAM,EACN,kBAAkB,EAAE,YAAY;4BAC9B,iCAAiC,CACpC,iBACW,4BAA4B,EACxC,OAAO,EAAE,GAAG,EAAE;4BACZ,WAAW,CAAC,UAAU,CAAC,sBAAsB,CAC3C,WAAW,CAAC,qBAAsB,EAClC,OAAO,CAAC,EAAE,CACX,CAAC;wBACJ,CAAC,YAEA,OAAO,CAAC,IAAI,GACN,GACM,EACjB,KAAC,cAAc,cACb,cAAK,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,EAAE,GAAO,GACjD,IACT,CACX,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,MAAC,YAAY,eACX,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,MAAM,EACN,kBAAkB,EAAE,YAAY;wCAC9B,iCAAiC,CACpC,iBACW,wCAAwC,YAEpD,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,EAAC,WAAW,EAAE,GAAG,GAAI,GAChD,GACW,GACP,EACjB,KAAC,cAAc,cACb,cAAK,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,EAAE,GAAO,GACjD,IACT,EACV,KAAC,mBAAmB,cACjB,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACjC,KAAC,gBAAgB,IAEf,OAAO,EAAE,GAAG,EAAE;4BACZ,WAAW,CAAC,UAAU,CAAC,sBAAsB,CAC3C,WAAW,CAAC,qBAAsB,EAClC,OAAO,CAAC,EAAE,CACX,CAAC;wBACJ,CAAC,YAEA,OAAO,CAAC,IAAI,IARR,OAAO,CAAC,EAAE,CASE,CACpB,CAAC,GACkB,IACT,CAChB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,MAAM,aACnB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,EAAE,CACX,4BAA4B,EAC5B,kBAAkB,EAAE,YAAY;gCAC9B,iCAAiC,CACpC,iBACW,+BAA+B,EAC3C,OAAO,EAAE,GAAG,EAAE;gCACZ,WAAW,CAAC,UAAU,CAAC,sBAAsB,CAC3C,WAAW,CAAC,qBAAsB,EAClC,YAAY,CAAC,EAAE,CAChB,CAAC;4BACJ,CAAC,YAEA,YAAY,CAAC,IAAI,GACX,GACM,EACjB,KAAC,cAAc,cACb,cAAK,SAAS,EAAC,qBAAqB,YAAE,iBAAiB,EAAE,GAAO,GACjD,IACT,EACV,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,EAAE,CACX,kCAAkC,EAClC,kBAAkB,EAAE,YAAY;gCAC9B,iCAAiC,CACpC,iBACW,wCAAwC,YAEpD,cACE,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,gBAAgB,GAClB,GACE,GACC,GACW,EACtB,KAAC,mBAAmB,cACjB,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACjC,KAAC,gBAAgB,IAEf,OAAO,EAAE,GAAG,EAAE;gCACZ,WAAW,CAAC,UAAU,CAAC,sBAAsB,CAC3C,WAAW,CAAC,qBAAsB,EAClC,OAAO,CAAC,EAAE,CACX,CAAC;4BACJ,CAAC,YAEA,OAAO,CAAC,IAAI,IARR,OAAO,CAAC,EAAE,CASE,CACpB,CAAC,GACkB,IACT,IACX,CACP,CAAC;AACJ,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
- export type ParsedUiSelector = {
2
- name: string;
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.split("\n").filter((line) => line.trim());
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
- // Split by | for optional not-found message
29
- const pipeIndex = rest.indexOf("|");
30
- const description = pipeIndex >= 0 ? rest.substring(0, pipeIndex).trim() : rest.trim();
31
- const notFoundMessage = pipeIndex >= 0 ? rest.substring(pipeIndex + 1).trim() : undefined;
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
- // Highlight an element temporarily
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
- const elements = iframe.contentDocument.querySelectorAll(iframeSelector);
109
- if (elements.length > 0) {
110
- const iframeRect = iframe.getBoundingClientRect();
111
- // Scroll first so highlighted bounds are measured after the viewport settles.
112
- elements[0]?.scrollIntoView({
113
- behavior: "smooth",
114
- block: "center",
115
- inline: "center",
116
- });
117
- window.setTimeout(() => {
118
- elements.forEach((element) => {
119
- const elementRect = element.getBoundingClientRect();
120
- showHighlightOverlay(elementRect.left + iframeRect.left, elementRect.top + iframeRect.top, elementRect.width, elementRect.height, duration);
121
- });
122
- }, scrollDelayMs);
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
- return;
182
+ previousRect = currentRect;
126
183
  }
127
- // Regular selectors - highlight all matching elements
128
- const elements = document.querySelectorAll(cssSelector);
129
- if (elements.length > 0) {
130
- // Scroll first so highlighted bounds are measured after the viewport settles.
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
- // Check if an element is currently available in the DOM
145
- function isElementAvailable(selector) {
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
- return !!iframe?.contentDocument?.querySelector(iframeSelector);
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
- return !!document.querySelector(cssSelector);
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
- setIsAvailable(isElementAvailable(selectorDef.selector));
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(selectorDef.selector);
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
- }, [selectorDef.selector, isSidebarOnly]);
260
- const tooltipText = isAvailable
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 adHocSelectorDef = {
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: adHocSelectorDef, keyProp: match.index }, match.index));
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", depth === 0
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 [selectedSectionId, setSelectedSectionId] = useState(null);
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
- setSelectedSectionId(id);
646
- }, []);
788
+ editContext?.setSelectedHelpSectionId(id);
789
+ }, [editContext]);
647
790
  const handleSelectSearchResult = useCallback((id) => {
648
- setSelectedSectionId(id);
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-100 bg-gray-50 px-4 py-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_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-44 overflow-y-auto rounded-md border border-gray-200 bg-white", children: searching ? (_jsx("div", { className: "px-3 py-2 text-xs text-gray-500", children: "Searching manual..." })) : searchResults.length > 0 ? (searchResults.map((section) => (_jsxs("button", { type: "button", onClick: () => handleSelectSearchResult(section.id), className: "block w-full border-b border-gray-100 px-3 py-2 text-left transition-colors last:border-b-0 hover:bg-gray-50", children: [_jsx("span", { className: "block text-sm font-medium text-gray-900", children: section.title || "Untitled" }), section.summary && (_jsx("span", { className: "mt-0.5 line-clamp-2 block text-xs text-gray-500", children: section.summary }))] }, section.id)))) : (_jsx("div", { className: "px-3 py-2 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: () => setSelectedSectionId(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) => {
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 && (_jsx("p", { className: "my-4 mb-8 border-l-2 border-blue-100 pl-3 text-sm text-gray-500 italic", children: currentSection.summary })), _jsx("div", { className: "prose prose-sm max-w-none select-text", children: renderMarkdownWithSelectors(currentSection.content || "", parseUiSelectors(currentSection.uiSelectors), manualLinkTargets, handleSelectSection) }), currentSection.subsections &&
697
- 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: "Subsections" }), _jsx("div", { className: "space-y-1", children: currentSection.subsections.map((subsection) => (_jsxs("button", { onClick: () => handleSelectSection(subsection.id), className: "group 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-blue-600", children: [_jsx(ChevronRight, { className: "h-3.5 w-3.5 text-gray-300 transition-colors group-hover:text-blue-400" }), _jsx("span", { className: "flex-1 truncate font-medium", children: subsection.title })] }, subsection.id))) })] })), (chapterNavigation.previous || chapterNavigation.next) && (_jsx("div", { className: "mt-6 border-t border-gray-200 pt-4", children: _jsxs("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-2", children: [chapterNavigation.previous ? (_jsxs("button", { type: "button", onClick: () => chapterNavigation.previous &&
698
- handleSelectSection(chapterNavigation.previous.id), className: "group rounded-md border border-gray-200 p-3 text-left transition-colors hover:border-gray-300 hover:bg-gray-50", children: [_jsxs("span", { className: "mb-1 inline-flex items-center gap-1 text-xs font-medium text-gray-500", children: [_jsx(ArrowLeft, { className: "h-3.5 w-3.5" }), "Previous chapter"] }), _jsx("span", { className: "block text-sm font-medium text-gray-800 group-hover:text-gray-900", children: chapterNavigation.previous.title })] })) : (_jsx("div", { className: "hidden sm:block" })), chapterNavigation.next ? (_jsxs("button", { type: "button", onClick: () => chapterNavigation.next &&
699
- handleSelectSection(chapterNavigation.next.id), className: "group rounded-md border border-gray-200 p-3 text-left transition-colors hover:border-gray-300 hover:bg-gray-50 sm:text-right", children: [_jsxs("span", { className: "mb-1 inline-flex items-center gap-1 text-xs font-medium text-gray-500 sm:justify-end", children: ["Next chapter", _jsx(ArrowRight, { className: "h-3.5 w-3.5" })] }), _jsx("span", { className: "block text-sm font-medium text-gray-800 group-hover:text-gray-900", children: chapterNavigation.next.title })] })) : (_jsx("div", { className: "hidden sm:block" }))] }) }))] })) : (_jsx("div", { className: "py-8 text-center text-sm text-gray-500", children: "Select a section to view its content" })) })] }));
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