@parhelia/core 0.3.12832 → 0.3.12833

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 (472) 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/editor/agent-changes/agentChangeTargets.js +6 -0
  23. package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -1
  24. package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +48 -4
  25. package/dist/editor/agent-changes/agentChangeTextHighlight.js +67 -9
  26. package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -1
  27. package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
  28. package/dist/editor/ai/AgentImagePreview.js +41 -0
  29. package/dist/editor/ai/AgentImagePreview.js.map +1 -0
  30. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +1 -1
  31. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -1
  32. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +1 -2
  33. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
  34. package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.d.ts +6 -0
  35. package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js +61 -0
  36. package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js.map +1 -0
  37. package/dist/editor/ai/terminal/toolCallDiagnostics.d.ts +34 -0
  38. package/dist/editor/ai/terminal/toolCallDiagnostics.js +218 -0
  39. package/dist/editor/ai/terminal/toolCallDiagnostics.js.map +1 -0
  40. package/dist/editor/bridge/linkDownload.d.ts +3 -0
  41. package/dist/editor/bridge/linkDownload.js +52 -0
  42. package/dist/editor/bridge/linkDownload.js.map +1 -0
  43. package/dist/editor/client/clipboardStorage.d.ts +10 -0
  44. package/dist/editor/client/clipboardStorage.js +57 -0
  45. package/dist/editor/client/clipboardStorage.js.map +1 -0
  46. package/dist/editor/client/hooks/useRepositoryItemRefresh.d.ts +4 -0
  47. package/dist/editor/client/hooks/useRepositoryItemRefresh.js +62 -0
  48. package/dist/editor/client/hooks/useRepositoryItemRefresh.js.map +1 -0
  49. package/dist/editor/client/liveEditState.d.ts +16 -0
  50. package/dist/editor/client/liveEditState.js +25 -0
  51. package/dist/editor/client/liveEditState.js.map +1 -0
  52. package/dist/editor/client/liveSessionState.d.ts +6 -0
  53. package/dist/editor/client/liveSessionState.js +20 -0
  54. package/dist/editor/client/liveSessionState.js.map +1 -0
  55. package/dist/editor/client/valueStore.d.ts +22 -0
  56. package/dist/editor/client/valueStore.js +29 -0
  57. package/dist/editor/client/valueStore.js.map +1 -0
  58. package/dist/editor/commands/componentClipboardCommands.d.ts +35 -0
  59. package/dist/editor/commands/componentClipboardCommands.js +271 -0
  60. package/dist/editor/commands/componentClipboardCommands.js.map +1 -0
  61. package/dist/editor/commands/componentMenuGroups.d.ts +2 -0
  62. package/dist/editor/commands/componentMenuGroups.js +43 -0
  63. package/dist/editor/commands/componentMenuGroups.js.map +1 -0
  64. package/dist/editor/component-conversion/ComponentTypePickerDialog.d.ts +12 -0
  65. package/dist/editor/component-conversion/ComponentTypePickerDialog.js +40 -0
  66. package/dist/editor/component-conversion/ComponentTypePickerDialog.js.map +1 -0
  67. package/dist/editor/component-conversion/ConversionAiDebugButton.d.ts +17 -0
  68. package/dist/editor/component-conversion/ConversionAiDebugButton.js +80 -0
  69. package/dist/editor/component-conversion/ConversionAiDebugButton.js.map +1 -0
  70. package/dist/editor/component-conversion/ConvertComponentDialog.d.ts +28 -0
  71. package/dist/editor/component-conversion/ConvertComponentDialog.js +633 -0
  72. package/dist/editor/component-conversion/ConvertComponentDialog.js.map +1 -0
  73. package/dist/editor/component-conversion/conversionModel.d.ts +109 -0
  74. package/dist/editor/component-conversion/conversionModel.js +519 -0
  75. package/dist/editor/component-conversion/conversionModel.js.map +1 -0
  76. package/dist/editor/component-conversion/conversionService.d.ts +12 -0
  77. package/dist/editor/component-conversion/conversionService.js +16 -0
  78. package/dist/editor/component-conversion/conversionService.js.map +1 -0
  79. package/dist/editor/component-conversion/conversionTypes.d.ts +214 -0
  80. package/dist/editor/component-conversion/conversionTypes.js +2 -0
  81. package/dist/editor/component-conversion/conversionTypes.js.map +1 -0
  82. package/dist/editor/component-conversion/convertComponentsCommand.d.ts +25 -0
  83. package/dist/editor/component-conversion/convertComponentsCommand.js +196 -0
  84. package/dist/editor/component-conversion/convertComponentsCommand.js.map +1 -0
  85. package/dist/editor/field-types/FieldHistoryBoundary.js +28 -7
  86. package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -1
  87. package/dist/editor/field-types/fieldStyles.d.ts +21 -0
  88. package/dist/editor/field-types/fieldStyles.js +22 -0
  89. package/dist/editor/field-types/fieldStyles.js.map +1 -0
  90. package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +14 -0
  91. package/dist/editor/field-types/richtext/utils/changeHighlight.js +12 -1
  92. package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -1
  93. package/dist/editor/field-types/richtext/utils/spellCheckText.d.ts +31 -0
  94. package/dist/editor/field-types/richtext/utils/spellCheckText.js +82 -0
  95. package/dist/editor/field-types/richtext/utils/spellCheckText.js.map +1 -0
  96. package/dist/editor/field-types/useFocusedFieldInput.d.ts +13 -0
  97. package/dist/editor/field-types/useFocusedFieldInput.js +50 -0
  98. package/dist/editor/field-types/useFocusedFieldInput.js.map +1 -0
  99. package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +43 -0
  100. package/dist/editor/field-types/useFormFieldSelectionRange.js +149 -0
  101. package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
  102. package/dist/editor/find-replace/FindReplacePanel.d.ts +11 -0
  103. package/dist/editor/find-replace/FindReplacePanel.js +311 -0
  104. package/dist/editor/find-replace/FindReplacePanel.js.map +1 -0
  105. package/dist/editor/find-replace/findReplaceCommand.d.ts +8 -0
  106. package/dist/editor/find-replace/findReplaceCommand.js +25 -0
  107. package/dist/editor/find-replace/findReplaceCommand.js.map +1 -0
  108. package/dist/editor/find-replace/findReplaceMatches.d.ts +42 -0
  109. package/dist/editor/find-replace/findReplaceMatches.js +66 -0
  110. package/dist/editor/find-replace/findReplaceMatches.js.map +1 -0
  111. package/dist/editor/find-replace/findReplaceStore.d.ts +30 -0
  112. package/dist/editor/find-replace/findReplaceStore.js +61 -0
  113. package/dist/editor/find-replace/findReplaceStore.js.map +1 -0
  114. package/dist/editor/find-replace/findReplaceTargets.d.ts +51 -0
  115. package/dist/editor/find-replace/findReplaceTargets.js +110 -0
  116. package/dist/editor/find-replace/findReplaceTargets.js.map +1 -0
  117. package/dist/editor/find-replace/findReplaceText.d.ts +50 -0
  118. package/dist/editor/find-replace/findReplaceText.js +189 -0
  119. package/dist/editor/find-replace/findReplaceText.js.map +1 -0
  120. package/dist/editor/itemContextMenuGroups.js +10 -1
  121. package/dist/editor/itemContextMenuGroups.js.map +1 -1
  122. package/dist/editor/media-selector/MediaDetailsView.d.ts +14 -0
  123. package/dist/editor/media-selector/MediaDetailsView.js +152 -0
  124. package/dist/editor/media-selector/MediaDetailsView.js.map +1 -0
  125. package/dist/editor/media-selector/useMediaFolderDrag.d.ts +26 -0
  126. package/dist/editor/media-selector/useMediaFolderDrag.js +153 -0
  127. package/dist/editor/media-selector/useMediaFolderDrag.js.map +1 -0
  128. package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.d.ts +11 -0
  129. package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js +65 -0
  130. package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js.map +1 -0
  131. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.d.ts +6 -0
  132. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js +31 -0
  133. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js.map +1 -0
  134. package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.d.ts +5 -0
  135. package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js +16 -0
  136. package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js.map +1 -0
  137. package/dist/editor/mobileBottomPanel.d.ts +40 -0
  138. package/dist/editor/mobileBottomPanel.js +63 -0
  139. package/dist/editor/mobileBottomPanel.js.map +1 -0
  140. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +3 -6
  141. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +8 -6
  142. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -1
  143. package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.d.ts +6 -0
  144. package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js +100 -0
  145. package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js.map +1 -0
  146. package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.d.ts +9 -0
  147. package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js +32 -0
  148. package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js.map +1 -0
  149. package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.d.ts +14 -0
  150. package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js +110 -0
  151. package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js.map +1 -0
  152. package/dist/editor/page-editor-chrome/ConversionIndicators.d.ts +8 -0
  153. package/dist/editor/page-editor-chrome/ConversionIndicators.js +75 -0
  154. package/dist/editor/page-editor-chrome/ConversionIndicators.js.map +1 -0
  155. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +9 -13
  156. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +25 -20
  157. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -1
  158. package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.d.ts +15 -0
  159. package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js +31 -0
  160. package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js.map +1 -0
  161. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +11 -0
  162. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +120 -0
  163. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -0
  164. package/dist/editor/page-editor-chrome/SpellCheckHighlightings.d.ts +12 -0
  165. package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js +197 -0
  166. package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js.map +1 -0
  167. package/dist/editor/page-editor-chrome/ValidationRulerMarks.d.ts +11 -0
  168. package/dist/editor/page-editor-chrome/ValidationRulerMarks.js +56 -0
  169. package/dist/editor/page-editor-chrome/ValidationRulerMarks.js.map +1 -0
  170. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.d.ts +44 -0
  171. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js +89 -0
  172. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js.map +1 -0
  173. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.d.ts +17 -0
  174. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js +53 -0
  175. package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js.map +1 -0
  176. package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.d.ts +11 -0
  177. package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js +84 -0
  178. package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js.map +1 -0
  179. package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.d.ts +34 -0
  180. package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js +229 -0
  181. package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js.map +1 -0
  182. package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.d.ts +9 -0
  183. package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js +34 -0
  184. package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js.map +1 -0
  185. package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.d.ts +49 -0
  186. package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js +241 -0
  187. package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js.map +1 -0
  188. package/dist/editor/page-viewer/CanvasOverviewRuler.d.ts +11 -0
  189. package/dist/editor/page-viewer/CanvasOverviewRuler.js +65 -0
  190. package/dist/editor/page-viewer/CanvasOverviewRuler.js.map +1 -0
  191. package/dist/editor/page-viewer/DynamicRenderingsBar.d.ts +23 -0
  192. package/dist/editor/page-viewer/DynamicRenderingsBar.js +28 -0
  193. package/dist/editor/page-viewer/DynamicRenderingsBar.js.map +1 -0
  194. package/dist/editor/page-viewer/DynamicRenderingsStrip.d.ts +18 -0
  195. package/dist/editor/page-viewer/DynamicRenderingsStrip.js +29 -0
  196. package/dist/editor/page-viewer/DynamicRenderingsStrip.js.map +1 -0
  197. package/dist/editor/page-viewer/FeedbackMargin.d.ts +57 -0
  198. package/dist/editor/page-viewer/FeedbackMargin.js +377 -0
  199. package/dist/editor/page-viewer/FeedbackMargin.js.map +1 -0
  200. package/dist/editor/page-viewer/FeedbackMarginController.d.ts +76 -0
  201. package/dist/editor/page-viewer/FeedbackMarginController.js +241 -0
  202. package/dist/editor/page-viewer/FeedbackMarginController.js.map +1 -0
  203. package/dist/editor/page-viewer/FeedbackMarginMarker.d.ts +16 -0
  204. package/dist/editor/page-viewer/FeedbackMarginMarker.js +24 -0
  205. package/dist/editor/page-viewer/FeedbackMarginMarker.js.map +1 -0
  206. package/dist/editor/page-viewer/FeedbackMarginResizeHandle.d.ts +23 -0
  207. package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js +105 -0
  208. package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js.map +1 -0
  209. package/dist/editor/page-viewer/InteractivePreviewBar.d.ts +24 -0
  210. package/dist/editor/page-viewer/InteractivePreviewBar.js +31 -0
  211. package/dist/editor/page-viewer/InteractivePreviewBar.js.map +1 -0
  212. package/dist/editor/page-viewer/MobileCommentsPanel.d.ts +16 -0
  213. package/dist/editor/page-viewer/MobileCommentsPanel.js +112 -0
  214. package/dist/editor/page-viewer/MobileCommentsPanel.js.map +1 -0
  215. package/dist/editor/page-viewer/RenderingAiCheck.d.ts +18 -0
  216. package/dist/editor/page-viewer/RenderingAiCheck.js +45 -0
  217. package/dist/editor/page-viewer/RenderingAiCheck.js.map +1 -0
  218. package/dist/editor/page-viewer/RenderingApprovalDialog.d.ts +32 -0
  219. package/dist/editor/page-viewer/RenderingApprovalDialog.js +191 -0
  220. package/dist/editor/page-viewer/RenderingApprovalDialog.js.map +1 -0
  221. package/dist/editor/page-viewer/SealedClientCodePreview.d.ts +17 -0
  222. package/dist/editor/page-viewer/SealedClientCodePreview.js +38 -0
  223. package/dist/editor/page-viewer/SealedClientCodePreview.js.map +1 -0
  224. package/dist/editor/page-viewer/canvasFrameNavigation.d.ts +18 -0
  225. package/dist/editor/page-viewer/canvasFrameNavigation.js +36 -0
  226. package/dist/editor/page-viewer/canvasFrameNavigation.js.map +1 -0
  227. package/dist/editor/page-viewer/canvasLoadSettling.d.ts +42 -0
  228. package/dist/editor/page-viewer/canvasLoadSettling.js +46 -0
  229. package/dist/editor/page-viewer/canvasLoadSettling.js.map +1 -0
  230. package/dist/editor/page-viewer/canvasScrollHandoff.d.ts +34 -0
  231. package/dist/editor/page-viewer/canvasScrollHandoff.js +55 -0
  232. package/dist/editor/page-viewer/canvasScrollHandoff.js.map +1 -0
  233. package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
  234. package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
  235. package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
  236. package/dist/editor/page-viewer/feedbackMarginLayout.d.ts +119 -0
  237. package/dist/editor/page-viewer/feedbackMarginLayout.js +155 -0
  238. package/dist/editor/page-viewer/feedbackMarginLayout.js.map +1 -0
  239. package/dist/editor/page-viewer/feedbackMarginSources.d.ts +36 -0
  240. package/dist/editor/page-viewer/feedbackMarginSources.js +196 -0
  241. package/dist/editor/page-viewer/feedbackMarginSources.js.map +1 -0
  242. package/dist/editor/page-viewer/feedbackMarginWidth.d.ts +43 -0
  243. package/dist/editor/page-viewer/feedbackMarginWidth.js +107 -0
  244. package/dist/editor/page-viewer/feedbackMarginWidth.js.map +1 -0
  245. package/dist/editor/page-viewer/interactivePreview.d.ts +168 -0
  246. package/dist/editor/page-viewer/interactivePreview.js +344 -0
  247. package/dist/editor/page-viewer/interactivePreview.js.map +1 -0
  248. package/dist/editor/page-viewer/minimapViewport.d.ts +2 -0
  249. package/dist/editor/page-viewer/minimapViewport.js +34 -0
  250. package/dist/editor/page-viewer/minimapViewport.js.map +1 -0
  251. package/dist/editor/page-viewer/openPageItems.d.ts +29 -0
  252. package/dist/editor/page-viewer/openPageItems.js +73 -0
  253. package/dist/editor/page-viewer/openPageItems.js.map +1 -0
  254. package/dist/editor/page-viewer/overviewRuler.d.ts +128 -0
  255. package/dist/editor/page-viewer/overviewRuler.js +226 -0
  256. package/dist/editor/page-viewer/overviewRuler.js.map +1 -0
  257. package/dist/editor/page-viewer/renderingApproval.d.ts +59 -0
  258. package/dist/editor/page-viewer/renderingApproval.js +186 -0
  259. package/dist/editor/page-viewer/renderingApproval.js.map +1 -0
  260. package/dist/editor/page-viewer/renderingChanges.d.ts +29 -0
  261. package/dist/editor/page-viewer/renderingChanges.js +40 -0
  262. package/dist/editor/page-viewer/renderingChanges.js.map +1 -0
  263. package/dist/editor/page-viewer/scrollIntoViewTextRanges.d.ts +23 -0
  264. package/dist/editor/page-viewer/scrollIntoViewTextRanges.js +26 -0
  265. package/dist/editor/page-viewer/scrollIntoViewTextRanges.js.map +1 -0
  266. package/dist/editor/page-viewer/useInteractivePreview.d.ts +77 -0
  267. package/dist/editor/page-viewer/useInteractivePreview.js +210 -0
  268. package/dist/editor/page-viewer/useInteractivePreview.js.map +1 -0
  269. package/dist/editor/reviews/CollapsibleText.d.ts +13 -0
  270. package/dist/editor/reviews/CollapsibleText.js +41 -0
  271. package/dist/editor/reviews/CollapsibleText.js.map +1 -0
  272. package/dist/editor/reviews/CommentImageAttachments.d.ts +12 -0
  273. package/dist/editor/reviews/CommentImageAttachments.js +19 -0
  274. package/dist/editor/reviews/CommentImageAttachments.js.map +1 -0
  275. package/dist/editor/reviews/CommentQuote.d.ts +13 -0
  276. package/dist/editor/reviews/CommentQuote.js +35 -0
  277. package/dist/editor/reviews/CommentQuote.js.map +1 -0
  278. package/dist/editor/reviews/CommentTargetOutline.d.ts +13 -0
  279. package/dist/editor/reviews/CommentTargetOutline.js +21 -0
  280. package/dist/editor/reviews/CommentTargetOutline.js.map +1 -0
  281. package/dist/editor/reviews/CommentTargetPickerDomLayer.d.ts +7 -0
  282. package/dist/editor/reviews/CommentTargetPickerDomLayer.js +117 -0
  283. package/dist/editor/reviews/CommentTargetPickerDomLayer.js.map +1 -0
  284. package/dist/editor/reviews/CommentThreadAgentLink.d.ts +28 -0
  285. package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
  286. package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
  287. package/dist/editor/reviews/CommentThreadCard.d.ts +34 -0
  288. package/dist/editor/reviews/CommentThreadCard.js +156 -0
  289. package/dist/editor/reviews/CommentThreadCard.js.map +1 -0
  290. package/dist/editor/reviews/SuggestionThreadCard.d.ts +19 -0
  291. package/dist/editor/reviews/SuggestionThreadCard.js +25 -0
  292. package/dist/editor/reviews/SuggestionThreadCard.js.map +1 -0
  293. package/dist/editor/reviews/addCommentOnTarget.d.ts +22 -0
  294. package/dist/editor/reviews/addCommentOnTarget.js +32 -0
  295. package/dist/editor/reviews/addCommentOnTarget.js.map +1 -0
  296. package/dist/editor/reviews/balloonLayout.d.ts +51 -0
  297. package/dist/editor/reviews/balloonLayout.js +101 -0
  298. package/dist/editor/reviews/balloonLayout.js.map +1 -0
  299. package/dist/editor/reviews/commentAgentAttachments.d.ts +5 -0
  300. package/dist/editor/reviews/commentAgentAttachments.js +51 -0
  301. package/dist/editor/reviews/commentAgentAttachments.js.map +1 -0
  302. package/dist/editor/reviews/commentImages.d.ts +48 -0
  303. package/dist/editor/reviews/commentImages.js +128 -0
  304. package/dist/editor/reviews/commentImages.js.map +1 -0
  305. package/dist/editor/reviews/commentTargetPicker.d.ts +114 -0
  306. package/dist/editor/reviews/commentTargetPicker.js +153 -0
  307. package/dist/editor/reviews/commentTargetPicker.js.map +1 -0
  308. package/dist/editor/reviews/feedbackBalloonDate.d.ts +8 -0
  309. package/dist/editor/reviews/feedbackBalloonDate.js +22 -0
  310. package/dist/editor/reviews/feedbackBalloonDate.js.map +1 -0
  311. package/dist/editor/reviews/feedbackDrafts.d.ts +49 -0
  312. package/dist/editor/reviews/feedbackDrafts.js +74 -0
  313. package/dist/editor/reviews/feedbackDrafts.js.map +1 -0
  314. package/dist/editor/reviews/feedbackHoverState.d.ts +18 -0
  315. package/dist/editor/reviews/feedbackHoverState.js +35 -0
  316. package/dist/editor/reviews/feedbackHoverState.js.map +1 -0
  317. package/dist/editor/reviews/feedbackPersonFilter.d.ts +3 -0
  318. package/dist/editor/reviews/feedbackPersonFilter.js +32 -0
  319. package/dist/editor/reviews/feedbackPersonFilter.js.map +1 -0
  320. package/dist/editor/reviews/feedbackThreadSelection.d.ts +10 -0
  321. package/dist/editor/reviews/feedbackThreadSelection.js +31 -0
  322. package/dist/editor/reviews/feedbackThreadSelection.js.map +1 -0
  323. package/dist/editor/reviews/feedbackThreads.d.ts +50 -0
  324. package/dist/editor/reviews/feedbackThreads.js +135 -0
  325. package/dist/editor/reviews/feedbackThreads.js.map +1 -0
  326. package/dist/editor/reviews/feedbackWheelForwarding.d.ts +34 -0
  327. package/dist/editor/reviews/feedbackWheelForwarding.js +108 -0
  328. package/dist/editor/reviews/feedbackWheelForwarding.js.map +1 -0
  329. package/dist/editor/reviews/reviewUrlScope.d.ts +23 -0
  330. package/dist/editor/reviews/reviewUrlScope.js +86 -0
  331. package/dist/editor/reviews/reviewUrlScope.js.map +1 -0
  332. package/dist/editor/reviews/scrollWithin.d.ts +29 -0
  333. package/dist/editor/reviews/scrollWithin.js +87 -0
  334. package/dist/editor/reviews/scrollWithin.js.map +1 -0
  335. package/dist/editor/reviews/subtreeFeedback.d.ts +57 -0
  336. package/dist/editor/reviews/subtreeFeedback.js +137 -0
  337. package/dist/editor/reviews/subtreeFeedback.js.map +1 -0
  338. package/dist/editor/reviews/useCommentImagePaste.d.ts +80 -0
  339. package/dist/editor/reviews/useCommentImagePaste.js +252 -0
  340. package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
  341. package/dist/editor/reviews/useFeedbackThreads.d.ts +35 -0
  342. package/dist/editor/reviews/useFeedbackThreads.js +137 -0
  343. package/dist/editor/reviews/useFeedbackThreads.js.map +1 -0
  344. package/dist/editor/reviews/useMeasuredHeights.d.ts +25 -0
  345. package/dist/editor/reviews/useMeasuredHeights.js +176 -0
  346. package/dist/editor/reviews/useMeasuredHeights.js.map +1 -0
  347. package/dist/editor/reviews/usePendingFeedbackFocus.d.ts +7 -0
  348. package/dist/editor/reviews/usePendingFeedbackFocus.js +42 -0
  349. package/dist/editor/reviews/usePendingFeedbackFocus.js.map +1 -0
  350. package/dist/editor/services/mcpAccessService.d.ts +93 -0
  351. package/dist/editor/services/mcpAccessService.js +41 -0
  352. package/dist/editor/services/mcpAccessService.js.map +1 -0
  353. package/dist/editor/services/previewTokenService.d.ts +14 -0
  354. package/dist/editor/services/previewTokenService.js +34 -0
  355. package/dist/editor/services/previewTokenService.js.map +1 -0
  356. package/dist/editor/services/renderingsService.d.ts +117 -0
  357. package/dist/editor/services/renderingsService.js +245 -0
  358. package/dist/editor/services/renderingsService.js.map +1 -0
  359. package/dist/editor/services/spellCheckService.d.ts +13 -0
  360. package/dist/editor/services/spellCheckService.js +33 -0
  361. package/dist/editor/services/spellCheckService.js.map +1 -0
  362. package/dist/editor/settings/panels/McpAccessPanel.d.ts +7 -0
  363. package/dist/editor/settings/panels/McpAccessPanel.js +95 -0
  364. package/dist/editor/settings/panels/McpAccessPanel.js.map +1 -0
  365. package/dist/editor/settings/panels/McpAccessSettingsView.d.ts +8 -0
  366. package/dist/editor/settings/panels/McpAccessSettingsView.js +221 -0
  367. package/dist/editor/settings/panels/McpAccessSettingsView.js.map +1 -0
  368. package/dist/editor/settings/panels/SpellCheckPanel.d.ts +8 -0
  369. package/dist/editor/settings/panels/SpellCheckPanel.js +253 -0
  370. package/dist/editor/settings/panels/SpellCheckPanel.js.map +1 -0
  371. package/dist/editor/sidebar/FeedbackSidebar.d.ts +7 -0
  372. package/dist/editor/sidebar/FeedbackSidebar.js +300 -0
  373. package/dist/editor/sidebar/FeedbackSidebar.js.map +1 -0
  374. package/dist/editor/sidebar/OperationDetailsContent.js +50 -0
  375. package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -1
  376. package/dist/editor/sidebar/liveComponentThumbnails.d.ts +19 -6
  377. package/dist/editor/sidebar/liveComponentThumbnails.js +39 -18
  378. package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -1
  379. package/dist/editor/spellcheck/canvasSpellCheckContextMenu.d.ts +30 -0
  380. package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js +69 -0
  381. package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js.map +1 -0
  382. package/dist/editor/spellcheck/htmlSpellDocument.d.ts +60 -0
  383. package/dist/editor/spellcheck/htmlSpellDocument.js +181 -0
  384. package/dist/editor/spellcheck/htmlSpellDocument.js.map +1 -0
  385. package/dist/editor/spellcheck/htmlSpellTokenizer.d.ts +45 -0
  386. package/dist/editor/spellcheck/htmlSpellTokenizer.js +277 -0
  387. package/dist/editor/spellcheck/htmlSpellTokenizer.js.map +1 -0
  388. package/dist/editor/spellcheck/replacementGuard.d.ts +27 -0
  389. package/dist/editor/spellcheck/replacementGuard.js +29 -0
  390. package/dist/editor/spellcheck/replacementGuard.js.map +1 -0
  391. package/dist/editor/spellcheck/spellCheckCanvasStore.d.ts +17 -0
  392. package/dist/editor/spellcheck/spellCheckCanvasStore.js +37 -0
  393. package/dist/editor/spellcheck/spellCheckCanvasStore.js.map +1 -0
  394. package/dist/editor/spellcheck/spellCheckCanvasTargets.d.ts +71 -0
  395. package/dist/editor/spellcheck/spellCheckCanvasTargets.js +126 -0
  396. package/dist/editor/spellcheck/spellCheckCanvasTargets.js.map +1 -0
  397. package/dist/editor/spellcheck/spellCheckClient.d.ts +66 -0
  398. package/dist/editor/spellcheck/spellCheckClient.js +0 -0
  399. package/dist/editor/spellcheck/spellCheckClient.js.map +1 -0
  400. package/dist/editor/spellcheck/spellCheckContextMenu.d.ts +52 -0
  401. package/dist/editor/spellcheck/spellCheckContextMenu.js +120 -0
  402. package/dist/editor/spellcheck/spellCheckContextMenu.js.map +1 -0
  403. package/dist/editor/spellcheck/spellCheckReplace.d.ts +8 -0
  404. package/dist/editor/spellcheck/spellCheckReplace.js +20 -0
  405. package/dist/editor/spellcheck/spellCheckReplace.js.map +1 -0
  406. package/dist/editor/spellcheck/spellCheckStyles.d.ts +11 -0
  407. package/dist/editor/spellcheck/spellCheckStyles.js +12 -0
  408. package/dist/editor/spellcheck/spellCheckStyles.js.map +1 -0
  409. package/dist/editor/spellcheck/spellCheckTypes.d.ts +94 -0
  410. package/dist/editor/spellcheck/spellCheckTypes.js +2 -0
  411. package/dist/editor/spellcheck/spellCheckTypes.js.map +1 -0
  412. package/dist/editor/spellcheck/textMarkHitTest.d.ts +14 -0
  413. package/dist/editor/spellcheck/textMarkHitTest.js +39 -0
  414. package/dist/editor/spellcheck/textMarkHitTest.js.map +1 -0
  415. package/dist/editor/spellcheck/useSpellCheck.d.ts +16 -0
  416. package/dist/editor/spellcheck/useSpellCheck.js +57 -0
  417. package/dist/editor/spellcheck/useSpellCheck.js.map +1 -0
  418. package/dist/editor/ui/DynamicRenderingsPublishWarning.d.ts +14 -0
  419. package/dist/editor/ui/DynamicRenderingsPublishWarning.js +40 -0
  420. package/dist/editor/ui/DynamicRenderingsPublishWarning.js.map +1 -0
  421. package/dist/editor/ui/ParheliaMark.d.ts +15 -0
  422. package/dist/editor/ui/ParheliaMark.js +12 -0
  423. package/dist/editor/ui/ParheliaMark.js.map +1 -0
  424. package/dist/editor/ui/RootItemPicker.d.ts +18 -0
  425. package/dist/editor/ui/RootItemPicker.js +112 -0
  426. package/dist/editor/ui/RootItemPicker.js.map +1 -0
  427. package/dist/editor/undoEligibility.d.ts +2 -0
  428. package/dist/editor/undoEligibility.js +8 -0
  429. package/dist/editor/undoEligibility.js.map +1 -0
  430. package/dist/editor/utils/dataTransferImages.d.ts +7 -0
  431. package/dist/editor/utils/dataTransferImages.js +43 -0
  432. package/dist/editor/utils/dataTransferImages.js.map +1 -0
  433. package/dist/editor/validation/navigateToValidationIssue.d.ts +2 -2
  434. package/dist/editor/validation/navigateToValidationIssue.js +1 -1
  435. package/dist/editor/validation/navigateToValidationIssue.js.map +1 -1
  436. package/dist/editor/validation/validationRulerIssues.d.ts +17 -0
  437. package/dist/editor/validation/validationRulerIssues.js +44 -0
  438. package/dist/editor/validation/validationRulerIssues.js.map +1 -0
  439. package/dist/revision.d.ts +2 -2
  440. package/dist/revision.js +2 -2
  441. package/dist/task-board/components/AttentionPromptDialog.d.ts +13 -0
  442. package/dist/task-board/components/AttentionPromptDialog.js +45 -0
  443. package/dist/task-board/components/AttentionPromptDialog.js.map +1 -0
  444. package/dist/task-board/components/GoalFindingsTable.d.ts +43 -0
  445. package/dist/task-board/components/GoalFindingsTable.js +160 -0
  446. package/dist/task-board/components/GoalFindingsTable.js.map +1 -0
  447. package/dist/task-board/components/IssuePanel.d.ts +31 -0
  448. package/dist/task-board/components/IssuePanel.js +268 -0
  449. package/dist/task-board/components/IssuePanel.js.map +1 -0
  450. package/dist/task-board/components/SubgoalFindings.d.ts +40 -0
  451. package/dist/task-board/components/SubgoalFindings.js +88 -0
  452. package/dist/task-board/components/SubgoalFindings.js.map +1 -0
  453. package/dist/task-board/services/issueService.d.ts +193 -0
  454. package/dist/task-board/services/issueService.js +97 -0
  455. package/dist/task-board/services/issueService.js.map +1 -0
  456. package/dist/task-board/taskBlockers.d.ts +10 -0
  457. package/dist/task-board/taskBlockers.js +66 -0
  458. package/dist/task-board/taskBlockers.js.map +1 -0
  459. package/dist/task-board/utils/projectDashboardModel.js +14 -0
  460. package/dist/task-board/utils/projectDashboardModel.js.map +1 -1
  461. package/dist/task-board/views/ProjectDashboardView.js +5 -13
  462. package/dist/task-board/views/ProjectDashboardView.js.map +1 -1
  463. package/dist/tour/sandbox-tour-copy.d.ts +8 -0
  464. package/dist/tour/sandbox-tour-copy.js +8 -0
  465. package/dist/tour/sandbox-tour-copy.js.map +1 -1
  466. package/dist/tour/sandbox-tour.d.ts +3 -0
  467. package/dist/tour/sandbox-tour.js +107 -3
  468. package/dist/tour/sandbox-tour.js.map +1 -1
  469. package/package.json +1 -1
  470. package/dist/editor/page-editor-chrome/bridgeLinkValue.d.ts +0 -10
  471. package/dist/editor/page-editor-chrome/bridgeLinkValue.js +0 -55
  472. package/dist/editor/page-editor-chrome/bridgeLinkValue.js.map +0 -1
