@parhelia/core 0.4.12825 → 0.4.12871

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 (1047) hide show
  1. package/dist/components/emoji/EmojiPicker.d.ts +18 -0
  2. package/dist/components/emoji/EmojiPicker.js +102 -0
  3. package/dist/components/emoji/EmojiPicker.js.map +1 -0
  4. package/dist/components/emoji/EmojiText.d.ts +19 -0
  5. package/dist/components/emoji/EmojiText.js +30 -0
  6. package/dist/components/emoji/EmojiText.js.map +1 -0
  7. package/dist/components/emoji/emojiData.generated.d.ts +2 -0
  8. package/dist/components/emoji/emojiData.generated.js +1878 -0
  9. package/dist/components/emoji/emojiData.generated.js.map +1 -0
  10. package/dist/components/emoji/emojiIndex.d.ts +46 -0
  11. package/dist/components/emoji/emojiIndex.js +173 -0
  12. package/dist/components/emoji/emojiIndex.js.map +1 -0
  13. package/dist/components/emoji/emoticons.d.ts +21 -0
  14. package/dist/components/emoji/emoticons.js +167 -0
  15. package/dist/components/emoji/emoticons.js.map +1 -0
  16. package/dist/components/emoji/textareaInsert.d.ts +19 -0
  17. package/dist/components/emoji/textareaInsert.js +29 -0
  18. package/dist/components/emoji/textareaInsert.js.map +1 -0
  19. package/dist/components/emoji/twemoji.d.ts +30 -0
  20. package/dist/components/emoji/twemoji.js +84 -0
  21. package/dist/components/emoji/twemoji.js.map +1 -0
  22. package/dist/components/ui/alert.d.ts +6 -1
  23. package/dist/components/ui/alert.js +12 -3
  24. package/dist/components/ui/alert.js.map +1 -1
  25. package/dist/components/ui/context-menu.d.ts +25 -0
  26. package/dist/components/ui/context-menu.js +54 -36
  27. package/dist/components/ui/context-menu.js.map +1 -1
  28. package/dist/components/ui/copy-button.d.ts +3 -1
  29. package/dist/components/ui/copy-button.js +13 -2
  30. package/dist/components/ui/copy-button.js.map +1 -1
  31. package/dist/components/ui/mention-textarea.d.ts +8 -0
  32. package/dist/components/ui/mention-textarea.js +98 -46
  33. package/dist/components/ui/mention-textarea.js.map +1 -1
  34. package/dist/components/ui/paste-button.js +11 -1
  35. package/dist/components/ui/paste-button.js.map +1 -1
  36. package/dist/config/config.js +43 -4
  37. package/dist/config/config.js.map +1 -1
  38. package/dist/config/types.d.ts +2 -0
  39. package/dist/config/types.js.map +1 -1
  40. package/dist/editor/ConcurrentUserLimitDialog.js +5 -2
  41. package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
  42. package/dist/editor/ContentTree.js +7 -2
  43. package/dist/editor/ContentTree.js.map +1 -1
  44. package/dist/editor/ContextMenu.js +11 -36
  45. package/dist/editor/ContextMenu.js.map +1 -1
  46. package/dist/editor/EditorWarning.js +8 -4
  47. package/dist/editor/EditorWarning.js.map +1 -1
  48. package/dist/editor/FieldList.js +1 -1
  49. package/dist/editor/FieldList.js.map +1 -1
  50. package/dist/editor/FieldListField.js +18 -13
  51. package/dist/editor/FieldListField.js.map +1 -1
  52. package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
  53. package/dist/editor/GlobalMenuBar.js +2 -1
  54. package/dist/editor/GlobalMenuBar.js.map +1 -1
  55. package/dist/editor/ImageEditor.js +3 -1
  56. package/dist/editor/ImageEditor.js.map +1 -1
  57. package/dist/editor/MainLayout.js +1 -1
  58. package/dist/editor/MainLayout.js.map +1 -1
  59. package/dist/editor/MigrationsView.js +3 -2
  60. package/dist/editor/MigrationsView.js.map +1 -1
  61. package/dist/editor/MobileLayout.js +43 -20
  62. package/dist/editor/MobileLayout.js.map +1 -1
  63. package/dist/editor/PictureEditor.js +4 -2
  64. package/dist/editor/PictureEditor.js.map +1 -1
  65. package/dist/editor/QuickItemSwitcher.js +4 -2
  66. package/dist/editor/QuickItemSwitcher.js.map +1 -1
  67. package/dist/editor/agent-changes/agentChangeTargets.js +6 -0
  68. package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -1
  69. package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +48 -4
  70. package/dist/editor/agent-changes/agentChangeTextHighlight.js +67 -9
  71. package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -1
  72. package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +1 -1
  73. package/dist/editor/ai/InlineAiDialog.js +11 -8
  74. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  75. package/dist/editor/ai/InlineAiTrigger.js +18 -14
  76. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  77. package/dist/editor/ai/agentActivitySummary.js +5 -0
  78. package/dist/editor/ai/agentActivitySummary.js.map +1 -1
  79. package/dist/editor/ai/agentMessageConversion.js +1 -0
  80. package/dist/editor/ai/agentMessageConversion.js.map +1 -1
  81. package/dist/editor/ai/agentMessageMarkdown.js +4 -4
  82. package/dist/editor/ai/agentMessageMarkdown.js.map +1 -1
  83. package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +4 -1
  84. package/dist/editor/ai/dialogs/capturePageScreenshot.js +214 -44
  85. package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
  86. package/dist/editor/ai/dialogs/captureShared.d.ts +8 -1
  87. package/dist/editor/ai/dialogs/captureShared.js +4 -1
  88. package/dist/editor/ai/dialogs/captureShared.js.map +1 -1
  89. package/dist/editor/ai/dialogs/offscreenPageCapture.js +1 -1
  90. package/dist/editor/ai/dialogs/offscreenPageCapture.js.map +1 -1
  91. package/dist/editor/ai/prepareInlineAiTextSelection.d.ts +2 -1
  92. package/dist/editor/ai/prepareInlineAiTextSelection.js +1 -2
  93. package/dist/editor/ai/prepareInlineAiTextSelection.js.map +1 -1
  94. package/dist/editor/ai/terminal/agentCost.d.ts +2 -0
  95. package/dist/editor/ai/terminal/agentCost.js +1 -0
  96. package/dist/editor/ai/terminal/agentCost.js.map +1 -1
  97. package/dist/editor/ai/terminal/agentSessionLiveTotals.js +3 -0
  98. package/dist/editor/ai/terminal/agentSessionLiveTotals.js.map +1 -1
  99. package/dist/editor/ai/terminal/agentSessionSelectors.d.ts +5 -2
  100. package/dist/editor/ai/terminal/agentSessionSelectors.js +5 -2
  101. package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
  102. package/dist/editor/ai/terminal/agentSessionState.js +8 -1
  103. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  104. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +2 -2
  105. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  106. package/dist/editor/ai/terminal/components/AgentBanners.js +2 -2
  107. package/dist/editor/ai/terminal/components/AgentBanners.js.map +1 -1
  108. package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +2 -0
  109. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +2 -1
  110. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  111. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
  112. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
  113. package/dist/editor/ai/terminal/components/AgentModeSelector.js +7 -3
  114. package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
  115. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +3 -3
  116. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  117. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +2 -2
  118. package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js +1 -1
  119. package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js.map +1 -1
  120. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +1 -1
  121. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.d.ts +5 -2
  122. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +43 -4
  123. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  124. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +1 -1
  125. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  126. package/dist/editor/ai/terminal/components/AiResponseMessage.js +32 -15
  127. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  128. package/dist/editor/ai/terminal/components/ApprovalCard.d.ts +3 -1
  129. package/dist/editor/ai/terminal/components/ApprovalCard.js +8 -16
  130. package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
  131. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +1 -1
  132. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -1
  133. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.d.ts +7 -4
  134. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js +57 -32
  135. package/dist/editor/ai/terminal/components/EditFieldToolCallContent.js.map +1 -1
  136. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +1 -2
  137. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
  138. package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.d.ts +6 -0
  139. package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js +61 -0
  140. package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js.map +1 -0
  141. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +5 -0
  142. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +19 -8
  143. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  144. package/dist/editor/ai/terminal/components/UserMessage.js +4 -2
  145. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  146. package/dist/editor/ai/terminal/components/ValueDiff.js +1 -1
  147. package/dist/editor/ai/terminal/components/ValueDiff.js.map +1 -1
  148. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +7 -4
  149. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -1
  150. package/dist/editor/ai/terminal/components/useApprovalActions.js +1 -1
  151. package/dist/editor/ai/terminal/components/useApprovalActions.js.map +1 -1
  152. package/dist/editor/ai/terminal/toolCallDiagnostics.d.ts +34 -0
  153. package/dist/editor/ai/terminal/toolCallDiagnostics.js +218 -0
  154. package/dist/editor/ai/terminal/toolCallDiagnostics.js.map +1 -0
  155. package/dist/editor/ai/terminal/types.d.ts +1 -0
  156. package/dist/editor/ai/terminal/useAgentEditorContext.js +3 -1
  157. package/dist/editor/ai/terminal/useAgentEditorContext.js.map +1 -1
  158. package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +1 -0
  159. package/dist/editor/ai/terminal/useAgentLoadPipeline.js +2 -1
  160. package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
  161. package/dist/editor/ai/terminal/useAgentLoader.d.ts +2 -0
  162. package/dist/editor/ai/terminal/useAgentLoader.js +17 -2
  163. package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
  164. package/dist/editor/ai/terminal/useAgentModeState.d.ts +5 -1
  165. package/dist/editor/ai/terminal/useAgentModeState.js +11 -3
  166. package/dist/editor/ai/terminal/useAgentModeState.js.map +1 -1
  167. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.d.ts +1 -0
  168. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js +5 -1
  169. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js.map +1 -1
  170. package/dist/editor/ai/terminal/useAgentRunRefs.d.ts +1 -0
  171. package/dist/editor/ai/terminal/useAgentRunRefs.js +3 -0
  172. package/dist/editor/ai/terminal/useAgentRunRefs.js.map +1 -1
  173. package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +6 -0
  174. package/dist/editor/ai/terminal/useAgentSessionSync.js +27 -3
  175. package/dist/editor/ai/terminal/useAgentSessionSync.js.map +1 -1
  176. package/dist/editor/ai/terminal/useAgentSettingsData.d.ts +1 -1
  177. package/dist/editor/ai/terminal/useAgentSettingsPanel.js +7 -6
  178. package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
  179. package/dist/editor/ai/terminal/useAgentSettingsSelectOptions.js +14 -2
  180. package/dist/editor/ai/terminal/useAgentSettingsSelectOptions.js.map +1 -1
  181. package/dist/editor/ai/terminal/useAgentStatusBarContent.js +11 -4
  182. package/dist/editor/ai/terminal/useAgentStatusBarContent.js.map +1 -1
  183. package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +1 -0
  184. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +2 -1
  185. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  186. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +11 -2
  187. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  188. package/dist/editor/ai/terminal/useAgentTerminalController.js +3 -1
  189. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  190. package/dist/editor/ai/terminal/useAgentToolCallHandler.js +1 -0
  191. package/dist/editor/ai/terminal/useAgentToolCallHandler.js.map +1 -1
  192. package/dist/editor/ai/types.d.ts +4 -0
  193. package/dist/editor/ai-image-editor/AiImageEditorDialog.d.ts +33 -0
  194. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +372 -127
  195. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  196. package/dist/editor/ai-image-editor/AiImageResultOverlay.js +4 -2
  197. package/dist/editor/ai-image-editor/AiImageResultOverlay.js.map +1 -1
  198. package/dist/editor/bridge/BridgeClient.js +11 -0
  199. package/dist/editor/bridge/BridgeClient.js.map +1 -1
  200. package/dist/editor/bridge/protocol.d.ts +56 -0
  201. package/dist/editor/bridge/protocol.js +3 -0
  202. package/dist/editor/bridge/protocol.js.map +1 -1
  203. package/dist/editor/client/EditorShell.js +331 -122
  204. package/dist/editor/client/EditorShell.js.map +1 -1
  205. package/dist/editor/client/SessionExpiredOverlay.js +9 -2
  206. package/dist/editor/client/SessionExpiredOverlay.js.map +1 -1
  207. package/dist/editor/client/clipboardStorage.d.ts +10 -0
  208. package/dist/editor/client/clipboardStorage.js +57 -0
  209. package/dist/editor/client/clipboardStorage.js.map +1 -0
  210. package/dist/editor/client/editContext.d.ts +92 -11
  211. package/dist/editor/client/editContext.js.map +1 -1
  212. package/dist/editor/client/editHistoryReconciliation.d.ts +2 -1
  213. package/dist/editor/client/editHistoryReconciliation.js +5 -2
  214. package/dist/editor/client/editHistoryReconciliation.js.map +1 -1
  215. package/dist/editor/client/hooks/useRepositoryItemRefresh.d.ts +4 -0
  216. package/dist/editor/client/hooks/useRepositoryItemRefresh.js +62 -0
  217. package/dist/editor/client/hooks/useRepositoryItemRefresh.js.map +1 -0
  218. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +6 -0
  219. package/dist/editor/client/hooks/useSocketMessageHandler.js +66 -3
  220. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  221. package/dist/editor/client/itemsRepository.d.ts +10 -2
  222. package/dist/editor/client/itemsRepository.js +224 -43
  223. package/dist/editor/client/itemsRepository.js.map +1 -1
  224. package/dist/editor/client/liveEditState.d.ts +16 -0
  225. package/dist/editor/client/liveEditState.js +25 -0
  226. package/dist/editor/client/liveEditState.js.map +1 -0
  227. package/dist/editor/client/liveSessionState.d.ts +6 -0
  228. package/dist/editor/client/liveSessionState.js +20 -0
  229. package/dist/editor/client/liveSessionState.js.map +1 -0
  230. package/dist/editor/client/operations.d.ts +13 -2
  231. package/dist/editor/client/operations.js +100 -29
  232. package/dist/editor/client/operations.js.map +1 -1
  233. package/dist/editor/client/pageModelBuilder.d.ts +6 -0
  234. package/dist/editor/client/pageModelBuilder.js +74 -7
  235. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  236. package/dist/editor/client/ui/EditorChrome.d.ts +2 -2
  237. package/dist/editor/client/ui/EditorChrome.js +12 -8
  238. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  239. package/dist/editor/client/ui/FullscreenControls.d.ts +3 -5
  240. package/dist/editor/client/ui/FullscreenControls.js +2 -2
  241. package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
  242. package/dist/editor/client/valueStore.d.ts +22 -0
  243. package/dist/editor/client/valueStore.js +29 -0
  244. package/dist/editor/client/valueStore.js.map +1 -0
  245. package/dist/editor/commands/componentClipboardCommands.d.ts +35 -0
  246. package/dist/editor/commands/componentClipboardCommands.js +271 -0
  247. package/dist/editor/commands/componentClipboardCommands.js.map +1 -0
  248. package/dist/editor/commands/componentCommands.js +80 -19
  249. package/dist/editor/commands/componentCommands.js.map +1 -1
  250. package/dist/editor/commands/componentMenuGroups.d.ts +2 -0
  251. package/dist/editor/commands/componentMenuGroups.js +43 -0
  252. package/dist/editor/commands/componentMenuGroups.js.map +1 -0
  253. package/dist/editor/commands/itemCommands.d.ts +9 -0
  254. package/dist/editor/commands/itemCommands.js +76 -9
  255. package/dist/editor/commands/itemCommands.js.map +1 -1
  256. package/dist/editor/component-conversion/ComponentTypePickerDialog.d.ts +12 -0
  257. package/dist/editor/component-conversion/ComponentTypePickerDialog.js +40 -0
  258. package/dist/editor/component-conversion/ComponentTypePickerDialog.js.map +1 -0
  259. package/dist/editor/component-conversion/ConversionAiDebugButton.d.ts +17 -0
  260. package/dist/editor/component-conversion/ConversionAiDebugButton.js +80 -0
  261. package/dist/editor/component-conversion/ConversionAiDebugButton.js.map +1 -0
  262. package/dist/editor/component-conversion/ConvertComponentDialog.d.ts +28 -0
  263. package/dist/editor/component-conversion/ConvertComponentDialog.js +633 -0
  264. package/dist/editor/component-conversion/ConvertComponentDialog.js.map +1 -0
  265. package/dist/editor/component-conversion/conversionModel.d.ts +109 -0
  266. package/dist/editor/component-conversion/conversionModel.js +519 -0
  267. package/dist/editor/component-conversion/conversionModel.js.map +1 -0
  268. package/dist/editor/component-conversion/conversionService.d.ts +12 -0
  269. package/dist/editor/component-conversion/conversionService.js +16 -0
  270. package/dist/editor/component-conversion/conversionService.js.map +1 -0
  271. package/dist/editor/component-conversion/conversionTypes.d.ts +214 -0
  272. package/dist/editor/component-conversion/conversionTypes.js +2 -0
  273. package/dist/editor/component-conversion/conversionTypes.js.map +1 -0
  274. package/dist/editor/component-conversion/convertComponentsCommand.d.ts +25 -0
  275. package/dist/editor/component-conversion/convertComponentsCommand.js +196 -0
  276. package/dist/editor/component-conversion/convertComponentsCommand.js.map +1 -0
  277. package/dist/editor/editor-warnings/ValidationErrors.js +4 -4
  278. package/dist/editor/editor-warnings/ValidationErrors.js.map +1 -1
  279. package/dist/editor/field-types/AttachmentEditor.js +4 -3
  280. package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
  281. package/dist/editor/field-types/DateFieldEditor.js +2 -1
  282. package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
  283. package/dist/editor/field-types/DateTimeFieldEditor.js +2 -1
  284. package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
  285. package/dist/editor/field-types/DropLinkEditor.js +3 -1
  286. package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
  287. package/dist/editor/field-types/DropListEditor.js +3 -1
  288. package/dist/editor/field-types/DropListEditor.js.map +1 -1
  289. package/dist/editor/field-types/FieldHistoryBoundary.js +28 -7
  290. package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -1
  291. package/dist/editor/field-types/ImageFieldEditor.js +3 -1
  292. package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
  293. package/dist/editor/field-types/InternalLinkFieldEditor.js +2 -1
  294. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  295. package/dist/editor/field-types/LinkFieldEditor.js +2 -1
  296. package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
  297. package/dist/editor/field-types/MultiLineText.js +68 -22
  298. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  299. package/dist/editor/field-types/NameValueListEditor.js +3 -1
  300. package/dist/editor/field-types/NameValueListEditor.js.map +1 -1
  301. package/dist/editor/field-types/PictureFieldEditor.js +4 -2
  302. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  303. package/dist/editor/field-types/RawEditor.js +7 -4
  304. package/dist/editor/field-types/RawEditor.js.map +1 -1
  305. package/dist/editor/field-types/RichTextEditor.d.ts +1 -2
  306. package/dist/editor/field-types/RichTextEditor.js +5 -26
  307. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  308. package/dist/editor/field-types/RichTextEditorComponent.d.ts +1 -2
  309. package/dist/editor/field-types/RichTextEditorComponent.js +120 -34
  310. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  311. package/dist/editor/field-types/SingleLineText.js +68 -22
  312. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  313. package/dist/editor/field-types/TreeListEditor.js +4 -2
  314. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  315. package/dist/editor/field-types/fieldStyles.d.ts +21 -0
  316. package/dist/editor/field-types/fieldStyles.js +22 -0
  317. package/dist/editor/field-types/fieldStyles.js.map +1 -0
  318. package/dist/editor/field-types/richtext/bridgeRichTextProfile.d.ts +15 -1
  319. package/dist/editor/field-types/richtext/bridgeRichTextProfile.js +27 -0
  320. package/dist/editor/field-types/richtext/bridgeRichTextProfile.js.map +1 -1
  321. package/dist/editor/field-types/richtext/components/EditorDropdown.css +14 -0
  322. package/dist/editor/field-types/richtext/components/EditorDropdown.d.ts +3 -1
  323. package/dist/editor/field-types/richtext/components/EditorDropdown.js +33 -8
  324. package/dist/editor/field-types/richtext/components/EditorDropdown.js.map +1 -1
  325. package/dist/editor/field-types/richtext/components/ReactSlate.css +23 -54
  326. package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +10 -1
  327. package/dist/editor/field-types/richtext/components/ReactSlate.js +365 -172
  328. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  329. package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js +1 -1
  330. package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js.map +1 -1
  331. package/dist/editor/field-types/richtext/components/ToolbarButton.js +13 -5
  332. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
  333. package/dist/editor/field-types/richtext/config/pluginFactory.d.ts +2 -0
  334. package/dist/editor/field-types/richtext/config/pluginFactory.js +2 -1
  335. package/dist/editor/field-types/richtext/config/pluginFactory.js.map +1 -1
  336. package/dist/editor/field-types/richtext/hooks/useProfileCache.js +1 -0
  337. package/dist/editor/field-types/richtext/hooks/useProfileCache.js.map +1 -1
  338. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.d.ts +0 -2
  339. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js +2 -5
  340. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -1
  341. package/dist/editor/field-types/richtext/types.d.ts +47 -2
  342. package/dist/editor/field-types/richtext/types.js +19 -0
  343. package/dist/editor/field-types/richtext/types.js.map +1 -1
  344. package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +14 -0
  345. package/dist/editor/field-types/richtext/utils/changeHighlight.js +12 -1
  346. package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -1
  347. package/dist/editor/field-types/richtext/utils/conversion.js +108 -32
  348. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
  349. package/dist/editor/field-types/richtext/utils/cssClasses.d.ts +27 -0
  350. package/dist/editor/field-types/richtext/utils/cssClasses.js +98 -0
  351. package/dist/editor/field-types/richtext/utils/cssClasses.js.map +1 -0
  352. package/dist/editor/field-types/richtext/utils/plugins.d.ts +40 -1
  353. package/dist/editor/field-types/richtext/utils/plugins.js +178 -4
  354. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
  355. package/dist/editor/field-types/richtext/utils/profileMapper.d.ts +17 -1
  356. package/dist/editor/field-types/richtext/utils/profileMapper.js +153 -55
  357. package/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -1
  358. package/dist/editor/field-types/richtext/utils/spellCheckText.d.ts +31 -0
  359. package/dist/editor/field-types/richtext/utils/spellCheckText.js +82 -0
  360. package/dist/editor/field-types/richtext/utils/spellCheckText.js.map +1 -0
  361. package/dist/editor/field-types/useFocusedFieldInput.d.ts +13 -0
  362. package/dist/editor/field-types/useFocusedFieldInput.js +50 -0
  363. package/dist/editor/field-types/useFocusedFieldInput.js.map +1 -0
  364. package/dist/editor/field-types/useFormFieldCaretPresence.js +8 -1
  365. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
  366. package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +20 -13
  367. package/dist/editor/field-types/useFormFieldSelectionRange.js +40 -14
  368. package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -1
  369. package/dist/editor/find-replace/findReplaceTargets.d.ts +2 -0
  370. package/dist/editor/find-replace/findReplaceTargets.js +2 -2
  371. package/dist/editor/find-replace/findReplaceTargets.js.map +1 -1
  372. package/dist/editor/itemContextMenuGroups.js +10 -1
  373. package/dist/editor/itemContextMenuGroups.js.map +1 -1
  374. package/dist/editor/media-selector/AiImageSearch.js +1 -163
  375. package/dist/editor/media-selector/AiImageSearch.js.map +1 -1
  376. package/dist/editor/media-selector/MediaDetailsView.d.ts +14 -0
  377. package/dist/editor/media-selector/MediaDetailsView.js +152 -0
  378. package/dist/editor/media-selector/MediaDetailsView.js.map +1 -0
  379. package/dist/editor/media-selector/MediaFolderBrowser.js +326 -106
  380. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  381. package/dist/editor/media-selector/TreeSelector.js +40 -2
  382. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  383. package/dist/editor/media-selector/UploadZone.js +1 -1
  384. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  385. package/dist/editor/media-selector/useMediaFolderDrag.d.ts +26 -0
  386. package/dist/editor/media-selector/useMediaFolderDrag.js +153 -0
  387. package/dist/editor/media-selector/useMediaFolderDrag.js.map +1 -0
  388. package/dist/editor/menubar/ActiveUsers.js +5 -3
  389. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  390. package/dist/editor/menubar/PageSelector.js +21 -22
  391. package/dist/editor/menubar/PageSelector.js.map +1 -1
  392. package/dist/editor/menubar/ToolbarFactory.js +8 -2
  393. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  394. package/dist/editor/menubar/VersionPreviewCard.js +4 -2
  395. package/dist/editor/menubar/VersionPreviewCard.js.map +1 -1
  396. package/dist/editor/menubar/WorkflowButton.js +10 -10
  397. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  398. package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.d.ts +13 -0
  399. package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js +88 -0
  400. package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js.map +1 -0
  401. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.d.ts +3 -4
  402. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +15 -13
  403. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
  404. package/dist/editor/menubar/toolbar-sections/EditControls.d.ts +9 -0
  405. package/dist/editor/menubar/toolbar-sections/EditControls.js +24 -1
  406. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  407. package/dist/editor/menubar/toolbar-sections/FullscreenControl.js +3 -2
  408. package/dist/editor/menubar/toolbar-sections/FullscreenControl.js.map +1 -1
  409. package/dist/editor/menubar/toolbar-sections/InsertControls.js +4 -2
  410. package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
  411. package/dist/editor/menubar/toolbar-sections/LayoutModeControls.js +3 -2
  412. package/dist/editor/menubar/toolbar-sections/LayoutModeControls.js.map +1 -1
  413. package/dist/editor/menubar/toolbar-sections/ReviewCommands.js +2 -2
  414. package/dist/editor/menubar/toolbar-sections/ReviewCommands.js.map +1 -1
  415. package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.d.ts +5 -0
  416. package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js +16 -0
  417. package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js.map +1 -0
  418. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +2 -2
  419. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
  420. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +7 -7
  421. package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
  422. package/dist/editor/menubar/toolbar-sections/ViewportControls.d.ts +3 -4
  423. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +19 -31
  424. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  425. package/dist/editor/menubar/toolbar-sections/index.d.ts +1 -1
  426. package/dist/editor/menubar/toolbar-sections/index.js +1 -1
  427. package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
  428. package/dist/editor/mobileBottomPanel.d.ts +40 -0
  429. package/dist/editor/mobileBottomPanel.js +63 -0
  430. package/dist/editor/mobileBottomPanel.js.map +1 -0
  431. package/dist/editor/notifications/useNotifications.js +12 -17
  432. package/dist/editor/notifications/useNotifications.js.map +1 -1
  433. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +3 -6
  434. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +8 -6
  435. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -1
  436. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +5 -1
  437. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +60 -10
  438. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  439. package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.d.ts +6 -0
  440. package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js +100 -0
  441. package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js.map +1 -0
  442. package/dist/editor/page-editor-chrome/BridgeToolbarDropdown.d.ts +16 -0
  443. package/dist/editor/page-editor-chrome/BridgeToolbarDropdown.js +23 -0
  444. package/dist/editor/page-editor-chrome/BridgeToolbarDropdown.js.map +1 -0
  445. package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.d.ts +9 -0
  446. package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js +32 -0
  447. package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js.map +1 -0
  448. package/dist/editor/page-editor-chrome/CommentHighlightings.d.ts +4 -1
  449. package/dist/editor/page-editor-chrome/CommentHighlightings.js +195 -388
  450. package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -1
  451. package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.d.ts +14 -0
  452. package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js +110 -0
  453. package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js.map +1 -0
  454. package/dist/editor/page-editor-chrome/ConversionIndicators.d.ts +8 -0
  455. package/dist/editor/page-editor-chrome/ConversionIndicators.js +75 -0
  456. package/dist/editor/page-editor-chrome/ConversionIndicators.js.map +1 -0
  457. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +9 -13
  458. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +25 -20
  459. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -1
  460. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +21 -17
  461. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  462. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.d.ts +1 -1
  463. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +9 -6
  464. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js.map +1 -1
  465. package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.d.ts +15 -0
  466. package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js +31 -0
  467. package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js.map +1 -0
  468. package/dist/editor/page-editor-chrome/FieldActionIndicator.d.ts +1 -1
  469. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +6 -3
  470. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  471. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +10 -6
  472. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -1
  473. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +1 -1
  474. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +7 -4
  475. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -1
  476. package/dist/editor/page-editor-chrome/FrameMenu.d.ts +1 -1
  477. package/dist/editor/page-editor-chrome/FrameMenu.js +13 -11
  478. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  479. package/dist/editor/page-editor-chrome/FrameMenus.d.ts +1 -1
  480. package/dist/editor/page-editor-chrome/FrameMenus.js +7 -5
  481. package/dist/editor/page-editor-chrome/FrameMenus.js.map +1 -1
  482. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +2 -2
  483. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +20 -39
  484. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -1
  485. package/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +1 -1
  486. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +27 -21
  487. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  488. package/dist/editor/page-editor-chrome/NoLayout.js +5 -3
  489. package/dist/editor/page-editor-chrome/NoLayout.js.map +1 -1
  490. package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +1 -1
  491. package/dist/editor/page-editor-chrome/PageEditorChrome.js +29 -23
  492. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  493. package/dist/editor/page-editor-chrome/PictureEditorOverlay.d.ts +1 -1
  494. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +24 -21
  495. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  496. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +10 -4
  497. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  498. package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -1
  499. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +11 -10
  500. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  501. package/dist/editor/page-editor-chrome/SpellCheckHighlightings.d.ts +12 -0
  502. package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js +197 -0
  503. package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js.map +1 -0
  504. package/dist/editor/page-editor-chrome/SuggestionHighlightings.d.ts +1 -1
  505. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +226 -388
  506. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  507. package/dist/editor/page-editor-chrome/ValidationRulerMarks.d.ts +11 -0
  508. package/dist/editor/page-editor-chrome/ValidationRulerMarks.js +56 -0
  509. package/dist/editor/page-editor-chrome/ValidationRulerMarks.js.map +1 -0
  510. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +1 -1
  511. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +11 -8
  512. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  513. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +15 -2
  514. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +70 -9
  515. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  516. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.d.ts +44 -0
  517. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js +89 -0
  518. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js.map +1 -0
  519. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.d.ts +17 -0
  520. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js +53 -0
  521. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js.map +1 -0
  522. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +15 -0
  523. package/dist/editor/page-editor-chrome/overlay/geometry.js +40 -0
  524. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  525. package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.d.ts +11 -0
  526. package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js +84 -0
  527. package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js.map +1 -0
  528. package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.d.ts +34 -0
  529. package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js +229 -0
  530. package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js.map +1 -0
  531. package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.d.ts +9 -0
  532. package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js +34 -0
  533. package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js.map +1 -0
  534. package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.d.ts +49 -0
  535. package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js +241 -0
  536. package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js.map +1 -0
  537. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +7 -0
  538. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +63 -5
  539. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  540. package/dist/editor/page-editor-chrome/useBridgeRichTextFieldOptions.d.ts +12 -0
  541. package/dist/editor/page-editor-chrome/useBridgeRichTextFieldOptions.js +79 -0
  542. package/dist/editor/page-editor-chrome/useBridgeRichTextFieldOptions.js.map +1 -0
  543. package/dist/editor/page-editor-chrome/useComponentDragHandle.js +1 -1
  544. package/dist/editor/page-editor-chrome/useComponentDragHandle.js.map +1 -1
  545. package/dist/editor/page-editor-chrome/useDragInsertionGesture.js +1 -1
  546. package/dist/editor/page-editor-chrome/useDragInsertionGesture.js.map +1 -1
  547. package/dist/editor/page-editor-chrome/usePinnedHoveredComponentId.d.ts +1 -1
  548. package/dist/editor/page-editor-chrome/usePinnedHoveredComponentId.js +4 -2
  549. package/dist/editor/page-editor-chrome/usePinnedHoveredComponentId.js.map +1 -1
  550. package/dist/editor/page-viewer/CanvasOverviewRuler.d.ts +11 -0
  551. package/dist/editor/page-viewer/CanvasOverviewRuler.js +65 -0
  552. package/dist/editor/page-viewer/CanvasOverviewRuler.js.map +1 -0
  553. package/dist/editor/page-viewer/DeviceToolbar.d.ts +1 -1
  554. package/dist/editor/page-viewer/DeviceToolbar.js +8 -3
  555. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  556. package/dist/editor/page-viewer/DynamicRenderingsBar.d.ts +23 -0
  557. package/dist/editor/page-viewer/DynamicRenderingsBar.js +28 -0
  558. package/dist/editor/page-viewer/DynamicRenderingsBar.js.map +1 -0
  559. package/dist/editor/page-viewer/DynamicRenderingsStrip.d.ts +18 -0
  560. package/dist/editor/page-viewer/DynamicRenderingsStrip.js +29 -0
  561. package/dist/editor/page-viewer/DynamicRenderingsStrip.js.map +1 -0
  562. package/dist/editor/page-viewer/EditorForm.js +29 -24
  563. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  564. package/dist/editor/page-viewer/FeedbackMargin.d.ts +57 -0
  565. package/dist/editor/page-viewer/FeedbackMargin.js +378 -0
  566. package/dist/editor/page-viewer/FeedbackMargin.js.map +1 -0
  567. package/dist/editor/page-viewer/FeedbackMarginController.d.ts +76 -0
  568. package/dist/editor/page-viewer/FeedbackMarginController.js +241 -0
  569. package/dist/editor/page-viewer/FeedbackMarginController.js.map +1 -0
  570. package/dist/editor/page-viewer/FeedbackMarginMarker.d.ts +16 -0
  571. package/dist/editor/page-viewer/FeedbackMarginMarker.js +24 -0
  572. package/dist/editor/page-viewer/FeedbackMarginMarker.js.map +1 -0
  573. package/dist/editor/page-viewer/FeedbackMarginResizeHandle.d.ts +23 -0
  574. package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js +105 -0
  575. package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js.map +1 -0
  576. package/dist/editor/page-viewer/InteractivePreviewBar.d.ts +24 -0
  577. package/dist/editor/page-viewer/InteractivePreviewBar.js +31 -0
  578. package/dist/editor/page-viewer/InteractivePreviewBar.js.map +1 -0
  579. package/dist/editor/page-viewer/MiniMap.d.ts +9 -3
  580. package/dist/editor/page-viewer/MiniMap.js +50 -60
  581. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  582. package/dist/editor/page-viewer/MinimapDropTargets.d.ts +1 -1
  583. package/dist/editor/page-viewer/MinimapDropTargets.js +9 -7
  584. package/dist/editor/page-viewer/MinimapDropTargets.js.map +1 -1
  585. package/dist/editor/page-viewer/MobileCommentsPanel.d.ts +16 -0
  586. package/dist/editor/page-viewer/MobileCommentsPanel.js +112 -0
  587. package/dist/editor/page-viewer/MobileCommentsPanel.js.map +1 -0
  588. package/dist/editor/page-viewer/PageViewer.js +22 -67
  589. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  590. package/dist/editor/page-viewer/PageViewerFrame.d.ts +1 -0
  591. package/dist/editor/page-viewer/PageViewerFrame.js +610 -224
  592. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  593. package/dist/editor/page-viewer/RenderingAiCheck.d.ts +18 -0
  594. package/dist/editor/page-viewer/RenderingAiCheck.js +45 -0
  595. package/dist/editor/page-viewer/RenderingAiCheck.js.map +1 -0
  596. package/dist/editor/page-viewer/RenderingApprovalDialog.d.ts +32 -0
  597. package/dist/editor/page-viewer/RenderingApprovalDialog.js +191 -0
  598. package/dist/editor/page-viewer/RenderingApprovalDialog.js.map +1 -0
  599. package/dist/editor/page-viewer/SealedClientCodePreview.d.ts +17 -0
  600. package/dist/editor/page-viewer/SealedClientCodePreview.js +38 -0
  601. package/dist/editor/page-viewer/SealedClientCodePreview.js.map +1 -0
  602. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +9 -0
  603. package/dist/editor/page-viewer/bridgeFieldPatch.js +21 -0
  604. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  605. package/dist/editor/page-viewer/bridgeInlineEditSession.js +8 -0
  606. package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -1
  607. package/dist/editor/page-viewer/canvasFrameNavigation.d.ts +18 -0
  608. package/dist/editor/page-viewer/canvasFrameNavigation.js +36 -0
  609. package/dist/editor/page-viewer/canvasFrameNavigation.js.map +1 -0
  610. package/dist/editor/page-viewer/canvasLoadSettling.d.ts +42 -0
  611. package/dist/editor/page-viewer/canvasLoadSettling.js +46 -0
  612. package/dist/editor/page-viewer/canvasLoadSettling.js.map +1 -0
  613. package/dist/editor/page-viewer/canvasScrollHandoff.d.ts +34 -0
  614. package/dist/editor/page-viewer/canvasScrollHandoff.js +55 -0
  615. package/dist/editor/page-viewer/canvasScrollHandoff.js.map +1 -0
  616. package/dist/editor/page-viewer/feedbackMarginLayout.d.ts +119 -0
  617. package/dist/editor/page-viewer/feedbackMarginLayout.js +155 -0
  618. package/dist/editor/page-viewer/feedbackMarginLayout.js.map +1 -0
  619. package/dist/editor/page-viewer/feedbackMarginSources.d.ts +36 -0
  620. package/dist/editor/page-viewer/feedbackMarginSources.js +196 -0
  621. package/dist/editor/page-viewer/feedbackMarginSources.js.map +1 -0
  622. package/dist/editor/page-viewer/feedbackMarginWidth.d.ts +43 -0
  623. package/dist/editor/page-viewer/feedbackMarginWidth.js +107 -0
  624. package/dist/editor/page-viewer/feedbackMarginWidth.js.map +1 -0
  625. package/dist/editor/page-viewer/interactivePreview.d.ts +168 -0
  626. package/dist/editor/page-viewer/interactivePreview.js +344 -0
  627. package/dist/editor/page-viewer/interactivePreview.js.map +1 -0
  628. package/dist/editor/page-viewer/minimapViewport.js +5 -2
  629. package/dist/editor/page-viewer/minimapViewport.js.map +1 -1
  630. package/dist/editor/page-viewer/openPageItems.d.ts +29 -0
  631. package/dist/editor/page-viewer/openPageItems.js +73 -0
  632. package/dist/editor/page-viewer/openPageItems.js.map +1 -0
  633. package/dist/editor/page-viewer/overviewRuler.d.ts +128 -0
  634. package/dist/editor/page-viewer/overviewRuler.js +226 -0
  635. package/dist/editor/page-viewer/overviewRuler.js.map +1 -0
  636. package/dist/editor/page-viewer/pageViewContext.d.ts +99 -37
  637. package/dist/editor/page-viewer/pageViewContext.js +207 -238
  638. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  639. package/dist/editor/page-viewer/renderingApproval.d.ts +59 -0
  640. package/dist/editor/page-viewer/renderingApproval.js +186 -0
  641. package/dist/editor/page-viewer/renderingApproval.js.map +1 -0
  642. package/dist/editor/page-viewer/renderingChanges.d.ts +29 -0
  643. package/dist/editor/page-viewer/renderingChanges.js +40 -0
  644. package/dist/editor/page-viewer/renderingChanges.js.map +1 -0
  645. package/dist/editor/page-viewer/scrollIntoViewTextRanges.d.ts +23 -0
  646. package/dist/editor/page-viewer/scrollIntoViewTextRanges.js +26 -0
  647. package/dist/editor/page-viewer/scrollIntoViewTextRanges.js.map +1 -0
  648. package/dist/editor/page-viewer/useInteractivePreview.d.ts +77 -0
  649. package/dist/editor/page-viewer/useInteractivePreview.js +210 -0
  650. package/dist/editor/page-viewer/useInteractivePreview.js.map +1 -0
  651. package/dist/editor/pageModel.d.ts +12 -0
  652. package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
  653. package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
  654. package/dist/editor/personalization/PersonalizationPanel.js +1 -1
  655. package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
  656. package/dist/editor/reviews/CollapsibleText.d.ts +13 -0
  657. package/dist/editor/reviews/CollapsibleText.js +41 -0
  658. package/dist/editor/reviews/CollapsibleText.js.map +1 -0
  659. package/dist/editor/reviews/Comment.d.ts +10 -1
  660. package/dist/editor/reviews/Comment.js +47 -26
  661. package/dist/editor/reviews/Comment.js.map +1 -1
  662. package/dist/editor/reviews/CommentDisplayPopover.js +29 -25
  663. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  664. package/dist/editor/reviews/CommentEditor.d.ts +25 -1
  665. package/dist/editor/reviews/CommentEditor.js +130 -24
  666. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  667. package/dist/editor/reviews/CommentPopover.d.ts +0 -4
  668. package/dist/editor/reviews/CommentPopover.js +4 -8
  669. package/dist/editor/reviews/CommentPopover.js.map +1 -1
  670. package/dist/editor/reviews/CommentQuote.d.ts +10 -1
  671. package/dist/editor/reviews/CommentQuote.js +15 -10
  672. package/dist/editor/reviews/CommentQuote.js.map +1 -1
  673. package/dist/editor/reviews/CommentTargetOutline.d.ts +13 -0
  674. package/dist/editor/reviews/CommentTargetOutline.js +21 -0
  675. package/dist/editor/reviews/CommentTargetOutline.js.map +1 -0
  676. package/dist/editor/reviews/CommentTargetPickerDomLayer.d.ts +7 -0
  677. package/dist/editor/reviews/CommentTargetPickerDomLayer.js +117 -0
  678. package/dist/editor/reviews/CommentTargetPickerDomLayer.js.map +1 -0
  679. package/dist/editor/reviews/CommentThreadAgentLink.d.ts +6 -1
  680. package/dist/editor/reviews/CommentThreadAgentLink.js +4 -4
  681. package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -1
  682. package/dist/editor/reviews/CommentThreadCard.d.ts +34 -0
  683. package/dist/editor/reviews/CommentThreadCard.js +156 -0
  684. package/dist/editor/reviews/CommentThreadCard.js.map +1 -0
  685. package/dist/editor/reviews/CommentView.d.ts +7 -1
  686. package/dist/editor/reviews/CommentView.js +24 -6
  687. package/dist/editor/reviews/CommentView.js.map +1 -1
  688. package/dist/editor/reviews/Comments.js +5 -14
  689. package/dist/editor/reviews/Comments.js.map +1 -1
  690. package/dist/editor/reviews/CreateReviewDialog.js +36 -9
  691. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  692. package/dist/editor/reviews/EditReviewSettingsDialog.js +1 -1
  693. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  694. package/dist/editor/reviews/FeedbackCard.d.ts +16 -1
  695. package/dist/editor/reviews/FeedbackCard.js +14 -3
  696. package/dist/editor/reviews/FeedbackCard.js.map +1 -1
  697. package/dist/editor/reviews/FeedbackFilters.d.ts +9 -5
  698. package/dist/editor/reviews/FeedbackFilters.js +15 -36
  699. package/dist/editor/reviews/FeedbackFilters.js.map +1 -1
  700. package/dist/editor/reviews/FeedbackModeIntro.d.ts +7 -1
  701. package/dist/editor/reviews/FeedbackModeIntro.js +11 -6
  702. package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
  703. package/dist/editor/reviews/MentionText.d.ts +2 -1
  704. package/dist/editor/reviews/MentionText.js +5 -3
  705. package/dist/editor/reviews/MentionText.js.map +1 -1
  706. package/dist/editor/reviews/MultiReviewManager.js +18 -3
  707. package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
  708. package/dist/editor/reviews/ReviewItemsPanel.js +4 -0
  709. package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
  710. package/dist/editor/reviews/SuggestedEdit.d.ts +10 -1
  711. package/dist/editor/reviews/SuggestedEdit.js +77 -10
  712. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  713. package/dist/editor/reviews/SuggestionCommentThread.d.ts +5 -1
  714. package/dist/editor/reviews/SuggestionCommentThread.js +48 -17
  715. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  716. package/dist/editor/reviews/SuggestionDisplayPopover.d.ts +1 -3
  717. package/dist/editor/reviews/SuggestionDisplayPopover.js +2 -7
  718. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  719. package/dist/editor/reviews/SuggestionThreadCard.d.ts +19 -0
  720. package/dist/editor/reviews/SuggestionThreadCard.js +25 -0
  721. package/dist/editor/reviews/SuggestionThreadCard.js.map +1 -0
  722. package/dist/editor/reviews/addCommentOnTarget.d.ts +22 -0
  723. package/dist/editor/reviews/addCommentOnTarget.js +32 -0
  724. package/dist/editor/reviews/addCommentOnTarget.js.map +1 -0
  725. package/dist/editor/reviews/applySuggestedEditActions.js +7 -1
  726. package/dist/editor/reviews/applySuggestedEditActions.js.map +1 -1
  727. package/dist/editor/reviews/balloonLayout.d.ts +51 -0
  728. package/dist/editor/reviews/balloonLayout.js +101 -0
  729. package/dist/editor/reviews/balloonLayout.js.map +1 -0
  730. package/dist/editor/reviews/commentImages.d.ts +1 -2
  731. package/dist/editor/reviews/commentImages.js +1 -37
  732. package/dist/editor/reviews/commentImages.js.map +1 -1
  733. package/dist/editor/reviews/commentTargetPicker.d.ts +114 -0
  734. package/dist/editor/reviews/commentTargetPicker.js +153 -0
  735. package/dist/editor/reviews/commentTargetPicker.js.map +1 -0
  736. package/dist/editor/reviews/feedbackAvatar.js +2 -1
  737. package/dist/editor/reviews/feedbackAvatar.js.map +1 -1
  738. package/dist/editor/reviews/feedbackBalloonDate.d.ts +8 -0
  739. package/dist/editor/reviews/feedbackBalloonDate.js +22 -0
  740. package/dist/editor/reviews/feedbackBalloonDate.js.map +1 -0
  741. package/dist/editor/reviews/feedbackDrafts.d.ts +49 -0
  742. package/dist/editor/reviews/feedbackDrafts.js +74 -0
  743. package/dist/editor/reviews/feedbackDrafts.js.map +1 -0
  744. package/dist/editor/reviews/feedbackHoverState.d.ts +18 -0
  745. package/dist/editor/reviews/feedbackHoverState.js +35 -0
  746. package/dist/editor/reviews/feedbackHoverState.js.map +1 -0
  747. package/dist/editor/reviews/feedbackPersonFilter.d.ts +3 -0
  748. package/dist/editor/reviews/feedbackPersonFilter.js +32 -0
  749. package/dist/editor/reviews/feedbackPersonFilter.js.map +1 -0
  750. package/dist/editor/reviews/feedbackSelection.js +7 -3
  751. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  752. package/dist/editor/reviews/feedbackThreadSelection.d.ts +10 -0
  753. package/dist/editor/reviews/feedbackThreadSelection.js +31 -0
  754. package/dist/editor/reviews/feedbackThreadSelection.js.map +1 -0
  755. package/dist/editor/reviews/feedbackThreads.d.ts +50 -0
  756. package/dist/editor/reviews/feedbackThreads.js +135 -0
  757. package/dist/editor/reviews/feedbackThreads.js.map +1 -0
  758. package/dist/editor/reviews/feedbackWheelForwarding.d.ts +34 -0
  759. package/dist/editor/reviews/feedbackWheelForwarding.js +108 -0
  760. package/dist/editor/reviews/feedbackWheelForwarding.js.map +1 -0
  761. package/dist/editor/reviews/openCommentsFeedback.d.ts +1 -1
  762. package/dist/editor/reviews/openCommentsFeedback.js +2 -1
  763. package/dist/editor/reviews/openCommentsFeedback.js.map +1 -1
  764. package/dist/editor/reviews/pendingReviewSelection.d.ts +13 -0
  765. package/dist/editor/reviews/pendingReviewSelection.js +29 -0
  766. package/dist/editor/reviews/pendingReviewSelection.js.map +1 -0
  767. package/dist/editor/reviews/requestReview.d.ts +27 -0
  768. package/dist/editor/reviews/requestReview.js +36 -0
  769. package/dist/editor/reviews/requestReview.js.map +1 -0
  770. package/dist/editor/reviews/reviewUrlScope.d.ts +23 -0
  771. package/dist/editor/reviews/reviewUrlScope.js +86 -0
  772. package/dist/editor/reviews/reviewUrlScope.js.map +1 -0
  773. package/dist/editor/reviews/scrollWithin.d.ts +29 -0
  774. package/dist/editor/reviews/scrollWithin.js +87 -0
  775. package/dist/editor/reviews/scrollWithin.js.map +1 -0
  776. package/dist/editor/reviews/subtreeFeedback.d.ts +57 -0
  777. package/dist/editor/reviews/subtreeFeedback.js +137 -0
  778. package/dist/editor/reviews/subtreeFeedback.js.map +1 -0
  779. package/dist/editor/reviews/useCommentImagePaste.d.ts +9 -1
  780. package/dist/editor/reviews/useCommentImagePaste.js +68 -4
  781. package/dist/editor/reviews/useCommentImagePaste.js.map +1 -1
  782. package/dist/editor/reviews/useFeedbackThreads.d.ts +35 -0
  783. package/dist/editor/reviews/useFeedbackThreads.js +137 -0
  784. package/dist/editor/reviews/useFeedbackThreads.js.map +1 -0
  785. package/dist/editor/reviews/useMeasuredHeights.d.ts +25 -0
  786. package/dist/editor/reviews/useMeasuredHeights.js +176 -0
  787. package/dist/editor/reviews/useMeasuredHeights.js.map +1 -0
  788. package/dist/editor/reviews/usePendingFeedbackFocus.d.ts +7 -0
  789. package/dist/editor/reviews/usePendingFeedbackFocus.js +42 -0
  790. package/dist/editor/reviews/usePendingFeedbackFocus.js.map +1 -0
  791. package/dist/editor/services/agentService.d.ts +101 -5
  792. package/dist/editor/services/agentService.js +16 -0
  793. package/dist/editor/services/agentService.js.map +1 -1
  794. package/dist/editor/services/aiService.d.ts +2 -0
  795. package/dist/editor/services/aiService.js.map +1 -1
  796. package/dist/editor/services/contentService.d.ts +11 -1
  797. package/dist/editor/services/contentService.js +2 -1
  798. package/dist/editor/services/contentService.js.map +1 -1
  799. package/dist/editor/services/editService.d.ts +2 -0
  800. package/dist/editor/services/editService.js.map +1 -1
  801. package/dist/editor/services/indexService.d.ts +1 -0
  802. package/dist/editor/services/indexService.js +4 -0
  803. package/dist/editor/services/indexService.js.map +1 -1
  804. package/dist/editor/services/mcpAccessService.d.ts +93 -0
  805. package/dist/editor/services/mcpAccessService.js +41 -0
  806. package/dist/editor/services/mcpAccessService.js.map +1 -0
  807. package/dist/editor/services/previewTokenService.d.ts +14 -0
  808. package/dist/editor/services/previewTokenService.js +34 -0
  809. package/dist/editor/services/previewTokenService.js.map +1 -0
  810. package/dist/editor/services/renderingsService.d.ts +117 -0
  811. package/dist/editor/services/renderingsService.js +245 -0
  812. package/dist/editor/services/renderingsService.js.map +1 -0
  813. package/dist/editor/services/reviewsService.d.ts +6 -1
  814. package/dist/editor/services/reviewsService.js +14 -6
  815. package/dist/editor/services/reviewsService.js.map +1 -1
  816. package/dist/editor/services/serviceHelper.d.ts +17 -1
  817. package/dist/editor/services/serviceHelper.js +67 -12
  818. package/dist/editor/services/serviceHelper.js.map +1 -1
  819. package/dist/editor/services/spellCheckService.d.ts +13 -0
  820. package/dist/editor/services/spellCheckService.js +33 -0
  821. package/dist/editor/services/spellCheckService.js.map +1 -0
  822. package/dist/editor/services/suggestedEditsService.d.ts +1 -0
  823. package/dist/editor/services/suggestedEditsService.js +7 -0
  824. package/dist/editor/services/suggestedEditsService.js.map +1 -1
  825. package/dist/editor/settings/MigrationJournalCard.js +2 -2
  826. package/dist/editor/settings/MigrationJournalCard.js.map +1 -1
  827. package/dist/editor/settings/StatusSummary.js +5 -2
  828. package/dist/editor/settings/StatusSummary.js.map +1 -1
  829. package/dist/editor/settings/index/CollectionWarningsDisplay.js +1 -1
  830. package/dist/editor/settings/index/CollectionWarningsDisplay.js.map +1 -1
  831. package/dist/editor/settings/index/IndexGenerationsSection.d.ts +4 -5
  832. package/dist/editor/settings/index/IndexGenerationsSection.js +83 -33
  833. package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -1
  834. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -1
  835. package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
  836. package/dist/editor/settings/panels/AgentToolsPanel.js +1 -1
  837. package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
  838. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +1 -1
  839. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
  840. package/dist/editor/settings/panels/McpAccessPanel.d.ts +7 -0
  841. package/dist/editor/settings/panels/McpAccessPanel.js +96 -0
  842. package/dist/editor/settings/panels/McpAccessPanel.js.map +1 -0
  843. package/dist/editor/settings/panels/McpAccessSettingsView.d.ts +8 -0
  844. package/dist/editor/settings/panels/McpAccessSettingsView.js +221 -0
  845. package/dist/editor/settings/panels/McpAccessSettingsView.js.map +1 -0
  846. package/dist/editor/settings/panels/ModelConfigPanel.js +1 -0
  847. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
  848. package/dist/editor/settings/panels/ModelsPanel.js +60 -6
  849. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  850. package/dist/editor/settings/panels/PersistentLogsPanel.js +2 -1
  851. package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
  852. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +1 -1
  853. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
  854. package/dist/editor/settings/panels/ProvidersPanel.js +2 -1
  855. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  856. package/dist/editor/settings/panels/SearchConfigPanel.js +6 -5
  857. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  858. package/dist/editor/settings/panels/SpellCheckPanel.d.ts +8 -0
  859. package/dist/editor/settings/panels/SpellCheckPanel.js +253 -0
  860. package/dist/editor/settings/panels/SpellCheckPanel.js.map +1 -0
  861. package/dist/editor/settings/panels/StatusPanel.js +5 -6
  862. package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
  863. package/dist/editor/settings/panels/UserPreferencesPanel.js +5 -2
  864. package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
  865. package/dist/editor/settings/panels/index.d.ts +2 -0
  866. package/dist/editor/settings/panels/index.js +2 -0
  867. package/dist/editor/settings/panels/index.js.map +1 -1
  868. package/dist/editor/sidebar/ComponentPalette.js +7 -3
  869. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  870. package/dist/editor/sidebar/ComponentTree.d.ts +1 -1
  871. package/dist/editor/sidebar/ComponentTree.js +32 -56
  872. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  873. package/dist/editor/sidebar/DictionaryEditor.js +2 -1
  874. package/dist/editor/sidebar/DictionaryEditor.js.map +1 -1
  875. package/dist/editor/sidebar/EditHistory.js +5 -4
  876. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  877. package/dist/editor/sidebar/FeedbackSidebar.d.ts +7 -0
  878. package/dist/editor/sidebar/FeedbackSidebar.js +300 -0
  879. package/dist/editor/sidebar/FeedbackSidebar.js.map +1 -0
  880. package/dist/editor/sidebar/OperationDetailsContent.js +50 -0
  881. package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -1
  882. package/dist/editor/sidebar/OperationItem.js +2 -0
  883. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  884. package/dist/editor/sidebar/Sessions.js +3 -1
  885. package/dist/editor/sidebar/Sessions.js.map +1 -1
  886. package/dist/editor/sidebar/Validation.js +1 -1
  887. package/dist/editor/sidebar/Validation.js.map +1 -1
  888. package/dist/editor/sidebar/Workbox.js +3 -108
  889. package/dist/editor/sidebar/Workbox.js.map +1 -1
  890. package/dist/editor/sidebar/liveComponentThumbnails.d.ts +1 -1
  891. package/dist/editor/sidebar/liveComponentThumbnails.js +19 -14
  892. package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -1
  893. package/dist/editor/spellcheck/canvasSpellCheckContextMenu.d.ts +30 -0
  894. package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js +69 -0
  895. package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js.map +1 -0
  896. package/dist/editor/spellcheck/htmlSpellDocument.d.ts +60 -0
  897. package/dist/editor/spellcheck/htmlSpellDocument.js +181 -0
  898. package/dist/editor/spellcheck/htmlSpellDocument.js.map +1 -0
  899. package/dist/editor/spellcheck/htmlSpellTokenizer.d.ts +45 -0
  900. package/dist/editor/spellcheck/htmlSpellTokenizer.js +277 -0
  901. package/dist/editor/spellcheck/htmlSpellTokenizer.js.map +1 -0
  902. package/dist/editor/spellcheck/replacementGuard.d.ts +27 -0
  903. package/dist/editor/spellcheck/replacementGuard.js +29 -0
  904. package/dist/editor/spellcheck/replacementGuard.js.map +1 -0
  905. package/dist/editor/spellcheck/spellCheckCanvasStore.d.ts +17 -0
  906. package/dist/editor/spellcheck/spellCheckCanvasStore.js +37 -0
  907. package/dist/editor/spellcheck/spellCheckCanvasStore.js.map +1 -0
  908. package/dist/editor/spellcheck/spellCheckCanvasTargets.d.ts +71 -0
  909. package/dist/editor/spellcheck/spellCheckCanvasTargets.js +126 -0
  910. package/dist/editor/spellcheck/spellCheckCanvasTargets.js.map +1 -0
  911. package/dist/editor/spellcheck/spellCheckClient.d.ts +66 -0
  912. package/dist/editor/spellcheck/spellCheckClient.js +0 -0
  913. package/dist/editor/spellcheck/spellCheckClient.js.map +1 -0
  914. package/dist/editor/spellcheck/spellCheckContextMenu.d.ts +52 -0
  915. package/dist/editor/spellcheck/spellCheckContextMenu.js +120 -0
  916. package/dist/editor/spellcheck/spellCheckContextMenu.js.map +1 -0
  917. package/dist/editor/spellcheck/spellCheckReplace.d.ts +8 -0
  918. package/dist/editor/spellcheck/spellCheckReplace.js +20 -0
  919. package/dist/editor/spellcheck/spellCheckReplace.js.map +1 -0
  920. package/dist/editor/spellcheck/spellCheckStyles.d.ts +11 -0
  921. package/dist/editor/spellcheck/spellCheckStyles.js +12 -0
  922. package/dist/editor/spellcheck/spellCheckStyles.js.map +1 -0
  923. package/dist/editor/spellcheck/spellCheckTypes.d.ts +94 -0
  924. package/dist/editor/spellcheck/spellCheckTypes.js +2 -0
  925. package/dist/editor/spellcheck/spellCheckTypes.js.map +1 -0
  926. package/dist/editor/spellcheck/textMarkHitTest.d.ts +14 -0
  927. package/dist/editor/spellcheck/textMarkHitTest.js +39 -0
  928. package/dist/editor/spellcheck/textMarkHitTest.js.map +1 -0
  929. package/dist/editor/spellcheck/useSpellCheck.d.ts +16 -0
  930. package/dist/editor/spellcheck/useSpellCheck.js +57 -0
  931. package/dist/editor/spellcheck/useSpellCheck.js.map +1 -0
  932. package/dist/editor/ui/DynamicRenderingsPublishWarning.d.ts +14 -0
  933. package/dist/editor/ui/DynamicRenderingsPublishWarning.js +40 -0
  934. package/dist/editor/ui/DynamicRenderingsPublishWarning.js.map +1 -0
  935. package/dist/editor/ui/ItemNameDialogNew.js +11 -2
  936. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  937. package/dist/editor/ui/ItemSearch.d.ts +2 -0
  938. package/dist/editor/ui/ItemSearch.js +2 -2
  939. package/dist/editor/ui/ItemSearch.js.map +1 -1
  940. package/dist/editor/ui/PublishDialog.d.ts +2 -0
  941. package/dist/editor/ui/PublishDialog.js +4 -1
  942. package/dist/editor/ui/PublishDialog.js.map +1 -1
  943. package/dist/editor/ui/PublishItemDialog.js +3 -2
  944. package/dist/editor/ui/PublishItemDialog.js.map +1 -1
  945. package/dist/editor/ui/PublishReadinessSummary.js +1 -1
  946. package/dist/editor/ui/PublishReadinessSummary.js.map +1 -1
  947. package/dist/editor/ui/PublishRestrictionsDialog.d.ts +33 -0
  948. package/dist/editor/ui/PublishRestrictionsDialog.js +208 -38
  949. package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
  950. package/dist/editor/ui/RootItemPicker.d.ts +18 -0
  951. package/dist/editor/ui/RootItemPicker.js +112 -0
  952. package/dist/editor/ui/RootItemPicker.js.map +1 -0
  953. package/dist/editor/ui/WorkboxItemsTable.js +1 -1
  954. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  955. package/dist/editor/utils/dataTransferImages.d.ts +7 -0
  956. package/dist/editor/utils/dataTransferImages.js +43 -0
  957. package/dist/editor/utils/dataTransferImages.js.map +1 -0
  958. package/dist/editor/utils/itemConverters.js +9 -0
  959. package/dist/editor/utils/itemConverters.js.map +1 -1
  960. package/dist/editor/utils/keyboardNavigation.js +38 -4
  961. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  962. package/dist/editor/utils.d.ts +4 -4
  963. package/dist/editor/utils.js +9 -8
  964. package/dist/editor/utils.js.map +1 -1
  965. package/dist/editor/validation/navigateToValidationIssue.d.ts +2 -2
  966. package/dist/editor/validation/navigateToValidationIssue.js +1 -1
  967. package/dist/editor/validation/navigateToValidationIssue.js.map +1 -1
  968. package/dist/editor/validation/validationRulerIssues.d.ts +17 -0
  969. package/dist/editor/validation/validationRulerIssues.js +44 -0
  970. package/dist/editor/validation/validationRulerIssues.js.map +1 -0
  971. package/dist/editor/views/CompareView.js +3 -4
  972. package/dist/editor/views/CompareView.js.map +1 -1
  973. package/dist/editor/views/EditorSlot.js +10 -4
  974. package/dist/editor/views/EditorSlot.js.map +1 -1
  975. package/dist/editor/views/ItemEditor.d.ts +3 -1
  976. package/dist/editor/views/ItemEditor.js +43 -38
  977. package/dist/editor/views/ItemEditor.js.map +1 -1
  978. package/dist/editor/views/ItemEditorPane.js +3 -3
  979. package/dist/editor/views/ItemEditorPane.js.map +1 -1
  980. package/dist/editor/views/SingleEditView.js +10 -32
  981. package/dist/editor/views/SingleEditView.js.map +1 -1
  982. package/dist/editor/views/editorSlotContext.js +62 -90
  983. package/dist/editor/views/editorSlotContext.js.map +1 -1
  984. package/dist/index.d.ts +10 -5
  985. package/dist/index.js +8 -4
  986. package/dist/index.js.map +1 -1
  987. package/dist/licensing/FeatureGate.js +1 -1
  988. package/dist/licensing/FeatureGate.js.map +1 -1
  989. package/dist/licensing/LicenseContext.js +31 -17
  990. package/dist/licensing/LicenseContext.js.map +1 -1
  991. package/dist/revision.d.ts +2 -2
  992. package/dist/revision.js +2 -2
  993. package/dist/setup/services/setupWizardService.d.ts +6 -2
  994. package/dist/setup/services/setupWizardService.js +10 -0
  995. package/dist/setup/services/setupWizardService.js.map +1 -1
  996. package/dist/setup/wizard/steps/AddModelDialog.js +1 -0
  997. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
  998. package/dist/setup/wizard/steps/ImportModelDialog.js +2 -1
  999. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  1000. package/dist/splash-screen/ModernSplashScreen.js +4 -3
  1001. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  1002. package/dist/splash-screen/RecentPages.js +5 -2
  1003. package/dist/splash-screen/RecentPages.js.map +1 -1
  1004. package/dist/task-board/TaskBoardWorkspace.js +49 -12
  1005. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  1006. package/dist/task-board/components/GoalsMatrix.js +1 -1
  1007. package/dist/task-board/components/GoalsMatrix.js.map +1 -1
  1008. package/dist/task-board/components/IssuePanel.js +4 -4
  1009. package/dist/task-board/components/IssuePanel.js.map +1 -1
  1010. package/dist/task-board/components/ProjectBudgetBanner.js +1 -1
  1011. package/dist/task-board/components/ProjectBudgetBanner.js.map +1 -1
  1012. package/dist/task-board/components/ProjectGoalsPanel.js +1 -1
  1013. package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
  1014. package/dist/task-board/components/TaskDetailPanel.js +18 -8
  1015. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  1016. package/dist/task-board/components/WizardCommunicationCards.js +1 -1
  1017. package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
  1018. package/dist/task-board/services/taskService.d.ts +1 -2
  1019. package/dist/task-board/services/taskService.js +0 -3
  1020. package/dist/task-board/services/taskService.js.map +1 -1
  1021. package/dist/task-board/taskBlockers.d.ts +10 -0
  1022. package/dist/task-board/taskBlockers.js +66 -0
  1023. package/dist/task-board/taskBlockers.js.map +1 -0
  1024. package/dist/task-board/types.d.ts +0 -7
  1025. package/dist/task-board/utils/projectDashboardModel.js +7 -1
  1026. package/dist/task-board/utils/projectDashboardModel.js.map +1 -1
  1027. package/dist/task-board/views/DependencyGraphView.d.ts +22 -0
  1028. package/dist/task-board/views/DependencyGraphView.js +111 -14
  1029. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  1030. package/dist/task-board/views/KanbanView.js +8 -10
  1031. package/dist/task-board/views/KanbanView.js.map +1 -1
  1032. package/dist/task-board/views/ProjectDashboardView.js +5 -13
  1033. package/dist/task-board/views/ProjectDashboardView.js.map +1 -1
  1034. package/dist/tour/Tour.js +4 -1
  1035. package/dist/tour/Tour.js.map +1 -1
  1036. package/dist/tour/sandbox-tour-copy.d.ts +8 -0
  1037. package/dist/tour/sandbox-tour-copy.js +8 -0
  1038. package/dist/tour/sandbox-tour-copy.js.map +1 -1
  1039. package/dist/tour/sandbox-tour.d.ts +3 -0
  1040. package/dist/tour/sandbox-tour.js +107 -3
  1041. package/dist/tour/sandbox-tour.js.map +1 -1
  1042. package/dist/types.d.ts +85 -1
  1043. package/package.json +6 -2
  1044. package/styles.css +17 -0
  1045. package/dist/editor/page-editor-chrome/bridgeLinkValue.d.ts +0 -10
  1046. package/dist/editor/page-editor-chrome/bridgeLinkValue.js +0 -55
  1047. package/dist/editor/page-editor-chrome/bridgeLinkValue.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRepositoryItemRefresh } from "./hooks/useRepositoryItemRefresh";
