@parhelia/core 0.1.12901 → 0.1.12903

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 (352) hide show
  1. package/dist/agents-view/AgentsWorkspaceView.js +40 -5
  2. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  3. package/dist/components/ui/button.js +1 -1
  4. package/dist/components/ui/button.js.map +1 -1
  5. package/dist/components/ui/context-menu.d.ts +2 -2
  6. package/dist/components/ui/context-menu.js +64 -7
  7. package/dist/components/ui/context-menu.js.map +1 -1
  8. package/dist/components/ui/dialog.d.ts +2 -2
  9. package/dist/components/ui/dialog.js +27 -5
  10. package/dist/components/ui/dialog.js.map +1 -1
  11. package/dist/config/config.js +83 -3
  12. package/dist/config/config.js.map +1 -1
  13. package/dist/editor/AspectRatioSelector.js +27 -24
  14. package/dist/editor/AspectRatioSelector.js.map +1 -1
  15. package/dist/editor/ConcurrentUserLimitDialog.js +1 -1
  16. package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
  17. package/dist/editor/ConfirmationDialog.js +6 -4
  18. package/dist/editor/ConfirmationDialog.js.map +1 -1
  19. package/dist/editor/ContentTree.js +4 -3
  20. package/dist/editor/ContentTree.js.map +1 -1
  21. package/dist/editor/EditorWarning.js +1 -1
  22. package/dist/editor/EditorWarning.js.map +1 -1
  23. package/dist/editor/FieldListField.js +12 -8
  24. package/dist/editor/FieldListField.js.map +1 -1
  25. package/dist/editor/PictureCropper.js +73 -37
  26. package/dist/editor/PictureCropper.js.map +1 -1
  27. package/dist/editor/SetupWizard.js +14 -12
  28. package/dist/editor/SetupWizard.js.map +1 -1
  29. package/dist/editor/WorkspaceTitleSwitcher.js +1 -1
  30. package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -1
  31. package/dist/editor/ai/Agents.js +19 -3
  32. package/dist/editor/ai/Agents.js.map +1 -1
  33. package/dist/editor/ai/dialogs/AgentDialogHandler.js +87 -9
  34. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  35. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +18 -0
  36. package/dist/editor/ai/dialogs/agentDialogTypes.js +5 -0
  37. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  38. package/dist/editor/ai/dialogs/browserBoundCapture.d.ts +6 -9
  39. package/dist/editor/ai/dialogs/browserBoundCapture.js +17 -25
  40. package/dist/editor/ai/dialogs/browserBoundCapture.js.map +1 -1
  41. package/dist/editor/ai/dialogs/capturePageDom.js +2 -18
  42. package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -1
  43. package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +27 -1
  44. package/dist/editor/ai/dialogs/capturePageScreenshot.js +11 -24
  45. package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
  46. package/dist/editor/ai/dialogs/captureShared.d.ts +10 -0
  47. package/dist/editor/ai/dialogs/captureShared.js +39 -0
  48. package/dist/editor/ai/dialogs/captureShared.js.map +1 -0
  49. package/dist/editor/ai/dialogs/offscreenPageCapture.d.ts +44 -0
  50. package/dist/editor/ai/dialogs/offscreenPageCapture.js +300 -0
  51. package/dist/editor/ai/dialogs/offscreenPageCapture.js.map +1 -0
  52. package/dist/editor/ai/terminal/agentContextMerge.d.ts +2 -7
  53. package/dist/editor/ai/terminal/agentContextMerge.js +33 -10
  54. package/dist/editor/ai/terminal/agentContextMerge.js.map +1 -1
  55. package/dist/editor/ai/terminal/agentSessionState.d.ts +28 -0
  56. package/dist/editor/ai/terminal/agentSessionState.js +63 -3
  57. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  58. package/dist/editor/ai/terminal/components/AgentContextItemPicker.d.ts +11 -0
  59. package/dist/editor/ai/terminal/components/AgentContextItemPicker.js +81 -0
  60. package/dist/editor/ai/terminal/components/AgentContextItemPicker.js.map +1 -0
  61. package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
  62. package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
  63. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +3 -1
  64. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +40 -25
  65. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  66. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.d.ts +16 -0
  67. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js +41 -0
  68. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js.map +1 -0
  69. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +1 -3
  70. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js +2 -2
  71. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
  72. package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.d.ts +3 -0
  73. package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.js.map +1 -1
  74. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +10 -5
  75. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +3 -3
  76. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  77. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.d.ts +1 -3
  78. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -2
  79. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  80. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -5
  81. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -2
  82. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  83. package/dist/editor/ai/terminal/components/AgentTerminalView.js +3 -2
  84. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  85. package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +1 -11
  86. package/dist/editor/ai/terminal/components/AiResponseMessage.js +42 -5
  87. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  88. package/dist/editor/ai/terminal/components/ContextInfoBar.d.ts +4 -1
  89. package/dist/editor/ai/terminal/components/ContextInfoBar.js +69 -35
  90. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  91. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +14 -11
  92. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +13 -71
  93. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  94. package/dist/editor/ai/terminal/components/UserMessage.js +104 -58
  95. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  96. package/dist/editor/ai/terminal/components/toolCallApprovalGate.d.ts +21 -0
  97. package/dist/editor/ai/terminal/components/toolCallApprovalGate.js +32 -0
  98. package/dist/editor/ai/terminal/components/toolCallApprovalGate.js.map +1 -0
  99. package/dist/editor/ai/terminal/types.d.ts +1 -3
  100. package/dist/editor/ai/terminal/useAgentEditorContext.d.ts +2 -6
  101. package/dist/editor/ai/terminal/useAgentEditorContext.js +41 -10
  102. package/dist/editor/ai/terminal/useAgentEditorContext.js.map +1 -1
  103. package/dist/editor/ai/terminal/useAgentInitialPrompt.js +4 -1
  104. package/dist/editor/ai/terminal/useAgentInitialPrompt.js.map +1 -1
  105. package/dist/editor/ai/terminal/useAgentLoadErrorHandler.d.ts +3 -0
  106. package/dist/editor/ai/terminal/useAgentLoadErrorHandler.js +7 -5
  107. package/dist/editor/ai/terminal/useAgentLoadErrorHandler.js.map +1 -1
  108. package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +1 -0
  109. package/dist/editor/ai/terminal/useAgentLoadPipeline.js +3 -1
  110. package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
  111. package/dist/editor/ai/terminal/useAgentLoader.js +4 -1
  112. package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
  113. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js +3 -3
  114. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js.map +1 -1
  115. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.d.ts +0 -2
  116. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +4 -9
  117. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  118. package/dist/editor/ai/terminal/useAgentSession.d.ts +0 -1
  119. package/dist/editor/ai/terminal/useAgentSession.js +0 -5
  120. package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
  121. package/dist/editor/ai/terminal/useAgentSessionCommandBindings.d.ts +0 -2
  122. package/dist/editor/ai/terminal/useAgentSessionCommandBindings.js +1 -5
  123. package/dist/editor/ai/terminal/useAgentSessionCommandBindings.js.map +1 -1
  124. package/dist/editor/ai/terminal/useAgentSessionFacade.d.ts +0 -2
  125. package/dist/editor/ai/terminal/useAgentSessionFacade.js +0 -3
  126. package/dist/editor/ai/terminal/useAgentSessionFacade.js.map +1 -1
  127. package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +1 -6
  128. package/dist/editor/ai/terminal/useAgentSessionSync.js +1 -14
  129. package/dist/editor/ai/terminal/useAgentSessionSync.js.map +1 -1
  130. package/dist/editor/ai/terminal/useAgentSettingsPanel.js +2 -0
  131. package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
  132. package/dist/editor/ai/terminal/useAgentSkillActions.d.ts +2 -0
  133. package/dist/editor/ai/terminal/useAgentSkillActions.js +10 -4
  134. package/dist/editor/ai/terminal/useAgentSkillActions.js.map +1 -1
  135. package/dist/editor/ai/terminal/useAgentSocketMessageRouter.d.ts +1 -0
  136. package/dist/editor/ai/terminal/useAgentSocketMessageRouter.js +6 -1
  137. package/dist/editor/ai/terminal/useAgentSocketMessageRouter.js.map +1 -1
  138. package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +2 -2
  139. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +7 -3
  140. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  141. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.d.ts +4 -0
  142. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js +48 -6
  143. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js.map +1 -1
  144. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +2 -0
  145. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +7 -1
  146. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  147. package/dist/editor/ai/terminal/useAgentSuggestionSocketHandler.d.ts +25 -0
  148. package/dist/editor/ai/terminal/useAgentSuggestionSocketHandler.js +35 -0
  149. package/dist/editor/ai/terminal/useAgentSuggestionSocketHandler.js.map +1 -0
  150. package/dist/editor/ai/terminal/useAgentTerminalChrome.d.ts +3 -0
  151. package/dist/editor/ai/terminal/useAgentTerminalChrome.js +2 -2
  152. package/dist/editor/ai/terminal/useAgentTerminalChrome.js.map +1 -1
  153. package/dist/editor/ai/terminal/useAgentTerminalController.d.ts +1 -1
  154. package/dist/editor/ai/terminal/useAgentTerminalController.js +65 -26
  155. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  156. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -1
  157. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  158. package/dist/editor/ai/terminal/useAgentToolResultHandler.d.ts +6 -0
  159. package/dist/editor/ai/terminal/useAgentToolResultHandler.js +18 -1
  160. package/dist/editor/ai/terminal/useAgentToolResultHandler.js.map +1 -1
  161. package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js +3 -1
  162. package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js.map +1 -1
  163. package/dist/editor/ai/useAgentPanes.d.ts +1 -1
  164. package/dist/editor/ai/useAgentPanes.js +25 -3
  165. package/dist/editor/ai/useAgentPanes.js.map +1 -1
  166. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +107 -16
  167. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  168. package/dist/editor/bridge/protocol.d.ts +4 -0
  169. package/dist/editor/bridge/protocol.js.map +1 -1
  170. package/dist/editor/client/EditorShell.d.ts +0 -10
  171. package/dist/editor/client/EditorShell.js +17 -5
  172. package/dist/editor/client/EditorShell.js.map +1 -1
  173. package/dist/editor/client/editContext.d.ts +19 -2
  174. package/dist/editor/client/editContext.js.map +1 -1
  175. package/dist/editor/client/hooks/useSocketMessageHandler.js +0 -20
  176. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  177. package/dist/editor/client/operations.d.ts +4 -2
  178. package/dist/editor/client/operations.js +106 -33
  179. package/dist/editor/client/operations.js.map +1 -1
  180. package/dist/editor/field-types/AttachmentEditor.js +42 -4
  181. package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
  182. package/dist/editor/media-selector/MediaFolderBrowser.js +142 -32
  183. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  184. package/dist/editor/media-selector/Preview.d.ts +2 -1
  185. package/dist/editor/media-selector/Preview.js +45 -2
  186. package/dist/editor/media-selector/Preview.js.map +1 -1
  187. package/dist/editor/media-selector/Thumbnails.d.ts +5 -1
  188. package/dist/editor/media-selector/Thumbnails.js +72 -11
  189. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  190. package/dist/editor/media-selector/TreeSelector.js +130 -22
  191. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  192. package/dist/editor/media-selector/UploadZone.d.ts +2 -1
  193. package/dist/editor/media-selector/UploadZone.js +7 -15
  194. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  195. package/dist/editor/media-selector/mediaFileType.d.ts +12 -0
  196. package/dist/editor/media-selector/mediaFileType.js +95 -0
  197. package/dist/editor/media-selector/mediaFileType.js.map +1 -0
  198. package/dist/editor/media-selector/mediaSelectionPath.d.ts +5 -0
  199. package/dist/editor/media-selector/mediaSelectionPath.js +21 -0
  200. package/dist/editor/media-selector/mediaSelectionPath.js.map +1 -0
  201. package/dist/editor/media-selector/mediaUpload.d.ts +30 -0
  202. package/dist/editor/media-selector/mediaUpload.js +155 -0
  203. package/dist/editor/media-selector/mediaUpload.js.map +1 -0
  204. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +52 -29
  205. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
  206. package/dist/editor/page-editor-chrome/ComponentOperationBubble.d.ts +8 -0
  207. package/dist/editor/page-editor-chrome/ComponentOperationBubble.js +8 -0
  208. package/dist/editor/page-editor-chrome/ComponentOperationBubble.js.map +1 -0
  209. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +207 -19
  210. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  211. package/dist/editor/page-editor-chrome/FrameMenu.js +101 -12
  212. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  213. package/dist/editor/page-editor-chrome/FrameMenus.js +6 -1
  214. package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
  215. package/dist/editor/page-editor-chrome/InsertComponentMenu.d.ts +2 -1
  216. package/dist/editor/page-editor-chrome/InsertComponentMenu.js +7 -2
  217. package/dist/editor/page-editor-chrome/InsertComponentMenu.js.map +1 -1
  218. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +3 -2
  219. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  220. package/dist/editor/page-editor-chrome/PageEditorChrome.js +95 -24
  221. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  222. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +85 -7
  223. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  224. package/dist/editor/page-editor-chrome/insertTargetLabel.d.ts +6 -0
  225. package/dist/editor/page-editor-chrome/insertTargetLabel.js +21 -0
  226. package/dist/editor/page-editor-chrome/insertTargetLabel.js.map +1 -0
  227. package/dist/editor/page-editor-chrome/overlay/geometry.js +13 -1
  228. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  229. package/dist/editor/page-editor-chrome/overlay/placeholderZones.d.ts +1 -0
  230. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js +14 -9
  231. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js.map +1 -1
  232. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +6 -3
  233. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +112 -6
  234. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  235. package/dist/editor/page-viewer/PageViewer.js +1 -0
  236. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  237. package/dist/editor/page-viewer/PageViewerFrame.js +119 -100
  238. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  239. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +3 -0
  240. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +36 -0
  241. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -0
  242. package/dist/editor/page-viewer/renderUrl.d.ts +14 -0
  243. package/dist/editor/page-viewer/renderUrl.js +83 -0
  244. package/dist/editor/page-viewer/renderUrl.js.map +1 -0
  245. package/dist/editor/reviews/CreateReviewDialog.js +1 -1
  246. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  247. package/dist/editor/reviews/EditReviewSettingsDialog.js +1 -1
  248. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  249. package/dist/editor/services/agentService.d.ts +22 -29
  250. package/dist/editor/services/agentService.js +24 -22
  251. package/dist/editor/services/agentService.js.map +1 -1
  252. package/dist/editor/services/aiService.d.ts +3 -0
  253. package/dist/editor/services/aiService.js.map +1 -1
  254. package/dist/editor/services/contentService.d.ts +5 -0
  255. package/dist/editor/services/contentService.js.map +1 -1
  256. package/dist/editor/services/editService.d.ts +12 -0
  257. package/dist/editor/services/editService.js +3 -0
  258. package/dist/editor/services/editService.js.map +1 -1
  259. package/dist/editor/settings/panels/AgentsPanel.js +1 -1
  260. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
  261. package/dist/editor/settings/panels/ModelsPanel.js +94 -26
  262. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  263. package/dist/editor/setup-wizard/SetupStepError.d.ts +8 -0
  264. package/dist/editor/setup-wizard/SetupStepError.js +7 -0
  265. package/dist/editor/setup-wizard/SetupStepError.js.map +1 -0
  266. package/dist/editor/setup-wizard/SetupStepHeader.d.ts +15 -0
  267. package/dist/editor/setup-wizard/SetupStepHeader.js +6 -0
  268. package/dist/editor/setup-wizard/SetupStepHeader.js.map +1 -0
  269. package/dist/editor/setup-wizard/SetupStepLayout.d.ts +33 -0
  270. package/dist/editor/setup-wizard/SetupStepLayout.js +16 -0
  271. package/dist/editor/setup-wizard/SetupStepLayout.js.map +1 -0
  272. package/dist/editor/setup-wizard/steps/CompleteStep.js +12 -10
  273. package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
  274. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +4 -2
  275. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
  276. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +95 -28
  277. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
  278. package/dist/editor/setup-wizard/steps/LicenseEmailStep.d.ts +2 -1
  279. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +12 -4
  280. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -1
  281. package/dist/editor/setup-wizard/steps/ModelSelectionStep.d.ts +1 -1
  282. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +62 -58
  283. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js.map +1 -1
  284. package/dist/editor/setup-wizard/steps/ProviderStep.js +63 -19
  285. package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
  286. package/dist/editor/setup-wizard/steps/WelcomeStep.js +2 -1
  287. package/dist/editor/setup-wizard/steps/WelcomeStep.js.map +1 -1
  288. package/dist/editor/sidebar/ComponentPalette.js +1 -1
  289. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  290. package/dist/editor/sidebar/ComponentTree.js +24 -30
  291. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  292. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +1 -1
  293. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
  294. package/dist/editor/ui/CopyMoveTargetSelectorDialog.js +2 -2
  295. package/dist/editor/ui/CopyMoveTargetSelectorDialog.js.map +1 -1
  296. package/dist/editor/ui/DialogButtons.js +1 -1
  297. package/dist/editor/ui/DialogButtons.js.map +1 -1
  298. package/dist/editor/ui/IconSelectorDialog.js +1 -1
  299. package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
  300. package/dist/editor/ui/ItemNameDialogNew.js +1 -1
  301. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  302. package/dist/editor/ui/PerfectTree.js +1 -1
  303. package/dist/editor/ui/PerfectTree.js.map +1 -1
  304. package/dist/editor/ui/PublishDialog.js +1 -1
  305. package/dist/editor/ui/PublishDialog.js.map +1 -1
  306. package/dist/editor/ui/PublishItemDialog.js +1 -1
  307. package/dist/editor/ui/PublishItemDialog.js.map +1 -1
  308. package/dist/editor/ui/SharedFolderSelectorDialog.js +1 -1
  309. package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -1
  310. package/dist/editor/ui/TemplateSelectorDialog.js +1 -1
  311. package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
  312. package/dist/editor/views/EditorSlot.js +1 -1
  313. package/dist/editor/views/EditorSlot.js.map +1 -1
  314. package/dist/editor/views/MediaFolderEditView.js +1 -1
  315. package/dist/editor/views/MediaFolderEditView.js.map +1 -1
  316. package/dist/lib/viewTransition.js +7 -1
  317. package/dist/lib/viewTransition.js.map +1 -1
  318. package/dist/logging/consolePrefix.js +13 -0
  319. package/dist/logging/consolePrefix.js.map +1 -1
  320. package/dist/revision.d.ts +2 -2
  321. package/dist/revision.js +2 -2
  322. package/dist/setup/services/setupWizardService.d.ts +2 -0
  323. package/dist/setup/services/setupWizardService.js +12 -0
  324. package/dist/setup/services/setupWizardService.js.map +1 -1
  325. package/dist/setup/wizard/steps/ImportModelDialog.js +35 -86
  326. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  327. package/dist/splash-screen/ModernSplashScreen.js +12 -0
  328. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  329. package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
  330. package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
  331. package/dist/task-board/components/ProjectOverviewContent.js +1 -1
  332. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
  333. package/dist/task-board/components/ProjectSettingsDialog.js +1 -1
  334. package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
  335. package/images/Parhelia-Onboarding-BG.jpg +0 -0
  336. package/package.json +1 -1
  337. package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.d.ts +0 -10
  338. package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.js +0 -24
  339. package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.js.map +0 -1
  340. package/dist/editor/ai/terminal/useAgentBrowserCapture.d.ts +0 -24
  341. package/dist/editor/ai/terminal/useAgentBrowserCapture.js +0 -147
  342. package/dist/editor/ai/terminal/useAgentBrowserCapture.js.map +0 -1
  343. package/dist/editor/ai/terminal/useAgentBrowserCapturePanel.d.ts +0 -29
  344. package/dist/editor/ai/terminal/useAgentBrowserCapturePanel.js +0 -36
  345. package/dist/editor/ai/terminal/useAgentBrowserCapturePanel.js.map +0 -1
  346. package/dist/editor/ai/terminal/useAgentBrowserCaptureUi.d.ts +0 -18
  347. package/dist/editor/ai/terminal/useAgentBrowserCaptureUi.js +0 -36
  348. package/dist/editor/ai/terminal/useAgentBrowserCaptureUi.js.map +0 -1
  349. package/images/bg-shape-black.webp +0 -0
  350. package/images/parhelia-logo-1.jpg +0 -0
  351. package/images/phlogo.png +0 -0
  352. package/images/wizard-bg.png +0 -0
