@parhelia/core 0.1.12882 → 0.1.12884

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 (414) hide show
  1. package/dist/agents-view/AgentsSidebar.js +1 -1
  2. package/dist/agents-view/AgentsSidebar.js.map +1 -1
  3. package/dist/agents-view/AgentsTitlebar.d.ts +1 -1
  4. package/dist/agents-view/AgentsTitlebar.js +3 -6
  5. package/dist/agents-view/AgentsTitlebar.js.map +1 -1
  6. package/dist/agents-view/AgentsView.d.ts +2 -2
  7. package/dist/agents-view/AgentsView.js +2 -2
  8. package/dist/agents-view/AgentsView.js.map +1 -1
  9. package/dist/agents-view/AgentsWorkspaceView.js +1 -12
  10. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  11. package/dist/agents-view/CreateAgentView.d.ts +1 -1
  12. package/dist/agents-view/CreateAgentView.js +1 -1
  13. package/dist/agents-view/DateAgentsGroup.js +12 -1
  14. package/dist/agents-view/DateAgentsGroup.js.map +1 -1
  15. package/dist/agents-view/ProfileAgentsGroup.js +16 -4
  16. package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
  17. package/dist/components/ui/card.d.ts +3 -1
  18. package/dist/components/ui/card.js +2 -2
  19. package/dist/components/ui/card.js.map +1 -1
  20. package/dist/components/ui/checkbox.js +1 -1
  21. package/dist/components/ui/checkbox.js.map +1 -1
  22. package/dist/components/ui/context-menu.d.ts +2 -1
  23. package/dist/components/ui/context-menu.js +6 -3
  24. package/dist/components/ui/context-menu.js.map +1 -1
  25. package/dist/components/ui/input.js +2 -2
  26. package/dist/components/ui/input.js.map +1 -1
  27. package/dist/components/ui/select.js +1 -1
  28. package/dist/components/ui/select.js.map +1 -1
  29. package/dist/components/ui/textarea.js +2 -2
  30. package/dist/components/ui/textarea.js.map +1 -1
  31. package/dist/config/config.js +107 -12
  32. package/dist/config/config.js.map +1 -1
  33. package/dist/editor/ContextMenu.d.ts +1 -0
  34. package/dist/editor/ContextMenu.js +4 -4
  35. package/dist/editor/ContextMenu.js.map +1 -1
  36. package/dist/editor/FieldActionsOverlay.d.ts +0 -1
  37. package/dist/editor/FieldActionsOverlay.js +1 -45
  38. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  39. package/dist/editor/FieldHistory.d.ts +2 -1
  40. package/dist/editor/FieldHistory.js +13 -12
  41. package/dist/editor/FieldHistory.js.map +1 -1
  42. package/dist/editor/FieldListField.d.ts +1 -1
  43. package/dist/editor/FieldListField.js +24 -36
  44. package/dist/editor/FieldListField.js.map +1 -1
  45. package/dist/editor/ImageEditor.d.ts +6 -1
  46. package/dist/editor/ImageEditor.js +19 -3
  47. package/dist/editor/ImageEditor.js.map +1 -1
  48. package/dist/editor/LinkEditorDialog.d.ts +9 -2
  49. package/dist/editor/LinkEditorDialog.js +174 -70
  50. package/dist/editor/LinkEditorDialog.js.map +1 -1
  51. package/dist/editor/MainLayout.js +49 -6
  52. package/dist/editor/MainLayout.js.map +1 -1
  53. package/dist/editor/MobileLayout.js +33 -1
  54. package/dist/editor/MobileLayout.js.map +1 -1
  55. package/dist/editor/PictureCropper.js +45 -28
  56. package/dist/editor/PictureCropper.js.map +1 -1
  57. package/dist/editor/PictureEditor.d.ts +2 -1
  58. package/dist/editor/PictureEditor.js +5 -14
  59. package/dist/editor/PictureEditor.js.map +1 -1
  60. package/dist/editor/ai/AgentProfileSelector.js +7 -7
  61. package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
  62. package/dist/editor/ai/Agents.js +20 -6
  63. package/dist/editor/ai/Agents.js.map +1 -1
  64. package/dist/editor/ai/GuidanceOverlay.js +1 -11
  65. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  66. package/dist/editor/ai/InlineAiDialog.d.ts +1 -0
  67. package/dist/editor/ai/InlineAiDialog.js +254 -202
  68. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  69. package/dist/editor/ai/InlineAiTextEditTooltip.d.ts +8 -0
  70. package/dist/editor/ai/InlineAiTextEditTooltip.js +10 -0
  71. package/dist/editor/ai/InlineAiTextEditTooltip.js.map +1 -0
  72. package/dist/editor/ai/InlineAiTrigger.js +158 -31
  73. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  74. package/dist/editor/ai/dialogs/capturePageDom.js +66 -36
  75. package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -1
  76. package/dist/editor/ai/dialogs/capturePageScreenshot.js +281 -162
  77. package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -1
  78. package/dist/editor/ai/inlineAiTextEditLabels.d.ts +2 -0
  79. package/dist/editor/ai/inlineAiTextEditLabels.js +8 -0
  80. package/dist/editor/ai/inlineAiTextEditLabels.js.map +1 -0
  81. package/dist/editor/ai/prepareInlineAiTextSelection.d.ts +5 -0
  82. package/dist/editor/ai/prepareInlineAiTextSelection.js +86 -0
  83. package/dist/editor/ai/prepareInlineAiTextSelection.js.map +1 -0
  84. package/dist/editor/ai/terminal/agentSessionState.d.ts +3 -0
  85. package/dist/editor/ai/terminal/agentSessionState.js +3 -1
  86. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  87. package/dist/editor/ai/terminal/agentStartRequest.d.ts +2 -1
  88. package/dist/editor/ai/terminal/agentStartRequest.js +2 -1
  89. package/dist/editor/ai/terminal/agentStartRequest.js.map +1 -1
  90. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +1 -1
  91. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  92. package/dist/editor/ai/terminal/components/AgentDocumentList.d.ts +7 -0
  93. package/dist/editor/ai/terminal/components/AgentDocumentList.js +55 -13
  94. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  95. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +5 -0
  96. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +12 -0
  97. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +1 -0
  98. package/dist/editor/ai/terminal/components/AgentFullPromptControls.d.ts +3 -1
  99. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +22 -14
  100. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
  101. package/dist/editor/ai/terminal/components/AgentModeSelector.js +4 -4
  102. package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
  103. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +4 -4
  104. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  105. package/dist/editor/ai/terminal/components/AgentPromptComposer.js +1 -1
  106. package/dist/editor/ai/terminal/components/AgentPromptComposer.js.map +1 -1
  107. package/dist/editor/ai/terminal/components/AgentPromptInputArea.d.ts +2 -1
  108. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +8 -11
  109. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  110. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +1 -4
  111. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +31 -14
  112. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  113. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js +1 -1
  114. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
  115. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +2 -1
  116. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +2 -4
  117. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +1 -1
  119. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  120. package/dist/editor/ai/terminal/components/AgentTerminalView.js +13 -2
  121. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  122. package/dist/editor/ai/terminal/components/AiResponseMessage.js +11 -9
  123. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  124. package/dist/editor/ai/terminal/components/ContextInfoBar.js +22 -2
  125. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  126. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +37 -26
  127. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
  128. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +3 -1
  129. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  130. package/dist/editor/ai/terminal/components/UserMessage.d.ts +2 -1
  131. package/dist/editor/ai/terminal/components/UserMessage.js +144 -8
  132. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  133. package/dist/editor/ai/terminal/useAgentPromptComposerHandlers.js +1 -1
  134. package/dist/editor/ai/terminal/useAgentPromptComposerHandlers.js.map +1 -1
  135. package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +1 -0
  136. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +3 -1
  137. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +9 -3
  138. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  139. package/dist/editor/ai/terminal/useAgentTerminalController.js +7 -0
  140. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  141. package/dist/editor/ai/terminal/useAgentTerminalUiState.js +1 -1
  142. package/dist/editor/ai/terminal/useAgentTerminalUiState.js.map +1 -1
  143. package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js +3 -1
  144. package/dist/editor/ai/terminal/useAgentUserMessageSocketHandler.js.map +1 -1
  145. package/dist/editor/ai/useActiveAgentConversation.d.ts +3 -0
  146. package/dist/editor/ai/useActiveAgentConversation.js +32 -0
  147. package/dist/editor/ai/useActiveAgentConversation.js.map +1 -0
  148. package/dist/editor/ai/useInlineAiPosition.d.ts +10 -2
  149. package/dist/editor/ai/useInlineAiPosition.js +32 -71
  150. package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
  151. package/dist/editor/ai-image-editor/AiImageResultOverlay.js +30 -62
  152. package/dist/editor/ai-image-editor/AiImageResultOverlay.js.map +1 -1
  153. package/dist/editor/bridge/BridgeClient.d.ts +80 -0
  154. package/dist/editor/bridge/BridgeClient.js +417 -0
  155. package/dist/editor/bridge/BridgeClient.js.map +1 -0
  156. package/dist/editor/client/EditorShell.d.ts +5 -1
  157. package/dist/editor/client/EditorShell.js +295 -127
  158. package/dist/editor/client/EditorShell.js.map +1 -1
  159. package/dist/editor/client/editContext.d.ts +58 -5
  160. package/dist/editor/client/editContext.js.map +1 -1
  161. package/dist/editor/client/fieldModificationStore.d.ts +1 -0
  162. package/dist/editor/client/fieldModificationStore.js +7 -2
  163. package/dist/editor/client/fieldModificationStore.js.map +1 -1
  164. package/dist/editor/client/hooks/useSocketMessageHandler.js +14 -17
  165. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  166. package/dist/editor/client/itemsRepository.d.ts +2 -0
  167. package/dist/editor/client/itemsRepository.js +18 -9
  168. package/dist/editor/client/itemsRepository.js.map +1 -1
  169. package/dist/editor/client/operations.d.ts +1 -1
  170. package/dist/editor/client/operations.js +67 -21
  171. package/dist/editor/client/operations.js.map +1 -1
  172. package/dist/editor/client/pageModelBuilder.js +24 -7
  173. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  174. package/dist/editor/client/ui/EditorChrome.js +1 -1
  175. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  176. package/dist/editor/commands/componentCommands.d.ts +3 -1
  177. package/dist/editor/commands/componentCommands.js +8 -3
  178. package/dist/editor/commands/componentCommands.js.map +1 -1
  179. package/dist/editor/field-types/DateFieldEditor.js +1 -1
  180. package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
  181. package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
  182. package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
  183. package/dist/editor/field-types/DropLinkEditor.js +1 -1
  184. package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
  185. package/dist/editor/field-types/DropListEditor.js +1 -1
  186. package/dist/editor/field-types/DropListEditor.js.map +1 -1
  187. package/dist/editor/field-types/ImageFieldEditor.js +1 -1
  188. package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
  189. package/dist/editor/field-types/InternalLinkFieldEditor.js +1 -1
  190. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  191. package/dist/editor/field-types/LinkFieldEditor.js +15 -3
  192. package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
  193. package/dist/editor/field-types/MultiLineText.js +11 -4
  194. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  195. package/dist/editor/field-types/NameValueListEditor.js +1 -1
  196. package/dist/editor/field-types/NameValueListEditor.js.map +1 -1
  197. package/dist/editor/field-types/PictureFieldEditor.js +2 -2
  198. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  199. package/dist/editor/field-types/RawEditor.js +9 -2
  200. package/dist/editor/field-types/RawEditor.js.map +1 -1
  201. package/dist/editor/field-types/RichTextEditorComponent.js +170 -77
  202. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  203. package/dist/editor/field-types/SingleLineText.js +10 -3
  204. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  205. package/dist/editor/field-types/TreeListEditor.js +1 -1
  206. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  207. package/dist/editor/field-types/richtext/bridgeRichTextProfile.d.ts +21 -0
  208. package/dist/editor/field-types/richtext/bridgeRichTextProfile.js +96 -0
  209. package/dist/editor/field-types/richtext/bridgeRichTextProfile.js.map +1 -0
  210. package/dist/editor/field-types/richtext/components/ReactSlate.css +44 -6
  211. package/dist/editor/field-types/richtext/components/ReactSlate.js +191 -36
  212. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  213. package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.css +5 -2
  214. package/dist/editor/field-types/richtext/components/SimpleToolbar.js +5 -4
  215. package/dist/editor/field-types/richtext/components/SimpleToolbar.js.map +1 -1
  216. package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +2 -15
  217. package/dist/editor/field-types/richtext/contextMenuFactory.js +4 -435
  218. package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
  219. package/dist/editor/field-types/richtext/richTextToolbarIcons.d.ts +7 -0
  220. package/dist/editor/field-types/richtext/richTextToolbarIcons.js +49 -0
  221. package/dist/editor/field-types/richtext/richTextToolbarIcons.js.map +1 -0
  222. package/dist/editor/field-types/richtext/types.d.ts +2 -0
  223. package/dist/editor/field-types/richtext/types.js.map +1 -1
  224. package/dist/editor/field-types/richtext/utils/conversion.js +23 -2
  225. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
  226. package/dist/editor/field-types/useFormFieldCaretPresence.d.ts +13 -0
  227. package/dist/editor/field-types/useFormFieldCaretPresence.js +92 -0
  228. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -0
  229. package/dist/editor/fieldTypes.d.ts +2 -0
  230. package/dist/editor/media-selector/TreeSelector.js +15 -15
  231. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  232. package/dist/editor/menubar/PageSelector.js +8 -2
  233. package/dist/editor/menubar/PageSelector.js.map +1 -1
  234. package/dist/editor/menubar/VersionPreviewCard.js +4 -249
  235. package/dist/editor/menubar/VersionPreviewCard.js.map +1 -1
  236. package/dist/editor/menubar/toolbar-sections/EditControls.js +2 -2
  237. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  238. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +338 -187
  239. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  240. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +3 -1
  241. package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
  242. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
  243. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +8 -0
  244. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +407 -0
  245. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -0
  246. package/dist/editor/page-editor-chrome/CommentHighlightings.d.ts +5 -2
  247. package/dist/editor/page-editor-chrome/CommentHighlightings.js +340 -215
  248. package/dist/editor/page-editor-chrome/CommentHighlightings.js.map +1 -1
  249. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.d.ts +5 -1
  250. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js +11 -4
  251. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
  252. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +21 -13
  253. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  254. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +23 -29
  255. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js.map +1 -1
  256. package/dist/editor/page-editor-chrome/FrameMenu.js +110 -19
  257. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  258. package/dist/editor/page-editor-chrome/LockedFieldIndicator.d.ts +3 -2
  259. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +148 -45
  260. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  261. package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +2 -0
  262. package/dist/editor/page-editor-chrome/PageEditorChrome.js +25 -21
  263. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  264. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +163 -128
  265. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  266. package/dist/editor/page-editor-chrome/PlaceholderDropZone.d.ts +1 -1
  267. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +6 -3
  268. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  269. package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -2
  270. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +83 -146
  271. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  272. package/dist/editor/page-editor-chrome/SuggestionHighlightings.d.ts +5 -2
  273. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +144 -63
  274. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  275. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +1 -2
  276. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +101 -30
  277. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  278. package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.d.ts +24 -0
  279. package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js +89 -0
  280. package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js.map +1 -0
  281. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +10 -1
  282. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +105 -122
  283. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  284. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +11 -4
  285. package/dist/editor/page-editor-chrome/overlay/geometry.js +139 -36
  286. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  287. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +26 -0
  288. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +228 -0
  289. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -0
  290. package/dist/editor/page-viewer/EditorForm.js +17 -1
  291. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  292. package/dist/editor/page-viewer/MiniMap.d.ts +2 -2
  293. package/dist/editor/page-viewer/MiniMap.js +176 -364
  294. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  295. package/dist/editor/page-viewer/PageViewer.js +63 -17
  296. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  297. package/dist/editor/page-viewer/PageViewerFrame.d.ts +0 -5
  298. package/dist/editor/page-viewer/PageViewerFrame.js +1685 -1512
  299. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  300. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +20 -0
  301. package/dist/editor/page-viewer/bridgeFieldPatch.js +33 -0
  302. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -0
  303. package/dist/editor/page-viewer/pageViewContext.d.ts +32 -0
  304. package/dist/editor/page-viewer/pageViewContext.js +37 -6
  305. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  306. package/dist/editor/reviews/Comment.d.ts +2 -1
  307. package/dist/editor/reviews/Comment.js +10 -5
  308. package/dist/editor/reviews/Comment.js.map +1 -1
  309. package/dist/editor/reviews/CommentDisplayPopover.js +2 -1
  310. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  311. package/dist/editor/reviews/CommentEditor.d.ts +1 -0
  312. package/dist/editor/reviews/CommentEditor.js +3 -2
  313. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  314. package/dist/editor/reviews/CommentPopover.js +69 -10
  315. package/dist/editor/reviews/CommentPopover.js.map +1 -1
  316. package/dist/editor/reviews/CommentView.js +24 -4
  317. package/dist/editor/reviews/CommentView.js.map +1 -1
  318. package/dist/editor/reviews/Comments.d.ts +0 -2
  319. package/dist/editor/reviews/Comments.js +31 -31
  320. package/dist/editor/reviews/Comments.js.map +1 -1
  321. package/dist/editor/reviews/FeedbackCard.d.ts +4 -2
  322. package/dist/editor/reviews/FeedbackCard.js +8 -10
  323. package/dist/editor/reviews/FeedbackCard.js.map +1 -1
  324. package/dist/editor/reviews/SuggestedEdit.js +4 -6
  325. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  326. package/dist/editor/reviews/SuggestionCommentThread.js +3 -3
  327. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  328. package/dist/editor/reviews/SuggestionDisplayPopover.js +3 -2
  329. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  330. package/dist/editor/reviews/commentAi.js +96 -27
  331. package/dist/editor/reviews/commentAi.js.map +1 -1
  332. package/dist/editor/reviews/commentTransientSelection.d.ts +23 -0
  333. package/dist/editor/reviews/commentTransientSelection.js +7 -0
  334. package/dist/editor/reviews/commentTransientSelection.js.map +1 -0
  335. package/dist/editor/reviews/feedbackOrdering.d.ts +5 -0
  336. package/dist/editor/reviews/feedbackOrdering.js +27 -0
  337. package/dist/editor/reviews/feedbackOrdering.js.map +1 -0
  338. package/dist/editor/reviews/feedbackSelection.js +32 -4
  339. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  340. package/dist/editor/reviews/suggestedEditState.d.ts +12 -0
  341. package/dist/editor/reviews/suggestedEditState.js +90 -0
  342. package/dist/editor/reviews/suggestedEditState.js.map +1 -0
  343. package/dist/editor/reviews/suggestionDisplayValue.d.ts +43 -0
  344. package/dist/editor/reviews/suggestionDisplayValue.js +93 -0
  345. package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -0
  346. package/dist/editor/services/agentService.d.ts +15 -0
  347. package/dist/editor/services/agentService.js +11 -1
  348. package/dist/editor/services/agentService.js.map +1 -1
  349. package/dist/editor/services/reviewsService.d.ts +2 -2
  350. package/dist/editor/services/reviewsService.js.map +1 -1
  351. package/dist/editor/settings/SettingsView.js +2 -2
  352. package/dist/editor/settings/SettingsView.js.map +1 -1
  353. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1 -1
  354. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  355. package/dist/editor/settings/panels/ProvidersPanel.js +2 -3
  356. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  357. package/dist/editor/sidebar/MorePanelsButton.js +1 -1
  358. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  359. package/dist/editor/sidebar/Validation.js +4 -1
  360. package/dist/editor/sidebar/Validation.js.map +1 -1
  361. package/dist/editor/sidebar/Workbox.js +1 -1
  362. package/dist/editor/sidebar/Workbox.js.map +1 -1
  363. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +1 -1
  364. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
  365. package/dist/editor/ui/IconSelectorDialog.js +1 -1
  366. package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
  367. package/dist/editor/ui/SimpleIconButton.d.ts +2 -2
  368. package/dist/editor/ui/SimpleIconButton.js +7 -1
  369. package/dist/editor/ui/SimpleIconButton.js.map +1 -1
  370. package/dist/editor/ui/Splitter.d.ts +1 -0
  371. package/dist/editor/ui/Splitter.js +12 -2
  372. package/dist/editor/ui/Splitter.js.map +1 -1
  373. package/dist/editor/ui/animationSettle.d.ts +32 -0
  374. package/dist/editor/ui/animationSettle.js +85 -0
  375. package/dist/editor/ui/animationSettle.js.map +1 -0
  376. package/dist/editor/utils/expandSelectionAtCaret.d.ts +15 -0
  377. package/dist/editor/utils/expandSelectionAtCaret.js +183 -0
  378. package/dist/editor/utils/expandSelectionAtCaret.js.map +1 -0
  379. package/dist/editor/utils.d.ts +1 -17
  380. package/dist/editor/utils.js +0 -143
  381. package/dist/editor/utils.js.map +1 -1
  382. package/dist/editor/version-diff/versionDiffTargets.d.ts +3 -8
  383. package/dist/editor/version-diff/versionDiffTargets.js +37 -94
  384. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  385. package/dist/revision.d.ts +2 -2
  386. package/dist/revision.js +2 -2
  387. package/dist/splash-screen/ModernSplashScreen.js +11 -3
  388. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  389. package/dist/splash-screen/NewPage.js +7 -5
  390. package/dist/splash-screen/NewPage.js.map +1 -1
  391. package/dist/splash-screen/OpenPage.js +5 -3
  392. package/dist/splash-screen/OpenPage.js.map +1 -1
  393. package/dist/splash-screen/RecentPages.js +3 -3
  394. package/dist/splash-screen/RecentPages.js.map +1 -1
  395. package/dist/task-board/components/TaskDetailPanel.js +2 -1
  396. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  397. package/dist/task-board/views/DependencyGraphView.d.ts +42 -1
  398. package/dist/task-board/views/DependencyGraphView.js +94 -0
  399. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  400. package/dist/types.d.ts +1 -0
  401. package/package.json +2 -1
  402. package/styles.css +96 -0
  403. package/dist/editor/page-editor-chrome/InlineEditor.d.ts +0 -7
  404. package/dist/editor/page-editor-chrome/InlineEditor.js +0 -1719
  405. package/dist/editor/page-editor-chrome/InlineEditor.js.map +0 -1
  406. package/dist/editor/page-editor-chrome/overlay/iframeAccess.d.ts +0 -2
  407. package/dist/editor/page-editor-chrome/overlay/iframeAccess.js +0 -21
  408. package/dist/editor/page-editor-chrome/overlay/iframeAccess.js.map +0 -1
  409. package/dist/editor/page-editor-chrome/useInlineAICompletion.d.ts +0 -7
  410. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +0 -758
  411. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +0 -1
  412. package/dist/editor/page-viewer/pageModelSkeletonBuilder.d.ts +0 -3
  413. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +0 -796
  414. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +0 -1