3
4
  import React, { useState, useEffect, useLayoutEffect, useRef, useCallback, useMemo, startTransition, } from "react";
4
5
  import { toast } from "sonner";
5
6
  import { isPerfTraceActive, perfTracePaintStep, perfTraceStep, } from "../perfTrace";
@@ -20,8 +21,10 @@ import { onSocketReconnect as onAgentSocketReconnect } from "../services/agentSu
20
21
  import { useEditorWebSocket } from "./hooks/useEditorWebSocket";
21
22
  import { useClientInfoRegistration } from "./hooks/useClientInfoRegistration";
22
23
  import { getEditorRealtime } from "./realtime/realtimeTransport";
23
- import { createEditorSocketDiagnostics, } from "./socketDiagnostics";
24
+ import { createEditorSocketDiagnostics } from "./socketDiagnostics";
25
+ import { createValueStore, useValueStore } from "./valueStore";
24
26
  import { localStorageService } from "../services/localStorageService";
27
+ import { loadPersistedClipboard, persistClipboard, readClipboardFromStorageEvent, } from "./clipboardStorage";
25
28
  import { useSocketMessageHandler } from "./hooks/useSocketMessageHandler";
26
29
  import "react-json-view-lite/dist/index.css";
27
30
  import { MediaSelector, } from "../media-selector/MediaSelector";