@@ -0,0 +1,95 @@
1
+ export const normalizeMediaFileType = (value) => {
2
+ const type = value?.trim().replace(/^\./, "").toLowerCase();
3
+ if (!type)
4
+ return undefined;
5
+ if (type === "jpeg")
6
+ return "jpg";
7
+ if (type === "svg+xml")
8
+ return "svg";
9
+ return type;
10
+ };
11
+ const getFileTypeFromName = (name) => {
12
+ const match = name?.match(/\.([a-z0-9]{1,10})$/i);
13
+ return normalizeMediaFileType(match?.[1]);
14
+ };
15
+ const getFileTypeFromMimeType = (mimeType) => {
16
+ const normalized = mimeType?.split(";")[0]?.trim().toLowerCase();
17
+ if (!normalized)
18
+ return undefined;
19
+ const knownTypes = {
20
+ "application/pdf": "pdf",
21
+ "image/jpeg": "jpg",
22
+ "image/svg+xml": "svg",
23
+ "text/plain": "txt",
24
+ "video/quicktime": "mov",
25
+ };
26
+ if (knownTypes[normalized])
27
+ return knownTypes[normalized];
28
+ const subtype = normalized.split("/")[1];
29
+ if (!subtype)
30
+ return undefined;
31
+ return normalizeMediaFileType(subtype.split("+")[0]);
32
+ };
33
+ const getFileTypeFromUrl = (url) => {
34
+ if (!url)
35
+ return undefined;
36
+ try {
37
+ const parsed = new URL(url, typeof window === "undefined"
38
+ ? "http://localhost"
39
+ : window.location.origin);
40
+ const pathType = getFileTypeFromName(parsed.pathname);
41
+ if (pathType && !["ashx", "aspx"].includes(pathType))
42
+ return pathType;
43
+ const queryFileName = parsed.searchParams.get("file") ||
44
+ parsed.searchParams.get("filename") ||
45
+ parsed.searchParams.get("download");
46
+ return getFileTypeFromName(queryFileName || undefined);
47
+ }
48
+ catch {
49
+ const [path] = url.split(/[?#]/);
50
+ const pathType = getFileTypeFromName(path);
51
+ return pathType && !["ashx", "aspx"].includes(pathType)
52
+ ? pathType
53
+ : undefined;
54
+ }
55
+ };
56
+ const getFileTypeFromTemplateName = (templateName) => {
57
+ const normalized = templateName?.trim().toLowerCase();
58
+ if (!normalized)
59
+ return undefined;
60
+ const templateTypes = {
61
+ jpeg: "jpg",
62
+ jpg: "jpg",
63
+ png: "png",
64
+ gif: "gif",
65
+ svg: "svg",
66
+ webp: "webp",
67
+ avif: "avif",
68
+ bmp: "bmp",
69
+ bitmap: "bmp",
70
+ pdf: "pdf",
71
+ };
72
+ for (const [templateType, label] of Object.entries(templateTypes)) {
73
+ if (normalized.includes(templateType))
74
+ return label;
75
+ }
76
+ return undefined;
77
+ };
78
+ const getFileTypeFromTemplateId = (templateId) => {
79
+ const normalized = templateId?.replace(/[{}]/g, "").toLowerCase();
80
+ if (!normalized)
81
+ return undefined;
82
+ const templateTypes = {
83
+ "daf085e8-602e-43a6-8299-038ff171349f": "jpg",
84
+ };
85
+ return templateTypes[normalized];
86
+ };
87
+ export const getMediaFileTypeLabel = (media) => normalizeMediaFileType(media.extension) ||
88
+ getFileTypeFromMimeType(media.mimeType) ||
89
+ getFileTypeFromName(media.name) ||
90
+ getFileTypeFromUrl(media.downloadUrl) ||
91
+ getFileTypeFromUrl(media.previewUrl) ||
92
+ getFileTypeFromUrl(media.thumbUrl) ||
93
+ getFileTypeFromTemplateName(media.templateName) ||
94
+ getFileTypeFromTemplateId(media.templateId);
95
+ //# sourceMappingURL=mediaFileType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaFileType.js","sourceRoot":"","sources":["../../../src/editor/media-selector/mediaFileType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function normalizeMediaSelectionId(id: string | null | undefined): string | undefined;
2
+ export declare function parseMediaSelectionIdPath(selectedIdPath?: string): {
3
+ folderId?: string;
4
+ mediaId?: string;
5
+ };
@@ -0,0 +1,21 @@
1
+ export function normalizeMediaSelectionId(id) {
2
+ const normalized = id
3
+ ?.trim()
4
+ .replace(/[{}()]/g, "")
5
+ .toLowerCase();
6
+ return normalized || undefined;
7
+ }
8
+ export function parseMediaSelectionIdPath(selectedIdPath) {
9
+ const ids = (selectedIdPath ?? "")
10
+ .split("/")
11
+ .map(normalizeMediaSelectionId)
12
+ .filter((id) => !!id);
13
+ if (ids.length === 0) {
14
+ return {};
15
+ }
16
+ return {
17
+ folderId: ids.length > 1 ? ids[ids.length - 2] : undefined,
18
+ mediaId: ids[ids.length - 1],
19
+ };
20
+ }
21
+ //# sourceMappingURL=mediaSelectionPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaSelectionPath.js","sourceRoot":"","sources":["../../../src/editor/media-selector/mediaSelectionPath.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CACvC,EAA6B;IAE7B,MAAM,UAAU,GAAG,EAAE;QACnB,EAAE,IAAI,EAAE;SACP,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,WAAW,EAAE,CAAC;IACjB,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,cAAuB;IAI/D,MAAM,GAAG,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;SAC/B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,yBAAyB,CAAC;SAC9B,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1D,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { EditContextType } from "../client/editContext";
2
+ import type { ItemDescriptor } from "../pageModel";
3
+ import type { Thumbnail } from "../services/contentService";
4
+ export type MediaUploadResponse = {
5
+ success: boolean;
6
+ message?: string;
7
+ id?: string;
8
+ requiresReplaceConfirmation: boolean;
9
+ replaced: boolean;
10
+ existingId?: string;
11
+ existingName?: string;
12
+ };
13
+ type UploadMediaFilesOptions = {
14
+ files: File[];
15
+ folderId: string;
16
+ editContext?: EditContextType;
17
+ language?: string;
18
+ };
19
+ type ReplaceMediaItemOptions = {
20
+ file: File;
21
+ mediaItem: Pick<Thumbnail, "id" | "name">;
22
+ editContext?: EditContextType;
23
+ language?: string;
24
+ itemDescriptor?: ItemDescriptor;
25
+ refreshFields?: string[];
26
+ skipConfirmation?: boolean;
27
+ };
28
+ export declare function uploadMediaFiles({ files, folderId, editContext, language, }: UploadMediaFilesOptions): Promise<MediaUploadResponse[]>;
29
+ export declare function replaceMediaItemWithFile({ file, mediaItem, editContext, language, itemDescriptor, refreshFields, skipConfirmation, }: ReplaceMediaItemOptions): Promise<MediaUploadResponse | undefined>;
30
+ export {};
@@ -0,0 +1,155 @@
1
+ import { toast } from "sonner";
2
+ const read = (raw, lower, pascal) => raw[lower] ?? raw[pascal];
3
+ const readString = (raw, lower, pascal) => {
4
+ const value = read(raw, lower, pascal);
5
+ return typeof value === "string" && value.length > 0 ? value : undefined;
6
+ };
7
+ const readBoolean = (raw, lower, pascal) => {
8
+ const value = read(raw, lower, pascal);
9
+ return typeof value === "boolean" ? value : false;
10
+ };
11
+ const normalizeUploadResponse = (raw) => ({
12
+ success: readBoolean(raw, "success", "Success"),
13
+ message: readString(raw, "message", "Message"),
14
+ id: readString(raw, "id", "Id"),
15
+ requiresReplaceConfirmation: readBoolean(raw, "requiresReplaceConfirmation", "RequiresReplaceConfirmation"),
16
+ replaced: readBoolean(raw, "replaced", "Replaced"),
17
+ existingId: readString(raw, "existingId", "ExistingId"),
18
+ existingName: readString(raw, "existingName", "ExistingName"),
19
+ });
20
+ async function confirmReplace({ editContext, fileName, mediaName, directUpdate, }) {
21
+ const message = directUpdate
22
+ ? `Update "${mediaName}" with "${fileName}"? The media item ID and existing references will stay the same.`
23
+ : `A media item named "${mediaName}" already exists. Replace it with "${fileName}"? The media item ID and existing references will stay the same.`;
24
+ if (!editContext?.confirm) {
25
+ return typeof window !== "undefined" ? window.confirm(message) : false;
26
+ }
27
+ return await new Promise((resolve) => {
28
+ editContext.confirm({
29
+ header: directUpdate ? "Update media item?" : "Replace media item?",
30
+ message,
31
+ acceptLabel: directUpdate ? "Update" : "Replace",
32
+ rejectLabel: "Cancel",
33
+ accept: () => resolve(true),
34
+ reject: () => resolve(false),
35
+ });
36
+ });
37
+ }
38
+ async function postMediaFile({ file, folderId, replaceItemId, replace, }) {
39
+ const params = new URLSearchParams();
40
+ if (folderId)
41
+ params.set("folder", folderId);
42
+ if (replaceItemId)
43
+ params.set("replaceItemId", replaceItemId);
44
+ if (replace)
45
+ params.set("replace", "true");
46
+ const formData = new FormData();
47
+ formData.append("file", file);
48
+ const query = params.toString();
49
+ const response = await fetch(`/parhelia/upload${query ? `?${query}` : ""}`, {
50
+ method: "POST",
51
+ body: formData,
52
+ });
53
+ const body = await response.text();
54
+ let raw = {};
55
+ if (body) {
56
+ try {
57
+ raw = JSON.parse(body);
58
+ }
59
+ catch {
60
+ raw = { Message: body };
61
+ }
62
+ }
63
+ if (!response.ok) {
64
+ throw new Error(normalizeUploadResponse(raw).message ||
65
+ response.statusText ||
66
+ "Upload failed");
67
+ }
68
+ return normalizeUploadResponse(raw);
69
+ }
70
+ async function refreshMediaItem(editContext, mediaItemId, language = "en", itemDescriptor, refreshFields) {
71
+ if (!editContext || !mediaItemId)
72
+ return;
73
+ await editContext.itemsRepository.refreshItems([
74
+ itemDescriptor ?? {
75
+ id: mediaItemId,
76
+ language,
77
+ version: 0,
78
+ database: "master",
79
+ },
80
+ ], {
81
+ properties: true,
82
+ ...(refreshFields?.length ? { fields: refreshFields } : {}),
83
+ });
84
+ editContext.requestRefresh("immediate");
85
+ }
86
+ export async function uploadMediaFiles({ files, folderId, editContext, language, }) {
87
+ const uploaded = [];
88
+ for (const file of files) {
89
+ try {
90
+ let result = await postMediaFile({ file, folderId });
91
+ if (result.requiresReplaceConfirmation && result.existingId) {
92
+ const accepted = await confirmReplace({
93
+ editContext,
94
+ fileName: file.name,
95
+ mediaName: result.existingName || file.name,
96
+ });
97
+ if (!accepted)
98
+ continue;
99
+ result = await postMediaFile({
100
+ file,
101
+ folderId,
102
+ replace: true,
103
+ });
104
+ }
105
+ if (!result.success) {
106
+ toast.error(result.message || `Failed to upload ${file.name}.`);
107
+ continue;
108
+ }
109
+ if (result.replaced) {
110
+ toast.success("Media item updated.");
111
+ }
112
+ await refreshMediaItem(editContext, result.id, language);
113
+ uploaded.push(result);
114
+ }
115
+ catch (error) {
116
+ console.error("Error uploading media file:", error);
117
+ toast.error(error instanceof Error
118
+ ? error.message
119
+ : `Failed to upload ${file.name}.`);
120
+ }
121
+ }
122
+ return uploaded;
123
+ }
124
+ export async function replaceMediaItemWithFile({ file, mediaItem, editContext, language, itemDescriptor, refreshFields, skipConfirmation, }) {
125
+ const accepted = skipConfirmation ||
126
+ (await confirmReplace({
127
+ editContext,
128
+ fileName: file.name,
129
+ mediaName: mediaItem.name,
130
+ directUpdate: true,
131
+ }));
132
+ if (!accepted)
133
+ return undefined;
134
+ try {
135
+ const result = await postMediaFile({
136
+ file,
137
+ replaceItemId: mediaItem.id,
138
+ });
139
+ if (!result.success) {
140
+ toast.error(result.message || `Failed to update ${mediaItem.name}.`);
141
+ return undefined;
142
+ }
143
+ toast.success("Media item updated.");
144
+ await refreshMediaItem(editContext, result.id || mediaItem.id, language, itemDescriptor, refreshFields);
145
+ return result;
146
+ }
147
+ catch (error) {
148
+ console.error("Error updating media item:", error);
149
+ toast.error(error instanceof Error
150
+ ? error.message
151
+ : `Failed to update ${mediaItem.name}.`);
152
+ return undefined;
153
+ }
154
+ }
155
+ //# sourceMappingURL=mediaUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaUpload.js","sourceRoot":"","sources":["../../../src/editor/media-selector/mediaUpload.ts"],"names":[],"mappings":"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"}
@@ -1,72 +1,90 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo } from "react";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState } from "react";
3
3
  import { useEditContext } from "../../client/editContext";