@@ -0,0 +1,214 @@
1
+ import type { ConversionMappingMode, ItemDescriptor } from "../../types";
2
+ /** Mirrors Parhelia.ComponentConversion.ConversionPlan (camelCase JSON). */
3
+ export type ConversionPlan = {
4
+ mode: "each" | "merge";
5
+ canMerge: boolean;
6
+ cannotMergeReason?: string;
7
+ target: ConversionTargetInfo;
8
+ currentLanguage: string;
9
+ languages: string[];
10
+ groups: ConversionPlanGroup[];
11
+ items: ConversionPlanItem[];
12
+ notes: ConversionNote[];
13
+ aiAvailable: boolean;
14
+ aiSuggested: boolean;
15
+ aiApplied: boolean;
16
+ aiError?: string;
17
+ /** Models the user can pick for the AI conversion. */
18
+ models: ConversionModelOption[];
19
+ /** The model this plan's AI calls used (the picked one or the default). */
20
+ modelId?: string;
21
+ /** Model calls as sent and received; only when the request asked for them. */
22
+ aiCalls?: ConversionAiCall[];
23
+ };
24
+ export type ConversionModelOption = {
25
+ id: string;
26
+ name: string;
27
+ };
28
+ /** One model call, for the debug view. */
29
+ export type ConversionAiCall = {
30
+ title: string;
31
+ model?: string;
32
+ maxTokens: number;
33
+ durationMs: number;
34
+ inputTokens: number;
35
+ outputTokens: number;
36
+ /** The provider request as sent. */
37
+ payload?: string;
38
+ /** The provider response as received. */
39
+ rawResponse?: string;
40
+ /** The model's reply text. */
41
+ content?: string;
42
+ error?: string;
43
+ };
44
+ export type ConversionTargetInfo = {
45
+ typeId: string;
46
+ name: string;
47
+ thumbnail?: string;
48
+ icon?: string;
49
+ fields: ConversionFieldInfo[];
50
+ placeholders: ConversionPlaceholderInfo[];
51
+ };
52
+ export type ConversionFieldInfo = {
53
+ id: string;
54
+ name: string;
55
+ displayName: string;
56
+ type: string;
57
+ category: string;
58
+ section?: string;
59
+ sortOrder: number;
60
+ /** Target fields: the AI can write this field (free text). */
61
+ writable?: boolean;
62
+ };
63
+ export type ConversionPlaceholderInfo = {
64
+ name: string;
65
+ allowedTypes: {
66
+ id: string;
67
+ name: string;
68
+ }[];
69
+ };
70
+ export type ConversionSourceOption = {
71
+ key: string;
72
+ componentId?: string;
73
+ componentName?: string;
74
+ fieldId: string;
75
+ name: string;
76
+ displayName: string;
77
+ type: string;
78
+ section?: string;
79
+ };
80
+ export type ConversionMappingRow = {
81
+ targetFieldId: string;
82
+ sourceKey?: string | null;
83
+ mode: ConversionMappingMode;
84
+ instruction?: string;
85
+ /** Generate rows: the source option keys the AI based the value on. */
86
+ uses?: string[];
87
+ origin: "name" | "ai" | "none" | "user";
88
+ reason?: string;
89
+ };
90
+ export type ConversionPlanGroup = {
91
+ key: string;
92
+ sourceTypeId?: string;
93
+ sourceTypeName?: string;
94
+ itemKeys: string[];
95
+ sourceFields: ConversionSourceOption[];
96
+ mappings: ConversionMappingRow[];
97
+ /** target field id -> source option key -> "copy" | "convert" | "none" */
98
+ compatibility: Record<string, Record<string, "copy" | "convert" | "none">>;
99
+ /** target field id -> source option keys the model may rewrite from */
100
+ rewriteSources: Record<string, string[]>;
101
+ };
102
+ export type ConversionValuePreview = {
103
+ hasValue: boolean;
104
+ text?: string;
105
+ imageUrl?: string;
106
+ raw?: string;
107
+ error?: string;
108
+ };
109
+ export type ConversionSourceRole = {
110
+ componentId: string;
111
+ name: string;
112
+ typeName: string;
113
+ role: "merge" | "child";
114
+ targetPlaceholder?: string;
115
+ childPlaceholders: string[];
116
+ targetTypeId?: string;
117
+ targetTypeName?: string;
118
+ nested?: ConversionNestedPlan;
119
+ };
120
+ export type ConversionNestedPlan = {
121
+ targetFields: ConversionFieldInfo[];
122
+ sourceFields: ConversionSourceOption[];
123
+ mappings: ConversionMappingRow[];
124
+ /** AI-written values of the converted child: language -> target field id -> raw value. */
125
+ values?: Record<string, Record<string, string>>;
126
+ };
127
+ export type ConversionChildPlan = {
128
+ componentId: string;
129
+ parentComponentId?: string;
130
+ name: string;
131
+ typeId: string;
132
+ typeName: string;
133
+ action: "move" | "convert" | "remove";
134
+ targetPlaceholder?: string;
135
+ targetTypeId?: string;
136
+ targetTypeName?: string;
137
+ reason?: string;
138
+ movePlaceholders: string[];
139
+ nested?: ConversionNestedPlan;
140
+ };
141
+ export type ConversionPlanItem = {
142
+ key: string;
143
+ groupKey: string;
144
+ sourceComponentIds: string[];
145
+ anchorComponentId: string;
146
+ name: string;
147
+ sourceTypeName: string;
148
+ placeholderKey: string;
149
+ placeholderIndex: number;
150
+ isShared: boolean;
151
+ externalReferrerCount: number;
152
+ externalReferrers: string[];
153
+ sourceValues: Record<string, ConversionValuePreview>;
154
+ targetValues: Record<string, ConversionValuePreview>;
155
+ /** AI-written values in the other languages: language -> target field id -> raw value. */
156
+ languageValues?: Record<string, Record<string, string>>;
157
+ languages: string[];
158
+ children: ConversionChildPlan[];
159
+ sourceRoles: ConversionSourceRole[];
160
+ carriedParameters: string[];
161
+ droppedParameters: string[];
162
+ personalizationRulesKept: number;
163
+ personalizationRulesDropped: number;
164
+ fieldComments: number;
165
+ componentComments: number;
166
+ suggestedEdits: number;
167
+ };
168
+ export type ConversionNote = {
169
+ kind: "info" | "warning";
170
+ code: string;
171
+ text: string;
172
+ };
173
+ export type ConversionPlanRequest = {
174
+ page: ItemDescriptor;
175
+ componentIds: string[];
176
+ targetTypeId: string;
177
+ mode?: "each" | "merge";
178
+ useAi?: boolean;
179
+ /** The user's instructions for the AI, oldest first; the last one is the new request. */
180
+ instructions?: string[];
181
+ /** The mapping as the dialog shows it; the plan starts from it and the AI refines it. */
182
+ currentMappings?: ConversionClientRow[];
183
+ /** Group key -> item key on screen; its children stand for the group's in the prompt. */
184
+ activeItems?: Record<string, string>;
185
+ /** AI values the dialog shows: item key -> language -> target field id -> raw value. */
186
+ currentValues?: Record<string, Record<string, Record<string, string>>>;
187
+ /** Model to use; unset for the default. */
188
+ modelId?: string;
189
+ /** Return each model call's raw payload and response. */
190
+ includeAiDebug?: boolean;
191
+ };
192
+ export type ConversionClientRow = {
193
+ groupKey: string;
194
+ targetFieldId: string;
195
+ sourceKey?: string | null;
196
+ mode: ConversionMappingMode;
197
+ instruction?: string;
198
+ uses?: string[];
199
+ origin?: ConversionMappingRow["origin"];
200
+ };
201
+ export type ConversionPreviewRequest = {
202
+ page: ItemDescriptor;
203
+ sourceComponentId: string;
204
+ sourceFieldId: string;
205
+ targetTypeId: string;
206
+ targetFieldId: string;
207
+ mode: ConversionMappingMode;
208
+ instruction?: string;
209
+ modelId?: string;
210
+ };
211
+ export type ConversionPreviewResponse = {
212
+ preview?: ConversionValuePreview;
213
+ error?: string;
214
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversionTypes.js","sourceRoot":"","sources":["../../../src/editor/component-conversion/conversionTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import type { EditContextType } from "../client/editContext";
2
+ import type { Component } from "../pageModel";
3
+ import type { InsertOption } from "../../types";
4
+ import type { ComponentCommand } from "../commands/componentCommands";
5
+ /** The components a conversion just created, for the canvas "Converted from" badge. */
6
+ export type RecentConversion = {
7
+ operationId: string;
8
+ componentIds: string[];
9
+ fromName: string;
10
+ };
11
+ /**
12
+ * Types every selected component may become: the insert options their
13
+ * placeholders share. When all selected components have the same type, that
14
+ * type is left out.
15
+ */
16
+ export declare function getConversionTargets(components: Component[]): InsertOption[];
17
+ /** Selected components sorted by their position in the page tree. */
18
+ export declare function sortByDocumentOrder(components: Component[], root: Component | undefined): Component[];
19
+ /**
20
+ * "Convert to…": replaces the selected components with components of another
21
+ * type. Hidden when a component cannot be converted; disabled while the
22
+ * placeholders' insert options are still loading (they are an empty list until
23
+ * then, which must not read as "nothing allowed").
24
+ */
25
+ export declare function getConvertToCommand(components: Component[], editContext: EditContextType): ComponentCommand | null;
@@ -0,0 +1,196 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import uuid from "react-uuid";
3
+ import { Replace } from "lucide-react";
4
+ import { getVisibleInsertOptions } from "../insertMenuItems";
5
+ import { waitForEditOperationTerminal } from "../client/waitForEditOperationTerminal";
6
+ import { ComponentTypePickerDialog, } from "./ComponentTypePickerDialog";
7
+ import { ConvertComponentDialog, } from "./ConvertComponentDialog";
8
+ const TERMINAL_TIMEOUT_MS = 10 * 60 * 1000;
9
+ const normalizeId = (id) => (id ?? "").replace(/[{}]/g, "").toLowerCase();
10
+ /**
11
+ * Types every selected component may become: the insert options their
12
+ * placeholders share. When all selected components have the same type, that
13
+ * type is left out.
14
+ */
15
+ export function getConversionTargets(components) {
16
+ let shared;
17
+ for (const component of components) {
18
+ const options = getVisibleInsertOptions(component.parentPlaceholder?.insertOptions);
19
+ shared = shared
20
+ ? shared.filter((a) => options.some((b) => normalizeId(b.typeId) === normalizeId(a.typeId)))
21
+ : options;
22
+ }
23
+ const types = new Set(components.map((c) => normalizeId(c.typeId)));
24
+ const excluded = types.size === 1 ? [...types][0] : undefined;
25
+ return (shared ?? []).filter((option) => !option.isCommandTemplate && !option.action && normalizeId(option.typeId) !== excluded);
26
+ }
27
+ /** Selected components sorted by their position in the page tree. */
28
+ export function sortByDocumentOrder(components, root) {
29
+ if (!root)
30
+ return components;
31
+ const order = new Map();
32
+ let index = 0;
33
+ const visit = (component) => {
34
+ order.set(normalizeId(component.id), index++);
35
+ for (const placeholder of component.placeholders ?? []) {
36
+ for (const child of placeholder.components)
37
+ visit(child);
38
+ }
39
+ };
40
+ visit(root);
41
+ return [...components].sort((a, b) => (order.get(normalizeId(a.id)) ?? Number.MAX_SAFE_INTEGER) -
42
+ (order.get(normalizeId(b.id)) ?? Number.MAX_SAFE_INTEGER));
43
+ }
44
+ function displayName(component) {
45
+ return component.datasourceItem?.displayName || component.datasourceItem?.name || component.name;
46
+ }
47
+ /** The component's type as the insert options name it, falling back to its rendering type. */
48
+ function typeName(component) {
49
+ const option = component.parentPlaceholder?.insertOptions?.find((o) => normalizeId(o.typeId) === normalizeId(component.typeId));
50
+ return option?.name || component.type || undefined;
51
+ }
52
+ /** The type all components share, or undefined for mixed types. */
53
+ function sharedTypeName(components) {
54
+ const types = new Set(components.map((c) => normalizeId(c.typeId)));
55
+ return types.size === 1 ? typeName(components[0]) : undefined;
56
+ }
57
+ /** "Convert from Hero to", "Convert 3 components from Hero to", or without "from" for mixed types. */
58
+ function pickerTitle(components) {
59
+ const count = components.length === 1 ? "" : ` ${components.length} components`;
60
+ const from = sharedTypeName(components);
61
+ return from ? `Convert${count} from ${from} to` : `Convert${count} to`;
62
+ }
63
+ /**
64
+ * "Convert to…": replaces the selected components with components of another
65
+ * type. Hidden when a component cannot be converted; disabled while the
66
+ * placeholders' insert options are still loading (they are an empty list until
67
+ * then, which must not read as "nothing allowed").
68
+ */
69
+ export function getConvertToCommand(components, editContext) {
70
+ if (components.length === 0)
71
+ return null;
72
+ if (editContext.mode === "suggestions" || editContext.mode === "preview")
73
+ return null;
74
+ if (editContext.readonly || editContext.isMobile)
75
+ return null;
76
+ for (const component of components) {
77
+ if (!component?.typeId || component.editable === false)
78
+ return null;
79
+ if (component.layoutId && !editContext.showLayoutComponents)
80
+ return null;
81
+ if (!component.parentPlaceholder)
82
+ return null;
83
+ if (editContext.page?.rootComponent?.id === component.id)
84
+ return null;
85
+ }
86
+ const unresolved = components.some((c) => c.parentPlaceholder?.insertOptionsResolved === false);
87
+ const targets = unresolved ? [] : getConversionTargets(components);
88
+ if (!unresolved && targets.length === 0)
89
+ return null;
90
+ return {
91
+ id: "convertTo",
92
+ label: components.length > 1
93
+ ? `Convert ${components.length} components to…`
94
+ : "Convert to…",
95
+ icon: _jsx(Replace, { strokeWidth: 1, size: 16 }),
96
+ visibilityScopes: ["contextMenu", "componentTree", "menu"],
97
+ disabled: (context) => unresolved || !context.editContext.page?.item.canWriteItem,
98
+ execute: async (context) => {
99
+ await runConversion(context.editContext, components, context.openDialog);
100
+ },
101
+ };
102
+ }
103
+ async function runConversion(editContext, selected, openDialog) {
104
+ const page = editContext.page;
105
+ const pageItem = page?.item.descriptor;
106
+ if (!page || !pageItem)
107
+ return;
108
+ const components = sortByDocumentOrder(selected, page.rootComponent);
109
+ const targets = getConversionTargets(components);
110
+ const selectionLabel = components.length === 1 ? displayName(components[0]) : `${components.length} components`;
111
+ const target = await openDialog(ComponentTypePickerDialog, {
112
+ title: pickerTitle(components),
113
+ subtitle: selectionLabel,
114
+ options: targets,
115
+ });
116
+ if (!target)
117
+ return;
118
+ const result = await openDialog(ConvertComponentDialog, {
119
+ pageItem,
120
+ componentIds: components.map((c) => c.id),
121
+ target,
122
+ selectionLabel,
123
+ sourceTypeName: sharedTypeName(components),
124
+ });
125
+ if (!result)
126
+ return;
127
+ const operation = {
128
+ type: "convert-component",
129
+ id: uuid(),
130
+ date: new Date().toISOString(),
131
+ title: result.title,
132
+ mainItem: pageItem,
133
+ mode: result.mode,
134
+ conversions: result.conversions,
135
+ instructions: result.instructions.length > 0 ? result.instructions : undefined,
136
+ modelId: result.modelId,
137
+ };
138
+ const executed = (await editContext.operations.executeEditOperation(operation));
139
+ if (!executed || executed.executionStatus === "failed")
140
+ return;
141
+ let createdIds = executed.createdItemIds ?? [];
142
+ let warnings = executed.warnings ?? [];
143
+ if (executed.executionStatus === "executing") {
144
+ let terminal;
145
+ try {
146
+ terminal = await waitForEditOperationTerminal(operation.id, TERMINAL_TIMEOUT_MS);
147
+ }
148
+ catch {
149
+ editContext.showErrorToast({
150
+ summary: "Conversion is still running",
151
+ details: "The page updates when it finishes.",
152
+ });
153
+ return;
154
+ }
155
+ if (terminal.errorMessage) {
156
+ editContext.showErrorToast({ summary: "Conversion failed", details: terminal.errorMessage });
157
+ return;
158
+ }
159
+ createdIds = terminal.createdItemIds ?? [];
160
+ warnings = await loadWarnings(operation.id);
161
+ // The request returned (and refreshed the canvas) before the background
162
+ // conversion wrote anything. A soft refresh patches the canvas in place and
163
+ // can keep the replaced component's markup; reload it fully instead.
164
+ editContext.requestRefresh("hard");
165
+ }
166
+ if (createdIds.length === 0)
167
+ return;
168
+ editContext.setRecentConversion?.({
169
+ operationId: operation.id,
170
+ componentIds: createdIds,
171
+ fromName: components.length === 1 ? selectionLabel : `${components.length} components`,
172
+ });
173
+ editContext.select(createdIds);
174
+ if (warnings.length > 0) {
175
+ editContext.showInfoToast({
176
+ summary: "Converted with notes",
177
+ details: warnings.slice(0, 4).join("\n"),
178
+ });
179
+ }
180
+ }
181
+ async function loadWarnings(operationId) {
182
+ try {
183
+ const response = await fetch(`/parhelia/editOperation?id=${encodeURIComponent(operationId)}`, {
184
+ credentials: "include",
185
+ headers: { "Cache-Control": "no-cache" },
186
+ });
187
+ if (!response.ok)
188
+ return [];
189
+ const op = (await response.json());
190
+ return op.warnings ?? [];
191
+ }
192
+ catch {
193
+ return [];
194
+ }
195
+ }
196
+ //# sourceMappingURL=convertComponentsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertComponentsCommand.js","sourceRoot":"","sources":["../../../src/editor/component-conversion/convertComponentsCommand.tsx"],"names":[],"mappings":"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"}
@@ -1,19 +1,40 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useRef, useState } from "react";
2
+ import { useLayoutEffect, useRef } from "react";
3
+ const PRISTINE_ATTRIBUTE = "data-parhelia-pristine-field";
3
4
  /** Give page history the shortcut until this editor has local edits to undo. */