@@ -41,6 +44,7 @@ import { filterRemovedComments } from "../reviews/commentState";
41
44
  import { post } from "../services/serviceHelper";
42
45
  import { CONTENT_TREE_SIDEBAR_ID } from "../sidebar/contentTreeConstants";
43
46
  import { PageViewerFrame } from "../page-viewer/PageViewerFrame";
47
+ import { isRenderingOnCanvas } from "../page-viewer/renderingChanges";
44
48
  import { useItemsRepository } from "./itemsRepository";
45
49
  import { logFieldValueDiagnostic, summarizeFieldDescriptor, } from "../fieldValueDiagnostics";
46
50
  import { Spinner } from "../ui/Spinner";
@@ -56,13 +60,14 @@ import { buildBridgeInsertTextCommand } from "../ai/bridgeInlineTextReplace";
56
60
  import { GuidanceOverlay } from "../ai/GuidanceOverlay";
57
61
  import { AgentDialogHandler } from "../ai/dialogs";
58
62
  import { setActiveAgentConversation } from "../ai/useActiveAgentConversation";
59
- import { CANVAS_REFRESH_COMPLETED_EVENT, usePageViewContext, } from "../page-viewer/pageViewContext";
63
+ import { CANVAS_REFRESH_COMPLETED_EVENT, usePageViewContext, usePageViewState, usePageViewStates, } from "../page-viewer/pageViewContext";
60
64
  import { QuickItemSwitcher } from "../QuickItemSwitcher";