4
4
  import { SimpleIconButton } from "../../ui/SimpleIconButton";
5
5
  import { getUndoCommand, getRedoCommand } from "../../commands/undo";
6
+ import { ChevronDown, History } from "lucide-react";
7
+ import { Popover, PopoverContent, PopoverTrigger, } from "../../../components/ui/popover";
8
+ import { Button } from "../../../components/ui/button";
9
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "../../../components/ui/tooltip";
10
+ import { cn } from "../../../lib/utils";
11
+ import { OperationItem } from "../../sidebar/OperationItem";
12
+ const EMPTY_EDIT_HISTORY = [];
6
13
  export function UndoRedoControls() {
7
14
  const editContext = useEditContext();
15
+ const [historyOpen, setHistoryOpen] = useState(false);
16
+ const editHistory = editContext?.editHistory ?? EMPTY_EDIT_HISTORY;
17
+ const hasEditContext = Boolean(editContext);
18
+ const showOnlyMyChanges = editContext?.showOnlyMyChanges ?? false;
19
+ const sessionId = editContext?.sessionId;
20
+ const currentItem = editContext?.item?.descriptor;
21
+ const currentItemId = currentItem?.id;
22
+ const currentItemLanguage = currentItem?.language;
23
+ const currentItemVersion = currentItem?.version;
24
+ const historyMode = editContext?.historyMode;
8
25
  // Filter operations based on historyMode and showOnlyMyChanges
9
26
  const filterOperation = useMemo(() => {
10
- if (!editContext)
27
+ if (!hasEditContext)
11
28
  return () => false;
12
- const filterBySession = editContext.showOnlyMyChanges;
13
- const currentItem = editContext.item?.descriptor;
14
- const historyMode = editContext.historyMode;
15
29
  return (op) => {
16
30
  // Session filter (showOnlyMyChanges)
17
- if (filterBySession && op.sessionId !== editContext.sessionId) {
31
+ if (showOnlyMyChanges && op.sessionId !== sessionId) {
18
32
  return false;
19
33
  }
20
34
  // Page-centric filter: only show operations for current item and language (any version)
21
35
  // EXCEPTION: delete-items operations are always shown because after deleting an item,
22
36
  // the user navigates to parent but should still be able to undo the deletion
23
37
  if (historyMode === "page-centric" &&
24
- currentItem &&
38
+ currentItemId &&
25
39
  op.type !== "delete-items") {
26
40
  if (!op.mainItem ||
27
- op.mainItem.id !== currentItem.id ||
28
- op.mainItem.language !== currentItem.language) {
41
+ op.mainItem.id !== currentItemId ||
42
+ op.mainItem.language !== currentItemLanguage) {
29
43
  return false;
30
44
  }
31
45
  }
32
46
  // Current-version filter: only show operations for current item and version
33
- if (historyMode === "current-version" && currentItem) {
47
+ if (historyMode === "current-version" && currentItemId) {
34
48
  if (!op.mainItem ||
35
- op.mainItem.id !== currentItem.id ||
36
- op.mainItem.version !== currentItem.version) {
49
+ op.mainItem.id !== currentItemId ||
50
+ op.mainItem.version !== currentItemVersion) {
37
51
  return false;
38
52
  }
39
53
  }
40
54
  return true;
41
55
  };
42
56
  }, [
43
- editContext?.showOnlyMyChanges,
44
- editContext?.sessionId,
45
- editContext?.historyMode,
46
- editContext?.item?.descriptor?.id,
47
- editContext?.item?.descriptor?.language,
48
- editContext?.item?.descriptor?.version,
57
+ hasEditContext,
58
+ showOnlyMyChanges,
59
+ sessionId,
60
+ historyMode,
61
+ currentItemId,
62
+ currentItemLanguage,
63
+ currentItemVersion,
49
64
  ]);
50
65
  // Get the next undoable operation (first operation where canUndo is true)
51
66
  const nextUndoOperation = useMemo(() => {
52
- if (!editContext)
67
+ if (!hasEditContext)
53
68
  return undefined;
54
- const allOps = editContext.editHistory || [];
55
- const undoableOps = allOps.filter((x) => x.canUndo);
69
+ const undoableOps = editHistory.filter((x) => x.canUndo);
56
70
  const filteredOps = undoableOps.filter(filterOperation);
57
71
  const result = filteredOps[0];
58
72
  return result;
59
- }, [editContext?.editHistory, filterOperation]);
73
+ }, [editHistory, filterOperation, hasEditContext]);
60
74
  // Get the next redoable operation (last operation where canRedo is true)
61
75
  const nextRedoOperation = useMemo(() => {
62
- if (!editContext)
76
+ if (!hasEditContext)
63
77
  return undefined;
64
- const filteredRedoable = editContext.editHistory.filter((x) => x.canRedo && filterOperation(x));
65
- const result = [...editContext.editHistory]
78
+ const result = [...editHistory]
66
79
  .reverse()
67
80
  .find((x) => x.canRedo && filterOperation(x));
68
81
  return result;
69
- }, [editContext?.editHistory, filterOperation]);
82
+ }, [editHistory, filterOperation, hasEditContext]);
83
+ const historyOperations = useMemo(() => {
84
+ if (!hasEditContext)
85
+ return [];
86
+ return editHistory.filter(filterOperation);
87
+ }, [editHistory, filterOperation, hasEditContext]);
70
88
  if (!editContext)
