@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,221 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { AlertCircle, ChevronDown, ChevronRight, Folder, Gauge, Globe, KeyRound, ListChecks, ShieldCheck, Users, Wrench, X, } from "lucide-react";
4
+ import { toast } from "sonner";
5
+ import { Badge } from "../../../components/ui/badge";
6
+ import { Button } from "../../../components/ui/button";
7
+ import { Checkbox } from "../../../components/ui/checkbox";
8
+ import { Input } from "../../../components/ui/input";
9
+ import { Select } from "../../../components/ui/select";
10
+ import { Switch } from "../../../components/ui/switch";
11
+ import { Textarea } from "../../../components/ui/textarea";
12
+ import { SearchInput } from "../../../components/SearchInput";
13
+ import { cn } from "../../../lib/utils";
14
+ import { mcpAccessService, } from "../../services/mcpAccessService";
15
+ import { LoadingState } from "../../ui/LoadingState";
16
+ import { SettingsCard as Card } from "../SettingsCard";
17
+ import { SettingsPanelLayout } from "../SettingsPanelLayout";
18
+ const getErrorMessage = (error, fallback) => error instanceof Error ? error.message : fallback;
19
+ const cleanLines = (values) => values.map((value) => value.trim()).filter((value) => value.length > 0);
20
+ /** Normalizes list fields the way the server stores them, so dirty tracking ignores blank lines. */
21
+ function normalize(form) {
22
+ return {
23
+ ...form,
24
+ publicBaseUrl: form.publicBaseUrl.trim(),
25
+ instructions: form.instructions.trim(),
26
+ allowedOrigins: cleanLines(form.allowedOrigins),
27
+ allowedRoles: cleanLines(form.allowedRoles),
28
+ signingSecretConnectionStringName: form.signingSecretConnectionStringName.trim(),
29
+ };
30
+ }
31
+ const sameForm = (a, b) => JSON.stringify(normalize(a)) === JSON.stringify(normalize(b));
32
+ function SettingRow({ label, description, children, className, }) {
33
+ return (_jsxs("div", { className: cn("flex items-center justify-between gap-4", className), children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: label }), description && _jsx("div", { className: "text-neutral-grey-50 mt-0.5 text-xs", children: description })] }), children] }));
34
+ }
35
+ function SwitchRow({ label, description, checked, onChange, testId, }) {
36
+ return (_jsx(SettingRow, { label: label, description: description, children: _jsx(Switch, { checked: checked, onCheckedChange: onChange, "aria-label": label, "data-testid": testId }) }));
37
+ }
38
+ function FieldBlock({ label, description, children, }) {
39
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: label }), description && _jsx("div", { className: "text-neutral-grey-50 mt-0.5 text-xs", children: description })] }), children] }));
40
+ }
41
+ function NumberInput({ label, description, value, onChange, min, max, step = 1, testId, }) {
42
+ const invalid = !Number.isFinite(value) || value < min || value > max;
43
+ return (_jsx(SettingRow, { label: label, description: invalid ? `Between ${min} and ${max}.` : description, children: _jsx(Input, { type: "number", min: min, max: max, step: step, value: Number.isFinite(value) ? value : "", "aria-invalid": invalid, "aria-label": label, onChange: (event) => onChange(event.target.value === "" ? Number.NaN : Number(event.target.value)), className: "h-8 w-28 shrink-0 text-right text-xs md:text-xs", "data-testid": testId }) }));
44
+ }
45
+ function buildToolTree(tools) {
46
+ const byId = new Map(tools.map((tool) => [tool.id, tool]));
47
+ const children = new Map();
48
+ tools.forEach((tool) => {
49
+ const parent = tool.parentId && byId.has(tool.parentId) ? tool.parentId : null;
50
+ children.set(parent, [...(children.get(parent) ?? []), tool]);
51
+ });
52
+ return { byId, children };
53
+ }
54
+ function ancestorIds(tree, id) {
55
+ const result = [];
56
+ let current = tree.byId.get(id)?.parentId ?? null;
57
+ while (current && tree.byId.has(current)) {
58
+ result.push(current);
59
+ current = tree.byId.get(current)?.parentId ?? null;
60
+ }
61
+ return result;
62
+ }
63
+ function descendantTools(tree, id) {
64
+ const node = tree.byId.get(id);
65
+ if (!node)
66
+ return [];
67
+ const own = node.functionName ? [node] : [];
68
+ return own.concat((tree.children.get(id) ?? []).flatMap((child) => descendantTools(tree, child.id)));
69
+ }
70
+ /**
71
+ * A checkbox tree over tool folders and tools with TreelistEx semantics: a selected folder
72
+ * includes everything below it, so its descendants show as included and cannot be ticked alone.
73
+ */
74
+ function ToolTreeSelect({ tree, selected, onChange, filter, isSelectable = () => true, testId, }) {
75
+ const selectedSet = useMemo(() => new Set(selected), [selected]);
76
+ const [expanded, setExpanded] = useState(() => {
77
+ const initial = new Set();
78
+ (tree.children.get(null) ?? []).forEach((root) => initial.add(root.id));
79
+ selected.forEach((id) => ancestorIds(tree, id).forEach((ancestor) => initial.add(ancestor)));
80
+ return initial;
81
+ });
82
+ const needle = filter.trim().toLowerCase();
83
+ const visible = useMemo(() => {
84
+ if (!needle)
85
+ return null;
86
+ const ids = new Set();
87
+ tree.byId.forEach((node) => {
88
+ const text = `${node.displayName ?? ""} ${node.name} ${node.functionName ?? ""}`.toLowerCase();
89
+ if (text.includes(needle)) {
90
+ ids.add(node.id);
91
+ ancestorIds(tree, node.id).forEach((ancestor) => ids.add(ancestor));
92
+ }
93
+ });
94
+ return ids;
95
+ }, [needle, tree]);
96
+ const toggle = (node, checked) => {
97
+ if (checked) {
98
+ // A folder replaces any selection below it.
99
+ const below = new Set(descendantTools(tree, node.id).map((tool) => tool.id));
100
+ const collect = (id) => (tree.children.get(id) ?? []).forEach((child) => {
101
+ below.add(child.id);
102
+ collect(child.id);
103
+ });
104
+ collect(node.id);
105
+ onChange([...selected.filter((id) => !below.has(id)), node.id]);
106
+ }
107
+ else {
108
+ onChange(selected.filter((id) => id !== node.id));
109
+ }
110
+ };
111
+ const renderNode = (node, depth, includedByAncestor) => {
112
+ if (visible && !visible.has(node.id))
113
+ return null;
114
+ const children = tree.children.get(node.id) ?? [];
115
+ const isFolder = children.length > 0;
116
+ const isOpen = visible !== null || expanded.has(node.id);
117
+ const isChecked = includedByAncestor || selectedSet.has(node.id);
118
+ const selectable = !includedByAncestor && isSelectable(node);
119
+ const label = node.displayName || node.name;
120
+ return (_jsxs("li", { children: [_jsxs("div", { className: "hover:bg-neutral-grey-5 flex items-center gap-2 rounded py-0.5 pr-2", style: { paddingLeft: depth * 16 }, "data-testid": `${testId}-node`, "data-tool-id": node.id, children: [isFolder ? (_jsx("button", { type: "button", className: "text-neutral-grey-50 hover:text-neutral-grey-100 flex h-4 w-4 items-center justify-center", "aria-label": isOpen ? `Collapse ${label}` : `Expand ${label}`, onClick: () => setExpanded((current) => {
121
+ const next = new Set(current);
122
+ if (next.has(node.id))
123
+ next.delete(node.id);
124
+ else
125
+ next.add(node.id);
126
+ return next;
127
+ }), children: isOpen ? _jsx(ChevronDown, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }) : _jsx(ChevronRight, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }) })) : (_jsx("span", { className: "h-4 w-4" })), _jsx(Checkbox, { checked: isChecked, disabled: !selectable, onCheckedChange: (value) => toggle(node, value === true), "aria-label": label }), isFolder && _jsx(Folder, { className: "text-neutral-grey-50 h-3.5 w-3.5 shrink-0", strokeWidth: 1.5 }), _jsx("span", { className: cn("truncate text-xs", !selectable && !isChecked && "text-neutral-grey-50"), children: label }), node.functionName && node.functionName !== node.name && (_jsx("span", { className: "text-neutral-grey-50 truncate font-mono text-[10px]", children: node.functionName })), node.hiddenFromMcp && (_jsx(Badge, { variant: "secondary", className: "ml-auto shrink-0", children: "hidden from MCP" }))] }), isFolder && isOpen && (_jsx("ul", { children: children.map((child) => renderNode(child, depth + 1, isChecked)) }))] }, node.id));
128
+ };
129
+ const roots = tree.children.get(null) ?? [];
130
+ return (_jsx("ul", { className: "border-border-default max-h-80 overflow-y-auto rounded border p-1", "data-testid": testId, children: roots.length === 0 ? (_jsx("li", { className: "text-neutral-grey-50 p-2 text-xs", children: "No tools found." })) : (roots.map((root) => renderNode(root, 0, false))) }));
131
+ }
132
+ function effectiveToolCount(tree, selected) {
133
+ const names = new Set();
134
+ selected.forEach((id) => descendantTools(tree, id)
135
+ .filter((tool) => !tool.hiddenFromMcp)
136
+ .forEach((tool) => names.add(tool.name)));
137
+ return names.size;
138
+ }
139
+ function RoleList({ roles, availableRoles, onChange, }) {
140
+ const [custom, setCustom] = useState("");
141
+ const add = (role) => {
142
+ const trimmed = role.trim();
143
+ if (!trimmed || roles.some((r) => r.toLowerCase() === trimmed.toLowerCase()))
144
+ return;
145
+ onChange([...cleanLines(roles), trimmed]);
146
+ };
147
+ const options = availableRoles
148
+ .filter((role) => !roles.some((r) => r.toLowerCase() === role.toLowerCase()))
149
+ .map((role) => ({ value: role, label: role }));
150
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "flex flex-wrap gap-1.5", "data-testid": "mcp-settings-roles", children: cleanLines(roles).length === 0 ? (_jsx("span", { className: "text-feedback-orange text-xs", children: "No role yet, so only administrators can connect." })) : (cleanLines(roles).map((role) => (_jsxs("span", { className: "bg-neutral-grey-5 border-border-default inline-flex items-center gap-1 rounded border py-0.5 pr-1 pl-2 text-xs", children: [role, _jsx("button", { type: "button", className: "text-neutral-grey-50 hover:text-neutral-grey-100", "aria-label": `Remove ${role}`, onClick: () => onChange(roles.filter((r) => r !== role)), children: _jsx(X, { className: "h-3 w-3", strokeWidth: 1.5 }) })] }, role)))) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [options.length > 0 && (_jsx(Select, { options: options, value: "", onValueChange: add, placeholder: "Add a role", className: "w-64", searchable: true, searchPlaceholder: "Search roles", "data-testid": "mcp-settings-role-select" })), _jsxs("form", { className: "flex items-center gap-2", onSubmit: (event) => {
151
+ event.preventDefault();
152
+ add(custom);
153
+ setCustom("");
154
+ }, children: [_jsx(Input, { value: custom, onChange: (event) => setCustom(event.target.value), placeholder: "sitecore\\Role name", "aria-label": "Role name", className: "h-8 w-48 text-xs md:text-xs" }), _jsx(Button, { type: "submit", size: "sm", variant: "outline", disabled: !custom.trim(), children: "Add" })] })] })] }));
155
+ }
156
+ function SkillList({ skills, selected, onChange, }) {
157
+ if (skills.length === 0)
158
+ return _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "No agent skills found." });
159
+ const selectedSet = new Set(selected);
160
+ return (_jsx("ul", { className: "border-border-default max-h-60 overflow-y-auto rounded border p-1", "data-testid": "mcp-settings-skills", children: skills.map((skill) => (_jsxs("li", { className: "hover:bg-neutral-grey-5 flex items-start gap-2 rounded px-2 py-1", children: [_jsx(Checkbox, { className: "mt-0.5", checked: selectedSet.has(skill.id), onCheckedChange: (value) => onChange(value === true ? [...selected, skill.id] : selected.filter((id) => id !== skill.id)), "aria-label": skill.name }), _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx("span", { className: "truncate", children: skill.name }), skill.disabled && _jsx(Badge, { variant: "secondary", children: "disabled" })] }), skill.description && _jsx("div", { className: "text-neutral-grey-50 truncate text-xs", children: skill.description })] })] }, skill.id))) }));
161
+ }
162
+ /**
163
+ * Administrator form for the "MCP Access" settings item: server address, who may connect, which
164
+ * tools clients see, consent defaults, OAuth and limits. Saves all fields in one request.
165
+ */
166
+ export function McpAccessSettingsView({ onSaved }) {
167
+ const [data, setData] = useState(null);
168
+ const [draft, setDraft] = useState(null);
169
+ const [loadError, setLoadError] = useState(null);
170
+ const [saveError, setSaveError] = useState(null);
171
+ const [saving, setSaving] = useState(false);
172
+ const [toolFilter, setToolFilter] = useState("");
173
+ const load = useCallback(async () => {
174
+ setLoadError(null);
175
+ try {
176
+ const response = await mcpAccessService.getSettings();
177
+ setData(response);
178
+ setDraft(response.settings);
179
+ }
180
+ catch (e) {
181
+ setLoadError(getErrorMessage(e, "Failed to load the MCP settings"));
182
+ }
183
+ }, []);
184
+ useEffect(() => {
185
+ void load();
186
+ }, [load]);
187
+ const tree = useMemo(() => buildToolTree(data?.options?.tools ?? []), [data]);
188
+ if (loadError) {
189
+ return (_jsx(SettingsPanelLayout, { children: _jsxs("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red flex items-start gap-2 rounded border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { children: loadError })] }) }));
190
+ }
191
+ if (!data || !draft) {
192
+ return _jsx(LoadingState, { variant: "inline", className: "justify-center py-8", spinnerClassName: "text-neutral-grey-50", spinnerSize: "lg" });
193
+ }
194
+ const saved = data.settings;
195
+ const dirty = !sameForm(draft, saved);
196
+ const set = (key, value) => setDraft((current) => (current ? { ...current, [key]: value } : current));
197
+ const save = async () => {
198
+ setSaving(true);
199
+ setSaveError(null);
200
+ try {
201
+ const next = await mcpAccessService.saveSettings(normalize(draft));
202
+ setData((current) => (current ? { ...current, settings: next } : current));
203
+ setDraft(next);
204
+ toast.success("MCP settings saved.");
205
+ onSaved();
206
+ }
207
+ catch (e) {
208
+ setSaveError(getErrorMessage(e, "Failed to save the MCP settings"));
209
+ }
210
+ finally {
211
+ setSaving(false);
212
+ }
213
+ };
214
+ const suggestedUrl = data.suggestedPublicBaseUrl ?? "";
215
+ const skills = data.options?.skills ?? [];
216
+ const toolCount = effectiveToolCount(tree, draft.toolIds);
217
+ const readOnlyCount = new Set(draft.readOnlyToolIds.flatMap((id) => descendantTools(tree, id).filter((tool) => tool.verifiedRead).map((tool) => tool.name))).size;
218
+ return (_jsxs(SettingsPanelLayout, { testId: "mcp-access-settings", contentClassName: "flex flex-col gap-4", children: [_jsxs("div", { className: cn("border-border-default bg-background sticky top-0 z-10 flex flex-wrap items-center gap-3 rounded border px-4 py-2", dirty && "border-highlight-100"), children: [_jsxs("div", { className: "text-neutral-grey-50 min-w-0 flex-1 text-xs", children: [dirty ? "You have unsaved changes." : "All changes saved.", data.itemPath && _jsx("span", { className: "ml-2 font-mono", children: data.itemPath })] }), _jsx(Button, { size: "sm", variant: "outline", disabled: !dirty || saving, onClick: () => setDraft(saved), "data-testid": "mcp-settings-discard", children: "Discard" }), _jsx(Button, { size: "sm", disabled: !dirty || saving, onClick: () => void save(), "data-testid": "mcp-settings-save", children: saving ? "Saving…" : "Save" }), saveError && (_jsx("div", { className: "text-feedback-red w-full text-xs", role: "alert", "data-testid": "mcp-settings-error", children: saveError }))] }), _jsx(Card, { icon: _jsx(Globe, { strokeWidth: 1 }), title: "Server", description: "Whether the MCP server runs, and the address clients use to reach it.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(SwitchRow, { label: "Enabled", description: "Turns the MCP server on. It also needs the signing secret and at least one allowed role.", checked: draft.enabled, onChange: (value) => set("enabled", value), testId: "mcp-settings-enabled" }), _jsxs(FieldBlock, { label: "Public Base Url", description: "The public origin of this CM, e.g. https://cm.example.com. Required unless the server is only used on localhost.", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Input, { value: draft.publicBaseUrl, onChange: (event) => set("publicBaseUrl", event.target.value), placeholder: "https://cm.example.com", "aria-label": "Public Base Url", className: "h-8 min-w-64 flex-1 text-xs md:text-xs", "data-testid": "mcp-settings-public-base-url" }), suggestedUrl && draft.publicBaseUrl.trim() !== suggestedUrl && (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => set("publicBaseUrl", suggestedUrl), "data-testid": "mcp-settings-use-current-url", children: ["Use ", suggestedUrl] }))] }), !draft.publicBaseUrl.trim() && (_jsx("div", { className: "text-feedback-orange text-xs", children: "Empty: MCP clients can only connect on localhost." }))] }), _jsx(FieldBlock, { label: "Allowed Origins", description: "Browser origins allowed to call the MCP endpoint, one per line. Desktop clients need none.", children: _jsx(Textarea, { value: draft.allowedOrigins.join("\n"), onChange: (event) => set("allowedOrigins", event.target.value.split("\n")), placeholder: "https://claude.ai", className: "font-mono text-xs", "data-testid": "mcp-settings-allowed-origins" }) }), _jsx(FieldBlock, { label: "Instructions", description: "Sent to MCP clients when they connect. At most 4 KB.", children: _jsx(Textarea, { value: draft.instructions, onChange: (event) => set("instructions", event.target.value), className: "text-xs", "data-testid": "mcp-settings-instructions" }) })] }) }), _jsx(Card, { icon: _jsx(Users, { strokeWidth: 1 }), title: "Who can connect", description: "Users need one of these roles; administrators can always connect. Clients act with the user's own Sitecore permissions.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(RoleList, { roles: draft.allowedRoles, availableRoles: data.options?.roles ?? [], onChange: (roles) => set("allowedRoles", roles) }), _jsx(SwitchRow, { label: "Exclude preview and demo users", description: "Sandbox, preview and demo accounts cannot connect even when they have an allowed role.", checked: draft.excludePreviewAndDemoUsers, onChange: (value) => set("excludePreviewAndDemoUsers", value), testId: "mcp-settings-exclude-demo" })] }) }), _jsx(Card, { icon: _jsx(Wrench, { strokeWidth: 1 }), title: "Tools", description: "What MCP clients may call. A folder includes every tool below it, also ones added later.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(SearchInput, { value: toolFilter, onChange: setToolFilter, placeholder: "Filter tools", testId: "mcp-settings-tool-filter" }), _jsx(FieldBlock, { label: "Tools", description: `${toolCount} tool${toolCount === 1 ? "" : "s"} selected. Tools the MCP policy refuses are never exposed.`, children: _jsx(ToolTreeSelect, { tree: tree, selected: draft.toolIds, onChange: (ids) => set("toolIds", ids), filter: toolFilter, testId: "mcp-settings-tools" }) }), _jsx(FieldBlock, { label: "Read-only tools", description: `${readOnlyCount} verified read tool${readOnlyCount === 1 ? "" : "s"}. These count as reads, so clients with only the read scope may call them.`, children: _jsx(ToolTreeSelect, { tree: tree, selected: draft.readOnlyToolIds, onChange: (ids) => set("readOnlyToolIds", ids), filter: toolFilter, isSelectable: (node) => descendantTools(tree, node.id).some((tool) => tool.verifiedRead), testId: "mcp-settings-readonly-tools" }) }), _jsx(FieldBlock, { label: "Allowed skills", description: "Skills add their tools to the selection above (only when it is not empty).", children: _jsx(SkillList, { skills: skills, selected: draft.allowedSkillIds, onChange: (ids) => set("allowedSkillIds", ids) }) }), _jsx(SwitchRow, { label: "Allow changes (write scope)", description: "Clients may request permission to change content.", checked: draft.writeScopeEnabled, onChange: (value) => set("writeScopeEnabled", value), testId: "mcp-settings-write-scope" }), _jsx(SwitchRow, { label: "Allow agents (agents scope)", description: "Clients may start Parhelia agents, which cost AI budget.", checked: draft.agentsScopeEnabled, onChange: (value) => set("agentsScopeEnabled", value), testId: "mcp-settings-agents-scope" })] }) }), _jsx(Card, { icon: _jsx(ListChecks, { strokeWidth: 1 }), title: "Approval defaults", description: "What is pre-selected on the approval page when a user connects a client.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(SwitchRow, { label: "Read", checked: draft.readChecked, onChange: (value) => set("readChecked", value), testId: "mcp-settings-read-checked" }), _jsx(SwitchRow, { label: "Change", checked: draft.writeChecked, onChange: (value) => set("writeChecked", value), testId: "mcp-settings-write-checked" }), _jsx(SwitchRow, { label: "Agents", checked: draft.agentsChecked, onChange: (value) => set("agentsChecked", value), testId: "mcp-settings-agents-checked" }), _jsx(SwitchRow, { label: "Ask before changes", description: "The client asks the user before each change.", checked: draft.askBeforeWritesDefault, onChange: (value) => set("askBeforeWritesDefault", value), testId: "mcp-settings-ask-before-writes" })] }) }), _jsx(Card, { icon: _jsx(ShieldCheck, { strokeWidth: 1 }), title: "Sign-in", description: "How MCP clients register and how long their tokens last.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(SwitchRow, { label: "Client ID metadata documents (CIMD)", description: "Clients identify themselves with a URL. Claude Code uses this.", checked: draft.cimdEnabled, onChange: (value) => set("cimdEnabled", value), testId: "mcp-settings-cimd" }), _jsx(SwitchRow, { label: "Dynamic client registration (DCR)", description: "Clients may register themselves. Off unless a client needs it.", checked: draft.dcrEnabled, onChange: (value) => set("dcrEnabled", value), testId: "mcp-settings-dcr" }), _jsx(NumberInput, { label: "Access token lifetime (minutes)", value: draft.accessTokenLifetimeMinutes, onChange: (value) => set("accessTokenLifetimeMinutes", value), min: 5, max: 1440, testId: "mcp-settings-access-token-minutes" }), _jsx(NumberInput, { label: "Refresh token lifetime (days)", value: draft.refreshTokenLifetimeDays, onChange: (value) => set("refreshTokenLifetimeDays", value), min: 1, max: 365, testId: "mcp-settings-refresh-token-days" }), _jsx(FieldBlock, { label: "Signing secret connection string", description: "Name of the connection string that holds the signing secret (at least 16 characters). The secret itself never goes into an item.", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Input, { value: draft.signingSecretConnectionStringName, onChange: (event) => set("signingSecretConnectionStringName", event.target.value), "aria-label": "Signing secret connection string", className: "h-8 flex-1 font-mono text-xs md:text-xs", "data-testid": "mcp-settings-secret-name" }), _jsxs(Badge, { variant: saved.signingSecretFound ? "default" : "destructive", "data-testid": "mcp-settings-secret-status", children: [_jsx(KeyRound, { className: "h-3 w-3", strokeWidth: 1.5 }), saved.signingSecretFound ? "found" : "missing"] })] }) })] }) }), _jsx(Card, { icon: _jsx(Gauge, { strokeWidth: 1 }), title: "Limits", description: "Rate and cost limits that protect the CM.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(NumberInput, { label: "Max agent cost limit", description: "Highest cost limit a client may set for an agent it starts.", value: draft.maxAgentCostLimit, onChange: (value) => set("maxAgentCostLimit", value), min: 0, max: 1000, step: 0.5, testId: "mcp-settings-max-cost" }), _jsx(NumberInput, { label: "Requests per minute per connection", value: draft.requestsPerMinutePerGrant, onChange: (value) => set("requestsPerMinutePerGrant", value), min: 1, max: 6000, testId: "mcp-settings-rpm" }), _jsx(NumberInput, { label: "Status polls per minute per connection", value: draft.statusPollsPerMinutePerGrant, onChange: (value) => set("statusPollsPerMinutePerGrant", value), min: 1, max: 600, testId: "mcp-settings-status-polls" }), _jsx(NumberInput, { label: "Anonymous requests per minute", description: "For all unauthenticated requests together (sign-in, discovery).", value: draft.globalAnonymousRequestsPerMinute, onChange: (value) => set("globalAnonymousRequestsPerMinute", value), min: 1, max: 60000, testId: "mcp-settings-anonymous-rpm" }), _jsx(NumberInput, { label: "Max dynamic clients", value: draft.maxDynamicClients, onChange: (value) => set("maxDynamicClients", value), min: 0, max: 100000, testId: "mcp-settings-max-dynamic-clients" })] }) })] }));
219
+ }
220
+ export default McpAccessSettingsView;
221
+ //# sourceMappingURL=McpAccessSettingsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpAccessSettingsView.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/McpAccessSettingsView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SpellCheckDictionaryStatus } from "../../spellcheck/spellCheckTypes";
2
+ /**
3
+ * Mirrors the server's language → dictionary resolution so the panel can show
4
+ * which site languages a dictionary serves.
5
+ */
6
+ export declare function resolveDictionaryIdForLanguage(language: string, dictionaries: Pick<SpellCheckDictionaryStatus, "id" | "language" | "isDefaultForLanguage">[]): string | undefined;
7
+ export declare function SpellCheckPanel(): import("react").JSX.Element;
8
+ export default SpellCheckPanel;
@@ -0,0 +1,253 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { BookOpen, Download, HardDriveDownload, RefreshCw, SpellCheck } from "lucide-react";
4
+ import { toast } from "sonner";
5
+ import { Badge } from "../../../components/ui/badge";
6
+ import { Button } from "../../../components/ui/button";
7
+ import { DeleteButton } from "../../../components/ui/delete-button";
8
+ import { Input } from "../../../components/ui/input";
9
+ import { Select } from "../../../components/ui/select";
10
+ import { SearchInput } from "../../../components/SearchInput";
11
+ import { useEditContext } from "../../client/editContext";
12
+ import { getLanguages } from "../../services/contentService";
13
+ import { addCustomWord, downloadDictionary, getCustomWords, getSpellCheckStatus, reloadDictionaries, removeCustomWord, } from "../../services/spellCheckService";
14
+ import { spellCheckClient } from "../../spellcheck/spellCheckClient";
15
+ import { SimpleTable } from "../../ui/SimpleTable";
16
+ import { SettingsCard } from "../SettingsCard";
17
+ import { useRequiredSettingsHeaderActions } from "../SettingsHeaderActionsContext";
18
+ import { SettingsPanelLayout } from "../SettingsPanelLayout";
19
+ const POLL_INTERVAL_MS = 5_000;
20
+ /**
21
+ * Mirrors the server's language → dictionary resolution so the panel can show
22
+ * which site languages a dictionary serves.
23
+ */
24
+ export function resolveDictionaryIdForLanguage(language, dictionaries) {
25
+ const parts = language.trim().replace(/_/g, "-").split("-").filter(Boolean);
26
+ if (parts.length === 0)
27
+ return undefined;
28
+ const code = parts[0].toLowerCase();
29
+ const last = parts[parts.length - 1];
30
+ if (parts.length > 1 && /^[A-Za-z]{2}$/.test(last)) {
31
+ const exact = dictionaries.find((d) => d.id.toLowerCase() === `${code}_${last.toLowerCase()}`);
32
+ if (exact)
33
+ return exact.id;
34
+ }
35
+ return dictionaries.find((d) => d.isDefaultForLanguage && d.language === code)?.id;
36
+ }
37
+ const STATUS_LABELS = {
38
+ available: "Ready",
39
+ downloading: "Downloading",
40
+ missing: "Not downloaded",
41
+ failed: "Failed",
42
+ disabled: "Disabled",
43
+ unsupported: "Unsupported",
44
+ };
45
+ function statusVariant(status) {
46
+ switch (status) {
47
+ case "available":
48
+ return "default";
49
+ case "failed":
50
+ return "destructive";
51
+ case "downloading":
52
+ return "outline";
53
+ default:
54
+ return "secondary";
55
+ }
56
+ }
57
+ function formatDate(value) {
58
+ if (!value)
59
+ return "";
60
+ const date = new Date(value);
61
+ return Number.isNaN(date.getTime()) ? "" : date.toLocaleString();
62
+ }
63
+ export function SpellCheckPanel() {
64
+ const editContext = useEditContext();
65
+ const isAdmin = editContext?.userInfo?.user?.isAdministrator ?? false;
66
+ const setHeaderActions = useRequiredSettingsHeaderActions();
67
+ const [status, setStatus] = useState();
68
+ const [languages, setLanguages] = useState([]);
69
+ const [error, setError] = useState();
70
+ const [busy, setBusy] = useState([]);
71
+ const [reloading, setReloading] = useState(false);
72
+ const [selectedDictionary, setSelectedDictionary] = useState();
73
+ const [words, setWords] = useState([]);
74
+ const [wordsLoading, setWordsLoading] = useState(false);
75
+ const [filter, setFilter] = useState("");
76
+ const [newWord, setNewWord] = useState("");
77
+ const [adding, setAdding] = useState(false);
78
+ const load = useCallback(async () => {
79
+ setError(undefined);
80
+ const [statusResult, languagesResult] = await Promise.all([
81
+ getSpellCheckStatus(),
82
+ getLanguages(),
83
+ ]);
84
+ if (statusResult.type === "success" && statusResult.data) {
85
+ setStatus(statusResult.data);
86
+ }
87
+ else {
88
+ setError(statusResult.summary || statusResult.details || "Failed to load the spell-check status.");
89
+ }
90
+ if (languagesResult.type === "success" && languagesResult.data) {
91
+ setLanguages(languagesResult.data);
92
+ }
93
+ }, []);
94
+ useEffect(() => {
95
+ void load();
96
+ }, [load]);
97
+ const dictionaries = useMemo(() => status?.dictionaries ?? [], [status]);
98
+ const downloading = dictionaries.some((d) => d.status === "downloading");
99
+ // Poll while a download is in progress so the row flips to Ready by itself.
100
+ useEffect(() => {
101
+ if (!downloading)
102
+ return;
103
+ const timer = window.setInterval(() => void load(), POLL_INTERVAL_MS);
104
+ return () => window.clearInterval(timer);
105
+ }, [downloading, load]);
106
+ const languagesByDictionary = useMemo(() => {
107
+ const map = new Map();
108
+ languages.forEach((language) => {
109
+ const id = resolveDictionaryIdForLanguage(language.name, dictionaries);
110
+ if (!id)
111
+ return;
112
+ map.set(id, [...(map.get(id) ?? []), language.name]);
113
+ });
114
+ return map;
115
+ }, [languages, dictionaries]);
116
+ const dictionaryOptions = useMemo(() => dictionaries.map((dictionary) => ({
117
+ value: dictionary.id,
118
+ label: dictionary.id.replace("_", "-"),
119
+ description: (languagesByDictionary.get(dictionary.id) ?? []).join(", ") || undefined,
120
+ })), [dictionaries, languagesByDictionary]);
121
+ useEffect(() => {
122
+ if (selectedDictionary || dictionaries.length === 0)
123
+ return;
124
+ const preferred = dictionaries.find((d) => (languagesByDictionary.get(d.id) ?? []).length > 0) ??
125
+ dictionaries[0];
126
+ setSelectedDictionary(preferred?.id);
127
+ }, [dictionaries, languagesByDictionary, selectedDictionary]);
128
+ const loadWords = useCallback(async (dictionaryId) => {
129
+ setWordsLoading(true);
130
+ const result = await getCustomWords(dictionaryId);
131
+ setWordsLoading(false);
132
+ if (result.type === "success" && result.data) {
133
+ setWords(result.data.words);
134
+ }
135
+ else {
136
+ toast.error(result.summary || "Failed to load the custom words.");
137
+ }
138
+ }, []);
139
+ useEffect(() => {
140
+ if (selectedDictionary)
141
+ void loadWords(selectedDictionary);
142
+ }, [selectedDictionary, loadWords]);
143
+ const download = async (dictionary, force) => {
144
+ setBusy((current) => [...current, dictionary.id]);
145
+ const result = await downloadDictionary(dictionary.id, force);
146
+ setBusy((current) => current.filter((id) => id !== dictionary.id));
147
+ if (result.type === "success" && result.data) {
148
+ if (result.data.status === "available") {
149
+ toast.success(`Dictionary ${dictionary.id} is ready.`);
150
+ }
151
+ else {
152
+ toast.error(result.data.lastError || `Dictionary ${dictionary.id} is ${STATUS_LABELS[result.data.status]}.`);
153
+ }
154
+ spellCheckClient.invalidateDictionary(dictionary.id);
155
+ }
156
+ else {
157
+ toast.error(result.summary || `Could not download ${dictionary.id}.`);
158
+ }
159
+ await load();
160
+ };
161
+ const reload = async () => {
162
+ setReloading(true);
163
+ const result = await reloadDictionaries();
164
+ setReloading(false);
165
+ if (result.type === "success" && result.data) {
166
+ setStatus(result.data);
167
+ result.data.dictionaries.forEach((d) => spellCheckClient.invalidateDictionary(d.id));
168
+ toast.success("Dictionaries reloaded from disk.");
169
+ }
170
+ else {
171
+ toast.error(result.summary || "Could not reload the dictionaries.");
172
+ }
173
+ };
174
+ const addWord = async () => {
175
+ if (!selectedDictionary || !newWord.trim())
176
+ return;
177
+ setAdding(true);
178
+ const result = await addCustomWord(selectedDictionary, newWord.trim());
179
+ setAdding(false);
180
+ const response = result.type === "success" ? result.data : undefined;
181
+ if (response?.success) {
182
+ toast.success(`"${response.word ?? newWord.trim()}" was added.`);
183
+ setNewWord("");
184
+ spellCheckClient.invalidateDictionary(response.dictionaryId ?? selectedDictionary);
185
+ await Promise.all([loadWords(selectedDictionary), load()]);
186
+ }
187
+ else {
188
+ toast.error(response?.message ?? result.summary ?? "The word could not be added.");
189
+ }
190
+ };
191
+ const removeWord = async (word) => {
192
+ if (!selectedDictionary)
193
+ return;
194
+ const result = await removeCustomWord(selectedDictionary, word.word);
195
+ const response = result.type === "success" ? result.data : undefined;
196
+ if (response?.success) {
197
+ spellCheckClient.invalidateDictionary(response.dictionaryId ?? selectedDictionary);
198
+ await Promise.all([loadWords(selectedDictionary), load()]);
199
+ }
200
+ else {
201
+ toast.error(response?.message ?? result.summary ?? "The word could not be removed.");
202
+ }
203
+ };
204
+ const headerActions = useMemo(() => (_jsxs("div", { className: "flex items-center gap-2", children: [isAdmin && (_jsxs(Button, { size: "sm", variant: "outline", "data-testid": "spell-check-reload", disabled: reloading, onClick: () => void reload(), children: [_jsx(HardDriveDownload, { className: "h-4 w-4", strokeWidth: 1 }), "Reload from disk"] })), _jsxs(Button, { size: "sm", variant: "outline", "data-testid": "spell-check-refresh", onClick: () => void load(), children: [_jsx(RefreshCw, { className: "h-4 w-4", strokeWidth: 1 }), "Refresh"] })] })),
205
+ // eslint-disable-next-line react-hooks/exhaustive-deps
206
+ [isAdmin, reloading, load]);
207
+ useEffect(() => {
208
+ setHeaderActions(headerActions);
209
+ return () => setHeaderActions(null);
210
+ }, [headerActions, setHeaderActions]);
211
+ const filteredWords = useMemo(() => {
212
+ const needle = filter.trim().toLowerCase();
213
+ return needle ? words.filter((w) => w.word.toLowerCase().includes(needle)) : words;
214
+ }, [words, filter]);
215
+ return (_jsxs(SettingsPanelLayout, { testId: "spell-check-panel", contentClassName: "flex flex-col gap-4", children: [_jsxs(SettingsCard, { icon: _jsx(SpellCheck, { strokeWidth: 1, className: "h-5 w-5" }), title: "Dictionaries", description: "Hunspell dictionaries are downloaded on demand into the data folder and keep their own license files. They are never part of the Parhelia package.", children: [status && !status.enabled && (_jsx("div", { className: "text-feedback-orange mb-3 text-xs", children: "Spell checking is disabled by configuration (Parhelia.SpellCheck.Enabled)." })), status && (_jsxs("div", { className: "text-neutral-grey-50 mb-3 text-xs", children: ["Source: ", status.dictionaryBaseUrl ?? "downloads disabled", status.dictionaryFolder ? ` · Folder: ${status.dictionaryFolder}` : ""] })), error && (_jsx("div", { className: "text-feedback-red mb-3 text-xs", role: "alert", children: error })), _jsx(SimpleTable, { "data-testid": "spell-check-dictionaries", items: dictionaries, rowKey: (d) => d.id, rowTestId: (d) => `spell-check-dictionary-${d.id}`, columns: [
216
+ {
217
+ header: "Dictionary",
218
+ body: (d) => (_jsxs("div", { children: [_jsx("div", { className: "text-neutral-grey-100 text-xs font-medium", children: d.id.replace("_", "-") }), _jsx("div", { className: "text-neutral-grey-50 text-2xs", children: (languagesByDictionary.get(d.id) ?? []).join(", ") || "not used by a site language" })] })),
219
+ },
220
+ {
221
+ header: "Status",
222
+ body: (d) => (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Badge, { variant: statusVariant(d.status), "data-testid": `spell-check-status-${d.id}`, children: STATUS_LABELS[d.status] }), d.status === "failed" && d.lastError && (_jsx("span", { className: "text-feedback-red text-2xs", title: d.lastError, children: d.lastError }))] })),
223
+ },
224
+ {
225
+ header: "Installed",
226
+ body: (d) => d.installId ? (_jsxs("div", { className: "text-neutral-grey-50 text-2xs", children: [_jsx("div", { children: formatDate(d.downloadedUtc) }), _jsxs("div", { title: d.installId, children: ["ref ", d.sourceRef?.slice(0, 10) ?? "?"] })] })) : null,
227
+ },
228
+ {
229
+ header: "Custom words",
230
+ align: "right",
231
+ body: (d) => _jsx("span", { className: "text-xs", children: d.customWordCount }),
232
+ },
233
+ {
234
+ header: "",
235
+ align: "right",
236
+ body: (d) => isAdmin ? (_jsxs(Button, { size: "xs", variant: "outline", "data-testid": `spell-check-download-${d.id}`, disabled: busy.includes(d.id) || d.status === "downloading" || !status?.dictionaryBaseUrl, onClick: () => void download(d, d.status === "available"), children: [_jsx(Download, { className: "h-3 w-3", strokeWidth: 1 }), d.status === "available" ? "Update" : d.status === "failed" ? "Retry" : "Download"] })) : null,
237
+ },
238
+ ] })] }), _jsxs(SettingsCard, { icon: _jsx(BookOpen, { strokeWidth: 1, className: "h-5 w-5" }), title: "Custom words", description: "Words every editor may use without being flagged, shared by everyone and kept per dictionary.", children: [_jsxs("div", { className: "mb-3 flex flex-wrap items-center gap-2", children: [_jsx(Select, { "data-testid": "spell-check-words-dictionary", value: selectedDictionary, onValueChange: setSelectedDictionary, options: dictionaryOptions, placeholder: "Dictionary", size: "sm" }), _jsx(SearchInput, { value: filter, onValueChange: setFilter, placeholder: "Filter words", "data-testid": "spell-check-words-filter" }), _jsxs("form", { className: "ml-auto flex items-center gap-2", onSubmit: (event) => {
239
+ event.preventDefault();
240
+ void addWord();
241
+ }, children: [_jsx(Input, { "aria-label": "New word", "data-testid": "spell-check-new-word", className: "h-8 w-48 text-xs", value: newWord, placeholder: "Add a word", spellCheck: false, onChange: (event) => setNewWord(event.target.value) }), _jsx(Button, { size: "sm", type: "submit", disabled: adding || !newWord.trim() || !selectedDictionary, "data-testid": "spell-check-add-word", children: "Add" })] })] }), wordsLoading && words.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 py-4 text-xs", children: "Loading words\u2026" })) : filteredWords.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 py-4 text-xs", "data-testid": "spell-check-words-empty", children: "No custom words yet." })) : (_jsx(SimpleTable, { "data-testid": "spell-check-words", items: filteredWords, rowKey: (w) => w.word, rowTestId: (w) => `spell-check-word-${w.word}`, columns: [
242
+ { header: "Word", body: (w) => _jsx("span", { className: "text-xs font-medium", children: w.word }) },
243
+ { header: "Added", body: (w) => _jsx("span", { className: "text-neutral-grey-50 text-2xs", children: formatDate(w.created) }) },
244
+ { header: "By", body: (w) => _jsx("span", { className: "text-neutral-grey-50 text-2xs", children: w.createdBy }) },
245
+ {
246
+ header: "",
247
+ align: "right",
248
+ body: (w) => isAdmin ? (_jsx(DeleteButton, { label: `Remove ${w.word}`, "data-testid": `spell-check-remove-${w.word}`, onClick: () => void removeWord(w) })) : null,
249
+ },
250
+ ] }))] })] }));
251
+ }
252
+ export default SpellCheckPanel;
253
+ //# sourceMappingURL=SpellCheckPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpellCheckPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/SpellCheckPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The feedback sidebar: pick a root item and see every comment and suggestion
3
+ * on the items beneath it, grouped per item, with a click taking you to the
4
+ * item and the thread in the comment margin. The workbox sidebar is the model
5
+ * for the root picker; the threads follow the margin's filters.
6
+ */
7
+ export declare function FeedbackSidebar(): import("react").JSX.Element | null;