61
65
  import { useEditorSlotContext, } from "../views/editorSlotContext";
62
66
  import { getComments, getAvailableCommentTags, } from "../services/reviewsService";
63
67
  import { useReviews } from "../reviews/useReviews";
64
68
  import { closeActiveCommentPopover, COMMENT_POPOVER_OVERLAY_ID, } from "../reviews/CommentPopover";
65
69
  import { isSuggestedEditRemoved } from "../reviews/suggestedEditState";
70
+ import { useLeftoverReviewIdCleanup } from "../reviews/reviewUrlScope";
66
71
  import { COMMENT_TRANSIENT_ELEMENT_KEY, COMMENT_TRANSIENT_SELECTION_RECT, } from "../reviews/commentTransientSelection";
67
72
  import uuid from "react-uuid";
68
73
  import { flushSync } from "react-dom";
@@ -188,16 +193,28 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
188
193
  const [selectedForInsertion, setSelectedForInsertion] = useState("");
189
194
  const [refreshCompletedFlag, setRefreshCompletedFlag] = useState(false);
190
195
  const [isRefreshing, setIsRefreshing] = useState(false);
191
- // Token incremented by editor slots when their page model finishes building.
192
- // Forces the isRefreshingEffect to re-evaluate with the fresh page from the mutable slot ref.
193
- const [pageModelReadyToken, setPageModelReadyToken] = useState(0);
194
- const notifyPageModelReady = useCallback(() => setPageModelReadyToken((c) => c + 1), []);
195
196
  const [dragObject, setDragObject] = useState();