71
89
  return null;
72
90
  const undoCommand = getUndoCommand();
@@ -78,7 +96,11 @@ export function UndoRedoControls() {
78
96
  const redoLabel = nextRedoOperation
79
97
  ? `Redo: ${nextRedoOperation.title}`
80
98
  : "Redo";
81
- return (_jsxs(_Fragment, { children: [_jsx(SimpleIconButton, { onClick: async (ev) => {
99
+ const handleOpenHistorySidepanel = () => {
100
+ editContext.openSidebar("history");
101
+ setHistoryOpen(false);
102
+ };
103
+ return (_jsxs("div", { className: "group/undo-redo flex shrink-0 items-center gap-0.5", children: [_jsx(SimpleIconButton, { onClick: async (ev) => {
82
104
  // Pass the operation ID from current React state to avoid stale ref issues
83
105
  // Await to ensure the operation completes before the click handler returns
84
106
  await editContext.executeCommand({
@@ -94,6 +116,7 @@ export function UndoRedoControls() {
94
116
  event: ev,
95
117
  data: { operationId: nextRedoOperation?.id },
96
118
  });
97
- }, icon: redoCommand.icon, label: redoLabel, size: "large", "data-testid": "toolbar-redo-button", disabled: editContext.isCommandDisabled({ command: redoCommand }) })] }));
119
+ }, icon: redoCommand.icon, label: redoLabel, size: "large", "data-testid": "toolbar-redo-button", disabled: editContext.isCommandDisabled({ command: redoCommand }) }), _jsxs(Popover, { open: historyOpen, onOpenChange: setHistoryOpen, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": "Open edit history", "data-testid": "toolbar-edit-history-trigger", className: cn("text-neutral-grey-50 hover:border-neutral-grey-10 hover:bg-neutral-grey-5 hover:text-neutral-grey-100 inline-flex h-7 w-4 shrink-0 items-center justify-center rounded-[4px] border border-transparent opacity-0 transition-all group-hover/undo-redo:opacity-100 focus-visible:opacity-100", historyOpen &&
120
+ "bg-neutral-grey-5 text-neutral-grey-100 opacity-100"), children: _jsx(ChevronDown, { className: "h-3 w-3", strokeWidth: 1.5 }) }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Edit history" })] }), _jsxs(PopoverContent, { align: "start", side: "bottom", sideOffset: 6, className: "w-[420px] max-w-[90vw] p-0", "data-testid": "toolbar-edit-history-popover", children: [_jsxs("div", { className: "border-border-default flex items-center justify-between gap-2 border-b px-3 py-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [_jsx(History, { className: "text-neutral-grey-50 h-3.5 w-3.5 shrink-0", strokeWidth: 1.5 }), _jsx("span", { className: "text-neutral-grey-100 truncate text-xs font-medium", children: "Edit history" })] }), _jsx("span", { className: "text-neutral-grey-50 shrink-0 text-[10px]", children: historyOperations.length })] }), _jsx("div", { className: "max-h-[60vh] overflow-y-auto", children: historyOperations.length > 0 ? (historyOperations.map((operation, index) => (_jsx(OperationItem, { operation: operation, index: index, showUserName: !editContext.showOnlyMyChanges, showDescription: false, hidePath: editContext.historyMode !== "global", showLanguage: editContext.historyMode === "global" }, operation.id || index)))) : (_jsx("div", { className: "text-neutral-grey-50 p-4 text-center text-xs", children: "No edit history available" })) }), _jsx("div", { className: "border-border-default flex justify-start border-t p-2", children: _jsx(Button, { type: "button", variant: "ghost", size: "xs", onClick: handleOpenHistorySidepanel, "data-testid": "toolbar-edit-history-open-sidepanel-button", children: "Open sidepanel" }) })] })] })] }));
98
121
  }