@@ -1,12 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { forwardRef, useMemo, } from "react";
3
- import { useEditContext, useFieldsEditContext } from "../client/editContext";
4
- import { findElementByNormalizedDataAttribute, findFieldElement, getNextNonChromeMarkerElement, } from "../utils";
2
+ import { forwardRef, useEffect, useMemo, useRef, useState, } from "react";
3
+ import { useEditContext, useFieldsEditContext, } from "../client/editContext";
4
+ import { normalizeMarkerId } from "../utils";
5
5
  import { CommentDisplayPopover } from "../reviews/CommentDisplayPopover";
6
- import { measureElementRect, rectListEquals, toOverlayRect, } from "./overlay/geometry";
7
- import { getAccessibleIframeDocument } from "./overlay/iframeAccess";
6
+ import { measureBridgeComponentRect, measureBridgeFieldRect, measureBridgeTextRangeRects, rectListEquals, toOverlayRect, } from "./overlay/geometry";
8
7
  import { useOverlayMeasurement } from "./overlay/useOverlayMeasurement";
8
+ import { getComponentById } from "../componentTreeHelper";
9
9
  import { dedupeFeedbackHighlightItems, FeedbackHighlightBadge, FeedbackHighlightBadgeTray, } from "./FeedbackHighlightBadge";