196
197
  // Pointer gestures can start and end between React's commit and passive-effect
197
198
  // phases. Keep the event-time payload synchronous so a bridge listener from
198
199
  // the preceding render cannot observe a stale `dragObject` closure at drop.
199
200
  const dragObjectRef = useRef(undefined);
200
- const [clipboard, setClipboard] = useState(null);
201
+ // The clipboard outlives page switches and reloads (and syncs across tabs) so a
202
+ // component copied on one page can be pasted on another.
203
+ const [clipboard, setClipboard] = useState(() => loadPersistedClipboard());
204
+ useEffect(() => {
205
+ persistClipboard(clipboard);
206
+ }, [clipboard]);
207
+ useEffect(() => {
208
+ if (typeof window === "undefined")
209
+ return;
210
+ const handleStorage = (event) => {
211
+ const next = readClipboardFromStorageEvent(event);
212
+ if (next !== undefined)
213
+ setClipboard(next);
214
+ };
215
+ window.addEventListener("storage", handleStorage);
216
+ return () => window.removeEventListener("storage", handleStorage);
217
+ }, []);
201
218
  // media selection handled by useMediaSelector hook
202
219
  const [scrollIntoView, setScrollIntoView] = useState();
203
220
  const confirmationDialogRef = useRef(null);
@@ -236,11 +253,32 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
236
253
  const [item, setItem] = useState();
237
254
  const [focusedField, setFocusedField] = useState();
238
255
  const focusedFieldRef = useRef(undefined);
239
- const [selectedRange, setSelectedRange] = useState();
256
+ // A store, not state: a text selection is republished on every step of a
257
+ // canvas drag or Shift+Arrow, and a change of the EditContext value
258
+ // re-renders every consumer in the editor (~300 ms on a large page).
259
+ // Components that render from it subscribe with useSelectedRange().
260
+ const [selectedRangeStore] = useState(() => createValueStore(undefined));
240
261
  const lastTextSelectionRangeRef = useRef(undefined);
262
+ // Caret-only form positions change on every focus, click and typing pause,
263
+ // but are only read when something inserts at the caret, so they are not
264
+ // published at all. Whichever of the two was recorded last wins.
265
+ const caretRangeRef = useRef(undefined);
266
+ const setSelectedRange = useCallback((next) => {
267
+ caretRangeRef.current = undefined;
268
+ selectedRangeStore.set(next);
269
+ const published = selectedRangeStore.get();
270
+ if (isUsableTextSelectionRange(published)) {
271
+ lastTextSelectionRangeRef.current = published;
272
+ }
273
+ }, [selectedRangeStore]);
274
+ const setCaretRange = useCallback((range) => {
275
+ caretRangeRef.current = range;
276
+ selectedRangeStore.set(undefined);
277
+ }, [selectedRangeStore]);
241
278
  const [validating, setValidating] = useState(false);
242
279
  const [inserting, setInserting] = useState();
243
280
  const [removingComponentIds, setRemovingComponentIds] = useState([]);
281
+ const [recentConversion, setRecentConversion] = useState();
244
282
  const insertingSequenceRef = useRef(0);
245
283
  // Armed by selectWithoutAutoScroll for programmatic selections (drop
246
284
  // target's parent, post-operation focus): the canvas selection-scroll
@@ -314,7 +352,11 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
314
352
  const [activeFieldActions, setActiveFieldActions] = useState([]);
315
353
  const fieldEditorPopupRef = React.useRef(null);
316
354
  const [validationResult, setValidationResult] = useState();
317
- const [editHistory, setEditHistory] = useState([]);
355
+ // A store, not state: every operation update (save progress, completion,
356
+ // other sessions' edits) replaces the list. Components that render it
357
+ // subscribe with useEditHistory(); handlers read editContext.editHistory.
358
+ const [editHistoryStore] = useState(() => createValueStore([]));
359
+ const setEditHistory = editHistoryStore.set;
318
360
  const [historyMode, setHistoryMode] = useState("global");