4
5
  export function FieldHistoryBoundary({ enabled, children, }) {
5
6
  const ref = useRef(null);
6
- const [hasLocalEdits, setHasLocalEdits] = useState(false);
7
+ // Tracked in a ref and mirrored to the DOM by hand, never as React state.
8
+ // The capture handlers below run between the native edit and the editor's
9
+ // React change event. A state update there commits (React flushes it in a
10
+ // microtask) before onChange runs: the controlled input is re-rendered with
11
+ // its stale value, React writes that value back into the control and resyncs
12
+ // its value tracker, and the change event is then dropped as "unchanged".
13
+ // Deleting a selection with Backspace/Delete in an untouched field showed
14
+ // exactly that: the selection collapsed and the text came back. Typing was
15
+ // unaffected only because React's onBeforeInput (text insertion) fires
16
+ // before the DOM changes, while deletions have no such event.
17
+ const hasLocalEdits = useRef(false);
18
+ useLayoutEffect(() => {
19
+ const element = ref.current;
20
+ if (!element)
21
+ return;
22
+ if (enabled && !hasLocalEdits.current) {
23
+ element.setAttribute(PRISTINE_ATTRIBUTE, "true");
24
+ }
25
+ else {
26
+ element.removeAttribute(PRISTINE_ATTRIBUTE);
27
+ }
28
+ }, [enabled]);
7
29
  const markEdited = () => {
8
- // Update synchronously too: another shortcut can arrive before React commits.
9
- ref.current?.removeAttribute("data-parhelia-pristine-field");
10
- setHasLocalEdits(true);
30
+ hasLocalEdits.current = true;
31
+ ref.current?.removeAttribute(PRISTINE_ATTRIBUTE);
11
32
  };
12
- return (_jsx("div", { ref: ref, className: "contents", "data-parhelia-pristine-field": enabled && !hasLocalEdits ? "true" : undefined, onBeforeInputCapture: markEdited, onInputCapture: markEdited, onCompositionStartCapture: markEdited, children: children(markEdited) }));
33
+ return (_jsx("div", { ref: ref, className: "contents", onBeforeInputCapture: markEdited, onInputCapture: markEdited, onCompositionStartCapture: markEdited, children: children(markEdited) }));
13
34
  }
