@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,218 @@
1
+ /** Tool call IDs the transcript shows as awaiting a person's approval. */
2
+ export function awaitingApprovalToolCallIds(messages) {
3
+ const ids = new Set();
4
+ for (const message of messages) {
5
+ for (const toolCall of message.toolCalls ?? []) {
6
+ if (toolCall.requiresApproval &&
7
+ !toolCall.isCompleted &&
8
+ !/\((approved|rejected)\)$/.test(toolCall.functionName ?? "") &&
9
+ toolCall.toolCallId) {
10
+ ids.add(toolCall.toolCallId);
11
+ }
12
+ }
13
+ }
14
+ return ids;
15
+ }
16
+ function sameMessage(a, b) {
17
+ // A review row without a message (none is stored today) matches on the call ID alone.
18
+ return !a || !b || a.toLowerCase() === b.toLowerCase();
19
+ }
20
+ function byTime(a, b) {
21
+ return a.createdAtUtc.localeCompare(b.createdAtUtc);
22
+ }
23
+ function isRejected(call) {
24
+ return /^REJECTED\b/.test(call.functionError ?? "");
25
+ }
26
+ function statusOf(call) {
27
+ if (call.isPruned)
28
+ return "pruned";
29
+ if (call.isCompleted)
30
+ return call.functionError ? "failed" : "completed";
31
+ if (call.executionStartedAt)
32
+ return "running";
33
+ return "waiting";
34
+ }
35
+ function approvalOf(call, reviews, awaitsApproval) {
36
+ const lastReview = reviews[reviews.length - 1];
37
+ if (isRejected(call)) {
38
+ return { kind: "rejected", label: "Rejected by a person" };
39
+ }
40
+ if (call.approvalSource === "auto" ||
41
+ call.executionSource === "auto-approved") {
42
+ return { kind: "approved-by-auto", label: "Approved by the Auto reviewer" };
43
+ }
44
+ if (call.approvalBy) {
45
+ return {
46
+ kind: "approved-by-person",
47
+ label: `Approved by ${call.approvalBy}`,
48
+ };
49
+ }
50
+ if (lastReview?.decision === "deny") {
51
+ return { kind: "denied-by-auto", label: "Denied by the Auto reviewer" };
52
+ }
53
+ // Outside Auto the stored row cannot tell a pending approval from a call that has not run yet;
54
+ // the transcript can, so the caller passes the calls it shows as awaiting approval.
55
+ const handedToPerson = awaitsApproval ||
56
+ lastReview?.decision === "require-human" ||
57
+ call.frozenApprovalRequirement === "Human" ||
58
+ call.frozenApprovalRequirement === "Review";
59
+ if (!call.isCompleted && !call.executionStartedAt && handedToPerson) {
60
+ return { kind: "pending", label: "Waiting for a person" };
61
+ }
62
+ return { kind: "not-required", label: "No approval needed" };
63
+ }
64
+ /**
65
+ * Joins each tool call with its Auto reviews and the reviewer's requests for them.
66
+ * `awaitingApprovalIds` are the tool call IDs the transcript shows as awaiting approval.
67
+ */
68
+ export function buildToolCallDiagnosticsRows(diagnostics, awaitingApprovalIds = new Set()) {
69
+ const reviews = [...diagnostics.reviews].sort(byTime);
70
+ const requests = [...diagnostics.reviewRequests].sort((a, b) => byTime(a, b) || a.attempt - b.attempt);
71
+ return diagnostics.toolCalls.map((call, position) => {
72
+ const callReviews = reviews.filter((review) => (call.autoReviewId != null &&
73
+ review.reviewId.toLowerCase() === call.autoReviewId.toLowerCase()) ||
74
+ (!!call.toolCallId &&
75
+ review.toolCallId === call.toolCallId &&
76
+ sameMessage(review.messageId, call.messageId)));
77
+ const callRequests = requests.filter((request) => callReviews.some((review) => !!review.batchId &&
78
+ review.batchId === request.batchId &&
79
+ review.generation === request.generation &&
80
+ sameMessage(review.messageId, request.messageId)));
81
+ const approval = approvalOf(call, callReviews, !!call.toolCallId && awaitingApprovalIds.has(call.toolCallId));
82
+ return {
83
+ call,
84
+ index: position + 1,
85
+ status: statusOf(call),
86
+ approval: approval.kind,
87
+ approvalLabel: approval.label,
88
+ reviews: callReviews,
89
+ requests: callRequests,
90
+ };
91
+ });
92
+ }
93
+ /** Pretty-prints JSON text; anything else is returned as is. */
94
+ export function prettyJson(value) {
95
+ if (!value)
96
+ return "";
97
+ const trimmed = value.trim();
98
+ if (!trimmed.startsWith("{") && !trimmed.startsWith("["))
99
+ return value;
100
+ try {
101
+ return JSON.stringify(JSON.parse(trimmed), null, 2);
102
+ }
103
+ catch {
104
+ return value;
105
+ }
106
+ }
107
+ /** Notes a text the server cut to its diagnostics limit. */
108
+ export function truncationNote(shown, fullLength) {
109
+ if (!shown || fullLength == null || fullLength <= shown.length)
110
+ return null;
111
+ return `(cut to ${shown.length.toLocaleString()} of ${fullLength.toLocaleString()} characters)`;
112
+ }
113
+ function formatTime(value) {
114
+ if (!value)
115
+ return "—";
116
+ const parsed = new Date(value);
117
+ return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleString();
118
+ }
119
+ export function describeReview(review) {
120
+ if (review.state === "failed") {
121
+ return `Review failed, a person decides${review.failure ? `: ${review.failure}` : ""}`;
122
+ }
123
+ const parts = [
124
+ `Decision: ${review.decision ?? "—"}`,
125
+ review.recommendedOutcome
126
+ ? `recommended ${review.recommendedOutcome}`
127
+ : null,
128
+ review.riskLevel ? `risk ${review.riskLevel}` : null,
129
+ review.userAuthorization
130
+ ? `user authorization ${review.userAuthorization}`
131
+ : null,
132
+ review.reasonCode ? `reason ${review.reasonCode}` : null,
133
+ ].filter(Boolean);
134
+ return parts.join(" · ");
135
+ }
136
+ export function describeReviewUsage(entry) {
137
+ return [
138
+ entry.modelName ? `model ${entry.modelName}` : null,
139
+ entry.inputTokens != null || entry.outputTokens != null
140
+ ? `${(entry.inputTokens ?? 0).toLocaleString()} in / ${(entry.outputTokens ?? 0).toLocaleString()} out tokens`
141
+ : null,
142
+ entry.cost != null ? `cost ${entry.cost.toFixed(4)}` : null,
143
+ entry.durationMs != null ? `${entry.durationMs.toLocaleString()} ms` : null,
144
+ ]
145
+ .filter(Boolean)
146
+ .join(" · ");
147
+ }
148
+ function indent(text, prefix = " ") {
149
+ return text
150
+ .split("\n")
151
+ .map((line) => prefix + line)
152
+ .join("\n");
153
+ }
154
+ /** Plain-text version of the section, for copy, download and search. */
155
+ export function formatToolCallDiagnosticsText(diagnostics, rows) {
156
+ if (rows.length === 0)
157
+ return "";
158
+ const blocks = [];
159
+ if (diagnostics.toolCalls.length >= diagnostics.toolCallLimit) {
160
+ blocks.push(`Showing the newest ${diagnostics.toolCallLimit.toLocaleString()} tool calls.`);
161
+ }
162
+ for (const row of rows) {
163
+ const { call } = row;
164
+ const lines = [
165
+ `#${row.index} ${call.functionName ?? "(unknown tool)"} · ${row.status} · ${row.approvalLabel}`,
166
+ ` Created ${formatTime(call.createdDate)} · message ${call.messageIndex}${call.callOrdinal != null ? `, call ${call.callOrdinal}` : ""} · ${call.toolCallId ?? "—"}`,
167
+ ];
168
+ if (call.responseTimeMs != null) {
169
+ lines.push(` Response time: ${call.responseTimeMs.toLocaleString()} ms`);
170
+ }
171
+ if (call.executionSource) {
172
+ lines.push(` Execution source: ${call.executionSource}`);
173
+ }
174
+ if (call.frozenApprovalRequirement) {
175
+ lines.push(` Auto route: ${call.frozenApprovalRequirement}`);
176
+ }
177
+ if (call.approvalBy || call.approvalAt) {
178
+ lines.push(` Approved by ${call.approvalBy ?? "—"} at ${formatTime(call.approvalAt)}`);
179
+ }
180
+ for (const review of row.reviews) {
181
+ lines.push(` Auto review (${formatTime(review.createdAtUtc)}): ${describeReview(review)}`);
182
+ if (review.rationale)
183
+ lines.push(` Rationale: ${review.rationale}`);
184
+ const usage = describeReviewUsage({
185
+ modelName: review.modelName,
186
+ durationMs: review.durationMs,
187
+ inputTokens: review.batchInputTokens,
188
+ outputTokens: review.batchOutputTokens,
189
+ cost: review.batchCost,
190
+ });
191
+ if (usage)
192
+ lines.push(` Batch ${review.batchId ?? "—"}: ${usage}`);
193
+ }
194
+ for (const request of row.requests) {
195
+ lines.push(` Reviewer request, attempt ${request.attempt} (${formatTime(request.createdAtUtc)}): ${describeReviewUsage(request) || "—"}`);
196
+ if (request.error)
197
+ lines.push(` Error: ${request.error}`);
198
+ lines.push(" Prompt:", indent(prettyJson(request.userPrompt), " "));
199
+ lines.push(" Response:", indent(request.response ? prettyJson(request.response) : "(none)", " "));
200
+ }
201
+ if (call.functionArguments) {
202
+ lines.push(` Arguments: ${truncationNote(call.functionArguments, call.argumentsLength) ?? ""}`.trimEnd(), indent(prettyJson(call.functionArguments)));
203
+ }
204
+ if (call.functionError) {
205
+ lines.push(` Error: ${truncationNote(call.functionError, call.errorLength) ?? ""}`.trimEnd(), indent(call.functionError));
206
+ }
207
+ else if (call.functionResult) {
208
+ lines.push(` Result: ${truncationNote(call.functionResult, call.resultLength) ?? ""}`.trimEnd(), indent(prettyJson(call.functionResult)));
209
+ }
210
+ blocks.push(lines.join("\n"));
211
+ }
212
+ const systemPrompt = diagnostics.reviewRequests.find((request) => request.systemPrompt);
213
+ if (systemPrompt?.systemPrompt) {
214
+ blocks.push(`Reviewer system prompt (${systemPrompt.promptVersion ?? "unknown version"}):\n${indent(systemPrompt.systemPrompt, " ")}`);
215
+ }
216
+ return blocks.join("\n\n");
217
+ }
218
+ //# sourceMappingURL=toolCallDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolCallDiagnostics.js","sourceRoot":"","sources":["../../../../src/editor/ai/terminal/toolCallDiagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** File links must bypass the editor's internal-page navigation. */
2
+ export declare function isDownloadHref(href: string, baseUrl: string): boolean;
3
+ export declare function downloadLink(href: string, fileName?: string): Promise<void>;
@@ -0,0 +1,52 @@
1
+ /** File links must bypass the editor's internal-page navigation. */
2
+ export function isDownloadHref(href, baseUrl) {
3
+ if (!href.trim() || href.trimStart().startsWith("#"))
4
+ return false;
5
+ try {
6
+ const url = new URL(href, baseUrl);
7
+ return (/^https?:$/.test(url.protocol) &&
8
+ (/\.pdf$/i.test(url.pathname) || /\/(?:-|~)\/media\//i.test(url.pathname)));
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ export async function downloadLink(href, fileName = "") {
15
+ const url = new URL(href, window.location.href);
16
+ if (!/^(https?:|blob:)$/.test(url.protocol)) {
17
+ throw new Error("Unsupported download URL");
18
+ }
19
+ let objectUrl;
20
+ // The download attribute only works for same-origin and blob URLs. Fetch
21
+ // cross-origin files first so a PDF cannot replace the editor with a viewer.
22
+ if (url.protocol !== "blob:" && url.origin !== window.location.origin) {
23
+ const response = await fetch(url.href);
24
+ if (!response.ok)
25
+ throw new Error("Could not download the linked file");
26
+ if (!fileName) {
27
+ fileName = url.pathname.split("/").pop() || "download";
28
+ try {
29
+ fileName = decodeURIComponent(fileName);
30
+ }
31
+ catch {
32
+ // Keep filenames with malformed percent escapes as authored.
33
+ }
34
+ }
35
+ objectUrl = URL.createObjectURL(await response.blob());
36
+ }
37
+ const anchor = document.createElement("a");
38
+ anchor.href = objectUrl ?? url.href;
39
+ anchor.download = fileName;
40
+ document.body.appendChild(anchor);
41
+ try {
42
+ anchor.click();
43
+ }
44
+ finally {
45
+ anchor.remove();
46
+ if (objectUrl) {
47
+ const downloadedUrl = objectUrl;
48
+ window.setTimeout(() => URL.revokeObjectURL(downloadedUrl), 60_000);
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=linkDownload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkDownload.js","sourceRoot":"","sources":["../../../src/editor/bridge/linkDownload.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO,CACL,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAC3E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,QAAQ,GAAG,EAAE;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,SAA6B,CAAC;IAClC,yEAAyE;IACzE,6EAA6E;IAC7E,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC;YACvD,IAAI,CAAC;gBACH,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;YAC/D,CAAC;QACH,CAAC;QACD,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC;IACpC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,SAAS,CAAC;YAChC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ClipboardState } from "./editContext";
2
+ /**
3
+ * The editor clipboard survives page switches and reloads so a component copied on
4
+ * one page can be pasted on another, even in a second browser tab.
5
+ */
6
+ export declare const CLIPBOARD_STORAGE_KEY = "editor.clipboard";
7
+ export declare function loadPersistedClipboard(): ClipboardState;
8
+ export declare function persistClipboard(clipboard: ClipboardState): void;
9
+ /** Parses a cross-tab `storage` event for the clipboard key; undefined when unrelated. */
10
+ export declare function readClipboardFromStorageEvent(event: StorageEvent): ClipboardState | undefined;
@@ -0,0 +1,57 @@
1
+ import { localStorageService } from "../services/localStorageService";
2
+ /**
3
+ * The editor clipboard survives page switches and reloads so a component copied on
4
+ * one page can be pasted on another, even in a second browser tab.
5
+ */
6
+ export const CLIPBOARD_STORAGE_KEY = "editor.clipboard";
7
+ function isValidClipboardState(value) {
8
+ if (value === null)
9
+ return true;
10
+ if (!value || typeof value !== "object")
11
+ return false;
12
+ const candidate = value;
13
+ if (candidate.kind === "items") {
14
+ return Array.isArray(candidate.items) && candidate.items.length > 0;
15
+ }
16
+ if (candidate.kind === "components") {
17
+ return (Array.isArray(candidate.components) &&
18
+ candidate.components.length > 0 &&
19
+ !!candidate.sourcePageItem &&
20
+ typeof candidate.sourcePageItem === "object");
21
+ }
22
+ return false;
23
+ }
24
+ export function loadPersistedClipboard() {
25
+ const raw = localStorageService.getString(CLIPBOARD_STORAGE_KEY);
26
+ if (!raw)
27
+ return null;
28
+ try {
29
+ const parsed = JSON.parse(raw);
30
+ return isValidClipboardState(parsed) ? parsed : null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function persistClipboard(clipboard) {
37
+ if (!clipboard) {
38
+ localStorageService.removeItem(CLIPBOARD_STORAGE_KEY);
39
+ return;
40
+ }
41
+ localStorageService.setString(CLIPBOARD_STORAGE_KEY, JSON.stringify(clipboard));
42
+ }
43
+ /** Parses a cross-tab `storage` event for the clipboard key; undefined when unrelated. */
44
+ export function readClipboardFromStorageEvent(event) {
45
+ if (event.key !== `parhelia.${CLIPBOARD_STORAGE_KEY}`)
46
+ return undefined;
47
+ if (!event.newValue)
48
+ return null;
49
+ try {
50
+ const parsed = JSON.parse(event.newValue);
51
+ return isValidClipboardState(parsed) ? parsed : null;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ //# sourceMappingURL=clipboardStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboardStorage.js","sourceRoot":"","sources":["../../../src/editor/client/clipboardStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAExD,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;YACnC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC/B,CAAC,CAAC,SAAS,CAAC,cAAc;YAC1B,OAAO,SAAS,CAAC,cAAc,KAAK,QAAQ,CAC7C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,mBAAmB,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAyB;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,mBAAmB,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IACD,mBAAmB,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,6BAA6B,CAC3C,KAAmB;IAEnB,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,qBAAqB,EAAE;QAAE,OAAO,SAAS,CAAC;IACxE,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAY,CAAC;QACrD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type RefObject } from "react";
2
+ import type { FullItem, ItemDescriptor } from "../../pageModel";
3
+ import type { ItemsRepository } from "../itemsRepository";
4
+ export declare function useRepositoryItemRefresh(repository: Pick<ItemsRepository, "getItem" | "revision"> & Partial<Pick<ItemsRepository, "subscribeItemsChanged">>, descriptor: ItemDescriptor | undefined, currentDescriptor: RefObject<ItemDescriptor | undefined>, setItem: (item: FullItem | undefined) => void): void;
@@ -0,0 +1,62 @@
1
+ import { useCallback, useEffect, useRef } from "react";
2
+ /** Same item and language; any version (the current item may be Latest). */
3
+ function sameItemKey(a, b) {
4
+ const normalize = (value) => (value ?? "").replace(/[{}]/g, "").toLowerCase();
5
+ return (normalize(a.id) === normalize(b.id) &&
6
+ normalize(a.language) === normalize(b.language) &&
7
+ (a.database || "master") === (b.database || "master"));
8
+ }
9
+ export function useRepositoryItemRefresh(repository, descriptor, currentDescriptor, setItem) {
10
+ const { getItem, subscribeItemsChanged } = repository;
11
+ const descriptorRef = useRef(descriptor);
12
+ descriptorRef.current = descriptor;
13
+ // Only the latest read may apply its result.
14
+ const latestReadRef = useRef(0);
15
+ const load = useCallback(() => {
16
+ const target = descriptorRef.current;
17
+ if (!target)
18
+ return;
19
+ const read = ++latestReadRef.current;
20
+ void (async () => {
21
+ const item = await getItem(target);
22
+ const current = currentDescriptor.current;
23
+ // A revision read can finish after navigation or after a newer refresh.
24
+ // In particular, an empty result for a deleted version must not clear
25
+ // the surviving version loaded by the delete command.
26
+ if (read !== latestReadRef.current ||
27
+ current?.id !== target.id ||
28
+ current.language !== target.language ||
29
+ current.version !== target.version ||
30
+ (current.database ?? "master") !== (target.database ?? "master"))
31
+ return;
32
+ setItem(item);
33
+ })();
34
+ }, [getItem, currentDescriptor, setItem]);
35
+ useEffect(() => {
36
+ load();
37
+ }, [
38
+ repository.revision,
39
+ load,
40
+ descriptor?.id,
41
+ descriptor?.language,
42
+ descriptor?.version,
43
+ descriptor?.database,
44
+ ]);
45
+ // A refresh of this item publishes its data just before the revision bump
46
+ // renders. Reading it right away (from the cache) puts the new item into the
47
+ // same commit as the new repository: one editor render per save, not two.
48
+ useEffect(() => {
49
+ if (!subscribeItemsChanged)
50
+ return;
51
+ return subscribeItemsChanged((changes) => {
52
+ const target = descriptorRef.current;
53
+ if (target &&
54
+ changes.some((change) => change.action === "update" &&
55
+ change.source !== "local-field-update" &&
56
+ sameItemKey(change.item, target))) {
57
+ load();
58
+ }
59
+ });
60
+ }, [subscribeItemsChanged, load]);
61
+ }
62
+ //# sourceMappingURL=useRepositoryItemRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRepositoryItemRefresh.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useRepositoryItemRefresh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { EditOperation } from "../../types";
2
+ import { type EditContextType, type SelectionRange } from "./editContext";
3
+ /** The published text selection, re-rendering on each change. */
4
+ export declare function useSelectedRange(options?: {
5
+ editContext?: EditContextType;
6
+ }): SelectionRange | undefined;
7
+ /**
8
+ * A value derived from the published text selection, re-rendering only when
9
+ * it changes (e.g. `undefined` unless the selection concerns this field).
10
+ */
11
+ export declare function useSelectedRange<S>(options: {
12
+ editContext?: EditContextType;
13
+ select: (range: SelectionRange | undefined) => S;
14
+ }): S;
15
+ /** The edit history (newest first), re-rendering on each change. */
16
+ export declare function useEditHistory(): EditOperation[];
@@ -0,0 +1,25 @@
1
+ import { useEditContext, } from "./editContext";
2
+ import { createValueStore, useValueStore } from "./valueStore";
3
+ // The text selection and the edit history change while the user types or
4
+ // selects, so they live in stores instead of the EditContext value (a change
5
+ // there re-renders every consumer in the editor). Contexts without a store
6
+ // (tests, sandbox fixtures) fall back to the plain EditContext value.
7
+ const noSelectedRangeStore = createValueStore(undefined);
8
+ const keepRange = (range) => range;
9
+ export function useSelectedRange(options) {
10
+ const contextFromHook = useEditContext();
11
+ const editContext = options?.editContext ?? contextFromHook;
12
+ const store = editContext?.selectedRangeStore;
13
+ const select = options?.select ?? keepRange;
14
+ return useValueStore(store ?? noSelectedRangeStore, (published) => select(store ? published : editContext?.selectedRange));
15
+ }
16
+ const EMPTY_EDIT_HISTORY = [];
17
+ const noEditHistoryStore = createValueStore(EMPTY_EDIT_HISTORY);
18
+ /** The edit history (newest first), re-rendering on each change. */
19
+ export function useEditHistory() {
20
+ const editContext = useEditContext();
21
+ const store = editContext?.editHistoryStore;
22
+ const history = useValueStore(store ?? noEditHistoryStore);
23
+ return store ? history : (editContext?.editHistory ?? EMPTY_EDIT_HISTORY);
24
+ }
25
+ //# sourceMappingURL=liveEditState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveEditState.js","sourceRoot":"","sources":["../../../src/editor/client/liveEditState.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,GAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,sEAAsE;AAEtE,MAAM,oBAAoB,GAAG,gBAAgB,CAC3C,SAAS,CACV,CAAC;AACF,MAAM,SAAS,GAAG,CAAC,KAAiC,EAAE,EAAE,CAAC,KAAK,CAAC;AAc/D,MAAM,UAAU,gBAAgB,CAAI,OAGnC;IACC,MAAM,eAAe,GAAG,cAAc,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,eAAe,CAAC;IAC5D,MAAM,KAAK,GAAG,WAAW,EAAE,kBAAkB,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC;IAC5C,OAAO,aAAa,CAAC,KAAK,IAAI,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE,CAChE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAoB,EAAE,CAAC;AAC/C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AAEhE,oEAAoE;AACpE,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,WAAW,EAAE,gBAAgB,CAAC;IAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,IAAI,kBAAkB,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { EditSession } from "../../types";
2
+ import { type EditContextType, type RemoteCaretPosition } from "./editContext";
3
+ /** The session list (presence, field locks), re-rendering on each change. */
4
+ export declare function useActiveSessions(explicitEditContext?: EditContextType): EditSession[];
5
+ /** Live carets per session, re-rendering on each caret move. */
6
+ export declare function useRemoteCarets(): Record<string, RemoteCaretPosition>;
@@ -0,0 +1,20 @@
1
+ import { useEditContext, } from "./editContext";
2
+ import { createValueStore, useValueStore } from "./valueStore";
3
+ // Session presence and carets change with every focus, lock and keystroke of
4
+ // every connected user, so they live in stores instead of the EditContext
5
+ // value (a change there re-renders every consumer in the editor).
6
+ const noActiveSessionsStore = createValueStore([]);
7
+ /** The session list (presence, field locks), re-rendering on each change. */
8
+ export function useActiveSessions(explicitEditContext) {
9
+ const contextFromHook = useEditContext();
10
+ const editContext = explicitEditContext ?? contextFromHook;
11
+ const store = editContext?.activeSessionsStore;
12
+ const sessions = useValueStore(store ?? noActiveSessionsStore);
13
+ return store ? sessions : (editContext?.activeSessions ?? sessions);
14
+ }
15
+ const noRemoteCaretsStore = createValueStore({});
16
+ /** Live carets per session, re-rendering on each caret move. */
17
+ export function useRemoteCarets() {
18
+ return useValueStore(useEditContext()?.remoteCaretsStore ?? noRemoteCaretsStore);
19
+ }
20
+ //# sourceMappingURL=liveSessionState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liveSessionState.js","sourceRoot":"","sources":["../../../src/editor/client/liveSessionState.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,GAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,6EAA6E;AAC7E,0EAA0E;AAC1E,kEAAkE;AAElE,MAAM,qBAAqB,GAAG,gBAAgB,CAAgB,EAAE,CAAC,CAAC;AAElE,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAC/B,mBAAqC;IAErC,MAAM,eAAe,GAAG,cAAc,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,mBAAmB,IAAI,eAAe,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,EAAE,mBAAmB,CAAC;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,IAAI,qBAAqB,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,cAAc,IAAI,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,mBAAmB,GAAG,gBAAgB,CAE1C,EAAE,CAAC,CAAC;AAEN,gEAAgE;AAChE,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,CAClB,cAAc,EAAE,EAAE,iBAAiB,IAAI,mBAAmB,CAC3D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type SetStateAction } from "react";
2
+ /**
3
+ * A single value that changes often but is read by few components.
4
+ *
5
+ * Kept outside the EditContext value on purpose: every change of that value
6
+ * re-renders every EditContext consumer in the editor, while a change here
7
+ * re-renders only the components that subscribe with {@link useValueStore}.
8
+ * Imperative readers (event handlers, effects) call `get()`.
9
+ */
10
+ export interface ValueStore<T> {
11
+ get: () => T;
12
+ /** Same contract as a React state setter; unchanged values notify nobody. */
13
+ set: (next: SetStateAction<T>) => void;
14
+ subscribe: (listener: () => void) => () => void;
15
+ }
16
+ export declare function createValueStore<T>(initialValue: T): ValueStore<T>;
17
+ export declare function useValueStore<T>(store: ValueStore<T>): T;
18
+ /**
19
+ * Re-renders only when `select`'s result changes. It must return a stable
20
+ * value (a primitive, or an object held by the store) for an unchanged store.
21
+ */
22
+ export declare function useValueStore<T, S>(store: ValueStore<T>, select: (value: T) => S): S;
@@ -0,0 +1,29 @@
1
+ import { useSyncExternalStore } from "react";
2
+ export function createValueStore(initialValue) {
3
+ let value = initialValue;
4
+ const listeners = new Set();
5
+ return {
6
+ get: () => value,
7
+ set: (next) => {
8
+ const resolved = typeof next === "function" ? next(value) : next;
9
+ if (Object.is(resolved, value))
10
+ return;
11
+ value = resolved;
12
+ for (const listener of [...listeners])
13
+ listener();
14
+ },
15
+ subscribe: (listener) => {
16
+ listeners.add(listener);
17
+ return () => {
18
+ listeners.delete(listener);
19
+ };
20
+ },
21
+ };
22
+ }
23
+ export function useValueStore(store, select) {
24
+ const getSnapshot = select
25
+ ? () => select(store.get())
26
+ : store.get;
27
+ return useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
28
+ }
29
+ //# sourceMappingURL=valueStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueStore.js","sourceRoot":"","sources":["../../../src/editor/client/valueStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,OAAO,CAAC;AAiBlE,MAAM,UAAU,gBAAgB,CAAI,YAAe;IACjD,IAAI,KAAK,GAAG,YAAY,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;QAChB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,QAAQ,GACZ,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAE,IAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAAE,OAAO;YACvC,KAAK,GAAG,QAAQ,CAAC;YACjB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;gBAAE,QAAQ,EAAE,CAAC;QACpD,CAAC;QACD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,aAAa,CAC3B,KAAoB,EACpB,MAAwB;IAExB,MAAM,WAAW,GAAgB,MAAM;QACrC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACd,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ComponentClipboardState, EditContextType } from "../client/editContext";
2
+ import type { Component, Placeholder } from "../pageModel";
3
+ import type { ComponentCommand, ComponentCommandProviderContext } from "./componentCommands";
4
+ import type { PlaceholderCommand, PlaceholderCommandProviderContext } from "./placeholderCommands";
5
+ /** The clipboard when it holds components, otherwise null. */
6
+ export declare function getComponentClipboard(editContext: EditContextType): ComponentClipboardState | null;
7
+ export declare function describeClipboardComponents(clipboard: ComponentClipboardState): string;
8
+ /**
9
+ * Puts `components` on the editor clipboard. Returns false when nothing copyable was
10
+ * given (e.g. only the page root). The components stay where they are; pasting copies them.
11
+ */
12
+ export declare function copyComponentsToClipboard(editContext: EditContextType, components: Component[]): boolean;
13
+ /**
14
+ * Pastes the clipboard components into `placeholderKey` of the current page at `index`
15
+ * (-1 appends). Checks the placeholder's insert options first so the user gets a clear
16
+ * message instead of a failed operation. Resolves to true when the operation ran.
17
+ */
18
+ export declare function pasteClipboardComponents(editContext: EditContextType, placeholderKey: string, index: number): Promise<boolean>;
19
+ /** Ctrl+C with a component selection outside the content tree. */
20
+ export declare function copySelectedComponents(editContext: EditContextType): boolean;
21
+ /**
22
+ * Ctrl+V with a component selection: pastes after the selected component, or into it
23
+ * when it has exactly one editable placeholder and no parent (the page root).
24
+ */
25
+ export declare function pasteRelativeToSelectedComponent(editContext: EditContextType): Promise<boolean>;
26
+ /**
27
+ * "Copy" for the selected components and "Paste after / into" for a single target
28
+ * component. Registered through `configuration.componentCommands.providers`.
29
+ */
30
+ export declare function componentClipboardCommandProvider(components: Component[], editContext: EditContextType, providerContext?: ComponentCommandProviderContext): ComponentCommand[];
31
+ /**
32
+ * "Paste here" for a placeholder node (component navigator). Registered through
33
+ * `configuration.placeholderCommands.providers`.
34
+ */
35
+ export declare function placeholderClipboardCommandProvider(placeholders: Placeholder[], editContext: EditContextType, providerContext?: PlaceholderCommandProviderContext): PlaceholderCommand[];