319
361
  const [showOnlyMyChanges, setShowOnlyMyChanges] = useState(true);
320
362
  const [filterByCurrentLanguage, setFilterByCurrentLanguage] = useState(true);
@@ -339,7 +381,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
339
381
  ];
340
382
  });
341
383
  }, []);
342
- const [activeSessions, setActiveSessions] = useState(() => {
384
+ // A store, not EditContext state: presence broadcasts replace the list
385
+ // whenever any session focuses or locks a field.
386
+ const [activeSessionsStore] = useState(() => createValueStore((() => {
343
387
  try {
344
388
  const existing = globalThis.__alpacaActiveSessions;
345
389
  return Array.isArray(existing) ? existing : [];
@@ -347,8 +391,20 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
347
391
  catch {
348
392
  return [];
349
393
  }
350
- });
351
- const [remoteCarets, setRemoteCarets] = useState({});
394
+ })()));
395
+ const activeSessions = useValueStore(activeSessionsStore);
396
+ const setActiveSessions = activeSessionsStore.set;
397
+ const sessionUser = activeSessions.find((x) => x.sessionId === sessionId)?.user ||
398
+ userInfo.user;
399
+ // Presence broadcasts rebuild the session list, and with it this object,
400
+ // whenever anyone focuses or locks a field. Keep one identity per distinct
401
+ // value so they do not rebuild the EditContext value.
402
+ const sessionUserKey = JSON.stringify(sessionUser);
403
+ // eslint-disable-next-line react-hooks/exhaustive-deps
404
+ const user = useMemo(() => sessionUser, [sessionUserKey]);
405
+ // A store, not state: carets move on every keystroke of every session.
406
+ const [remoteCaretsStore] = useState(() => createValueStore({}));
407
+ const setRemoteCarets = remoteCaretsStore.set;
352
408
  // Block editing until the server acknowledges our client-info for the current item
353
409
  const [isClientInfoAcknowledged, setIsClientInfoAcknowledged] = useState(false);
354
410
  if (typeof window !== "undefined")
@@ -512,7 +568,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
512
568
  const [componentDesignerComponent, setComponentDesignerComponent] = useState();
513
569
  const [componentDesignerRendering, setComponentDesignerRendering] = useState();
514
570
  const [insertMode, setInsertMode] = useState(false);
515
- const [ignoreBlur, setIgnoreBlur] = useState(false);
571
+ // A ref, not state: it flips true and back within 20ms of every field click,
572
+ // and as state each flip changed setFocusedFieldWithLock's identity and with
573
+ // it the FieldsEditContext value.
574
+ const ignoreBlurRef = useRef(false);
516
575
  // Timestamp of the most recent pointer-down on a User Manual "Show me" control.
517
576
  // Used by the field-blur guard so clicking a field-gated Show me button keeps
518
577
  // the focused field (and thus the `.focused-field` anchor + field actions).
@@ -676,7 +735,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
676
735
  const [showVersionDiffHighlighting, setShowVersionDiffHighlighting] = useState(false);
677
736
  const [agentChangeHighlighting, setAgentChangeHighlighting] = useState(null);
678
737
  const [availableCommentTags, setAvailableCommentTags] = useState([]);
679
- const [showComments, setShowComments] = useState(() => {
738
+ const [showComments, setShowCommentsRaw] = useState(() => {
680
739
  // ?showFeedback=true|false overrides the persisted preference, e.g. the
681
740
  // sandbox register redirect lands users with the feedback panel closed.
682
741
  const showFeedbackParam = searchParams.get("showFeedback");
@@ -685,9 +744,27 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
685
744
  }
686
745
  return localStorageService.getOrSetItem("editor.showComments", true);
687
746
  });
747
+ const showCommentsRef = useRef(showComments);
748
+ showCommentsRef.current = showComments;
688
749
  useEffect(() => {
689
750
  localStorageService.setItem("editor.showComments", showComments);
690
751
  }, [showComments]);
752
+ // The mobile comments panel (the comment list below the canvas on a phone)
753
+ // is opt-in per session: it starts closed whatever the persisted preference
754
+ // says, and follows every on/off transition made on the phone. The reveal
755
+ // helper is defined with the other mobile panel state further down; the
756
+ // ref lets the setter (declared here, used by mode changes above) reach it.
757
+ const [mobileCommentsPanelOpen, setMobileCommentsPanelOpen] = useState(false);
758
+ const revealMobileCommentsPanelRef = useRef(() => { });
759
+ const setShowComments = useCallback((value) => {
760
+ const next = typeof value === "function" ? value(showCommentsRef.current) : value;
761
+ showCommentsRef.current = next;
762
+ setShowCommentsRaw(next);
763
+ if (next)
764
+ revealMobileCommentsPanelRef.current();
765
+ else
766
+ setMobileCommentsPanelOpen(false);
767
+ }, []);
691
768
  const [showResolvedComments, setShowResolvedComments] = useState(() => {
692
769
  return localStorageService.getOrSetItem("editor.showResolvedComments", false);
693
770
  });
@@ -897,6 +974,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
897
974
  const [editorFormHintSeen, setEditorFormHintSeenState] = useState(userPreferences.editorFormHintSeen ?? false);
898
975
  const [editorFormHintVisible, setEditorFormHintVisible] = useState(false);
899
976
  const editorFormToggleButtonRef = useRef(null);
977
+ const [componentInsertionHintSeen, setComponentInsertionHintSeenState] = useState(userPreferences.componentInsertionHintSeen ?? false);
900
978
  const [showMinimap, setShowMinimap] = useState(userPreferences.showMinimap ?? true);
901
979
  const effectiveShowMinimap = minimapEnabledInSettings && showMinimap;
902
980
  const [showHelpTerminal, setShowHelpTerminal] = useState(false);
@@ -929,7 +1007,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
929
1007
  }
930
1008
  }, [setQuotaInfo]);
931
1009
  const [webSocketMessages, setWebSocketMessages] = useState([]);
932
- const [socketDiagnostics, setSocketDiagnostics] = useState(() => createEditorSocketDiagnostics(sessionId));
1010
+ // A store, not state: it changes on every socket message.
1011
+ const [socketDiagnosticsStore] = useState(() => createValueStore(createEditorSocketDiagnostics(sessionId)));
1012
+ const setSocketDiagnostics = socketDiagnosticsStore.set;
933
1013
  const [favorites, setFavorites] = useState([]);
934
1014
  // Quick item switcher state
935
1015
  const [quickSwitcherVisible, setQuickSwitcherVisible] = useState(false);
@@ -1005,12 +1085,14 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1005
1085
  focusedField.item.id !== lastTextSelection.itemId)) {
1006
1086
  lastTextSelectionRangeRef.current = undefined;
1007
1087
  }
1008
- }, [focusedField]);
1009
- useEffect(() => {
1010
- if (isUsableTextSelectionRange(selectedRange)) {
1011
- lastTextSelectionRangeRef.current = selectedRange;
1088
+ const caretRange = caretRangeRef.current;
1089
+ if (focusedField &&
1090
+ caretRange &&
1091
+ (focusedField.fieldId !== caretRange.fieldId ||
1092
+ focusedField.item.id !== caretRange.itemId)) {
1093
+ caretRangeRef.current = undefined;
1012
1094
  }
1013
- }, [selectedRange]);
1095
+ }, [focusedField]);
1014
1096
  // Track the current page item descriptor for itemsRepository
1015
1097
  const [currentPageItem, setCurrentPageItem] = useState();
1016
1098
  // Create itemsRepository with current page item (will be updated when page loads)
@@ -1107,18 +1189,18 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1107
1189
  useEffect(() => {
1108
1190
  activePageViewContextRef.current = activePageViewContext;
1109
1191
  }, [activePageViewContext]);
1192
+ const page = usePageViewState(activePageViewContext, (state) => state.page);
1193
+ const activeIframeSupportsRefresh = usePageViewState(activePageViewContext, (state) => state.iframeSupportsRefresh);
1110
1194
  // Keep the active PageViewContext's fullscreen flag in sync with the shell fullscreen mode.
1111
1195
  useEffect(() => {
1112
- if (activePageViewContext.fullscreen !== fullscreen) {
1113
- activePageViewContext.setFullscreen(fullscreen);
1114
- }
1196
+ activePageViewContext.setFullscreen(fullscreen);
1115
1197
  }, [activePageViewContext, fullscreen]);
1116
1198
  // Update currentPageItem when pageViewContext.page is available
1117
1199
  useEffect(() => {
1118
- if (activePageViewContext.page?.item.descriptor) {
1119
- setCurrentPageItem(activePageViewContext.page.item.descriptor);
1200
+ if (page?.item.descriptor) {
1201
+ setCurrentPageItem(page.item.descriptor);
1120
1202
  }
1121
- }, [activePageViewContext.page?.item.descriptor]);
1203
+ }, [page?.item.descriptor]);
1122
1204
  // Track which items are rendered/used by the current page for targeted refresh
1123
1205
  const pageItemsSetRef = useRef(new Set());
1124
1206
  const makeItemKey = useCallback((d) => `${d.id}-${d.language}-${d.version}`.toLowerCase(), []);
@@ -1132,20 +1214,20 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1132
1214
  component.items?.forEach((i) => newSet.add(makeItemKey(i)));
1133
1215
  component.placeholders?.forEach((ph) => ph.components?.forEach(collect));
1134
1216
  };
1135
- if (activePageViewContext?.page) {
1217
+ if (page) {
1136
1218
  // Include the page item itself
1137
- const pageDescriptor = activePageViewContext.page.item.descriptor;
1219
+ const pageDescriptor = page.item.descriptor;
1138
1220
  newSet.add(makeItemKey(pageDescriptor));
1139
- collect(activePageViewContext.page.rootComponent);
1221
+ collect(page.rootComponent);
1140
1222
  }
1141
1223
  pageItemsSetRef.current = newSet;
1142
- }, [activePageViewContext.page?.editRevision]);
1224
+ }, [page?.editRevision]);
1143
1225
  const isItemUsedInCurrentPage = useCallback((item) => pageItemsSetRef.current.has(makeItemKey(item)), [makeItemKey]);
1144
1226
  const socketMessageListeners = useRef(new Set());
1145
1227
  const [socketConnectionVersion, setSocketConnectionVersion] = useState(0);
1146
1228
  useEffect(() => {
1147
1229
  setSocketDiagnostics(createEditorSocketDiagnostics(sessionId));
1148
- }, [sessionId]);
1230
+ }, [sessionId, setSocketDiagnostics]);
1149
1231
  const addSocketMessageListener = useCallback((callback) => {
1150
1232
  socketMessageListeners.current.add(callback);
1151
1233
  return () => socketMessageListeners.current.delete(callback);
@@ -1184,7 +1266,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1184
1266
  }
1185
1267
  catch { }
1186
1268
  };
1187
- }, [addSocketMessageListener, sessionId]);
1269
+ }, [addSocketMessageListener, sessionId, setRemoteCarets]);
1188
1270
  useEffect(() => {
1189
1271
  const activeSessionIds = new Set(activeSessions.map((s) => s.sessionId));
1190
1272
  setRemoteCarets((current) => {
@@ -1200,7 +1282,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1200
1282
  });
1201
1283
  return changed ? next : current;
1202
1284
  });
1203
- }, [activeSessions]);
1285
+ }, [activeSessions, setRemoteCarets]);
1204
1286
  // Listen for batch completion notifications
1205
1287
  useEffect(() => {
1206
1288
  const removeListener = addSocketMessageListener((message) => {
@@ -1294,6 +1376,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1294
1376
  // Only clear selection range if we specifically switched to a DIFFERENT field.
1295
1377
  // If focusedField is undefined (e.g. lost focus to a dialog), keep the previous selection context
1296
1378
  // so the AI tool can still act on it.
1379
+ const selectedRange = selectedRangeStore.get();
1297
1380
  if (focusedField &&
1298
1381
  selectedRange &&
1299
1382
  (focusedField.fieldId !== selectedRange.fieldId ||
@@ -1323,7 +1406,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1323
1406
  }, [currentWorkspace]);
1324
1407
  const sendClientInfoImmediate = useCallback(async () => {
1325
1408
  const itemAtSend = currentItemRef.current;
1326
- const pageAtSend = activePageViewContextRef.current?.page?.item;
1409
+ const pageAtSend = activePageViewContextRef.current?.getState().page?.item;
1327
1410
  const clientInfoMessage = {
1328
1411
  type: "client-info",
1329
1412
  sessionId: sessionId,
@@ -1543,6 +1626,19 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1543
1626
  setOpenSidebars([]);
1544
1627
  }
1545
1628
  }, [isMobile, mobilePanelDismissToken]);
1629
+ // Bring the comments panel to the front: the form panel and the sidebars
1630
+ // cover it (precedence form > sidebars > comments), so opening it closes
1631
+ // them. Closing the form records the dismiss token for the current
1632
+ // selection, so the form does not bounce back until the next canvas tap.
1633
+ const revealMobileCommentsPanel = useCallback(() => {
1634
+ if (!isMobile)
1635
+ return;
1636
+ setMobileCommentsPanelOpen(true);
1637
+ handleSetMobileEditorPanelOpen(false);
1638
+ openSidebarsRef.current = [];
1639
+ setOpenSidebars([]);
1640
+ }, [isMobile, handleSetMobileEditorPanelOpen]);
1641
+ revealMobileCommentsPanelRef.current = revealMobileCommentsPanel;
1546
1642
  const handleSetShowMinimap = useCallback((value) => {
1547
1643
  const newValue = typeof value === "function" ? value(showMinimap) : value;
1548
1644
  setShowMinimap(newValue);
@@ -1588,6 +1684,14 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1588
1684
  setEditorFormHintSeenState(true);
1589
1685
  setUserPreferences({ editorFormHintSeen: true });
1590
1686
  }, [setUserPreferences]);
1687
+ const markComponentInsertionHintSeen = useCallback(() => {
1688
+ setComponentInsertionHintSeenState((prev) => {
1689
+ if (prev)
1690
+ return prev;
1691
+ setUserPreferences({ componentInsertionHintSeen: true });
1692
+ return true;
1693
+ });
1694
+ }, [setUserPreferences]);
1591
1695
  const showEditorFormHint = useCallback(() => {
1592
1696
  setEditorFormHintVisible(true);
1593
1697
  }, []);
@@ -1667,8 +1771,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1667
1771
  setUserPreferences({ pinnedSidebars: newPinnedSidebars });
1668
1772
  }, [setUserPreferences]);
1669
1773
  // messageHandler is defined after loadItem/loadHistory declarations to avoid temporal dead zones
1670
- const user = activeSessions.find((x) => x.sessionId === sessionId)?.user ||
1671
- userInfo.user;
1672
1774
  // Self-heal if our session disappears (e.g., after HMR). Skip when concurrent user limit
1673
1775
  // is showing so we don't spam recovery attempts when the connection was rejected.
1674
1776
  const missingSessionRecoveryTimerRef = useRef(null);
@@ -1946,7 +2048,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1946
2048
  if (selection.length)
1947
2049
  setSelectedForInsertion("");
1948
2050
  // Does the current focused field belong to the current item?
1949
- const currentItem = selection.length > 0 ? selection[0] : activePageViewContext.page?.item.id;
2051
+ const currentItem = selection.length > 0 ? selection[0] : page?.item.id;
1950
2052
  if (currentItem && focusedField?.item.id !== currentItem) {
1951
2053
  setFocusedField(undefined);
1952
2054
  }
@@ -2038,7 +2140,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2038
2140
  setRefreshCompletedFlag(!refreshCompletedFlag);
2039
2141
  setInserting(undefined);
2040
2142
  setRemovingComponentIds([]);
2041
- }, [currentItemDescriptor, activePageViewContext.page?.item.id]);
2143
+ setRecentConversion(undefined);
2144
+ }, [currentItemDescriptor, page?.item.id]);
2042
2145
  useEffect(() => {
2043
2146
  // When the item changes, reset acknowledgment. Registration below sends
2044
2147
  // immediately and keeps retrying until active-sessions confirms it.
@@ -2068,6 +2171,15 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2068
2171
  }
2069
2172
  catch { }
2070
2173
  }, [activeSessions, sessionId]);