14
35
  export function hasPristineFieldHistory(target) {
15
36
  const node = target;
16
37
  const element = node?.nodeType === 3 ? node.parentElement : target;
17
- return !!element?.closest?.('[data-parhelia-pristine-field="true"]');
38
+ return !!element?.closest?.(`[${PRISTINE_ATTRIBUTE}="true"]`);
18
39
  }
19
40
  //# sourceMappingURL=FieldHistoryBoundary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldHistoryBoundary.js","sourceRoot":"","sources":["../../../src/editor/field-types/FieldHistoryBoundary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEzD,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,EACP,QAAQ,GAIT;IACC,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,8EAA8E;QAC9E,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,8BAA8B,CAAC,CAAC;QAC7D,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,UAAU,kCAElB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAEhD,oBAAoB,EAAE,UAAU,EAChC,cAAc,EAAE,UAAU,EAC1B,yBAAyB,EAAE,UAAU,YAEpC,QAAQ,CAAC,UAAU,CAAC,GACjB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IAChE,MAAM,IAAI,GAAG,MAAqB,CAAC;IACnC,MAAM,OAAO,GACX,IAAI,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,MAAyB,CAAC;IACzE,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,uCAAuC,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"FieldHistoryBoundary.js","sourceRoot":"","sources":["../../../src/editor/field-types/FieldHistoryBoundary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAC;AAEhE,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAE1D,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,EACP,QAAQ,GAIT;IACC,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,uEAAuE;IACvE,8DAA8D;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,UAAU,EACpB,oBAAoB,EAAE,UAAU,EAChC,cAAc,EAAE,UAAU,EAC1B,yBAAyB,EAAE,UAAU,YAEpC,QAAQ,CAAC,UAAU,CAAC,GACjB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IAChE,MAAM,IAAI,GAAG,MAAqB,CAAC;IACnC,MAAM,OAAO,GACX,IAAI,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,MAAyB,CAAC;IACzE,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,kBAAkB,UAAU,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared look of the edit form's field boxes: a visible grey border, 6px
