@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.
- package/dist/components/emoji/EmojiPicker.d.ts +18 -0
- package/dist/components/emoji/EmojiPicker.js +102 -0
- package/dist/components/emoji/EmojiPicker.js.map +1 -0
- package/dist/components/emoji/EmojiText.d.ts +19 -0
- package/dist/components/emoji/EmojiText.js +30 -0
- package/dist/components/emoji/EmojiText.js.map +1 -0
- package/dist/components/emoji/emojiData.generated.d.ts +2 -0
- package/dist/components/emoji/emojiData.generated.js +1878 -0
- package/dist/components/emoji/emojiData.generated.js.map +1 -0
- package/dist/components/emoji/emojiIndex.d.ts +46 -0
- package/dist/components/emoji/emojiIndex.js +173 -0
- package/dist/components/emoji/emojiIndex.js.map +1 -0
- package/dist/components/emoji/emoticons.d.ts +21 -0
- package/dist/components/emoji/emoticons.js +167 -0
- package/dist/components/emoji/emoticons.js.map +1 -0
- package/dist/components/emoji/textareaInsert.d.ts +19 -0
- package/dist/components/emoji/textareaInsert.js +29 -0
- package/dist/components/emoji/textareaInsert.js.map +1 -0
- package/dist/components/emoji/twemoji.d.ts +30 -0
- package/dist/components/emoji/twemoji.js +84 -0
- package/dist/components/emoji/twemoji.js.map +1 -0
- package/dist/editor/agent-changes/agentChangeTargets.js +6 -0
- package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -1
- package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +48 -4
- package/dist/editor/agent-changes/agentChangeTextHighlight.js +67 -9
- package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -1
- package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
- package/dist/editor/ai/AgentImagePreview.js +41 -0
- package/dist/editor/ai/AgentImagePreview.js.map +1 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +1 -1
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +1 -2
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.d.ts +6 -0
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js +61 -0
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js.map +1 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.d.ts +34 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.js +218 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.js.map +1 -0
- package/dist/editor/bridge/linkDownload.d.ts +3 -0
- package/dist/editor/bridge/linkDownload.js +52 -0
- package/dist/editor/bridge/linkDownload.js.map +1 -0
- package/dist/editor/client/clipboardStorage.d.ts +10 -0
- package/dist/editor/client/clipboardStorage.js +57 -0
- package/dist/editor/client/clipboardStorage.js.map +1 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.d.ts +4 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.js +62 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.js.map +1 -0
- package/dist/editor/client/liveEditState.d.ts +16 -0
- package/dist/editor/client/liveEditState.js +25 -0
- package/dist/editor/client/liveEditState.js.map +1 -0
- package/dist/editor/client/liveSessionState.d.ts +6 -0
- package/dist/editor/client/liveSessionState.js +20 -0
- package/dist/editor/client/liveSessionState.js.map +1 -0
- package/dist/editor/client/valueStore.d.ts +22 -0
- package/dist/editor/client/valueStore.js +29 -0
- package/dist/editor/client/valueStore.js.map +1 -0
- package/dist/editor/commands/componentClipboardCommands.d.ts +35 -0
- package/dist/editor/commands/componentClipboardCommands.js +271 -0
- package/dist/editor/commands/componentClipboardCommands.js.map +1 -0
- package/dist/editor/commands/componentMenuGroups.d.ts +2 -0
- package/dist/editor/commands/componentMenuGroups.js +43 -0
- package/dist/editor/commands/componentMenuGroups.js.map +1 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.d.ts +12 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.js +40 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.js.map +1 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.d.ts +17 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.js +80 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.js.map +1 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.d.ts +28 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.js +633 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.js.map +1 -0
- package/dist/editor/component-conversion/conversionModel.d.ts +109 -0
- package/dist/editor/component-conversion/conversionModel.js +519 -0
- package/dist/editor/component-conversion/conversionModel.js.map +1 -0
- package/dist/editor/component-conversion/conversionService.d.ts +12 -0
- package/dist/editor/component-conversion/conversionService.js +16 -0
- package/dist/editor/component-conversion/conversionService.js.map +1 -0
- package/dist/editor/component-conversion/conversionTypes.d.ts +214 -0
- package/dist/editor/component-conversion/conversionTypes.js +2 -0
- package/dist/editor/component-conversion/conversionTypes.js.map +1 -0
- package/dist/editor/component-conversion/convertComponentsCommand.d.ts +25 -0
- package/dist/editor/component-conversion/convertComponentsCommand.js +196 -0
- package/dist/editor/component-conversion/convertComponentsCommand.js.map +1 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js +28 -7
- package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -1
- package/dist/editor/field-types/fieldStyles.d.ts +21 -0
- package/dist/editor/field-types/fieldStyles.js +22 -0
- package/dist/editor/field-types/fieldStyles.js.map +1 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +14 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js +12 -1
- package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/spellCheckText.d.ts +31 -0
- package/dist/editor/field-types/richtext/utils/spellCheckText.js +82 -0
- package/dist/editor/field-types/richtext/utils/spellCheckText.js.map +1 -0
- package/dist/editor/field-types/useFocusedFieldInput.d.ts +13 -0
- package/dist/editor/field-types/useFocusedFieldInput.js +50 -0
- package/dist/editor/field-types/useFocusedFieldInput.js.map +1 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +43 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.js +149 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
- package/dist/editor/find-replace/FindReplacePanel.d.ts +11 -0
- package/dist/editor/find-replace/FindReplacePanel.js +311 -0
- package/dist/editor/find-replace/FindReplacePanel.js.map +1 -0
- package/dist/editor/find-replace/findReplaceCommand.d.ts +8 -0
- package/dist/editor/find-replace/findReplaceCommand.js +25 -0
- package/dist/editor/find-replace/findReplaceCommand.js.map +1 -0
- package/dist/editor/find-replace/findReplaceMatches.d.ts +42 -0
- package/dist/editor/find-replace/findReplaceMatches.js +66 -0
- package/dist/editor/find-replace/findReplaceMatches.js.map +1 -0
- package/dist/editor/find-replace/findReplaceStore.d.ts +30 -0
- package/dist/editor/find-replace/findReplaceStore.js +61 -0
- package/dist/editor/find-replace/findReplaceStore.js.map +1 -0
- package/dist/editor/find-replace/findReplaceTargets.d.ts +51 -0
- package/dist/editor/find-replace/findReplaceTargets.js +110 -0
- package/dist/editor/find-replace/findReplaceTargets.js.map +1 -0
- package/dist/editor/find-replace/findReplaceText.d.ts +50 -0
- package/dist/editor/find-replace/findReplaceText.js +189 -0
- package/dist/editor/find-replace/findReplaceText.js.map +1 -0
- package/dist/editor/itemContextMenuGroups.js +10 -1
- package/dist/editor/itemContextMenuGroups.js.map +1 -1
- package/dist/editor/media-selector/MediaDetailsView.d.ts +14 -0
- package/dist/editor/media-selector/MediaDetailsView.js +152 -0
- package/dist/editor/media-selector/MediaDetailsView.js.map +1 -0
- package/dist/editor/media-selector/useMediaFolderDrag.d.ts +26 -0
- package/dist/editor/media-selector/useMediaFolderDrag.js +153 -0
- package/dist/editor/media-selector/useMediaFolderDrag.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.d.ts +11 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js +65 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.d.ts +6 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js +31 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.d.ts +5 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js +16 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js.map +1 -0
- package/dist/editor/mobileBottomPanel.d.ts +40 -0
- package/dist/editor/mobileBottomPanel.js +63 -0
- package/dist/editor/mobileBottomPanel.js.map +1 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +3 -6
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +8 -6
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.d.ts +6 -0
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js +100 -0
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js.map +1 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.d.ts +9 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js +32 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js.map +1 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.d.ts +14 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js +110 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js.map +1 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.d.ts +8 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.js +75 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.js.map +1 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +9 -13
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +25 -20
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.d.ts +15 -0
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js +31 -0
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js.map +1 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +11 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +120 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.d.ts +12 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js +197 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.d.ts +11 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.js +56 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.d.ts +44 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js +89 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.d.ts +17 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js +53 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.d.ts +11 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js +84 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.d.ts +34 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js +229 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.d.ts +9 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js +34 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.d.ts +49 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js +241 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.d.ts +11 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.js +65 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.js.map +1 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.d.ts +23 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.js +28 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.js.map +1 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.d.ts +18 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.js +29 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMargin.d.ts +57 -0
- package/dist/editor/page-viewer/FeedbackMargin.js +377 -0
- package/dist/editor/page-viewer/FeedbackMargin.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginController.d.ts +76 -0
- package/dist/editor/page-viewer/FeedbackMarginController.js +241 -0
- package/dist/editor/page-viewer/FeedbackMarginController.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.d.ts +16 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.js +24 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.d.ts +23 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js +105 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js.map +1 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.d.ts +24 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.js +31 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.js.map +1 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.d.ts +16 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.js +112 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.js.map +1 -0
- package/dist/editor/page-viewer/RenderingAiCheck.d.ts +18 -0
- package/dist/editor/page-viewer/RenderingAiCheck.js +45 -0
- package/dist/editor/page-viewer/RenderingAiCheck.js.map +1 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.d.ts +32 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.js +191 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.js.map +1 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.d.ts +17 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.js +38 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.js.map +1 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.d.ts +18 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.js +36 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.js.map +1 -0
- package/dist/editor/page-viewer/canvasLoadSettling.d.ts +42 -0
- package/dist/editor/page-viewer/canvasLoadSettling.js +46 -0
- package/dist/editor/page-viewer/canvasLoadSettling.js.map +1 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.d.ts +34 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.js +55 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.js.map +1 -0
- package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
- package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
- package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.d.ts +119 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.js +155 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginSources.d.ts +36 -0
- package/dist/editor/page-viewer/feedbackMarginSources.js +196 -0
- package/dist/editor/page-viewer/feedbackMarginSources.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.d.ts +43 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.js +107 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.js.map +1 -0
- package/dist/editor/page-viewer/interactivePreview.d.ts +168 -0
- package/dist/editor/page-viewer/interactivePreview.js +344 -0
- package/dist/editor/page-viewer/interactivePreview.js.map +1 -0
- package/dist/editor/page-viewer/minimapViewport.d.ts +2 -0
- package/dist/editor/page-viewer/minimapViewport.js +34 -0
- package/dist/editor/page-viewer/minimapViewport.js.map +1 -0
- package/dist/editor/page-viewer/openPageItems.d.ts +29 -0
- package/dist/editor/page-viewer/openPageItems.js +73 -0
- package/dist/editor/page-viewer/openPageItems.js.map +1 -0
- package/dist/editor/page-viewer/overviewRuler.d.ts +128 -0
- package/dist/editor/page-viewer/overviewRuler.js +226 -0
- package/dist/editor/page-viewer/overviewRuler.js.map +1 -0
- package/dist/editor/page-viewer/renderingApproval.d.ts +59 -0
- package/dist/editor/page-viewer/renderingApproval.js +186 -0
- package/dist/editor/page-viewer/renderingApproval.js.map +1 -0
- package/dist/editor/page-viewer/renderingChanges.d.ts +29 -0
- package/dist/editor/page-viewer/renderingChanges.js +40 -0
- package/dist/editor/page-viewer/renderingChanges.js.map +1 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.d.ts +23 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.js +26 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.js.map +1 -0
- package/dist/editor/page-viewer/useInteractivePreview.d.ts +77 -0
- package/dist/editor/page-viewer/useInteractivePreview.js +210 -0
- package/dist/editor/page-viewer/useInteractivePreview.js.map +1 -0
- package/dist/editor/reviews/CollapsibleText.d.ts +13 -0
- package/dist/editor/reviews/CollapsibleText.js +41 -0
- package/dist/editor/reviews/CollapsibleText.js.map +1 -0
- package/dist/editor/reviews/CommentImageAttachments.d.ts +12 -0
- package/dist/editor/reviews/CommentImageAttachments.js +19 -0
- package/dist/editor/reviews/CommentImageAttachments.js.map +1 -0
- package/dist/editor/reviews/CommentQuote.d.ts +13 -0
- package/dist/editor/reviews/CommentQuote.js +35 -0
- package/dist/editor/reviews/CommentQuote.js.map +1 -0
- package/dist/editor/reviews/CommentTargetOutline.d.ts +13 -0
- package/dist/editor/reviews/CommentTargetOutline.js +21 -0
- package/dist/editor/reviews/CommentTargetOutline.js.map +1 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.d.ts +7 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.js +117 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.js.map +1 -0
- package/dist/editor/reviews/CommentThreadAgentLink.d.ts +28 -0
- package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
- package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
- package/dist/editor/reviews/CommentThreadCard.d.ts +34 -0
- package/dist/editor/reviews/CommentThreadCard.js +156 -0
- package/dist/editor/reviews/CommentThreadCard.js.map +1 -0
- package/dist/editor/reviews/SuggestionThreadCard.d.ts +19 -0
- package/dist/editor/reviews/SuggestionThreadCard.js +25 -0
- package/dist/editor/reviews/SuggestionThreadCard.js.map +1 -0
- package/dist/editor/reviews/addCommentOnTarget.d.ts +22 -0
- package/dist/editor/reviews/addCommentOnTarget.js +32 -0
- package/dist/editor/reviews/addCommentOnTarget.js.map +1 -0
- package/dist/editor/reviews/balloonLayout.d.ts +51 -0
- package/dist/editor/reviews/balloonLayout.js +101 -0
- package/dist/editor/reviews/balloonLayout.js.map +1 -0
- package/dist/editor/reviews/commentAgentAttachments.d.ts +5 -0
- package/dist/editor/reviews/commentAgentAttachments.js +51 -0
- package/dist/editor/reviews/commentAgentAttachments.js.map +1 -0
- package/dist/editor/reviews/commentImages.d.ts +48 -0
- package/dist/editor/reviews/commentImages.js +128 -0
- package/dist/editor/reviews/commentImages.js.map +1 -0
- package/dist/editor/reviews/commentTargetPicker.d.ts +114 -0
- package/dist/editor/reviews/commentTargetPicker.js +153 -0
- package/dist/editor/reviews/commentTargetPicker.js.map +1 -0
- package/dist/editor/reviews/feedbackBalloonDate.d.ts +8 -0
- package/dist/editor/reviews/feedbackBalloonDate.js +22 -0
- package/dist/editor/reviews/feedbackBalloonDate.js.map +1 -0
- package/dist/editor/reviews/feedbackDrafts.d.ts +49 -0
- package/dist/editor/reviews/feedbackDrafts.js +74 -0
- package/dist/editor/reviews/feedbackDrafts.js.map +1 -0
- package/dist/editor/reviews/feedbackHoverState.d.ts +18 -0
- package/dist/editor/reviews/feedbackHoverState.js +35 -0
- package/dist/editor/reviews/feedbackHoverState.js.map +1 -0
- package/dist/editor/reviews/feedbackPersonFilter.d.ts +3 -0
- package/dist/editor/reviews/feedbackPersonFilter.js +32 -0
- package/dist/editor/reviews/feedbackPersonFilter.js.map +1 -0
- package/dist/editor/reviews/feedbackThreadSelection.d.ts +10 -0
- package/dist/editor/reviews/feedbackThreadSelection.js +31 -0
- package/dist/editor/reviews/feedbackThreadSelection.js.map +1 -0
- package/dist/editor/reviews/feedbackThreads.d.ts +50 -0
- package/dist/editor/reviews/feedbackThreads.js +135 -0
- package/dist/editor/reviews/feedbackThreads.js.map +1 -0
- package/dist/editor/reviews/feedbackWheelForwarding.d.ts +34 -0
- package/dist/editor/reviews/feedbackWheelForwarding.js +108 -0
- package/dist/editor/reviews/feedbackWheelForwarding.js.map +1 -0
- package/dist/editor/reviews/reviewUrlScope.d.ts +23 -0
- package/dist/editor/reviews/reviewUrlScope.js +86 -0
- package/dist/editor/reviews/reviewUrlScope.js.map +1 -0
- package/dist/editor/reviews/scrollWithin.d.ts +29 -0
- package/dist/editor/reviews/scrollWithin.js +87 -0
- package/dist/editor/reviews/scrollWithin.js.map +1 -0
- package/dist/editor/reviews/subtreeFeedback.d.ts +57 -0
- package/dist/editor/reviews/subtreeFeedback.js +137 -0
- package/dist/editor/reviews/subtreeFeedback.js.map +1 -0
- package/dist/editor/reviews/useCommentImagePaste.d.ts +80 -0
- package/dist/editor/reviews/useCommentImagePaste.js +252 -0
- package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
- package/dist/editor/reviews/useFeedbackThreads.d.ts +35 -0
- package/dist/editor/reviews/useFeedbackThreads.js +137 -0
- package/dist/editor/reviews/useFeedbackThreads.js.map +1 -0
- package/dist/editor/reviews/useMeasuredHeights.d.ts +25 -0
- package/dist/editor/reviews/useMeasuredHeights.js +176 -0
- package/dist/editor/reviews/useMeasuredHeights.js.map +1 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.d.ts +7 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.js +42 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.js.map +1 -0
- package/dist/editor/services/mcpAccessService.d.ts +93 -0
- package/dist/editor/services/mcpAccessService.js +41 -0
- package/dist/editor/services/mcpAccessService.js.map +1 -0
- package/dist/editor/services/previewTokenService.d.ts +14 -0
- package/dist/editor/services/previewTokenService.js +34 -0
- package/dist/editor/services/previewTokenService.js.map +1 -0
- package/dist/editor/services/renderingsService.d.ts +117 -0
- package/dist/editor/services/renderingsService.js +245 -0
- package/dist/editor/services/renderingsService.js.map +1 -0
- package/dist/editor/services/spellCheckService.d.ts +13 -0
- package/dist/editor/services/spellCheckService.js +33 -0
- package/dist/editor/services/spellCheckService.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessPanel.d.ts +7 -0
- package/dist/editor/settings/panels/McpAccessPanel.js +95 -0
- package/dist/editor/settings/panels/McpAccessPanel.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.d.ts +8 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.js +221 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.js.map +1 -0
- package/dist/editor/settings/panels/SpellCheckPanel.d.ts +8 -0
- package/dist/editor/settings/panels/SpellCheckPanel.js +253 -0
- package/dist/editor/settings/panels/SpellCheckPanel.js.map +1 -0
- package/dist/editor/sidebar/FeedbackSidebar.d.ts +7 -0
- package/dist/editor/sidebar/FeedbackSidebar.js +300 -0
- package/dist/editor/sidebar/FeedbackSidebar.js.map +1 -0
- package/dist/editor/sidebar/OperationDetailsContent.js +50 -0
- package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -1
- package/dist/editor/sidebar/liveComponentThumbnails.d.ts +19 -6
- package/dist/editor/sidebar/liveComponentThumbnails.js +39 -18
- package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -1
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.d.ts +30 -0
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js +69 -0
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js.map +1 -0
- package/dist/editor/spellcheck/htmlSpellDocument.d.ts +60 -0
- package/dist/editor/spellcheck/htmlSpellDocument.js +181 -0
- package/dist/editor/spellcheck/htmlSpellDocument.js.map +1 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.d.ts +45 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.js +277 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.js.map +1 -0
- package/dist/editor/spellcheck/replacementGuard.d.ts +27 -0
- package/dist/editor/spellcheck/replacementGuard.js +29 -0
- package/dist/editor/spellcheck/replacementGuard.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.d.ts +17 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.js +37 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.d.ts +71 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.js +126 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckClient.d.ts +66 -0
- package/dist/editor/spellcheck/spellCheckClient.js +0 -0
- package/dist/editor/spellcheck/spellCheckClient.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.d.ts +52 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.js +120 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckReplace.d.ts +8 -0
- package/dist/editor/spellcheck/spellCheckReplace.js +20 -0
- package/dist/editor/spellcheck/spellCheckReplace.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckStyles.d.ts +11 -0
- package/dist/editor/spellcheck/spellCheckStyles.js +12 -0
- package/dist/editor/spellcheck/spellCheckStyles.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckTypes.d.ts +94 -0
- package/dist/editor/spellcheck/spellCheckTypes.js +2 -0
- package/dist/editor/spellcheck/spellCheckTypes.js.map +1 -0
- package/dist/editor/spellcheck/textMarkHitTest.d.ts +14 -0
- package/dist/editor/spellcheck/textMarkHitTest.js +39 -0
- package/dist/editor/spellcheck/textMarkHitTest.js.map +1 -0
- package/dist/editor/spellcheck/useSpellCheck.d.ts +16 -0
- package/dist/editor/spellcheck/useSpellCheck.js +57 -0
- package/dist/editor/spellcheck/useSpellCheck.js.map +1 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.d.ts +14 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.js +40 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.js.map +1 -0
- package/dist/editor/ui/ParheliaMark.d.ts +15 -0
- package/dist/editor/ui/ParheliaMark.js +12 -0
- package/dist/editor/ui/ParheliaMark.js.map +1 -0
- package/dist/editor/ui/RootItemPicker.d.ts +18 -0
- package/dist/editor/ui/RootItemPicker.js +112 -0
- package/dist/editor/ui/RootItemPicker.js.map +1 -0
- package/dist/editor/undoEligibility.d.ts +2 -0
- package/dist/editor/undoEligibility.js +8 -0
- package/dist/editor/undoEligibility.js.map +1 -0
- package/dist/editor/utils/dataTransferImages.d.ts +7 -0
- package/dist/editor/utils/dataTransferImages.js +43 -0
- package/dist/editor/utils/dataTransferImages.js.map +1 -0
- package/dist/editor/validation/navigateToValidationIssue.d.ts +2 -2
- package/dist/editor/validation/navigateToValidationIssue.js +1 -1
- package/dist/editor/validation/navigateToValidationIssue.js.map +1 -1
- package/dist/editor/validation/validationRulerIssues.d.ts +17 -0
- package/dist/editor/validation/validationRulerIssues.js +44 -0
- package/dist/editor/validation/validationRulerIssues.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/task-board/components/AttentionPromptDialog.d.ts +13 -0
- package/dist/task-board/components/AttentionPromptDialog.js +45 -0
- package/dist/task-board/components/AttentionPromptDialog.js.map +1 -0
- package/dist/task-board/components/GoalFindingsTable.d.ts +43 -0
- package/dist/task-board/components/GoalFindingsTable.js +160 -0
- package/dist/task-board/components/GoalFindingsTable.js.map +1 -0
- package/dist/task-board/components/IssuePanel.d.ts +31 -0
- package/dist/task-board/components/IssuePanel.js +268 -0
- package/dist/task-board/components/IssuePanel.js.map +1 -0
- package/dist/task-board/components/SubgoalFindings.d.ts +40 -0
- package/dist/task-board/components/SubgoalFindings.js +88 -0
- package/dist/task-board/components/SubgoalFindings.js.map +1 -0
- package/dist/task-board/services/issueService.d.ts +193 -0
- package/dist/task-board/services/issueService.js +97 -0
- package/dist/task-board/services/issueService.js.map +1 -0
- package/dist/task-board/taskBlockers.d.ts +10 -0
- package/dist/task-board/taskBlockers.js +66 -0
- package/dist/task-board/taskBlockers.js.map +1 -0
- package/dist/task-board/utils/projectDashboardModel.js +14 -0
- package/dist/task-board/utils/projectDashboardModel.js.map +1 -1
- package/dist/task-board/views/ProjectDashboardView.js +5 -13
- package/dist/task-board/views/ProjectDashboardView.js.map +1 -1
- package/dist/tour/sandbox-tour-copy.d.ts +8 -0
- package/dist/tour/sandbox-tour-copy.js +8 -0
- package/dist/tour/sandbox-tour-copy.js.map +1 -1
- package/dist/tour/sandbox-tour.d.ts +3 -0
- package/dist/tour/sandbox-tour.js +107 -3
- package/dist/tour/sandbox-tour.js.map +1 -1
- package/package.json +1 -1
- package/dist/editor/page-editor-chrome/bridgeLinkValue.d.ts +0 -10
- package/dist/editor/page-editor-chrome/bridgeLinkValue.js +0 -55
- package/dist/editor/page-editor-chrome/bridgeLinkValue.js.map +0 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { useEffect, useRef, useState } from "react";
|
|
2
2
|
import { normalizeBridgeKey } from "../bridge/bridgeKeys";
|
|
3
|
-
import {
|
|
3
|
+
import { usePageViewState, } from "../page-viewer/pageViewContext";
|
|
4
4
|
/** Quiet time after the last host DOM mutation before the page is recaptured. */
|
|
5
5
|
export const LIVE_THUMBNAIL_DEBOUNCE_MS = 1200;
|
|
6
6
|
/** Delay for the first capture after thumbnails are switched on. */
|
|
7
7
|
export const LIVE_THUMBNAIL_INITIAL_DELAY_MS = 300;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
export const LIVE_THUMBNAIL_BOX = { width: 56, height: 36 };
|
|
9
|
+
/** Allow long pages while the host limits total pixels and sizes for each crop. */
|
|
10
|
+
export const LIVE_THUMBNAIL_MAX_DIMENSION = 16_384;
|
|
10
11
|
export function buildThumbnailSheet(payload, imageUrl) {
|
|
11
12
|
const rects = new Map();
|
|
12
13
|
for (const component of payload.components ?? []) {
|
|
@@ -100,22 +101,20 @@ function revokeThumbnailImageUrl(url) {
|
|
|
100
101
|
* Keeps a fresh page sheet while `enabled`: captures shortly after switching
|
|
101
102
|
* on, then again a little after every burst of host DOM mutations (typing,
|
|
102
103
|
* inserts, reorders, refreshes). Only one capture runs at a time; changes that
|
|
103
|
-
* arrive mid-capture queue exactly one follow-up.
|
|
104
|
-
* capture lands, or when the bridge is unavailable.
|
|
104
|
+
* arrive mid-capture queue exactly one follow-up.
|
|
105
105
|
*/
|
|
106
106
|
export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
107
107
|
const [sheet, setSheet] = useState(null);
|
|
108
|
+
const [initialCaptureFailed, setInitialCaptureFailed] = useState(false);
|
|
108
109
|
const sheetRef = useRef(null);
|
|
109
110
|
const timerRef = useRef(null);
|
|
110
111
|
const inFlightRef = useRef(false);
|
|
111
112
|
const dirtyRef = useRef(false);
|
|
112
113
|
const disposedRef = useRef(false);
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
const bridgeStructure = pageViewContext?.bridgeStructure;
|
|
118
|
-
const active = enabled && bridgeReady && !!requestPageSnapshot;
|
|
114
|
+
const bridgeReady = !!usePageViewState(pageViewContext, (state) => state.bridgeReady);
|
|
115
|
+
const canvasAttached = !!usePageViewState(pageViewContext, (state) => state.canvasAttached);
|
|
116
|
+
const bridgeStructure = usePageViewState(pageViewContext, (state) => state.bridgeStructure);
|
|
117
|
+
const active = enabled && bridgeReady && canvasAttached;
|
|
119
118
|
useEffect(() => {
|
|
120
119
|
disposedRef.current = false;
|
|
121
120
|
return () => {
|
|
@@ -130,6 +129,7 @@ export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
|
130
129
|
}, []);
|
|
131
130
|
useEffect(() => {
|
|
132
131
|
if (!active) {
|
|
132
|
+
setInitialCaptureFailed(false);
|
|
133
133
|
if (timerRef.current !== null) {
|
|
134
134
|
window.clearTimeout(timerRef.current);
|
|
135
135
|
timerRef.current = null;
|
|
@@ -144,8 +144,8 @@ export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
|
144
144
|
}
|
|
145
145
|
const capture = async () => {
|
|
146
146
|
timerRef.current = null;
|
|
147
|
-
const request =
|
|
148
|
-
if (!request || !
|
|
147
|
+
const request = pageViewContext?.requestBridgePageSnapshot;
|
|
148
|
+
if (!request || !pageViewContext?.getState().bridgeReady)
|
|
149
149
|
return;
|
|
150
150
|
if (inFlightRef.current) {
|
|
151
151
|
dirtyRef.current = true;
|
|
@@ -156,6 +156,10 @@ export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
|
156
156
|
try {
|
|
157
157
|
const payload = await request({
|
|
158
158
|
maxDimension: LIVE_THUMBNAIL_MAX_DIMENSION,
|
|
159
|
+
thumbnailSize: {
|
|
160
|
+
width: LIVE_THUMBNAIL_BOX.width * 2,
|
|
161
|
+
height: LIVE_THUMBNAIL_BOX.height * 2,
|
|
162
|
+
},
|
|
159
163
|
});
|
|
160
164
|
if (disposedRef.current)
|
|
161
165
|
return;
|
|
@@ -164,10 +168,17 @@ export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
|
164
168
|
revokeThumbnailImageUrl(sheetRef.current?.imageUrl);
|
|
165
169
|
sheetRef.current = next;
|
|
166
170
|
setSheet(next);
|
|
171
|
+
setInitialCaptureFailed(false);
|
|
172
|
+
}
|
|
173
|
+
else if (!sheetRef.current) {
|
|
174
|
+
setInitialCaptureFailed(true);
|
|
167
175
|
}
|
|
168
176
|
}
|
|
169
177
|
catch {
|
|
170
178
|
// Keep the previous sheet; the next DOM change retries.
|
|
179
|
+
if (!disposedRef.current && !sheetRef.current) {
|
|
180
|
+
setInitialCaptureFailed(true);
|
|
181
|
+
}
|
|
171
182
|
}
|
|
172
183
|
finally {
|
|
173
184
|
inFlightRef.current = false;
|
|
@@ -184,13 +195,20 @@ export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
|
184
195
|
void capture();
|
|
185
196
|
}, delay);
|
|
186
197
|
};
|
|
187
|
-
|
|
188
|
-
|
|
198
|
+
// Every new DOM snapshot of the host is a mutation burst to settle.
|
|
199
|
+
let lastDom = pageViewContext?.getState().bridgeDom;
|
|
200
|
+
const unsubscribe = pageViewContext?.subscribe(() => {
|
|
201
|
+
const dom = pageViewContext.getState().bridgeDom;
|
|
202
|
+
if (dom === lastDom)
|
|
203
|
+
return;
|
|
204
|
+
lastDom = dom;
|
|
205
|
+
schedule(LIVE_THUMBNAIL_DEBOUNCE_MS);
|
|
206
|
+
});
|
|
189
207
|
schedule(sheetRef.current
|
|
190
208
|
? LIVE_THUMBNAIL_DEBOUNCE_MS
|
|
191
209
|
: LIVE_THUMBNAIL_INITIAL_DELAY_MS);
|
|
192
210
|
return () => {
|
|
193
|
-
|
|
211
|
+
unsubscribe?.();
|
|
194
212
|
if (timerRef.current !== null) {
|
|
195
213
|
window.clearTimeout(timerRef.current);
|
|
196
214
|
timerRef.current = null;
|
|
@@ -198,7 +216,10 @@ export function useLiveComponentThumbnails(pageViewContext, enabled) {
|
|
|
198
216
|
};
|
|
199
217
|
// A new structure means components were added, removed or reordered; the
|
|
200
218
|
// effect re-runs and schedules a debounced recapture.
|
|
201
|
-
}, [active,
|
|
202
|
-
|
|
219
|
+
}, [active, pageViewContext, bridgeStructure]);
|
|
220
|
+
// A not-yet-ready bridge still counts as loading: the page is warming up and
|
|
221
|
+
// the capture follows. A context that cannot capture at all never loads.
|
|
222
|
+
const loading = enabled && canvasAttached && !sheet && !initialCaptureFailed;
|
|
223
|
+
return { sheet, loading };
|
|
203
224
|
}
|
|
204
225
|
//# sourceMappingURL=liveComponentThumbnails.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liveComponentThumbnails.js","sourceRoot":"","sources":["../../../src/editor/sidebar/liveComponentThumbnails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,
|
|
1
|
+
{"version":3,"file":"liveComponentThumbnails.js","sourceRoot":"","sources":["../../../src/editor/sidebar/liveComponentThumbnails.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MenuItem } from "../../config/types";
|
|
2
|
+
import type { BridgeGeometrySnapshot } from "../bridge/protocol";
|
|
3
|
+
import type { FieldDescriptor } from "../pageModel";
|
|
4
|
+
import { type SpellCheckClient } from "./spellCheckClient";
|
|
5
|
+
export declare const SPANS_FORMATTING_MESSAGE = "This word spans formatting; edit it in the side panel.";
|
|
6
|
+
/** The slice of the edit context the canvas menu needs. */
|
|
7
|
+
export type CanvasSpellCheckEditor = {
|
|
8
|
+
operations: {
|
|
9
|
+
editField(args: {
|
|
10
|
+
field: FieldDescriptor;
|
|
11
|
+
value: string;
|
|
12
|
+
refresh: "none" | "immediate";
|
|
13
|
+
saveMode: "immediate";
|
|
14
|
+
}): Promise<unknown>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* The spell-check section of the canvas context menu: suggestions for the
|
|
19
|
+
* misspelling under the right-clicked point, or nothing when the point is not
|
|
20
|
+
* over one. Replacement goes through the same field write the find-and-replace
|
|
21
|
+
* dialog uses, after the guard proved the field value is still the checked one.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildCanvasSpellCheckMenuItems(args: {
|
|
24
|
+
editor: CanvasSpellCheckEditor;
|
|
25
|
+
geometry: BridgeGeometrySnapshot | undefined;
|
|
26
|
+
clientX: number | undefined;
|
|
27
|
+
clientY: number | undefined;
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
client?: SpellCheckClient;
|
|
30
|
+
}): Promise<MenuItem[]>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { toast } from "sonner";
|
|
2
|
+
import { captureReplacement, STALE_REPLACEMENT_MESSAGE, verifyReplacement, } from "./replacementGuard";
|
|
3
|
+
import { spellCheckClient } from "./spellCheckClient";
|
|
4
|
+
import { spellCheckCanvasStore } from "./spellCheckCanvasStore";
|
|
5
|
+
import { findSpellCheckTargetAtPoint } from "./spellCheckCanvasTargets";
|
|
6
|
+
import { addWordToDictionary, buildSpellCheckMenuItems, SPELLCHECK_MENU_ID_PREFIX, } from "./spellCheckContextMenu";
|
|
7
|
+
import { replaceRenderedRange } from "./spellCheckReplace";
|
|
8
|
+
export const SPANS_FORMATTING_MESSAGE = "This word spans formatting; edit it in the side panel.";
|
|
9
|
+
/**
|
|
10
|
+
* The spell-check section of the canvas context menu: suggestions for the
|
|
11
|
+
* misspelling under the right-clicked point, or nothing when the point is not
|
|
12
|
+
* over one. Replacement goes through the same field write the find-and-replace
|
|
13
|
+
* dialog uses, after the guard proved the field value is still the checked one.
|
|
14
|
+
*/
|
|
15
|
+
export async function buildCanvasSpellCheckMenuItems(args) {
|
|
16
|
+
if (args.enabled === false)
|
|
17
|
+
return [];
|
|
18
|
+
const key = findSpellCheckTargetAtPoint(args.geometry, args.clientX, args.clientY);
|
|
19
|
+
if (!key)
|
|
20
|
+
return [];
|
|
21
|
+
const match = spellCheckCanvasStore.getMatch(key);
|
|
22
|
+
if (!match)
|
|
23
|
+
return [];
|
|
24
|
+
const client = args.client ?? spellCheckClient;
|
|
25
|
+
const capture = captureReplacement(match.checkedText, {
|
|
26
|
+
start: match.start,
|
|
27
|
+
end: match.end,
|
|
28
|
+
word: match.word,
|
|
29
|
+
});
|
|
30
|
+
const items = await buildSpellCheckMenuItems({
|
|
31
|
+
language: match.language,
|
|
32
|
+
word: match.word,
|
|
33
|
+
onReplace: async (replacement) => {
|
|
34
|
+
const latest = spellCheckCanvasStore.getTarget(match.targetKey);
|
|
35
|
+
const verdict = verifyReplacement(capture, latest?.text ?? "");
|
|
36
|
+
if (!latest || !verdict.ok || latest.value !== match.value) {
|
|
37
|
+
toast.info(STALE_REPLACEMENT_MESSAGE);
|
|
38
|
+
client.invalidateLanguage(match.language);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const next = replaceRenderedRange(latest.value, match.fieldType, capture.start, capture.end, capture.word, replacement);
|
|
42
|
+
if (next === undefined) {
|
|
43
|
+
toast.error(SPANS_FORMATTING_MESSAGE);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await args.editor.operations.editField({
|
|
47
|
+
field: match.field,
|
|
48
|
+
value: next,
|
|
49
|
+
refresh: "immediate",
|
|
50
|
+
saveMode: "immediate",
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
onIgnore: () => client.ignoreWord(match.language, match.word),
|
|
54
|
+
onAddToDictionary: async () => {
|
|
55
|
+
await addWordToDictionary(match.language, match.word, client);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
if (items.length === 0)
|
|
59
|
+
return [];
|
|
60
|
+
return [
|
|
61
|
+
{
|
|
62
|
+
id: `${SPELLCHECK_MENU_ID_PREFIX}heading`,
|
|
63
|
+
label: `Spelling: ${match.word}`,
|
|
64
|
+
disabled: true,
|
|
65
|
+
},
|
|
66
|
+
...items,
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=canvasSpellCheckContextMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasSpellCheckContextMenu.js","sourceRoot":"","sources":["../../../src/editor/spellcheck/canvasSpellCheckContextMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type HtmlToken } from "./htmlSpellTokenizer";
|
|
2
|
+
/**
|
|
3
|
+
* One parsed representation of a stored HTML value that serves both spell
|
|
4
|
+
* text extraction and replacement.
|
|
5
|
+
*
|
|
6
|
+
* - `text` is the spell-check text: every text token decoded with the full
|
|
7
|
+
* HTML5 entity table and its line breaks normalized (`\r\n` and `\r` become
|
|
8
|
+
* `\n`, as the browser's input preprocessing does), plus a `"\n"` separator
|
|
9
|
+
* whenever a block-level element is entered or left and for `<br>` / `<hr>`.
|
|
10
|
+
* Raw-text content (`script`, `style`, `textarea`, `title`) is part of the
|
|
11
|
+
* browser's `textContent`, so it is kept at full length but masked with
|
|
12
|
+
* spaces: nothing inside is ever checked and every later offset stays put.
|
|
13
|
+
* - Removing the separators yields exactly `element.textContent` of the
|
|
14
|
+
* rendered value, which is the offset space the canvas bridge measures.
|
|
15
|
+
* - Every segment remembers its source range and a decoded→source mapping, so
|
|
16
|
+
* a replacement rebuilds the value from untouched source slices and only
|
|
17
|
+
* re-encodes the replaced word.
|
|
18
|
+
*/
|
|
19
|
+
export type HtmlSpellSegment = {
|
|
20
|
+
kind: "text" | "masked";
|
|
21
|
+
sourceStart: number;
|
|
22
|
+
sourceEnd: number;
|
|
23
|
+
/** Decoded, newline-normalized text (spaces for masked segments). */
|
|
24
|
+
decoded: string;
|
|
25
|
+
spellStart: number;
|
|
26
|
+
spellEnd: number;
|
|
27
|
+
/**
|
|
28
|
+
* Decoded runs with their source ranges, for mapping decoded offsets back
|
|
29
|
+
* to source offsets. Absent when the mapping could not be verified against
|
|
30
|
+
* the authoritative decode; such a segment is checked but never edited.
|
|
31
|
+
*/
|
|
32
|
+
runs?: DecodedRun[];
|
|
33
|
+
};
|
|
34
|
+
export type DecodedRun = {
|
|
35
|
+
decStart: number;
|
|
36
|
+
decEnd: number;
|
|
37
|
+
srcStart: number;
|
|
38
|
+
srcEnd: number;
|
|
39
|
+
};
|
|
40
|
+
export type HtmlSpellDocument = {
|
|
41
|
+
source: string;
|
|
42
|
+
text: string;
|
|
43
|
+
separators: number[];
|
|
44
|
+
segments: HtmlSpellSegment[];
|
|
45
|
+
tokens: HtmlToken[];
|
|
46
|
+
};
|
|
47
|
+
export declare function parseHtmlSpellDocument(source: string): HtmlSpellDocument;
|
|
48
|
+
/**
|
|
49
|
+
* Converts a spell-text offset to the matching `element.textContent` offset by
|
|
50
|
+
* discounting the separators inserted before it.
|
|
51
|
+
*/
|
|
52
|
+
export declare function toTextContentOffset(offset: number, separators: number[]): number;
|
|
53
|
+
/**
|
|
54
|
+
* Replaces `[start, end)` of the spell text, which must lie inside one text
|
|
55
|
+
* segment and equal `word`, and returns the new source value. Everything
|
|
56
|
+
* outside the replaced word is copied from the source byte for byte; the
|
|
57
|
+
* replacement itself is entity-encoded. Returns undefined when the range spans
|
|
58
|
+
* a tag boundary, does not match `word`, or falls inside an entity.
|
|
59
|
+
*/
|
|
60
|
+
export declare function replaceInDocument(document: HtmlSpellDocument, start: number, end: number, word: string, replacement: string): string | undefined;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { decode, encode } from "html-entities";
|
|
2
|
+
import { tokenizeHtml } from "./htmlSpellTokenizer";
|
|
3
|
+
const ENTITY_PATTERN = /&(?:#[xX][0-9a-fA-F]+;?|#[0-9]+;?|[a-zA-Z][a-zA-Z0-9]*;?)/g;
|
|
4
|
+
function decodeText(raw) {
|
|
5
|
+
return decode(raw, { level: "html5", scope: "body" });
|
|
6
|
+
}
|
|
7
|
+
/** `\r\n` and lone `\r` become `\n`, matching the HTML input stream preprocessing. */
|
|
8
|
+
function normalizeNewlines(text) {
|
|
9
|
+
return text.replace(/\r\n?/g, "\n");
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Decodes `raw` run by run (plain characters, entities, CRLF) and records the
|
|
13
|
+
* source range of every run. Returns undefined when the run-wise decode does
|
|
14
|
+
* not reproduce the authoritative decode, so callers never map offsets
|
|
15
|
+
* through an inconsistent table.
|
|
16
|
+
*/
|
|
17
|
+
function buildRuns(raw, decoded) {
|
|
18
|
+
const runs = [];
|
|
19
|
+
let out = "";
|
|
20
|
+
let src = 0;
|
|
21
|
+
let plainStart = -1;
|
|
22
|
+
const closePlain = (end) => {
|
|
23
|
+
if (plainStart < 0)
|
|
24
|
+
return;
|
|
25
|
+
runs.push({
|
|
26
|
+
decStart: out.length,
|
|
27
|
+
decEnd: out.length + (end - plainStart),
|
|
28
|
+
srcStart: plainStart,
|
|
29
|
+
srcEnd: end,
|
|
30
|
+
});
|
|
31
|
+
out += raw.slice(plainStart, end);
|
|
32
|
+
plainStart = -1;
|
|
33
|
+
};
|
|
34
|
+
while (src < raw.length) {
|
|
35
|
+
const code = raw.charCodeAt(src);
|
|
36
|
+
if (code === 13 /* \r */) {
|
|
37
|
+
closePlain(src);
|
|
38
|
+
const end = raw.charCodeAt(src + 1) === 10 ? src + 2 : src + 1;
|
|
39
|
+
runs.push({ decStart: out.length, decEnd: out.length + 1, srcStart: src, srcEnd: end });
|
|
40
|
+
out += "\n";
|
|
41
|
+
src = end;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (code === 38 /* & */) {
|
|
45
|
+
ENTITY_PATTERN.lastIndex = src;
|
|
46
|
+
const match = ENTITY_PATTERN.exec(raw);
|
|
47
|
+
if (match && match.index === src) {
|
|
48
|
+
const entityText = decodeText(match[0]);
|
|
49
|
+
if (entityText !== match[0]) {
|
|
50
|
+
closePlain(src);
|
|
51
|
+
runs.push({
|
|
52
|
+
decStart: out.length,
|
|
53
|
+
decEnd: out.length + entityText.length,
|
|
54
|
+
srcStart: src,
|
|
55
|
+
srcEnd: src + match[0].length,
|
|
56
|
+
});
|
|
57
|
+
out += entityText;
|
|
58
|
+
src += match[0].length;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (plainStart < 0)
|
|
64
|
+
plainStart = src;
|
|
65
|
+
src++;
|
|
66
|
+
}
|
|
67
|
+
closePlain(raw.length);
|
|
68
|
+
return out === decoded ? runs : undefined;
|
|
69
|
+
}
|
|
70
|
+
export function parseHtmlSpellDocument(source) {
|
|
71
|
+
const tokens = tokenizeHtml(source);
|
|
72
|
+
const segments = [];
|
|
73
|
+
const separators = [];
|
|
74
|
+
let text = "";
|
|
75
|
+
const separator = () => {
|
|
76
|
+
separators.push(text.length);
|
|
77
|
+
text += "\n";
|
|
78
|
+
};
|
|
79
|
+
for (const token of tokens) {
|
|
80
|
+
if (token.kind === "text") {
|
|
81
|
+
const raw = source.slice(token.start, token.end);
|
|
82
|
+
const decoded = normalizeNewlines(decodeText(raw));
|
|
83
|
+
const runs = buildRuns(raw, decoded);
|
|
84
|
+
segments.push({
|
|
85
|
+
kind: "text",
|
|
86
|
+
sourceStart: token.start,
|
|
87
|
+
sourceEnd: token.end,
|
|
88
|
+
decoded,
|
|
89
|
+
spellStart: text.length,
|
|
90
|
+
spellEnd: text.length + decoded.length,
|
|
91
|
+
runs,
|
|
92
|
+
});
|
|
93
|
+
text += decoded;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (token.kind === "rawText") {
|
|
97
|
+
const raw = source.slice(token.start, token.end);
|
|
98
|
+
const content = normalizeNewlines(token.decodesEntities ? decodeText(raw) : raw);
|
|
99
|
+
const masked = " ".repeat(content.length);
|
|
100
|
+
segments.push({
|
|
101
|
+
kind: "masked",
|
|
102
|
+
sourceStart: token.start,
|
|
103
|
+
sourceEnd: token.end,
|
|
104
|
+
decoded: masked,
|
|
105
|
+
spellStart: text.length,
|
|
106
|
+
spellEnd: text.length + masked.length,
|
|
107
|
+
});
|
|
108
|
+
text += masked;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (token.kind === "startTag") {
|
|
112
|
+
if (token.isBlock)
|
|
113
|
+
separator();
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (token.kind === "endTag") {
|
|
117
|
+
if (token.isBlock && !token.isVoid)
|
|
118
|
+
separator();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return { source, text, separators, segments, tokens };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Converts a spell-text offset to the matching `element.textContent` offset by
|
|
125
|
+
* discounting the separators inserted before it.
|
|
126
|
+
*/
|
|
127
|
+
export function toTextContentOffset(offset, separators) {
|
|
128
|
+
let count = 0;
|
|
129
|
+
for (const separator of separators) {
|
|
130
|
+
if (separator < offset)
|
|
131
|
+
count++;
|
|
132
|
+
else
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
return offset - count;
|
|
136
|
+
}
|
|
137
|
+
/** Source offset of a decoded offset inside a segment, or undefined inside a multi-character decode. */
|
|
138
|
+
function toSourceOffset(segment, decodedOffset) {
|
|
139
|
+
const runs = segment.runs;
|
|
140
|
+
if (!runs)
|
|
141
|
+
return undefined;
|
|
142
|
+
if (decodedOffset === segment.decoded.length)
|
|
143
|
+
return segment.sourceEnd;
|
|
144
|
+
// Run offsets are relative to the segment's raw text.
|
|
145
|
+
const base = segment.sourceStart;
|
|
146
|
+
for (const run of runs) {
|
|
147
|
+
if (decodedOffset < run.decStart || decodedOffset >= run.decEnd)
|
|
148
|
+
continue;
|
|
149
|
+
if (decodedOffset === run.decStart)
|
|
150
|
+
return base + run.srcStart;
|
|
151
|
+
const oneToOne = run.decEnd - run.decStart === run.srcEnd - run.srcStart;
|
|
152
|
+
return oneToOne ? base + run.srcStart + (decodedOffset - run.decStart) : undefined;
|
|
153
|
+
}
|
|
154
|
+
return decodedOffset === 0 ? segment.sourceStart : undefined;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Replaces `[start, end)` of the spell text, which must lie inside one text
|
|
158
|
+
* segment and equal `word`, and returns the new source value. Everything
|
|
159
|
+
* outside the replaced word is copied from the source byte for byte; the
|
|
160
|
+
* replacement itself is entity-encoded. Returns undefined when the range spans
|
|
161
|
+
* a tag boundary, does not match `word`, or falls inside an entity.
|
|
162
|
+
*/
|
|
163
|
+
export function replaceInDocument(document, start, end, word, replacement) {
|
|
164
|
+
if (end <= start)
|
|
165
|
+
return undefined;
|
|
166
|
+
const segment = document.segments.find((candidate) => candidate.kind === "text" && candidate.spellStart <= start && end <= candidate.spellEnd);
|
|
167
|
+
if (!segment)
|
|
168
|
+
return undefined;
|
|
169
|
+
const localStart = start - segment.spellStart;
|
|
170
|
+
const localEnd = end - segment.spellStart;
|
|
171
|
+
if (segment.decoded.slice(localStart, localEnd) !== word)
|
|
172
|
+
return undefined;
|
|
173
|
+
const sourceStart = toSourceOffset(segment, localStart);
|
|
174
|
+
const sourceEnd = toSourceOffset(segment, localEnd);
|
|
175
|
+
if (sourceStart === undefined || sourceEnd === undefined)
|
|
176
|
+
return undefined;
|
|
177
|
+
return (document.source.slice(0, sourceStart) +
|
|
178
|
+
encode(replacement, { mode: "specialChars" }) +
|
|
179
|
+
document.source.slice(sourceEnd));
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=htmlSpellDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlSpellDocument.js","sourceRoot":"","sources":["../../../src/editor/spellcheck/htmlSpellDocument.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small HTML tokenizer that preserves source locations. It follows the HTML
|
|
3
|
+
* tokenizer states for the subset spell checking needs: data, tags with
|
|
4
|
+
* double-quoted / single-quoted / unquoted attribute values, self-closing
|
|
5
|
+
* tags, comments, doctype / bogus comments and the raw-text (script, style)
|
|
6
|
+
* and RCDATA (textarea, title) elements. `>` inside a quoted attribute value
|
|
7
|
+
* never ends a tag, so attribute content can never leak into the text.
|
|
8
|
+
*
|
|
9
|
+
* Every token carries `[start, end)` into the original string, which lets
|
|
10
|
+
* callers rebuild the source byte-identically around a replaced text token.
|
|
11
|
+
*/
|
|
12
|
+
export type HtmlTagToken = {
|
|
13
|
+
kind: "startTag" | "endTag";
|
|
14
|
+
start: number;
|
|
15
|
+
end: number;
|
|
16
|
+
/** Lower-case element name. */
|
|
17
|
+
name: string;
|
|
18
|
+
selfClosing: boolean;
|
|
19
|
+
/** Block-level element: a text boundary when entered or left. */
|
|
20
|
+
isBlock: boolean;
|
|
21
|
+
/** Void element (`br`, `hr`, ...): no end tag follows. */
|
|
22
|
+
isVoid: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type HtmlTextToken = {
|
|
25
|
+
kind: "text";
|
|
26
|
+
start: number;
|
|
27
|
+
end: number;
|
|
28
|
+
};
|
|
29
|
+
export type HtmlRawTextToken = {
|
|
30
|
+
kind: "rawText";
|
|
31
|
+
start: number;
|
|
32
|
+
end: number;
|
|
33
|
+
/** Element the raw text belongs to. */
|
|
34
|
+
name: string;
|
|
35
|
+
/** RCDATA elements (textarea, title) decode entities; raw text ones (script, style) do not. */
|
|
36
|
+
decodesEntities: boolean;
|
|
37
|
+
};
|
|
38
|
+
export type HtmlOtherToken = {
|
|
39
|
+
kind: "comment" | "doctype";
|
|
40
|
+
start: number;
|
|
41
|
+
end: number;
|
|
42
|
+
};
|
|
43
|
+
export type HtmlToken = HtmlTagToken | HtmlTextToken | HtmlRawTextToken | HtmlOtherToken;
|
|
44
|
+
export declare function isBlockElementName(name: string): boolean;
|
|
45
|
+
export declare function tokenizeHtml(html: string): HtmlToken[];
|