2174
+ // Reviewers from a review link stay in their review; everyone else loses a
2175
+ // reviewId that no longer applies once they browse to other pages.
2176
+ useLeftoverReviewIdCleanup(item
2177
+ ? {
2178
+ id: item.descriptor.id,
2179
+ language: item.descriptor.language,
2180
+ idPath: item.idPath,
2181
+ }
2182
+ : undefined, !userInfo.user?.isLimitedPreviewUser);
2071
2183
  const loadComments = useCallback(async () => {
2072
2184
  const requestId = ++commentsLoadRequestRef.current;
2073
2185
  if (!currentItemDescriptor)
@@ -2142,7 +2254,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2142
2254
  const refreshFavorites = useCallback(async (opts) => {
2143
2255
  await loadFavorites();
2144
2256
  }, [loadFavorites]);
2145
- const page = activePageViewContext.page;
2146
2257
  const currentHistoryScope = useMemo(() => {
2147
2258
  const currentItem = item?.descriptor;
2148
2259
  const currentLanguage = item?.descriptor?.language || currentItemDescriptor?.language;
@@ -2249,21 +2360,16 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2249
2360
  }
2250
2361
  }, []);
2251
2362
  useEffect(() => {
2252
- // Read fresh page from the mutable slot context ref chain.
2253
- // The slot context uses a stable ref that is mutated in-place (see editorSlotContext.ts),
2254
- // so `page` from the render scope may be stale when the slot's page model completes.
2255
- // pageModelReadyToken triggers this effect to re-evaluate with the latest page.
2256
- const freshPage = activePageViewContext.page ?? page;
2257
2363
  const isLoading = !!item &&
2258
2364
  item.hasLayout &&
2259
- (!freshPage || (freshPage?.editRevision ?? "") != (revision ?? ""));
2365
+ (!page || (page?.editRevision ?? "") != (revision ?? ""));
2260
2366
  const newIsRefreshing = isLoading && viewName === "editor";
2261
2367
  setIsRefreshing(newIsRefreshing);
2262
2368
  if (!isLoading) {
2263
2369
  setInserting(undefined);
2264
2370
  setRemovingComponentIds([]);
2265
2371
  }
2266
- }, [page, viewName, revision, pageModelReadyToken]);
2372
+ }, [page, viewName, revision]);
2267
2373
  // moved below to ensure requestRefresh is declared first
2268
2374
  const loadHistory = useDebouncedCallback(async () => {
2269
2375
  if (!sessionId)
@@ -2941,24 +3047,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2941
3047
  showHelpTerminal,
2942
3048
  selectedHelpSectionId,
2943
3049
  ]);
2944
- useEffect(() => {
2945
- async function load() {
2946
- if (!currentItemDescriptor)
2947
- return;
2948
- // Capture the item ID at the start of this async operation
2949
- const descriptorIdAtStart = currentItemDescriptor.id;
2950
- const item = await itemsRepository.getItem(currentItemDescriptor);
2951
- // Check if the current item has changed during the async operation
2952
- // If so, skip this update to avoid overwriting with stale data
2953
- if (currentItemDescriptorRef.current?.id !== descriptorIdAtStart) {
2954
- return;
2955
- }
2956
- setItem(item);
2957
- if (!item)
2958
- return;
2959
- }
2960
- load();
2961
- }, [itemsRepository.revision]);
3050
+ useRepositoryItemRefresh(itemsRepository, currentItemDescriptor, currentItemDescriptorRef, setItem);
2962
3051
  const addToBrowseHistory = useCallback((item) => {
2963
3052
  const historyEntry = {
2964
3053
  path: item.path || "unknown",
@@ -3300,7 +3389,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3300
3389
  lockedField,
3301
3390
  itemsRepository,
3302
3391
  user,
3303
- editHistory,
3392
+ get editHistory() {
3393
+ return editHistoryStore.get();
3394
+ },
3395
+ editHistoryStore,
3304
3396
  setEditHistory,
3305
3397
  showOnlyMyChanges,
3306
3398
  historyMode,
@@ -3509,6 +3601,17 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3509
3601
  const onOperationExecuted = useCallback((op) => {
3510
3602
  // Update the history through the single merge path.
3511
3603
  updateOperationInHistory(op);
3604
+ // The "Converted from" badge lasts until the next edit.
3605
+ setRecentConversion((current) => current &&
3606
+ current.operationId.replace(/[{}]/g, "").toLowerCase() !==
3607
+ op.id.replace(/[{}]/g, "").toLowerCase()
3608
+ ? undefined
3609
+ : current);
3610
+ // The palette's how-to hint is for users who have never inserted a
3611
+ // component; the first local insertion retires it.
3612
+ if (op.type === "add-component") {
3613
+ markComponentInsertionHintSeen();
3614
+ }
3512
3615
  if (item?.id === op.mainItem?.id &&
3513
3616
  item?.language === op.mainItem?.language &&
3514
3617
  item?.version === op.mainItem?.version) {
@@ -3517,29 +3620,34 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3517
3620
  // Note: We intentionally do NOT call refreshHistory() here.
3518
3621
  // The websocket handler + merge logic above keeps the history up to date without
3519
3622
  // causing a race where stale server data arrives before the server has processed a redo.
3520
- }, [item, setInsertMode, updateOperationInHistory]);
3521
- const ui = {
3623
+ }, [
3624
+ item,
3625
+ setInsertMode,
3626
+ updateOperationInHistory,
3627
+ markComponentInsertionHintSeen,
3628
+ ]);
3629
+ // Memoized: `ui` is a dependency of most operation callbacks, and through
3630
+ // them of `operations` and the EditContext value. A fresh object per shell
3631
+ // render rebuilt all three on every render (each field click), re-rendering
3632
+ // every EditContext consumer.
3633
+ const ui = useMemo(() => ({
3522
3634
  showErrorToast,
3523
3635
  confirmationDialogRef,
3524
3636
  onOperationExecuted,
3525
- };
3637
+ }), [showErrorToast, onOperationExecuted]);
3526
3638
  // moved to useMediaSelector
3527
3639
  // Workbox/validation scope spans every open slot (each slot's page tree plus
3528
3640
  // its item), so opening a validation result in a second slot keeps the page's
3529
- // list intact regardless of which slot is active. The slot contexts are
3530
- // mutable refs; re-reads happen because notifyPageModelReady bumps the
3531
- // pageModelReadyToken state whenever a slot's page model finishes building.
3532
- const registeredSlotScopes = editorSlots.flatMap((slot) => {
3641
+ // list intact regardless of which slot is active.
3642
+ const registeredSlotContexts = editorSlots.flatMap((slot) => {
3533
3643
  const slotContext = slotContexts.get(slot.slotId);
3534
- if (!slotContext)
3535
- return [];
3536
- return [
3537
- {
3538
- page: slotContext.primaryPageViewContext.page,
3539
- itemDescriptor: slotContext.itemDescriptor,
3540
- },
3541
- ];
3644
+ return slotContext ? [slotContext] : [];
3542
3645
  });
3646
+ const registeredSlotPages = usePageViewStates(registeredSlotContexts.map((slotContext) => slotContext.primaryPageViewContext), (state) => state.page);
3647
+ const registeredSlotScopes = registeredSlotContexts.map((slotContext, index) => ({
3648
+ page: registeredSlotPages[index],
3649
+ itemDescriptor: slotContext.itemDescriptor,
3650
+ }));
3543
3651
  const workboxScopeSlots = registeredSlotScopes.length
3544
3652
  ? registeredSlotScopes
3545
3653
  : [{ page, itemDescriptor: currentItemDescriptor }];
@@ -3586,7 +3694,18 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3586
3694
  updateExecutingOperationProgressRef.current?.(operationId, progress, statusMessage);
3587
3695
  },
3588
3696
  refreshWorkbox,
3589
- canvasHasChromeSuppressedTargets: () => !!activePageViewContextRef.current?.bridgeGeometry?.targets.some((target) => target.decorationsSuppressed),
3697
+ canvasHasChromeSuppressedTargets: () => !!activePageViewContextRef.current?.getState().bridgeGeometry?.targets.some((target) => target.decorationsSuppressed),
3698
+ isRenderingOnCanvas: (itemId, fieldIds) => {
3699
+ const page = currentItemRef.current;
3700
+ return isRenderingOnCanvas({
3701
+ itemId,
3702
+ fieldIds,
3703
+ iframe: activePageViewContextRef.current?.getState().editorIframe,
3704
+ page: page?.id && page.language && typeof page.version === "number"
3705
+ ? { id: page.id, language: page.language, version: page.version }
3706
+ : undefined,
3707
+ });
3708
+ },
3590
3709
  });
3591
3710
  // Concurrent user limit error state
3592
3711
  const [concurrentUserLimitError, setConcurrentUserLimitError] = useState(null);
@@ -3686,7 +3805,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3686
3805
  }
3687
3806
  // Routes over whichever transport is active (WebSocket preferred, SSE fallback).
3688
3807
  getEditorRealtime().send(message);
3689
- }, [sessionId]);
3808
+ }, [sessionId, setRemoteCarets]);
3690
3809
  // URL update helper - defined early so it can be used by workspace/sidebar functions
3691
3810
  const updateUrl = useCallback((params) => {
3692
3811
  // Use the actual browser pathname (including any basePath like /parhelia)
@@ -4188,7 +4307,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4188
4307
  ]);
4189
4308
  // Replace selected text with new content (for inline AI editing)
4190
4309
  const replaceSelectedText = useCallback(async (newText, selectionOverride) => {
4191
- const rangeToReplace = selectionOverride ?? selectedRange ?? lastTextSelectionRangeRef.current;
4310
+ const rangeToReplace = selectionOverride ??
4311
+ selectedRangeStore.get() ??
4312
+ caretRangeRef.current ??
4313
+ lastTextSelectionRangeRef.current;
4192
4314
  try {
4193
4315
  // If we have selected text and a replaceText callback, use it
4194
4316
  if (rangeToReplace?.text && rangeToReplace.replaceText) {
@@ -4217,7 +4339,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4217
4339
  lastTextSelectionRangeRef.current = undefined;
4218
4340
  return;
4219
4341
  }
4220
- const fieldToReplace = focusedField ??
4342
+ // Read the focused field through the ref so this callback (part of
4343
+ // editContext) keeps its identity across field clicks.
4344
+ const fieldToReplace = focusedFieldRef.current ??
4221
4345
  (rangeToReplace?.fieldId &&
4222
4346
  rangeToReplace.itemId &&
4223
4347
  rangeToReplace.language &&
@@ -4279,14 +4403,15 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4279
4403
  console.error("Failed to replace/insert text:", error);
4280
4404
  }
4281
4405
  }, [
4282
- selectedRange,
4283
- focusedField,
4406
+ selectedRangeStore,
4407
+ setSelectedRange,
4284
4408
  itemsRepository,
4285
4409
  operations,
4286
4410
  getActiveSlotContext,
4287
4411
  ]);
4288
4412
  // Insert text at cursor position (for when there's no selection)
4289
4413
  const insertTextAtCursor = useCallback(async (newText) => {
4414
+ const focusedField = focusedFieldRef.current;
4290
4415
  if (!focusedField)
4291
4416
  return;
4292
4417
  try {
@@ -4320,8 +4445,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4320
4445
  }
4321
4446
  }
4322
4447
  // If we have a selectedRange with position info, use it
4323
- if (!insertPosition && selectedRange?.startOffset !== undefined) {
4324
- insertPosition = selectedRange.startOffset;
4448
+ const publishedRange = selectedRangeStore.get() ?? caretRangeRef.current;
4449
+ if (!insertPosition && publishedRange?.startOffset !== undefined) {
4450
+ insertPosition = publishedRange.startOffset;
4325
4451
  }
4326
4452
  // Fallback: use field value length (append)
4327
4453
  const { fieldId, item } = focusedField;
@@ -4345,8 +4471,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4345
4471
  console.error("Failed to insert text at cursor:", error);
4346
4472
  }
4347
4473
  }, [
4348
- focusedField,
4349
- selectedRange,
4474
+ selectedRangeStore,
4475
+ setSelectedRange,
4350
4476
  itemsRepository,
4351
4477
  operations,
4352
4478
  getActiveSlotContext,
@@ -4360,14 +4486,31 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4360
4486
  // Shared focused field setter with lock handling (used in both contexts)
4361
4487
  const setFocusedFieldWithLock = useCallback(async (field, requestLock) => {
4362
4488
  if (field) {
4363
- setIgnoreBlur(true);
4489
+ ignoreBlurRef.current = true;
4364
4490
  setTimeout(() => {
4365
- setIgnoreBlur(false);
4491
+ ignoreBlurRef.current = false;
4366
4492
  }, 20);
4367
4493
  // Selection follows the user's click independently of the asynchronous
4368
4494
  // edit lock. Lock ownership controls whether editing may proceed, but a
4369
4495
  // slow or rejected lock must not leave the form on the previous field.
4370
- setFocusedField({ ...field });
4496
+ //
4497
+ // Every click inside a field re-enters here (the field wrapper captures
4498
+ // clicks and focus), so a click on a field action such as Copy in the
4499
+ // already focused field must not publish a new descriptor object:
4500
+ // every consumer keyed on focusedField would re-run for a field that
4501
+ // did not change. The lock is still ensured below (a no-op when held).
4502
+ const current = focusedFieldRef.current;
4503
+ const alreadyFocused = !!current &&
4504
+ current.fieldId === field.fieldId &&
4505
+ current.item.id === field.item.id &&
4506
+ current.item.language === field.item.language &&
4507
+ current.item.version === field.item.version;
4508
+ if (!alreadyFocused) {
4509
+ // Mirror the state synchronously so a second call in the same
4510
+ // event (before the focusedField effect refreshes the ref) sees it.
4511
+ focusedFieldRef.current = field;
4512
+ setFocusedField({ ...field });
4513
+ }
4371
4514
  if (requestLock) {
4372
4515
  const lockResult = (await operations.ensureLock(field)) || false;
4373
4516
  if (!lockResult) {
@@ -4399,14 +4542,17 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4399
4542
  lastAgentTerminalInteractionAt: agentTerminalInteractionAtRef.current,
4400
4543
  now: Date.now(),
4401
4544
  });
4402
- if (!ignoreBlur && !focusMovedToShowMe && !focusMovedToAgentTerminal) {
4545
+ if (!ignoreBlurRef.current &&
4546
+ !focusMovedToShowMe &&
4547
+ !focusMovedToAgentTerminal) {
4548
+ focusedFieldRef.current = undefined;
4403
4549
  setFocusedField(undefined);
4404
4550
  setLockedField(undefined); // Clear client-side lock state
4405
4551
  releaseFieldLocks(sessionId);
4406
4552
  }
4407
4553
  }
4408
4554
  return true;
4409
- }, [operations, ignoreBlur, sessionId, lockedField]);
4555
+ }, [operations, sessionId]);
4410
4556
  const quickSwitcherEntries = useMemo(() => {
4411
4557
  const entries = [];
4412
4558
  const seen = new Set();
@@ -4829,9 +4975,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4829
4975
  if (!isInitialLoad)
4830
4976
  return;
4831
4977
  const isFullscreen = searchParams.get("fullscreen") === "true";
4832
- if (isFullscreen !== activePageViewContext.fullscreen) {
4833
- activePageViewContext.setFullscreen(isFullscreen);
4834
- }
4978
+ activePageViewContext.setFullscreen(isFullscreen);
4835
4979
  }, [searchParams, isInitialLoad, activePageViewContext]);
4836
4980
  useEffect(() => {
4837
4981
  if (typeof window === "undefined") {
@@ -4844,7 +4988,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4844
4988
  }
4845
4989
  window.__parheliaViewportTestApi = {
4846
4990
  setZoom: (zoom) => activePageViewContext.setZoom(zoom),
4847
- getZoom: () => activePageViewContext.zoom,
4991
+ getZoom: () => activePageViewContext.getState().zoom,
4848
4992
  };
4849
4993
  return () => {
4850
4994
  delete window.__parheliaViewportTestApi;
@@ -4979,8 +5123,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4979
5123
  },
4980
5124
  scrollIntoView,
4981
5125
  setScrollIntoView,
4982
- focusedField,
4983
- setFocusedField: setFocusedFieldWithLock,
4984
5126
  getComponentCommands: async (components, providerContext) => {
4985
5127
  return await getComponentCommands(components, editContext, providerContext);
4986
5128
  },
@@ -5160,7 +5302,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5160
5302
  ];
5161
5303
  });