3
+ * corners, white fill, 12px text, and a dark border with a soft grey 3px halo on
4
+ * focus. Combine with `cn()` so these win over the base component classes.
5
+ * The radius is important: styles.css pins inputs and comboboxes to 4px
6
+ * with an unlayered rule that beats utilities.
7
+ */
8
+ export declare const fieldBoxClassName = "border-neutral-grey-15 hover:not-focus-within:border-neutral-grey-50/50 text-neutral-grey-80 rounded-[6px]! border bg-white text-xs leading-5 md:text-xs";
9
+ /**
10
+ * The field box's border, corners and white fill without its text styles, for
11
+ * fields that frame other UI: tree lists, image tiles, attachments.
12
+ */
13
+ export declare const fieldFrameClassName = "border-neutral-grey-15 hover:not-focus-within:border-neutral-grey-50/50 rounded-[6px]! border bg-white";
14
+ /** Text padding inside a field box. Backdrops that mirror the text repeat it. */
15
+ export declare const fieldTextPaddingClassName = "px-3 py-2.5";
16
+ /** Focus for native inputs and textareas (the shared Input draws focus as an outline). */
17
+ export declare const fieldFocusClassName = "focus-visible:border-neutral-grey-100 focus-visible:outline-neutral-grey-15 focus-visible:outline-[3px] focus-visible:outline-offset-0 focus-visible:outline-solid";
18
+ /** Focus for a box whose focusable element is a child (the rich text editor). */
19
+ export declare const fieldFocusWithinClassName = "focus-within:border-neutral-grey-100 focus-within:outline-neutral-grey-15 focus-within:outline-[3px] focus-within:outline-offset-0 focus-within:outline-solid";
20
+ /** Focus for button-based fields (selects, date and link pickers): Button draws focus as a ring. */
21
+ export declare const fieldButtonFocusClassName = "focus-visible:border-neutral-grey-100 focus-visible:ring-neutral-grey-15 aria-expanded:border-neutral-grey-100 aria-expanded:ring-neutral-grey-15 aria-expanded:ring-[3px]";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared look of the edit form's field boxes: a visible grey border, 6px
3
+ * corners, white fill, 12px text, and a dark border with a soft grey 3px halo on
4
+ * focus. Combine with `cn()` so these win over the base component classes.
5
+ * The radius is important: styles.css pins inputs and comboboxes to 4px
6
+ * with an unlayered rule that beats utilities.
7
+ */
8
+ export const fieldBoxClassName = "border-neutral-grey-15 hover:not-focus-within:border-neutral-grey-50/50 text-neutral-grey-80 rounded-[6px]! border bg-white text-xs leading-5 md:text-xs";
9
+ /**
10
+ * The field box's border, corners and white fill without its text styles, for
11
+ * fields that frame other UI: tree lists, image tiles, attachments.
12
+ */
13
+ export const fieldFrameClassName = "border-neutral-grey-15 hover:not-focus-within:border-neutral-grey-50/50 rounded-[6px]! border bg-white";
14
+ /** Text padding inside a field box. Backdrops that mirror the text repeat it. */
15
+ export const fieldTextPaddingClassName = "px-3 py-2.5";
16
+ /** Focus for native inputs and textareas (the shared Input draws focus as an outline). */
17
+ export const fieldFocusClassName = "focus-visible:border-neutral-grey-100 focus-visible:outline-neutral-grey-15 focus-visible:outline-[3px] focus-visible:outline-offset-0 focus-visible:outline-solid";
18
+ /** Focus for a box whose focusable element is a child (the rich text editor). */
19
+ export const fieldFocusWithinClassName = "focus-within:border-neutral-grey-100 focus-within:outline-neutral-grey-15 focus-within:outline-[3px] focus-within:outline-offset-0 focus-within:outline-solid";
20
+ /** Focus for button-based fields (selects, date and link pickers): Button draws focus as a ring. */
21
+ export const fieldButtonFocusClassName = "focus-visible:border-neutral-grey-100 focus-visible:ring-neutral-grey-15 aria-expanded:border-neutral-grey-100 aria-expanded:ring-neutral-grey-15 aria-expanded:ring-[3px]";
22
+ //# sourceMappingURL=fieldStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldStyles.js","sourceRoot":"","sources":["../../../src/editor/field-types/fieldStyles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAC5B,0JAA0J,CAAC;AAE7J;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,wGAAwG,CAAC;AAE3G,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAG,aAAa,CAAC;AAEvD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAC9B,oKAAoK,CAAC;AAEvK,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GACpC,+JAA+J,CAAC;AAElK,oGAAoG;AACpG,MAAM,CAAC,MAAM,yBAAyB,GACpC,4KAA4K,CAAC"}
@@ -2,6 +2,13 @@ import { type DecoratedRange, type Descendant, type NodeEntry } from "slate";
2
2
  import type { DiffRange } from "../../../version-diff/versionDiffTargets";