10
+ import { COMMENT_DRAFT_SELECTION_EVENT, COMMENT_TRANSIENT_ELEMENT_KEY, COMMENT_TRANSIENT_SELECTION_RECT, } from "../reviews/commentTransientSelection";
11
+ const COMMENT_DRAFT_TEXT_RANGE_KEY = "comment-draft-selection";
12
+ const COMMENT_BRIDGE_SOURCE = "comments";
10
13
  function commentMeasurementsEqual(previous, next) {
11
14
  const previousKeys = Object.keys(previous);
12
15
  const nextKeys = Object.keys(next);
@@ -24,56 +27,189 @@ function commentMeasurementsEqual(previous, next) {
24
27
  }
25
28
  return true;
26
29
  }
27
- export function CommentHighlightings({ iframe, }) {
30
+ export function CommentHighlightings({ pageViewContext, variant = "default", }) {
28
31
  const editContext = useEditContext();
32
+ const modifiedFields = useFieldsEditContext();
33
+ const lastMeasurementsRef = useRef({});
34
+ const bridgeTextRangeRequestRef = useRef({
35
+ signature: "",
36
+ requestedSignature: "",
37
+ hasSeenAnyTarget: false,
38
+ });
39
+ const [commentDraftRange, setCommentDraftRange] = useState();
40
+ useEffect(() => {
41
+ const handleDraftSelection = (event) => {
42
+ const detail = event
43
+ .detail;
44
+ setCommentDraftRange(detail?.range);
45
+ };
46
+ window.addEventListener(COMMENT_DRAFT_SELECTION_EVENT, handleDraftSelection);
47
+ return () => {
48
+ window.removeEventListener(COMMENT_DRAFT_SELECTION_EVENT, handleDraftSelection);
49
+ };
50
+ }, []);
29
51
  const visibleComments = useMemo(() => (editContext?.comments || []).filter((comment) => !comment.suggestedEditId &&
30
52
  (editContext?.showResolvedComments ? true : !comment.isResolved)), [editContext?.comments, editContext?.showResolvedComments]);
31
- const measurements = useOverlayMeasurement((metrics) => {
32
- const iframeDocument = getAccessibleIframeDocument(iframe);
33
- if (!editContext || !iframeDocument?.body)
53
+ const bridgeTextRanges = useMemo(() => {
54
+ const commentRanges = visibleComments.flatMap((comment) => {
55
+ const range = getCommentTextRange(comment);
56
+ if (!comment.fieldId || !range)
57
+ return [];
58
+ return getCommentFieldDescriptors(comment).map((descriptor) => ({
59
+ key: getCommentTextRangeKey(comment),
60
+ elementKey: getCommentTransientElementKey(comment),
61
+ fieldId: descriptor.fieldId,
62
+ item: descriptor.item,
63
+ start: range[0],
64
+ end: range[1],
65
+ }));
66
+ });
67
+ const draftRange = getDraftBridgeTextRange(commentDraftRange);
68
+ return draftRange ? [...commentRanges, draftRange] : commentRanges;
69
+ }, [visibleComments, commentDraftRange]);
70
+ const bridgeTextRangeSignature = useMemo(() => bridgeTextRanges
71
+ .map((range) => [
72
+ range.key,
73
+ range.elementKey,
74
+ range.fieldId,
75
+ range.item.id,
76
+ range.item.language,
77
+ range.item.version,
78
+ range.start,
79
+ range.end,
80
+ ].join(":"))
81
+ .join("|"), [bridgeTextRanges]);
82
+ useEffect(() => {
83
+ const requestState = bridgeTextRangeRequestRef.current;
84
+ if (!pageViewContext.bridgeReady || bridgeTextRanges.length === 0) {
85
+ if (pageViewContext.bridgeReady && requestState.signature !== "") {
86
+ // Drop our contribution from the shared union so the highlights clear
87
+ // instead of lingering as phantom geometry targets.
88
+ pageViewContext.requestBridgeGeometry?.({
89
+ source: COMMENT_BRIDGE_SOURCE,
90
+ textRanges: [],
91
+ });
92
+ }
93
+ requestState.signature = "";
94
+ requestState.requestedSignature = "";
95
+ requestState.hasSeenAnyTarget = false;
96
+ return;
97
+ }
98
+ const signatureChanged = requestState.signature !== bridgeTextRangeSignature;
99
+ if (signatureChanged) {
100
+ requestState.signature = bridgeTextRangeSignature;
101
+ requestState.requestedSignature = "";
102
+ requestState.hasSeenAnyTarget = false;
103
+ }
104
+ const bridgeGeometry = pageViewContext.bridgeGeometry;
105
+ const hasAnyTarget = hasAnyExpectedBridgeTextRange(bridgeGeometry, bridgeTextRanges);
106
+ const hasAllTargets = hasAllExpectedBridgeTextRanges(bridgeGeometry, bridgeTextRanges);
107
+ if (hasAnyTarget) {
108
+ requestState.hasSeenAnyTarget = true;
109
+ }
110
+ if (hasAllTargets && !signatureChanged) {
111
+ requestState.requestedSignature = "";
112
+ return;
113
+ }
114
+ const shouldRequest = signatureChanged ||
115
+ requestState.requestedSignature !== bridgeTextRangeSignature ||
116
+ (requestState.hasSeenAnyTarget && !hasAnyTarget);
117
+ if (!shouldRequest)
118
+ return;
119
+ requestState.requestedSignature = bridgeTextRangeSignature;
120
+ pageViewContext.requestBridgeGeometry?.({
121
+ source: COMMENT_BRIDGE_SOURCE,
122
+ textRanges: bridgeTextRanges,
123
+ });
124
+ }, [
125
+ pageViewContext,
126
+ pageViewContext.bridgeReady,
127
+ pageViewContext.bridgeGeometry,
128
+ bridgeTextRanges,
129
+ bridgeTextRangeSignature,
130
+ commentDraftRange,
131
+ ]);
132
+ const measurements = useOverlayMeasurement((metrics, reasons) => {
133
+ if (!editContext)
34
134
  return {};
135
+ const bridgeGeometry = pageViewContext.bridgeGeometry;
136
+ const canReusePreviousMeasurement = !reasons.has("viewport") &&
137
+ !reasons.has("layout") &&
138
+ !reasons.has("text");
35
139
  const nextMeasurements = {};
36
140
  for (const comment of visibleComments) {
37
- const fieldElement = comment.fieldId
38
- ? findFieldElement(iframe, {
39
- item: {
40
- id: comment.itemId,
41
- language: comment.language,
42
- version: comment.version,
43
- },
44
- fieldId: comment.fieldId,
45
- })
46
- : undefined;
47
- const range = fieldElement
48
- ? resolveCommentRange(comment, fieldElement, iframeDocument)
49
- : null;
141
+ const textRange = getCommentTextRange(comment);
142
+ const fieldDescriptors = getCommentFieldDescriptors(comment);
143
+ const hasTextRange = !!comment.fieldId && !!textRange;
144
+ const textRangeRects = hasTextRange
145
+ ? dedupeOverlayRects(measureBridgeTextRangeRects(bridgeGeometry, getCommentTextRangeKey(comment), metrics))
146
+ : [];
147
+ const previousMeasurement = lastMeasurementsRef.current[comment.id];
148
+ const previousTextRangeRects = canReusePreviousMeasurement && previousMeasurement?.isTextRange
149
+ ? previousMeasurement.rects
150
+ : [];
50
151
  let rects = [];
51
152
  let isTextRange = false;
52
- if (fieldElement && range) {
53
- rects = measureVisibleTextRangeRects(iframeDocument, fieldElement, range[0], range[1], metrics);
153
+ if (hasTextRange) {
154
+ rects = textRangeRects.length
155
+ ? textRangeRects
156
+ : previousTextRangeRects.length
157
+ ? previousTextRangeRects
158
+ : getTransientSelectionRects(comment, metrics, pageViewContext.editorIframe);
54
159
  isTextRange = rects.length > 0;
55
160
  }
56
- if (rects.length === 0) {
57
- let fallbackElement = fieldElement;
58
- if (!fallbackElement && comment.itemId && editContext.page) {
59
- const componentStart = findElementByNormalizedDataAttribute(iframeDocument.body, "data-component-start", comment.itemId);
60
- fallbackElement =
61
- getNextNonChromeMarkerElement(componentStart) ?? undefined;
62
- }
63
- const fallbackRect = measureElementRect(fallbackElement, metrics);
64
- if (fallbackRect)
65
- rects = [fallbackRect];
161
+ else {
162
+ const fallbackRect = fieldDescriptors
163
+ .map((descriptor) => measureBridgeFieldRect(bridgeGeometry, pageViewContext.bridgeStructure, descriptor, metrics))
164
+ .find((rect) => !!rect) ??
165
+ measureBridgeCommentComponentRect(comment, pageViewContext, bridgeGeometry, metrics);
166
+ rects = fallbackRect
167
+ ? [fallbackRect]
168
+ : canReusePreviousMeasurement && previousMeasurement?.rects.length
169
+ ? previousMeasurement.rects
170
+ : [];
171
+ isTextRange =
172
+ !fallbackRect &&
173
+ canReusePreviousMeasurement &&
174
+ previousMeasurement?.isTextRange === true;
66
175
  }
67
176
  if (rects.length > 0) {
68
- nextMeasurements[comment.id] = { rects, isTextRange };
177
+ nextMeasurements[comment.id] = {
178
+ rects,
179
+ isTextRange,
180
+ };
69
181
  }
70
182
  }
71
183
  return nextMeasurements;
72
- }, [iframe, editContext, visibleComments], {
184
+ }, [
185
+ editContext,
186
+ pageViewContext.bridgeGeometry,
187
+ pageViewContext.bridgeStructure,
188
+ visibleComments,
189
+ ], {
73
190
  initialValue: {},
74
191
  equals: commentMeasurementsEqual,
75
192
  interests: ["viewport", "layout", "text", "adornment-data"],
76
193
  });
194
+ const draftRects = useOverlayMeasurement((metrics) => {
195
+ if (!commentDraftRange)
196
+ return [];
197
+ const bridgeRects = dedupeOverlayRects(measureBridgeTextRangeRects(pageViewContext.bridgeGeometry, COMMENT_DRAFT_TEXT_RANGE_KEY, metrics));
198
+ const fallbackRects = getSelectionRangeClientRects(commentDraftRange, metrics, pageViewContext.editorIframe);
199
+ const rects = bridgeRects.length ? bridgeRects : fallbackRects;
200
+ return rects;
201
+ }, [
202
+ commentDraftRange,
203
+ pageViewContext.bridgeGeometry,
204
+ pageViewContext.editorIframe,
205
+ ], {
206
+ initialValue: [],
207
+ equals: rectListEquals,
208
+ interests: ["viewport", "layout", "text", "adornment-data"],
209
+ });
210
+ useEffect(() => {
211
+ lastMeasurementsRef.current = measurements;
212
+ }, [measurements]);
77
213
  const overlayGroups = useMemo(() => {
78
214
  const groups = new Map();
79
215
  for (const comment of visibleComments) {
@@ -97,11 +233,22 @@ export function CommentHighlightings({ iframe, }) {
97
233
  isSelected: comment.id === editContext?.selectedComment?.id,
98
234
  });
99
235
  }
100
- return Array.from(groups.values());
236
+ const nextGroups = Array.from(groups.values());
237
+ return nextGroups;
101
238
  }, [visibleComments, measurements, editContext?.selectedComment?.id]);
102
239
  if (!editContext)
103
240
  return null;
104
- return (_jsxs(_Fragment, { children: [_jsx("style", { children: commentHighlightingStyles }), overlayGroups.flatMap((group) => {
241
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: commentHighlightingStyles }), draftRects.map((rect, index) => (_jsx("div", { style: {
242
+ position: "absolute",
243
+ top: rect.y,
244
+ left: rect.x,
245
+ width: rect.width,
246
+ height: rect.height,
247
+ pointerEvents: "none",
248
+ }, children: _jsx("div", { "data-testid": "comment-draft-highlight", className: "absolute right-0 bottom-[0.08em] left-0 h-[0.82em] min-h-[10px]", style: {
249
+ ...getDraftCommentRangeStyle(),
250
+ zIndex: 0,
251
+ } }) }, `comment-draft-${index}`))), overlayGroups.flatMap((group) => {
105
252
  const badgeComments = dedupeFeedbackHighlightItems(group.comments, (comment) => comment.id === editContext.selectedComment?.id);
106
253
  return group.rects.map((rect, index) => (_jsxs("div", { style: {
107
254
  position: "absolute",
@@ -110,26 +257,38 @@ export function CommentHighlightings({ iframe, }) {
110
257
  width: rect.width,
111
258
  height: rect.height,
112
259
  pointerEvents: "none",
113
- }, children: [group.isTextRange ? (_jsx("div", { className: "absolute right-0 bottom-[0.08em] left-0 h-[0.82em] min-h-[10px]", style: {
260
+ }, children: [group.isTextRange ? (_jsx("div", { "data-testid": "comment-highlight", className: "absolute right-0 bottom-[0.08em] left-0 h-[0.82em] min-h-[10px]", style: {
114
261
  ...getCommentRangeStyle(group.comments, group.isSelected),
115
262
  zIndex: 0,
116
- } })) : (_jsx("div", { className: "absolute inset-0 rounded-[3px]", style: {
263
+ } })) : (_jsx("div", { "data-testid": "comment-highlight", className: "absolute inset-0 rounded-[3px]", style: {
117
264
  ...getCommentFallbackStyle(group.comments, group.isSelected),
118
265
  zIndex: 0,
119
- } })), index === 0 && (_jsx(FeedbackHighlightBadgeTray, { style: {
120
- top: group.isTextRange ? -24 : -16,
121
- left: group.isTextRange ? -9 : 8,
266
+ } })), index === 0 && (_jsx(FeedbackHighlightBadgeTray, { variant: variant, style: {
267
+ top: variant === "minimap"
268
+ ? group.isTextRange
269
+ ? -11
270
+ : -8
271
+ : group.isTextRange
272
+ ? -24
273
+ : -16,
274
+ left: variant === "minimap"
275
+ ? group.isTextRange
276
+ ? -4
277
+ : 4
278
+ : group.isTextRange
279
+ ? -9
280
+ : 8,
122
281
  }, children: badgeComments.map((comment, badgeIndex) => {
123
282
  const isSelected = comment.id === editContext.selectedComment?.id;
124
283
  return (_jsx(CommentDisplayPopover, { comment: comment, onCommentUpdated: () => {
125
284
  editContext?.loadComments?.();
126
- }, children: _jsx(CommentHighlightBadge, { comment: comment, isSelected: isSelected, zIndex: isSelected
285
+ }, children: _jsx(CommentHighlightBadge, { comment: comment, isSelected: isSelected, variant: variant, minimapColorClassName: "bg-highlight-100", zIndex: isSelected
127
286
  ? badgeComments.length + 101
128
287
  : badgeComments.length - badgeIndex + 100 }) }, comment.id));
129
288
  }) }))] }, `${group.key}-${index}`)));
130
289
  })] }));
131
290
  }
132
- const CommentHighlightBadge = forwardRef(function CommentHighlightBadge({ comment, isSelected, zIndex, className, style, onClick, ...buttonProps }, ref) {
291
+ const CommentHighlightBadge = forwardRef(function CommentHighlightBadge({ comment, isSelected, variant, minimapColorClassName, zIndex, className, style, onClick, ...buttonProps }, ref) {
133
292
  const editContext = useEditContext();
134
293
  const modifiedFields = useFieldsEditContext();
135
294
  const handleClick = (event) => {
@@ -150,7 +309,7 @@ const CommentHighlightBadge = forwardRef(function CommentHighlightBadge({ commen
150
309
  }, false);
151
310
  }
152
311
  };
153
- return (_jsx(FeedbackHighlightBadge, { ref: ref, item: comment, isSelected: isSelected, zIndex: zIndex, testId: "comment-highlight-icon", ariaSubject: "comment", className: className, style: style, onClick: handleClick, ...buttonProps }));
312
+ return (_jsx(FeedbackHighlightBadge, { ref: ref, item: comment, isSelected: isSelected, variant: variant, minimapColorClassName: minimapColorClassName, zIndex: zIndex, testId: "comment-highlight-icon", ariaSubject: "comment", className: className, style: style, onClick: handleClick, ...buttonProps }));
154
313
  });
155
314
  function getCommentMeasurementKey(measurement) {
156
315
  const rectKey = measurement.rects
@@ -161,77 +320,140 @@ function getCommentMeasurementKey(measurement) {
161
320
  function roundMeasurement(value) {
162
321
  return Math.round(value * 2) / 2;
163
322
  }
164
- function measureVisibleTextRangeRects(iframeDocument, root, start, end, metrics) {
165
- const text = root.textContent || "";
166
- const boundedStart = Math.max(0, Math.min(start, text.length));
167
- const boundedEnd = Math.max(boundedStart, Math.min(end, text.length));
168
- if (boundedStart >= boundedEnd)
169
- return [];
170
- const rects = [];
171
- const walker = iframeDocument.createTreeWalker(root, NodeFilter.SHOW_TEXT);
172
- let absoluteOffset = 0;
173
- let textNode;
174
- while ((textNode = walker.nextNode())) {
175
- const nodeText = textNode.textContent || "";
176
- const nodeStart = absoluteOffset;
177
- const nodeEnd = nodeStart + nodeText.length;
178
- if (nodeEnd > boundedStart && nodeStart < boundedEnd) {
179
- const localStart = Math.max(0, boundedStart - nodeStart);
180
- const localEnd = Math.min(nodeText.length, boundedEnd - nodeStart);
181
- rects.push(...measureVisibleTextNodeRects(iframeDocument, textNode, nodeText, localStart, localEnd, metrics));
182
- }
183
- absoluteOffset = nodeEnd;
184
- if (absoluteOffset >= boundedEnd)
185
- break;
323
+ function getCommentTextRangeKey(comment) {
324
+ return `comment:${comment.id}`;
325
+ }
326
+ function getDraftBridgeTextRange(range) {
327
+ const textRange = getSelectionTextRange(range);
328
+ if (!range?.fieldId || !range.itemId || !textRange)
329
+ return undefined;
330
+ return {
331
+ key: COMMENT_DRAFT_TEXT_RANGE_KEY,
332
+ elementKey: range.elementKey,
333
+ fieldId: range.fieldId,
334
+ item: {
335
+ id: range.itemId,
336
+ language: range.language || "",
337
+ version: typeof range.version === "number" ? range.version : undefined,
338
+ },
339
+ start: textRange[0],
340
+ end: textRange[1],
341
+ };
342
+ }
343
+ function getSelectionTextRange(range) {
344
+ if (!range?.text?.trim() ||
345
+ typeof range.startOffset !== "number" ||
346
+ typeof range.endOffset !== "number") {
347
+ return null;
186
348
  }
187
- return rects;
349
+ const start = Math.max(0, Math.min(range.startOffset, range.endOffset));
350
+ const end = Math.max(start, range.startOffset, range.endOffset);
351
+ return end > start ? [start, end] : null;
188
352
  }
189
- function measureVisibleTextNodeRects(iframeDocument, textNode, nodeText, start, end, metrics) {
190
- const rects = [];
191
- let cursor = start;
192
- while (cursor < end) {
193
- let lineEnd = cursor;
194
- while (lineEnd < end && !isLineBreak(nodeText[lineEnd])) {
195
- lineEnd++;
196
- }
197
- let visibleStart = cursor;
198
- while (visibleStart < lineEnd &&
199
- isHorizontalWhitespace(nodeText[visibleStart])) {
200
- visibleStart++;
201
- }
202
- let visibleEnd = lineEnd;
203
- while (visibleEnd > visibleStart &&
204
- isHorizontalWhitespace(nodeText[visibleEnd - 1])) {
205
- visibleEnd--;
206
- }
207
- if (visibleStart < visibleEnd) {
208
- try {
209
- const textRange = iframeDocument.createRange();
210
- textRange.setStart(textNode, visibleStart);
211
- textRange.setEnd(textNode, visibleEnd);
212
- rects.push(...Array.from(textRange.getClientRects())
213
- .filter((rect) => rect.width > 1 && rect.height > 1)
214
- .map((rect) => toOverlayRect(rect, metrics)));
215
- }
216
- catch {
217
- // Ignore detached or otherwise invalid text nodes while the iframe mutates.
218
- }
219
- }
220
- cursor = lineEnd;
221
- if (nodeText[cursor] === "\r" && nodeText[cursor + 1] === "\n") {
222
- cursor += 2;
223
- }
224
- else {
225
- cursor++;
353
+ function getCommentTransientElementKey(comment) {
354
+ return comment[COMMENT_TRANSIENT_ELEMENT_KEY];
355
+ }
356
+ function hasAnyExpectedBridgeTextRange(geometry, textRanges) {
357
+ if (!geometry)
358
+ return false;
359
+ const expectedKeys = new Set(textRanges.map((range) => range.key));
360
+ return geometry.targets.some((target) => target.kind === "textRange" && expectedKeys.has(target.key));
361
+ }
362
+ function hasAllExpectedBridgeTextRanges(geometry, textRanges) {
363
+ if (!geometry)
364
+ return false;
365
+ const availableKeys = new Set(geometry.targets
366
+ .filter((target) => target.kind === "textRange")
367
+ .map((target) => target.key));
368
+ return textRanges.every((range) => availableKeys.has(range.key));
369
+ }
370
+ function getCommentTextRange(comment) {
371
+ if (typeof comment.rangeStart !== "number" ||
372
+ typeof comment.rangeEnd !== "number") {
373
+ return null;
374
+ }
375
+ const start = Math.max(0, Math.min(comment.rangeStart, comment.rangeEnd));
376
+ const end = Math.max(start, comment.rangeStart, comment.rangeEnd);
377
+ return end > start ? [start, end] : null;
378
+ }
379
+ function getCommentFieldDescriptors(comment) {
380
+ if (!comment.fieldId)
381
+ return [];
382
+ const items = getCommentCandidateItems(comment);
383
+ return items.map((item) => ({
384
+ fieldId: comment.fieldId,
385
+ item,
386
+ }));
387
+ }
388
+ function getCommentCandidateItems(comment) {
389
+ const candidates = [];
390
+ const addCandidate = (id) => {
391
+ if (!id)
392
+ return;
393
+ const normalizedId = normalizeMarkerId(id);
394
+ if (candidates.some((candidate) => normalizeMarkerId(candidate.id) === normalizedId)) {
395
+ return;
226
396
  }
397
+ candidates.push({
398
+ id,
399
+ language: comment.language,
400
+ version: comment.version,
401
+ });
402
+ };
403
+ addCandidate(comment.itemId);
404
+ addCandidate(comment.mainItemId);
405
+ comment.relatedItems?.forEach((item) => addCandidate(item.itemId));
406
+ return candidates;
407
+ }
408
+ function measureBridgeCommentComponentRect(comment, pageViewContext, bridgeGeometry, metrics) {
409
+ const page = pageViewContext?.page;
410
+ if (!page)
411
+ return null;
412
+ for (const item of getCommentCandidateItems(comment)) {
413
+ const component = getComponentById(item.id, page);
414
+ if (!component)
415
+ continue;
416
+ const measurement = measureBridgeComponentRect(bridgeGeometry, component, metrics);
417
+ if (measurement?.rect)
418
+ return measurement.rect;
227
419
  }
228
- return rects;
420
+ return null;
421
+ }
422
+ function getTransientSelectionRects(comment, metrics, iframe) {
423
+ const rect = comment[COMMENT_TRANSIENT_SELECTION_RECT];
424
+ return rect ? viewportSelectionRectToOverlayRects(rect, metrics, iframe) : [];
229
425
  }
230
- function isLineBreak(value) {
231
- return value === "\n" || value === "\r";
426
+ function getSelectionRangeClientRects(range, metrics, iframe) {
427
+ const rect = range.clientRect;
428
+ return rect ? viewportSelectionRectToOverlayRects(rect, metrics, iframe) : [];
232
429
  }
233
- function isHorizontalWhitespace(value) {
234
- return value === " " || value === "\t" || value === "\f" || value === "\v";
430
+ function viewportSelectionRectToOverlayRects(rect, metrics, iframe) {
431
+ if (!rect || rect.width <= 0 || rect.height <= 0)
432
+ return [];
433
+ const iframeRect = iframe?.getBoundingClientRect();
434
+ return [
435
+ toOverlayRect({
436
+ left: iframeRect ? rect.left - iframeRect.left : rect.left,
437
+ top: iframeRect ? rect.top - iframeRect.top : rect.top,
438
+ width: rect.width,
439
+ height: rect.height,
440
+ }, metrics),
441
+ ];
442
+ }
443
+ function dedupeOverlayRects(rects) {
444
+ const seen = new Set();
445
+ return rects.filter((rect) => {
446
+ const key = [
447
+ Math.round(rect.x * 100),
448
+ Math.round(rect.y * 100),
449
+ Math.round(rect.width * 100),
450
+ Math.round(rect.height * 100),
451
+ ].join(":");
452
+ if (seen.has(key))
453
+ return false;
454
+ seen.add(key);
455
+ return true;
456
+ });
235
457
  }
236
458
  function getCommentRangeStyle(comments, isSelected) {
237
459
  const allResolved = comments.every((comment) => comment.isResolved);
@@ -253,6 +475,13 @@ function getCommentRangeStyle(comments, isSelected) {
253
475
  : {}),
254
476
  };
255
477
  }
478
+ function getDraftCommentRangeStyle() {
479
+ return {
480
+ background: "color-mix(in srgb, var(--color-highlight-100) 32%, transparent)",
481
+ borderRadius: "2px",
482
+ boxShadow: "0 1px 4px color-mix(in srgb, var(--color-highlight-100) 18%, transparent)",
483
+ };
484
+ }
256
485
  function getCommentFallbackStyle(comments, isSelected) {
257
486
  const allResolved = comments.every((comment) => comment.isResolved);
258
487
  const color = allResolved
@@ -273,108 +502,4 @@ const commentHighlightingStyles = `
273
502
  }
274
503
  }
275
504
  `;
276
- function resolveCommentRange(comment, fieldElement, iframeDocument) {
277
- if (comment.rangeStart === undefined || comment.rangeEnd === undefined) {
278
- return null;
279
- }
280
- const originalRange = [
281
- Math.max(0, comment.rangeStart),
282
- Math.max(comment.rangeStart, comment.rangeEnd),
283
- ];
284
- const storedText = getStoredFieldText(comment, fieldElement, iframeDocument);
285
- const currentText = fieldElement.textContent || "";
286
- if (!storedText || storedText === currentText) {
287
- return originalRange;
288
- }
289
- const mapping = computeMapping(currentText, storedText);
290
- const mappedStart = mapping[originalRange[0]];
291
- const mappedEnd = mapping[originalRange[1]];
292
- if (mappedStart === undefined || mappedEnd === undefined) {
293
- return originalRange;
294
- }
295
- return [mappedStart, Math.max(mappedStart, mappedEnd)];
296
- }
297
- function getStoredFieldText(comment, fieldElement, iframeDocument) {
298
- if (!comment.fieldValue)
299
- return "";
300
- const isRichText = fieldElement.getAttribute("data-is-richtext") === "true";
301
- if (!isRichText)
302
- return comment.fieldValue;
303
- const template = iframeDocument.createElement("template");
304
- template.innerHTML = comment.fieldValue;
305
- return template.content.textContent || "";
306
- }
307
- function computeMapping(s1, s2) {
308
- const n = s1.length;
309
- const m = s2.length;
310
- const dp = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
311
- const back = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(""));
312
- for (let i = 0; i <= n; i++) {
313
- dp[i][0] = i;
314
- if (i > 0)
315
- back[i][0] = "D";
316
- }
317
- for (let j = 0; j <= m; j++) {
318
- dp[0][j] = j;
319
- if (j > 0)
320
- back[0][j] = "I";
321
- }
322
- for (let i = 1; i <= n; i++) {
323
- for (let j = 1; j <= m; j++) {
324
- const cost = s1[i - 1] === s2[j - 1] ? 0 : 1;
325
- const deletion = dp[i - 1][j] + 1;
326
- const insertion = dp[i][j - 1] + 1;
327
- const substitution = dp[i - 1][j - 1] + cost;
328
- let bestVal = deletion;
329
- let op = "D";
330
- if (insertion < bestVal) {
331
- bestVal = insertion;
332
- op = "I";
333
- }
334
- if (substitution < bestVal) {
335
- bestVal = substitution;
336
- op = cost === 0 ? "M" : "S";
337
- }
338
- dp[i][j] = bestVal;
339
- back[i][j] = op;
340
- }
341
- }
342
- const ops = [];
343
- let i = n;
344
- let j = m;
345
- while (i > 0 || j > 0) {
346
- const op = back[i][j];
347
- ops.push(op);
348
- if (op === "M" || op === "S") {
349
- i--;
350
- j--;
351
- }
352
- else if (op === "D") {
353
- i--;
354
- }
355
- else if (op === "I") {
356
- j--;
357
- }
358
- }
359
- ops.reverse();
360
- const mapping = new Array(m + 1);
361
- let iPos = 0;
362
- let jPos = 0;
363
- mapping[jPos] = iPos;
364
- for (const op of ops) {
365
- if (op === "M" || op === "S") {
366
- iPos++;
367
- jPos++;
368
- mapping[jPos] = iPos;
369
- }
370
- else if (op === "I") {
371
- jPos++;
372
- mapping[jPos] = iPos;
373
- }
374
- else if (op === "D") {
375
- iPos++;
376
- }
377
- }
378
- return mapping;
379
- }
380
505
  //# sourceMappingURL=CommentHighlightings.js.map