5162
5304
  try {
5163
- await executeFieldServerAction(fieldDescriptor.item, fieldDescriptor.fieldId, item.descriptor, actionButton.action, editContext.sessionId, selectedRange?.text || "", parameters || {}, (data) => {
5305
+ await executeFieldServerAction(fieldDescriptor.item, fieldDescriptor.fieldId, item.descriptor, actionButton.action, editContext.sessionId, selectedRangeStore.get()?.text || "", parameters || {}, (data) => {
5164
5306
  // Update progress message if available
5165
5307
  if (data?.responseText) {
5166
5308
  op.message = data.responseText;
@@ -5265,10 +5407,16 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5265
5407
  },
5266
5408
  inserting,
5267
5409
  removingComponentIds,
5410
+ recentConversion,
5411
+ setRecentConversion,
5268
5412
  validating,
5269
5413
  validationResult,
5270
5414
  loadItem,
5271
- editHistory: editHistory,
5415
+ // Live read for handlers; components subscribe with useEditHistory().
5416
+ get editHistory() {
5417
+ return editHistoryStore.get();
5418
+ },
5419
+ editHistoryStore,
5272
5420
  historyMode,
5273
5421
  setHistoryMode,
5274
5422
  showOnlyMyChanges,
@@ -5284,8 +5432,12 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5284
5432
  canLoadMoreHistory,
5285
5433
  isHistoryLoadingMore,
5286
5434
  loadMoreHistory,
5287
- activeSessions,
5288
- remoteCarets,
5435
+ // Live read for handlers; components subscribe with useActiveSessions().
5436
+ get activeSessions() {
5437
+ return activeSessionsStore.get();
5438
+ },
5439
+ activeSessionsStore,
5440
+ remoteCaretsStore,
5289
5441
  unlockField: async () => {
5290
5442
  setLockedField(undefined); // Clear client-side lock state
5291
5443
  await releaseFieldLocks(sessionId);
@@ -5340,11 +5492,15 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5340
5492
  currentOverlay,
5341
5493
  contextMenuSource,
5342
5494
  setCurrentOverlay,
5343
- lockedField,
5344
5495
  timings,
5345
5496
  setTimings,
5346
- selectedRange,
5497
+ // Live read: selections and carets never rebuild this object.
5498
+ get selectedRange() {
5499
+ return selectedRangeStore.get() ?? caretRangeRef.current;
5500
+ },
5501
+ selectedRangeStore,
5347
5502
  setSelectedRange,
5503
+ setCaretRange,
5348
5504
  replaceSelectedText,
5349
5505
  insertTextAtCursor,
5350
5506
  confirm: (props) => {
@@ -5367,7 +5523,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5367
5523
  addSocketMessageListener,
5368
5524
  sendSocketMessage,
5369
5525
  socketConnectionVersion,
5370
- socketDiagnostics,
5526
+ socketDiagnosticsStore,
5371
5527
  currentItemDescriptor,
5372
5528
  editorSlots,
5373
5529
  activeSlotId,
@@ -5381,8 +5537,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5381
5537
  setActiveSlot,
5382
5538
  revision,
5383
5539
  fullReloadToken,
5384
- notifyPageModelReady,
5385
- pageModelReadyToken,
5386
5540
  selectedComment,
5387
5541
  setSelectedComment,
5388
5542
  selectedSuggestedEdit,
@@ -5413,12 +5567,19 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5413
5567
  }
5414
5568
  // Snapshot selection context up-front so switching views doesn't change what we comment on.
5415
5569
  const hintedFieldSnapshot = options?.field;
5416
- const focusedFieldSnapshot = focusedFieldRef.current;
5570
+ // A picked target (field or whole item) is what the comment is about;
5571
+ // the focused field and selections elsewhere must not override it.
5572
+ const hasExplicitTarget = !!options?.field || !!options?.itemId;
5573
+ const focusedFieldSnapshot = hasExplicitTarget
5574
+ ? undefined
5575
+ : focusedFieldRef.current;
5576
+ const selectedRange = selectedRangeStore.get();
5417
5577
  const selectedRangeCandidate = isUsableTextSelectionRange(selectedRange)
5418
5578
  ? selectedRange
5419
5579
  : lastTextSelectionRangeRef.current;
5420
- const selectedRangeSnapshot = !hintedFieldSnapshot ||
5421
- selectionRangeMatchesField(selectedRangeCandidate, hintedFieldSnapshot)
5580
+ const selectedRangeSnapshot = (hintedFieldSnapshot
5581
+ ? selectionRangeMatchesField(selectedRangeCandidate, hintedFieldSnapshot)
5582
+ : !hasExplicitTarget)
5422
5583
  ? selectedRangeCandidate
5423
5584
  : undefined;
5424
5585
  const selectedRangeFieldSnapshot = isUsableTextSelectionRange(selectedRangeSnapshot)
@@ -5437,6 +5598,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5437
5598
  hintedFieldSnapshot ??
5438
5599
  focusedFieldSnapshot;
5439
5600
  const itemId = commentFieldSnapshot?.item.id ||
5601
+ options?.itemId ||
5440
5602
  (selection.length > 0 ? selection[0] : undefined) ||
5441
5603
  descriptor.id;
5442
5604
  if (!itemId)
@@ -5541,6 +5703,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5541
5703
  showEditorFormHint,
5542
5704
  dismissEditorFormHint,
5543
5705
  editorFormToggleButtonRef,
5706
+ componentInsertionHintSeen,
5707
+ markComponentInsertionHintSeen,
5544
5708
  showMinimap: effectiveShowMinimap,
5545
5709
  setShowMinimap: handleSetShowMinimap,
5546
5710
  showHelpTerminal,
@@ -5566,6 +5730,9 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5566
5730
  isMobile,
5567
5731
  mobileEditorPanelOpen,
5568
5732
  setMobileEditorPanelOpen: handleSetMobileEditorPanelOpen,
5733
+ mobileCommentsPanelOpen,
5734
+ setMobileCommentsPanelOpen,
5735
+ revealMobileCommentsPanel,
5569
5736
  openDialog,
5570
5737
  webSocketMessages,
5571
5738
  clearWebSocketMessages: () => setWebSocketMessages([]),
@@ -5634,8 +5801,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5634
5801
  media.mediaSelectorMode,
5635
5802
  media.selectedMediaIdPath,
5636
5803
  scrollIntoView,
5637
- focusedField,
5638
- setFocusedFieldWithLock,
5639
5804
  activeFieldActions,
5640
5805
  currentWorkspace,
5641
5806
  previousWorkspaceId,
@@ -5661,9 +5826,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5661
5826
  insertMode,
5662
5827
  currentOverlay,
5663
5828
  contextMenuSource,
5664
- lockedField,
5665
5829
  timings,
5666
- selectedRange,
5830
+ selectedRangeStore,
5831
+ setSelectedRange,
5832
+ setCaretRange,
5667
5833
  replaceSelectedText,
5668
5834
  insertTextAtCursor,
5669
5835
  browseHistory,
@@ -5674,11 +5840,10 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5674
5840
  sendSocketMessage,
5675
5841
  socketConnectionVersion,
5676
5842
  removingComponentIds,
5843
+ recentConversion,
5677
5844
  currentItemDescriptor,
5678
5845
  revision,
5679
5846
  fullReloadToken,
5680
- notifyPageModelReady,
5681
- pageModelReadyToken,
5682
5847
  selectedComment,
5683
5848
  selectedSuggestedEdit,
5684
5849
  comments,
@@ -5709,8 +5874,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5709
5874
  quickSwitcherSelectedIndex,
5710
5875
  handleQuickSwitcherSelect,
5711
5876
  webSocketMessages,
5712
- socketDiagnostics,
5713
- remoteCarets,
5877
+ socketDiagnosticsStore,
5878
+ remoteCaretsStore,
5714
5879
  factoriesRef,
5715
5880
  user,
5716
5881
  statusMessage,
@@ -5728,6 +5893,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5728
5893
  isMobile,
5729
5894
  mobileEditorPanelOpen,
5730
5895
  handleSetMobileEditorPanelOpen,
5896
+ mobileCommentsPanelOpen,
5897
+ revealMobileCommentsPanel,
5731
5898
  showComponentNavigator,
5732
5899
  isComponentNavigatorOpenForSlot,
5733
5900
  setComponentNavigatorOpenForSlot,
@@ -5767,6 +5934,46 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5767
5934
  executeCommand,
5768
5935
  showInfoToast,
5769
5936
  showErrorToast,
5937
+ // Values below were missing and only looked fresh while this object was
5938
+ // rebuilt on every shell render or socket message.
5939
+ inserting,
5940
+ editHistoryStore,
5941
+ historyMode,
5942
+ showOnlyMyChanges,
5943
+ filterByCurrentLanguage,
5944
+ sidebarStacks,
5945
+ fullscreen,
5946
+ mode,
5947
+ showSuggestedEdits,
5948
+ showSuggestedEditsDiff,
5949
+ showSelectedSuggestionOnPage,
5950
+ showVersionDiffHighlighting,
5951
+ agentChangeHighlighting,
5952
+ componentInsertionHintSeen,
5953
+ selectWithoutAutoScroll,
5954
+ consumeNextSelectionAutoScrollSuppression,
5955
+ consumeNextFocusedFieldAutoScrollSuppression,
5956
+ loadItem,
5957
+ refreshHistory,
5958
+ stackSidebar,
5959
+ moveSidebarToColumn,
5960
+ unstackSidebar,
5961
+ reorderSidebarInStack,
5962
+ setCompareMode,
5963
+ registerSlotContext,
5964
+ unregisterSlotContext,
5965
+ getActiveSlotContext,
5966
+ getActiveSlotId,
5967
+ closeEditorSlot,
5968
+ setActiveSlot,
5969
+ setShowComments,
5970
+ setSuggestedEdits,
5971
+ getCurrentSuggestedEdits,
5972
+ markComponentInsertionHintSeen,
5973
+ handleSetShowHelpTerminal,
5974
+ handleSetShowAgentsWorkspaceEditor,
5975
+ handleSetShowLayoutComponents,
5976
+ activeSessionsStore,
5770
5977
  ]);
5771
5978
  // CRITICAL: Assign editContext to ref synchronously (not via useEffect)
5772
5979
  // This ensures editContextRef.current always has the latest value when executeCommand is called
@@ -5787,6 +5994,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5787
5994
  addRecentEdit,
5788
5995
  focusedField,
5789
5996
  setFocusedField: setFocusedFieldWithLock,
5997
+ lockedField,
5790
5998
  unlockField: async () => {
5791
5999
  setLockedField(undefined); // Clear client-side lock state
5792
6000
  await releaseFieldLocks(sessionId);
@@ -5797,6 +6005,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
5797
6005
  addRecentEdit,
5798
6006
  focusedField,
5799
6007
  setFocusedFieldWithLock,
6008
+ lockedField,
5800
6009
  sessionId,
5801
6010
  ]);
5802
6011
  // Debug: Track editContext changes
@@ -6056,7 +6265,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
6056
6265
  startTour();
6057
6266
  }
6058
6267
  : undefined, replayEnabled: canStartTour })), _jsx(FeatureGate, { feature: LicenseFeatures.AI, children: _jsx(GuidanceOverlay, {}) }), _jsx(FeatureGate, { feature: LicenseFeatures.AI, children: _jsx(AgentDialogHandler, {}) })] }));
6059
- const showRefreshSpinner = editContext.isRefreshing && !activePageViewContext.iframeSupportsRefresh;
6268
+ const showRefreshSpinner = editContext.isRefreshing && !activeIframeSupportsRefresh;
6060
6269
  return (_jsx(LicenseProvider, { initialLicenseStatus: initialLicenseStatus, initialStatusLoaded: initialLicenseStatusLoaded, children: _jsx("div", { className: `editor h-full w-full`, children: _jsx(OperationsContextProvider, { value: operationsContext.context, children: _jsx(FieldsEditContextProvider, { value: fieldsEditContext, children: _jsx(EditContextProvider, { value: editContext, children: _jsxs(SelectionContextProvider, { value: selectionContextValue, children: [_jsx(DevModeIndicator, {}), startupChecks.state === "loading" && _jsx(EditorLoadingOverlay, {}), showRefreshSpinner && (_jsx("div", { className: "text-neutral-grey-50 pointer-events-none fixed right-0 bottom-0 flex h-24 w-24 items-center justify-center opacity-50 select-none", children: _jsx(Spinner, {}) })), (currentWorkspace.id === "agents" ||
6061
6270
  currentWorkspace.id === "taskboard" ||
6062
6271
  currentWorkspace.id === "translation-management") &&