99
122
  //# sourceMappingURL=UndoRedoControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UndoRedoControls.js","sourceRoot":"","sources":["../../../../src/editor/menubar/toolbar-sections/UndoRedoControls.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UndoRedoControls.js","sourceRoot":"","sources":["../../../../src/editor/menubar/toolbar-sections/UndoRedoControls.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CSSProperties } from "react";
2
+ import { type ComponentFrameInsertColor } from "../componentFrameColors";
3
+ export declare function ComponentOperationBubble({ color, className, style, testId, }: {
4
+ color?: ComponentFrameInsertColor;
5
+ className?: string;
6
+ style?: CSSProperties;
7
+ testId?: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils";
3
+ import { componentFrameBgColorVariants, } from "../componentFrameColors";
4
+ export function ComponentOperationBubble({ color = "default", className, style, testId, }) {
5
+ const colorClassName = componentFrameBgColorVariants[color];
6
+ return (_jsxs("div", { className: cn("pointer-events-none absolute flex h-8 w-8", className), "data-testid": testId, style: style, children: [_jsx("span", { className: `${colorClassName} absolute inline-flex h-full w-full animate-ping rounded-full opacity-75` }), _jsx("span", { className: `${colorClassName} relative inline-flex h-8 w-8 rounded-full` })] }));
7
+ }
8
+ //# sourceMappingURL=ComponentOperationBubble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentOperationBubble.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/ComponentOperationBubble.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EACL,6BAA6B,GAE9B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,wBAAwB,CAAC,EACvC,KAAK,GAAG,SAAS,EACjB,SAAS,EACT,KAAK,EACL,MAAM,GAMP;IACC,MAAM,cAAc,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAE5D,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CAAC,2CAA2C,EAAE,SAAS,CAAC,iBACxD,MAAM,EACnB,KAAK,EAAE,KAAK,aAEZ,eACE,SAAS,EAAE,GAAG,cAAc,0EAA0E,GACtG,EACF,eACE,SAAS,EAAE,GAAG,cAAc,4CAA4C,GACxE,IACE,CACP,CAAC;AACJ,CAAC"}