3
3
  /** Leaf flag set by {@link decorateChangedText}; rendered as the added-text mark. */
4
4
  export declare const CHANGED_TEXT_LEAF = "changedText";
5
+ /** Leaf flag for a misspelled word; rendered as the wavy spell-check underline. */
6
+ export declare const MISSPELLED_LEAF = "misspelled";
7
+ /** A [start, end) range in a text offset space, as used by the decorate helpers. */
8
+ export type TextRange = {
9
+ start: number;
10
+ end: number;
11
+ };
5
12
  /**
6
13
  * The document's plain text as one string: every text node concatenated in
7
14
  * document order, no separators between blocks. Diff offsets are computed
@@ -16,3 +23,10 @@ export declare function collectTextNodeStarts(nodes: Descendant[]): Map<string,
16
23
  * leaf flag. Non-text nodes and nodes outside every range yield nothing.
17
24
  */
18
25
  export declare function decorateChangedText(entry: NodeEntry, starts: Map<string, number>, ranges: DiffRange[]): DecoratedRange[];
26
+ /**
27
+ * Generic Slate `decorate` body: the parts of `entry` (a text node) that fall
28
+ * inside one of the `ranges`, as decorated ranges carrying `leafKey`. The
29
+ * offsets of `ranges` and the `starts` map must share one text offset space
30
+ * (see {@link collectTextNodeStarts} and `buildSpellCheckText`).
31
+ */
32
+ export declare function decorateRanges(entry: NodeEntry, starts: Map<string, number>, ranges: readonly TextRange[], leafKey: string): DecoratedRange[];
@@ -1,6 +1,8 @@
1
1
  import { Node, Text, } from "slate";
