@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 @@
1
+ {"version":3,"file":"emojiData.generated.js","sourceRoot":"","sources":["../../../src/components/emoji/emojiData.generated.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yEAAyE;AACzE,2EAA2E;AAC3E,4DAA4D;AAC5D,oBAAoB;AAEpB,MAAM,CAAC,MAAM,iBAAiB,GAAG,wCAAwC,CAAC;AAE1E,kBAAkB;AAClB,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA60DzB,CAAC"}
@@ -0,0 +1,46 @@
1
+ export interface EmojiEntry {
2
+ emoji: string;
3
+ /** CLDR name, e.g. "thumbs up". */
4
+ label: string;
5
+ /** The `:shortcode:` the autocomplete offers, e.g. "+1". */
6
+ shortcode: string;
7
+ /** Other shortcodes and CLDR keywords, lower case. */
8
+ keywords: string[];
9
+ /** emojibase group id; see `EMOJI_GROUPS`. */
10
+ group: number;
11
+ /** The five skin-tone variants, light to dark, when Twemoji has them all. */
12
+ skins: string[];
13
+ }
14
+ export interface EmojiGroup {
15
+ id: number;
16
+ label: string;
17
+ }
18
+ export declare const EMOJI_GROUPS: EmojiGroup[];
19
+ /** Parses the table written by `scripts/generate-emoji-data.mjs`. */
20
+ export declare function parseEmojiData(data: string): EmojiEntry[];
21
+ /** The emoji table, loaded on first use so it stays out of the main bundle. */
22
+ export declare function loadEmojiIndex(): Promise<EmojiEntry[]>;
23
+ export declare function getLoadedEmojiIndex(): EmojiEntry[] | null;
24
+ export declare function useEmojiIndex(): EmojiEntry[] | null;
25
+ /** Ranks emoji for a search box or `:shortcode:` query; empty query → none. */
26
+ export declare function searchEmoji(entries: EmojiEntry[], query: string, limit?: number): EmojiEntry[];
27
+ export interface ActiveEmojiShortcode {
28
+ /** Index of the opening colon. */
29
+ start: number;
30
+ /** The caret position the query runs up to. */
31
+ end: number;
32
+ query: string;
33
+ }
34
+ /**
35
+ * The `:query` under the caret, when the colon starts a word: `:thu|` yields
36
+ * "thu"; `10:30` and `http://` do not count, and neither does a query shorter
37
+ * than two characters (so `:D` and `:)` stay emoticons).
38
+ */
39
+ export declare function getActiveEmojiShortcode(text: string, selectionStart: number | null): ActiveEmojiShortcode | null;
40
+ export declare const SKIN_TONE_LABELS: string[];
41
+ /** `tone` 0 is the yellow default; 1–5 pick a variant when the emoji has one. */
42
+ export declare function withSkinTone(entry: EmojiEntry, tone: number): string;
43
+ export declare function getRecentEmoji(): string[];
44
+ export declare function rememberRecentEmoji(emoji: string): string[];
45
+ export declare function getSkinTonePreference(): number;
46
+ export declare function setSkinTonePreference(tone: number): void;
@@ -0,0 +1,173 @@
1
+ import React from "react";
2
+ import { localStorageService } from "../../editor/services/localStorageService";
3
+ export const EMOJI_GROUPS = [
4
+ { id: 0, label: "Smileys & Emotion" },
5
+ { id: 1, label: "People & Body" },
6
+ { id: 3, label: "Animals & Nature" },
7
+ { id: 4, label: "Food & Drink" },
8
+ { id: 5, label: "Travel & Places" },
9
+ { id: 6, label: "Activities" },
10
+ { id: 7, label: "Objects" },
11
+ { id: 8, label: "Symbols" },
12
+ { id: 9, label: "Flags" },
13
+ ];
14
+ /** Parses the table written by `scripts/generate-emoji-data.mjs`. */
15
+ export function parseEmojiData(data) {
16
+ const entries = [];
17
+ for (const line of data.split("\n")) {
18
+ if (!line)
19
+ continue;
20
+ const [emoji, label, shortcode, keywords, group, skins] = line.split("\t");
21
+ if (!emoji || !label || !shortcode || group === undefined)
22
+ continue;
23
+ entries.push({
24
+ emoji,
25
+ label,
26
+ shortcode,
27
+ keywords: keywords ? keywords.split(",") : [],
28
+ group: Number(group),
29
+ skins: skins ? skins.split(",") : [],
30
+ });
31
+ }
32
+ return entries;
33
+ }
34
+ let loadedIndex = null;
35
+ let indexPromise = null;
36
+ /** The emoji table, loaded on first use so it stays out of the main bundle. */
37
+ export function loadEmojiIndex() {
38
+ if (!indexPromise) {
39
+ indexPromise = import("./emojiData.generated").then((module) => {
40
+ loadedIndex = parseEmojiData(module.EMOJI_DATA);
41
+ return loadedIndex;
42
+ });
43
+ }
44
+ return indexPromise;
45
+ }
46
+ export function getLoadedEmojiIndex() {
47
+ return loadedIndex;
48
+ }
49
+ export function useEmojiIndex() {
50
+ const [index, setIndex] = React.useState(loadedIndex);
51
+ React.useEffect(() => {
52
+ if (index)
53
+ return;
54
+ let cancelled = false;
55
+ loadEmojiIndex().then((entries) => {
56
+ if (!cancelled)
57
+ setIndex(entries);
58
+ });
59
+ return () => {
60
+ cancelled = true;
61
+ };
62
+ }, [index]);
63
+ return index;
64
+ }
65
+ function normalizeQuery(query) {
66
+ return query
67
+ .toLowerCase()
68
+ .split(/[\s_-]+/)
69
+ .map((token) => token.trim())
70
+ .filter(Boolean);
71
+ }
72
+ function scoreEntry(entry, query, tokens) {
73
+ const label = entry.label.toLowerCase();
74
+ if (entry.shortcode === query)
75
+ return 100;
76
+ if (label === query)
77
+ return 90;
78
+ if (entry.shortcode.startsWith(query))
79
+ return 80;
80
+ if (label.startsWith(query))
81
+ return 70;
82
+ const labelWords = label.split(/[\s:,()-]+/);
83
+ let score = 0;
84
+ for (const token of tokens) {
85
+ let best = 0;
86
+ if (labelWords.some((word) => word.startsWith(token)))
87
+ best = 40;
88
+ else if (entry.keywords.some((keyword) => keyword.startsWith(token)))
89
+ best = 30;
90
+ else if (label.includes(token))
91
+ best = 20;
92
+ else if (entry.keywords.some((keyword) => keyword.includes(token)))
93
+ best = 10;
94
+ if (best === 0)
95
+ return 0;
96
+ score += best;
97
+ }
98
+ return score;
99
+ }
100
+ /** Ranks emoji for a search box or `:shortcode:` query; empty query → none. */
101
+ export function searchEmoji(entries, query, limit = 50) {
102
+ const normalized = query.trim().toLowerCase();
103
+ const tokens = normalizeQuery(normalized);
104
+ if (tokens.length === 0)
105
+ return [];
106
+ const scored = [];
107
+ entries.forEach((entry, index) => {
108
+ const score = scoreEntry(entry, normalized, tokens);
109
+ if (score > 0)
110
+ scored.push({ entry, score, index });
111
+ });
112
+ scored.sort((a, b) => b.score - a.score || a.index - b.index);
113
+ return scored.slice(0, limit).map((item) => item.entry);
114
+ }
115
+ const SHORTCODE_CHARACTER = /[a-z0-9_+-]/i;
116
+ /**
117
+ * The `:query` under the caret, when the colon starts a word: `:thu|` yields
118
+ * "thu"; `10:30` and `http://` do not count, and neither does a query shorter
119
+ * than two characters (so `:D` and `:)` stay emoticons).
120
+ */
121
+ export function getActiveEmojiShortcode(text, selectionStart) {
122
+ if (selectionStart == null || selectionStart < 3)
123
+ return null;
124
+ let start = selectionStart;
125
+ while (start > 0 && SHORTCODE_CHARACTER.test(text[start - 1] ?? "")) {
126
+ start--;
127
+ }
128
+ if (text[start - 1] !== ":")
129
+ return null;
130
+ const before = text[start - 2];
131
+ if (before !== undefined && !/[\s(]/.test(before))
132
+ return null;
133
+ const query = text.slice(start, selectionStart);
134
+ if (query.length < 2)
135
+ return null;
136
+ return { start: start - 1, end: selectionStart, query };
137
+ }
138
+ export const SKIN_TONE_LABELS = [
139
+ "Default skin tone",
140
+ "Light skin tone",
141
+ "Medium-light skin tone",
142
+ "Medium skin tone",
143
+ "Medium-dark skin tone",
144
+ "Dark skin tone",
145
+ ];
146
+ /** `tone` 0 is the yellow default; 1–5 pick a variant when the emoji has one. */
147
+ export function withSkinTone(entry, tone) {
148
+ if (tone <= 0)
149
+ return entry.emoji;
150
+ return entry.skins[tone - 1] ?? entry.emoji;
151
+ }
152
+ const RECENT_KEY = "emoji.recent";
153
+ const RECENT_LIMIT = 24;
154
+ const SKIN_TONE_KEY = "emoji.skinTone";
155
+ export function getRecentEmoji() {
156
+ const stored = localStorageService.getItem(RECENT_KEY);
157
+ if (!Array.isArray(stored))
158
+ return [];
159
+ return stored.filter((value) => typeof value === "string");
160
+ }
161
+ export function rememberRecentEmoji(emoji) {
162
+ const next = [emoji, ...getRecentEmoji().filter((e) => e !== emoji)].slice(0, RECENT_LIMIT);
163
+ localStorageService.setItem(RECENT_KEY, next);
164
+ return next;
165
+ }
166
+ export function getSkinTonePreference() {
167
+ const stored = localStorageService.getItem(SKIN_TONE_KEY);
168
+ return typeof stored === "number" && stored >= 0 && stored <= 5 ? stored : 0;
169
+ }
170
+ export function setSkinTonePreference(tone) {
171
+ localStorageService.setItem(SKIN_TONE_KEY, tone);
172
+ }
173
+ //# sourceMappingURL=emojiIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emojiIndex.js","sourceRoot":"","sources":["../../../src/components/emoji/emojiIndex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { TextInsertion } from "./textareaInsert";
2
+ /**
3
+ * ASCII emoticons that become emoji while typing, Slack-style: the emoticon
4
+ * has to start a word and is replaced the moment a space or line break is
5
+ * typed after it (or when the comment is sent with it at the very end), so
6
+ * `:)` mid-word, `http://`, `C:\` and `(x:)` stay as typed. Longer forms
7
+ * come before their prefixes so `:-)` and `:'(` win over `:)` and `:(`.
8
+ */
9
+ export declare const EMOTICONS: ReadonlyArray<readonly [string, string]>;
10
+ /** The emoticon that ends at `end` and starts a word, if any. */
11
+ export declare function emoticonEndingAt(text: string, end: number): {
12
+ start: number;
13
+ emoji: string;
14
+ } | null;
15
+ /**
16
+ * After whitespace was typed at `caret`, turns an emoticon right before it
17
+ * into its emoji. Returns null when there is nothing to replace.
18
+ */
19
+ export declare function replaceTypedEmoticon(text: string, caret: number, typed: string | null | undefined): TextInsertion | null;
20
+ /** Converts an emoticon the text ends with, for a comment sent without a trailing space. */
21
+ export declare function replaceTrailingEmoticon(text: string): string;
@@ -0,0 +1,167 @@
1
+ const BS = String.fromCharCode(92); // backslash, kept out of string literals
2
+ const SLIGHT_SMILE = "\u{1F642}";
3
+ const GRIN = "\u{1F603}";
4
+ const LAUGH = "\u{1F606}";
5
+ const WINK = "\u{1F609}";
6
+ const FROWN = "\u{1F641}";
7
+ const CRY = "\u{1F622}";
8
+ const SOB = "\u{1F62D}";
9
+ const JOY = "\u{1F602}";
10
+ const TONGUE = "\u{1F61B}";
11
+ const TONGUE_WINK = "\u{1F61C}";
12
+ const SURPRISED = "\u{1F62E}";
13
+ const KISS = "\u{1F618}";
14
+ const CONFUSED = "\u{1F615}";
15
+ const NEUTRAL = "\u{1F610}";
16
+ const EXPRESSIONLESS = "\u{1F611}";
17
+ const FLUSHED = "\u{1F633}";
18
+ const ZIPPER = "\u{1F910}";
19
+ const CONFOUNDED = "\u{1F616}";
20
+ const ANGRY = "\u{1F620}";
21
+ const RAGE = "\u{1F621}";
22
+ const COOL = "\u{1F60E}";
23
+ const ANGEL = "\u{1F607}";
24
+ const DEVIL = "\u{1F608}";
25
+ const BLUSH = "\u{1F60A}";
26
+ const HEART = "\u2764\uFE0F";
27
+ const BROKEN_HEART = "\u{1F494}";
28
+ const THUMBS_UP = "\u{1F44D}";
29
+ const THUMBS_DOWN = "\u{1F44E}";
30
+ const RAISED_HANDS = "\u{1F64C}";
31
+ /**
32
+ * ASCII emoticons that become emoji while typing, Slack-style: the emoticon
33
+ * has to start a word and is replaced the moment a space or line break is
34
+ * typed after it (or when the comment is sent with it at the very end), so
35
+ * `:)` mid-word, `http://`, `C:\` and `(x:)` stay as typed. Longer forms
36
+ * come before their prefixes so `:-)` and `:'(` win over `:)` and `:(`.
37
+ */
38
+ export const EMOTICONS = [
39
+ // Three and four characters
40
+ [":'-(", CRY],
41
+ [":'-)", JOY],
42
+ [">:-(", ANGRY],
43
+ [">:-)", DEVIL],
44
+ ["O:-)", ANGEL],
45
+ ["0:-)", ANGEL],
46
+ [":-))", LAUGH],
47
+ [":'(", CRY],
48
+ [":')", JOY],
49
+ [":'D", JOY],
50
+ ["</3", BROKEN_HEART],
51
+ [">:(", ANGRY],
52
+ [">:)", DEVIL],
53
+ ["3:)", DEVIL],
54
+ ["O:)", ANGEL],
55
+ ["0:)", ANGEL],
56
+ ["B-)", COOL],
57
+ ["8-)", COOL],
58
+ [":-)", SLIGHT_SMILE],
59
+ [":-]", SLIGHT_SMILE],
60
+ [":-(", FROWN],
61
+ [":-[", FROWN],
62
+ [";-)", WINK],
63
+ [";-D", WINK],
64
+ [":-D", GRIN],
65
+ [":-P", TONGUE],
66
+ [":-p", TONGUE],
67
+ [";-P", TONGUE_WINK],
68
+ [";-p", TONGUE_WINK],
69
+ [":-O", SURPRISED],
70
+ [":-o", SURPRISED],
71
+ [":-*", KISS],
72
+ [":-/", CONFUSED],
73
+ [`:-${BS}`, CONFUSED],
74
+ [":-|", NEUTRAL],
75
+ [":-$", FLUSHED],
76
+ [":-X", ZIPPER],
77
+ [":-x", ZIPPER],
78
+ [":-S", CONFOUNDED],
79
+ [":-s", CONFOUNDED],
80
+ [":-@", RAGE],
81
+ ["^_^", BLUSH],
82
+ ["-_-", EXPRESSIONLESS],
83
+ ["o_O", FLUSHED],
84
+ ["O_o", FLUSHED],
85
+ ["T_T", SOB],
86
+ [";_;", SOB],
87
+ [`${BS}o/`, RAISED_HANDS],
88
+ ["(y)", THUMBS_UP],
89
+ ["(Y)", THUMBS_UP],
90
+ ["(n)", THUMBS_DOWN],
91
+ ["(N)", THUMBS_DOWN],
92
+ // Two characters
93
+ [":)", SLIGHT_SMILE],
94
+ ["=)", SLIGHT_SMILE],
95
+ ["(:", SLIGHT_SMILE],
96
+ [":]", SLIGHT_SMILE],
97
+ [":(", FROWN],
98
+ ["=(", FROWN],
99
+ ["):", FROWN],
100
+ [":[", FROWN],
101
+ [";)", WINK],
102
+ [";D", WINK],
103
+ [":D", GRIN],
104
+ ["=D", GRIN],
105
+ ["xD", LAUGH],
106
+ ["XD", LAUGH],
107
+ [":P", TONGUE],
108
+ [":p", TONGUE],
109
+ ["=P", TONGUE],
110
+ [";P", TONGUE_WINK],
111
+ [";p", TONGUE_WINK],
112
+ ["xP", TONGUE_WINK],
113
+ [":O", SURPRISED],
114
+ [":o", SURPRISED],
115
+ [":*", KISS],
116
+ [":/", CONFUSED],
117
+ [`:${BS}`, CONFUSED],
118
+ ["=/", CONFUSED],
119
+ [":|", NEUTRAL],
120
+ [":$", FLUSHED],
121
+ [":X", ZIPPER],
122
+ [":x", ZIPPER],
123
+ [":S", CONFOUNDED],
124
+ [":s", CONFOUNDED],
125
+ [":@", RAGE],
126
+ ["^^", BLUSH],
127
+ ["<3", HEART],
128
+ ["B)", COOL],
129
+ ["8)", COOL],
130
+ ];
131
+ /** The emoticon that ends at `end` and starts a word, if any. */
132
+ export function emoticonEndingAt(text, end) {
133
+ for (const [emoticon, emoji] of EMOTICONS) {
134
+ const start = end - emoticon.length;
135
+ if (start < 0 || text.slice(start, end) !== emoticon)
136
+ continue;
137
+ const before = text[start - 1];
138
+ if (before !== undefined && !/\s/.test(before))
139
+ return null;
140
+ return { start, emoji };
141
+ }
142
+ return null;
143
+ }
144
+ /**
145
+ * After whitespace was typed at `caret`, turns an emoticon right before it
146
+ * into its emoji. Returns null when there is nothing to replace.
147
+ */
148
+ export function replaceTypedEmoticon(text, caret, typed) {
149
+ if (!typed || !/^\s$/.test(typed))
150
+ return null;
151
+ const match = emoticonEndingAt(text, caret - 1);
152
+ if (!match)
153
+ return null;
154
+ const value = text.slice(0, match.start) + match.emoji + text.slice(caret - 1);
155
+ return { value, caret: match.start + match.emoji.length + 1 };
156
+ }
157
+ /** Converts an emoticon the text ends with, for a comment sent without a trailing space. */
158
+ export function replaceTrailingEmoticon(text) {
159
+ const trimmedEnd = text.replace(/\s+$/, "");
160
+ const match = emoticonEndingAt(trimmedEnd, trimmedEnd.length);
161
+ if (!match)
162
+ return text;
163
+ return (trimmedEnd.slice(0, match.start) +
164
+ match.emoji +
165
+ text.slice(trimmedEnd.length));
166
+ }
167
+ //# sourceMappingURL=emoticons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoticons.js","sourceRoot":"","sources":["../../../src/components/emoji/emoticons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface TextInsertion {
2
+ value: string;
3
+ /** Caret position after the insertion. */
4
+ caret: number;
5
+ }
6
+ /**
7
+ * Replaces `[start, end)` of `value` with `text`. With `spacer`, a space
8
+ * follows the text unless the next character already separates it (used when
9
+ * a `:shortcode:` or `@mention` is completed while typing).
10
+ */
11
+ export declare function replaceTextRange(value: string, start: number, end: number, text: string, options?: {
12
+ spacer?: boolean;
13
+ }): TextInsertion;
14
+ /**
15
+ * Inserts `text` at the textarea's selection, replacing any selected text,
16
+ * writes the value into the element and moves the caret behind the insertion.
17
+ * The caller still owns the React state and must adopt the returned value.
18
+ */
19
+ export declare function insertTextAtSelection(textarea: HTMLTextAreaElement, text: string): TextInsertion;
@@ -0,0 +1,29 @@
1
+ const wordCharacter = /[^\s,;:.!?\])}'"]/;
2
+ /**
3
+ * Replaces `[start, end)` of `value` with `text`. With `spacer`, a space
4
+ * follows the text unless the next character already separates it (used when
5
+ * a `:shortcode:` or `@mention` is completed while typing).
6
+ */
7
+ export function replaceTextRange(value, start, end, text, options = {}) {
8
+ const next = value[end] ?? "";
9
+ const spacer = options.spacer && (!next || wordCharacter.test(next)) ? " " : "";
10
+ const inserted = text + spacer;
11
+ return {
12
+ value: value.slice(0, start) + inserted + value.slice(end),
13
+ caret: start + inserted.length,
14
+ };
15
+ }
16
+ /**
17
+ * Inserts `text` at the textarea's selection, replacing any selected text,
18
+ * writes the value into the element and moves the caret behind the insertion.
19
+ * The caller still owns the React state and must adopt the returned value.
20
+ */
21
+ export function insertTextAtSelection(textarea, text) {
22
+ const start = textarea.selectionStart ?? textarea.value.length;
23
+ const end = textarea.selectionEnd ?? start;
24
+ const insertion = replaceTextRange(textarea.value, start, end, text);
25
+ textarea.value = insertion.value;
26
+ textarea.setSelectionRange(insertion.caret, insertion.caret);
27
+ return insertion;
28
+ }
29
+ //# sourceMappingURL=textareaInsert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textareaInsert.js","sourceRoot":"","sources":["../../../src/components/emoji/textareaInsert.ts"],"names":[],"mappings":"AAMA,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,KAAa,EACb,GAAW,EACX,IAAY,EACZ,OAAO,GAAyB,EAAE;IAElC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IAC/B,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAC1D,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA6B,EAC7B,IAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC;IAC3C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Emoji render as Twemoji SVG images so a comment looks the same on every
3
+ * platform. The images ship with the package (`@discordapp/twemoji/dist/svg`,
4
+ * the same release whose matcher runs here) and the host serves that folder as
5
+ * `<app base>/emoji/`: the Parhelia editor at `/parhelia/emoji/` (the Vite
6
+ * build copies the folder next to its chunks, the Next apps route to it).
7
+ * Another host calls `configureEmojiAssets` with its own location. Nothing is
8
+ * loaded from a CDN. The `Emoji` component falls back to the native glyph
9
+ * when an image does not load.
10
+ */
11
+ export declare const DEFAULT_EMOJI_ASSET_BASE = "/parhelia/emoji/";
12
+ export declare function configureEmojiAssets(base: string): void;
13
+ export declare function getEmojiAssetBase(): string;
14
+ export declare function emojiCodePoints(emoji: string): string;
15
+ export declare function emojiImageUrl(emoji: string): string;
16
+ export type EmojiRun = {
17
+ type: "text";
18
+ value: string;
19
+ } | {
20
+ type: "emoji";
21
+ value: string;
22
+ };
23
+ /**
24
+ * Twemoji's matcher also returns symbols a browser shows as plain text (❤, ✔,
25
+ * 🅰 without a variation selector) and stray U+FE0F selectors. Only matches a
26
+ * browser would show as a colour emoji become images; the rest stays text.
27
+ */
28
+ export declare function isEmojiPresentation(match: string): boolean;
29
+ /** Splits text into plain runs and the emoji Twemoji has an image for. */
30
+ export declare function splitEmojiRuns(text: string): EmojiRun[];
@@ -0,0 +1,84 @@
1
+ import twemoji from "@discordapp/twemoji";
2
+ /**
3
+ * Emoji render as Twemoji SVG images so a comment looks the same on every
4
+ * platform. The images ship with the package (`@discordapp/twemoji/dist/svg`,
5
+ * the same release whose matcher runs here) and the host serves that folder as
6
+ * `<app base>/emoji/`: the Parhelia editor at `/parhelia/emoji/` (the Vite
7
+ * build copies the folder next to its chunks, the Next apps route to it).
8
+ * Another host calls `configureEmojiAssets` with its own location. Nothing is
9
+ * loaded from a CDN. The `Emoji` component falls back to the native glyph
10
+ * when an image does not load.
11
+ */
12
+ export const DEFAULT_EMOJI_ASSET_BASE = "/parhelia/emoji/";
13
+ let assetBase = DEFAULT_EMOJI_ASSET_BASE;
14
+ export function configureEmojiAssets(base) {
15
+ assetBase = base.endsWith("/") ? base : `${base}/`;
16
+ }
17
+ export function getEmojiAssetBase() {
18
+ return assetBase;
19
+ }
20
+ /**
21
+ * The Twemoji file stem of an emoji: its code points joined by `-`, without
22
+ * variation selectors unless the sequence is joined with ZWJ (Twemoji names
23
+ * those with the selector kept, e.g. `1f468-200d-2695-fe0f`).
24
+ */
25
+ const ZERO_WIDTH_JOINER = String.fromCodePoint(0x200d);
26
+ const VARIATION_SELECTOR_16 = String.fromCodePoint(0xfe0f);
27
+ const COMBINING_ENCLOSING_KEYCAP = String.fromCodePoint(0x20e3);
28
+ const VARIATION_SELECTORS = new RegExp(VARIATION_SELECTOR_16, "g");
29
+ export function emojiCodePoints(emoji) {
30
+ const normalized = emoji.includes(ZERO_WIDTH_JOINER)
31
+ ? emoji
32
+ : emoji.replace(VARIATION_SELECTORS, "");
33
+ return twemoji.convert.toCodePoint(normalized);
34
+ }
35
+ export function emojiImageUrl(emoji) {
36
+ return `${assetBase}${emojiCodePoints(emoji)}.svg`;
37
+ }
38
+ const EMOJI_PRESENTATION = /\p{Emoji_Presentation}/u;
39
+ const EMOJI_PROPERTY = /\p{Emoji}/u;
40
+ const PRESENTATION_MARKERS = new RegExp(`[${VARIATION_SELECTOR_16}${COMBINING_ENCLOSING_KEYCAP}]`);
41
+ /**
42
+ * Twemoji's matcher also returns symbols a browser shows as plain text (❤, ✔,
43
+ * 🅰 without a variation selector) and stray U+FE0F selectors. Only matches a
44
+ * browser would show as a colour emoji become images; the rest stays text.
45
+ */
46
+ export function isEmojiPresentation(match) {
47
+ if (EMOJI_PRESENTATION.test(match))
48
+ return true;
49
+ return PRESENTATION_MARKERS.test(match) && EMOJI_PROPERTY.test(match);
50
+ }
51
+ function matchOffset(args) {
52
+ // String.replace passes (match, ...groups, offset, string[, groups]); the
53
+ // offset is the last numeric argument whatever the regex's group count.
54
+ for (let index = args.length - 1; index >= 0; index--) {
55
+ const value = args[index];
56
+ if (typeof value === "number")
57
+ return value;
58
+ }
59
+ return 0;
60
+ }
61
+ /** Splits text into plain runs and the emoji Twemoji has an image for. */
62
+ export function splitEmojiRuns(text) {
63
+ if (!text)
64
+ return [];
65
+ const runs = [];
66
+ let cursor = 0;
67
+ twemoji.replace(text, (...args) => {
68
+ const match = args[0];
69
+ if (isEmojiPresentation(match)) {
70
+ const offset = matchOffset(args);
71
+ if (offset > cursor) {
72
+ runs.push({ type: "text", value: text.slice(cursor, offset) });
73
+ }
74
+ runs.push({ type: "emoji", value: match });
75
+ cursor = offset + match.length;
76
+ }
77
+ return match;
78
+ });
79
+ if (cursor < text.length) {
80
+ runs.push({ type: "text", value: text.slice(cursor) });
81
+ }
82
+ return runs;
83
+ }
84
+ //# sourceMappingURL=twemoji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twemoji.js","sourceRoot":"","sources":["../../../src/components/emoji/twemoji.ts"],"names":[],"mappings":"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"}
@@ -101,6 +101,12 @@ export function collectAgentComponentChanges(operations) {
101
101
  case "duplicate-components":
102
102
  op.componentIds?.forEach((id) => add(id));
103
103
  break;
104
+ case "paste-components":
105
+ op.componentIds?.forEach((id) => add(id));
106
+ break;
107
+ case "convert-component":
108
+ op.createdItemIds?.forEach((id) => add(id));
109
+ break;
104
110
  case "move-component":
105
111
  op.componentIds?.forEach((id) => add(id));
106
112
  break;