2
2
  /** Leaf flag set by {@link decorateChangedText}; rendered as the added-text mark. */
3
3
  export const CHANGED_TEXT_LEAF = "changedText";
4
+ /** Leaf flag for a misspelled word; rendered as the wavy spell-check underline. */
5
+ export const MISSPELLED_LEAF = "misspelled";
4
6
  /**
5
7
  * The document's plain text as one string: every text node concatenated in
6
8
  * document order, no separators between blocks. Diff offsets are computed
@@ -33,6 +35,15 @@ export function collectTextNodeStarts(nodes) {
33
35
  * leaf flag. Non-text nodes and nodes outside every range yield nothing.
34
36
  */
35
37
  export function decorateChangedText(entry, starts, ranges) {
38
+ return decorateRanges(entry, starts, ranges, CHANGED_TEXT_LEAF);
39
+ }
40
+ /**
41
+ * Generic Slate `decorate` body: the parts of `entry` (a text node) that fall
42
+ * inside one of the `ranges`, as decorated ranges carrying `leafKey`. The
43
+ * offsets of `ranges` and the `starts` map must share one text offset space
44
+ * (see {@link collectTextNodeStarts} and `buildSpellCheckText`).
45
+ */
46
+ export function decorateRanges(entry, starts, ranges, leafKey) {
36
47
  const [node, path] = entry;
37
48
  if (!Text.isText(node) || ranges.length === 0)
38
49
  return [];
@@ -49,7 +60,7 @@ export function decorateChangedText(entry, starts, ranges) {
49
60
  decorations.push({
50
61
  anchor: { path, offset: start - nodeStart },
51
62
  focus: { path, offset: end - nodeStart },
52
- [CHANGED_TEXT_LEAF]: true,
63
+ [leafKey]: true,
53
64
  });
54
65
  }
55
66
  return decorations;
@@ -1 +1 @@
1
- {"version":3,"file":"changeHighlight.js","sourceRoot":"","sources":["../../../../../src/editor/field-types/richtext/utils/changeHighlight.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,GAIL,MAAM,OAAO,CAAC;AAGf,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CACnC,KAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,MAA2B,EAC3B,MAAmB;IAEnB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAE7C,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,GAAG,IAAI,KAAK;YAAE,SAAS;QAC3B,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE;YAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE;YACxC,CAAC,iBAAiB,CAAC,EAAE,IAAI;SACR,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"changeHighlight.js","sourceRoot":"","sources":["../../../../../src/editor/field-types/richtext/utils/changeHighlight.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,GAIL,MAAM,OAAO,CAAC;AAGf,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAK5C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CACnC,KAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,MAA2B,EAC3B,MAAmB;IAEnB,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAgB,EAChB,MAA2B,EAC3B,MAA4B,EAC5B,OAAe;IAEf,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAE7C,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,GAAG,IAAI,KAAK;YAAE,SAAS;QAC3B,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE;YAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE;YACxC,CAAC,OAAO,CAAC,EAAE,IAAI;SACE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}