@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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type PreviewTokenResult } from "../services/previewTokenService";
|
|
2
|
+
import { type CanvasRenderings, type InteractivePreviewPage, type InteractivePreviewState } from "./interactivePreview";
|
|
3
|
+
export type InteractivePreviewDependencies = {
|
|
4
|
+
fetchToken: (page: InteractivePreviewPage) => Promise<PreviewTokenResult>;
|
|
5
|
+
now: () => number;
|
|
6
|
+
origin: () => string;
|
|
7
|
+
onError: (message: string) => void;
|
|
8
|
+
};
|
|
9
|
+
type InteractivePreviewTarget = {
|
|
10
|
+
mode: string | undefined;
|
|
11
|
+
page: InteractivePreviewPage | undefined;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Owns one interactive preview session: the renderings read from the canvas
|
|
15
|
+
* (the canvas's instance only reads them), the token and the sealed frame's
|
|
16
|
+
* key (the review dialog's instance). A small external store
|
|
17
|
+
* rather than React state so that stopping (explicitly, or because the canvas
|
|
18
|
+
* left preview mode or the page) synchronously invalidates a token request
|
|
19
|
+
* that is still in flight.
|
|
20
|
+
*/
|
|
21
|
+
export declare class InteractivePreviewController {
|
|
22
|
+
private dependencies;
|
|
23
|
+
private state;
|
|
24
|
+
private readonly listeners;
|
|
25
|
+
private target;
|
|
26
|
+
private requestId;
|
|
27
|
+
private canvasUrl;
|
|
28
|
+
constructor(dependencies: InteractivePreviewDependencies);
|
|
29
|
+
setDependencies(dependencies: InteractivePreviewDependencies): void;
|
|
30
|
+
subscribe: (listener: () => void) => () => void;
|
|
31
|
+
getSnapshot: () => InteractivePreviewState;
|
|
32
|
+
/** The canvas's mode and page. A session for anything else ends. */
|
|
33
|
+
setTarget: (target: InteractivePreviewTarget) => void;
|
|
34
|
+
/** Records the dynamic renderings the normal preview canvas shows. */
|
|
35
|
+
setHint: (renderings: CanvasRenderings) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Mints a token and shows the sealed frame, which loads the page with the
|
|
38
|
+
* query of `canvasUrl` (the preview canvas URL).
|
|
39
|
+
*/
|
|
40
|
+
start: (canvasUrl?: string) => void;
|
|
41
|
+
/** Closes the sealed frame and forgets the token. */
|
|
42
|
+
stop: () => void;
|
|
43
|
+
/**
|
|
44
|
+
* Reloads the sealed frame, with the query of `canvasUrl` when given. A
|
|
45
|
+
* token close to expiry is renewed first; time alone never reloads the
|
|
46
|
+
* frame.
|
|
47
|
+
*/
|
|
48
|
+
reload: (canvasUrl?: string) => void;
|
|
49
|
+
/** Drops the answer of a token request still in flight. */
|
|
50
|
+
dispose(): void;
|
|
51
|
+
private mint;
|
|
52
|
+
private dispatch;
|
|
53
|
+
}
|
|
54
|
+
export type UseInteractivePreviewOptions = {
|
|
55
|
+
mode: string | undefined;
|
|
56
|
+
page: InteractivePreviewPage | undefined;
|
|
57
|
+
/** Why a session could not start; only callers that start one need it. */
|
|
58
|
+
onError?: (message: string) => void;
|
|
59
|
+
fetchToken?: InteractivePreviewDependencies["fetchToken"];
|
|
60
|
+
now?: () => number;
|
|
61
|
+
};
|
|
62
|
+
export declare function useInteractivePreview({ mode, page, onError, fetchToken, now, }: UseInteractivePreviewOptions): {
|
|
63
|
+
status: import("./interactivePreview").InteractivePreviewStatus;
|
|
64
|
+
/** True while the sealed frame is running for this page. */
|
|
65
|
+
active: boolean;
|
|
66
|
+
frameKey: number;
|
|
67
|
+
frameUrl: string | undefined;
|
|
68
|
+
/** Rendering ids the toggle is offered for (empty: no toggle). */
|
|
69
|
+
offeredRenderingIds: string[];
|
|
70
|
+
/** The page's dynamic renderings the preview strip lists. */
|
|
71
|
+
renderingIds: string[];
|
|
72
|
+
setHint: (renderings: CanvasRenderings) => void;
|
|
73
|
+
start: (canvasUrl?: string) => void;
|
|
74
|
+
stop: () => void;
|
|
75
|
+
reload: (canvasUrl?: string) => void;
|
|
76
|
+
};
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { useEffect, useLayoutEffect, useState, useSyncExternalStore, } from "react";
|
|
2
|
+
import { fetchPreviewToken, } from "../services/previewTokenService";
|
|
3
|
+
import { buildInteractivePreviewFrameUrl, createInteractivePreviewSession, getInteractivePreviewPageKey, getOfferedClientCodeRenderings, getPreviewRenderingIds, INITIAL_INTERACTIVE_PREVIEW_STATE, interactivePreviewReducer, isInteractivePreviewActive, isPreviewTokenDue, shouldStopInteractivePreview, } from "./interactivePreview";
|
|
4
|
+
/**
|
|
5
|
+
* Owns one interactive preview session: the renderings read from the canvas
|
|
6
|
+
* (the canvas's instance only reads them), the token and the sealed frame's
|
|
7
|
+
* key (the review dialog's instance). A small external store
|
|
8
|
+
* rather than React state so that stopping (explicitly, or because the canvas
|
|
9
|
+
* left preview mode or the page) synchronously invalidates a token request
|
|
10
|
+
* that is still in flight.
|
|
11
|
+
*/
|
|
12
|
+
export class InteractivePreviewController {
|
|
13
|
+
dependencies;
|
|
14
|
+
state = INITIAL_INTERACTIVE_PREVIEW_STATE;
|
|
15
|
+
listeners = new Set();
|
|
16
|
+
target = {
|
|
17
|
+
mode: undefined,
|
|
18
|
+
page: undefined,
|
|
19
|
+
};
|
|
20
|
+
requestId = 0;
|
|
21
|
+
// The latest preview canvas URL; the frame takes it on its next (re)load.
|
|
22
|
+
canvasUrl;
|
|
23
|
+
constructor(dependencies) {
|
|
24
|
+
this.dependencies = dependencies;
|
|
25
|
+
}
|
|
26
|
+
setDependencies(dependencies) {
|
|
27
|
+
this.dependencies = dependencies;
|
|
28
|
+
}
|
|
29
|
+
subscribe = (listener) => {
|
|
30
|
+
this.listeners.add(listener);
|
|
31
|
+
return () => {
|
|
32
|
+
this.listeners.delete(listener);
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
getSnapshot = () => this.state;
|
|
36
|
+
/** The canvas's mode and page. A session for anything else ends. */
|
|
37
|
+
setTarget = (target) => {
|
|
38
|
+
this.target = target;
|
|
39
|
+
if (shouldStopInteractivePreview(this.state, {
|
|
40
|
+
mode: target.mode,
|
|
41
|
+
pageKey: getInteractivePreviewPageKey(target.page),
|
|
42
|
+
})) {
|
|
43
|
+
this.stop();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/** Records the dynamic renderings the normal preview canvas shows. */
|
|
47
|
+
setHint = (renderings) => {
|
|
48
|
+
this.dispatch({
|
|
49
|
+
type: "hint",
|
|
50
|
+
pageKey: this.target.mode === "preview"
|
|
51
|
+
? getInteractivePreviewPageKey(this.target.page)
|
|
52
|
+
: undefined,
|
|
53
|
+
renderings,
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Mints a token and shows the sealed frame, which loads the page with the
|
|
58
|
+
* query of `canvasUrl` (the preview canvas URL).
|
|
59
|
+
*/
|
|
60
|
+
start = (canvasUrl) => {
|
|
61
|
+
const { mode, page } = this.target;
|
|
62
|
+
const pageKey = getInteractivePreviewPageKey(page);
|
|
63
|
+
if (!page ||
|
|
64
|
+
!pageKey ||
|
|
65
|
+
this.state.status !== "off" ||
|
|
66
|
+
getOfferedClientCodeRenderings(this.state, { mode, pageKey }).length ===
|
|
67
|
+
0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.canvasUrl = canvasUrl;
|
|
71
|
+
const requestId = ++this.requestId;
|
|
72
|
+
this.dispatch({ type: "start", pageKey, requestId });
|
|
73
|
+
void this.mint(requestId, page);
|
|
74
|
+
};
|
|
75
|
+
/** Closes the sealed frame and forgets the token. */
|
|
76
|
+
stop = () => {
|
|
77
|
+
this.requestId += 1;
|
|
78
|
+
this.dispatch({ type: "stop" });
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Reloads the sealed frame, with the query of `canvasUrl` when given. A
|
|
82
|
+
* token close to expiry is renewed first; time alone never reloads the
|
|
83
|
+
* frame.
|
|
84
|
+
*/
|
|
85
|
+
reload = (canvasUrl) => {
|
|
86
|
+
const current = this.state;
|
|
87
|
+
if (current.status !== "on" || !current.session)
|
|
88
|
+
return;
|
|
89
|
+
if (canvasUrl)
|
|
90
|
+
this.canvasUrl = canvasUrl;
|
|
91
|
+
// A renewed token is already on its way and remounts the frame.
|
|
92
|
+
if (current.pendingRequestId !== undefined)
|
|
93
|
+
return;
|
|
94
|
+
if (!isPreviewTokenDue(current.session, this.dependencies.now())) {
|
|
95
|
+
this.dispatch({ type: "remount", canvasUrl: this.canvasUrl });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const page = this.target.page;
|
|
99
|
+
if (!page || getInteractivePreviewPageKey(page) !== current.pageKey) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const requestId = ++this.requestId;
|
|
103
|
+
this.dispatch({ type: "refreshStarted", requestId });
|
|
104
|
+
void this.mint(requestId, page);
|
|
105
|
+
};
|
|
106
|
+
/** Drops the answer of a token request still in flight. */
|
|
107
|
+
dispose() {
|
|
108
|
+
this.requestId += 1;
|
|
109
|
+
}
|
|
110
|
+
async mint(requestId, page) {
|
|
111
|
+
let session;
|
|
112
|
+
let error;
|
|
113
|
+
try {
|
|
114
|
+
const result = await this.dependencies.fetchToken(page);
|
|
115
|
+
if (result.ok) {
|
|
116
|
+
session = createInteractivePreviewSession(result.data, this.dependencies.now(), this.dependencies.origin());
|
|
117
|
+
if (!session) {
|
|
118
|
+
error = "The server returned an invalid interactive preview address.";
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
error = result.message;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (caught) {
|
|
126
|
+
error =
|
|
127
|
+
caught instanceof Error
|
|
128
|
+
? caught.message
|
|
129
|
+
: "The preview token could not be created.";
|
|
130
|
+
}
|
|
131
|
+
// Stopped, restarted or superseded while the request was in flight.
|
|
132
|
+
if (requestId !== this.requestId)
|
|
133
|
+
return;
|
|
134
|
+
if (session) {
|
|
135
|
+
this.dispatch({
|
|
136
|
+
type: "minted",
|
|
137
|
+
requestId,
|
|
138
|
+
session,
|
|
139
|
+
canvasUrl: this.canvasUrl,
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this.dispatch({ type: "mintFailed", requestId });
|
|
144
|
+
this.dependencies.onError(error ?? "The preview token could not be created.");
|
|
145
|
+
}
|
|
146
|
+
dispatch(action) {
|
|
147
|
+
const next = interactivePreviewReducer(this.state, action);
|
|
148
|
+
if (next === this.state)
|
|
149
|
+
return;
|
|
150
|
+
this.state = next;
|
|
151
|
+
this.listeners.forEach((listener) => listener());
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const getWindowOrigin = () => window.location.origin;
|
|
155
|
+
const ignoreError = () => { };
|
|
156
|
+
const defaultFetchToken = (page) => fetchPreviewToken(page);
|
|
157
|
+
export function useInteractivePreview({ mode, page, onError = ignoreError, fetchToken = defaultFetchToken, now = Date.now, }) {
|
|
158
|
+
const [controller] = useState(() => new InteractivePreviewController({
|
|
159
|
+
fetchToken,
|
|
160
|
+
now,
|
|
161
|
+
origin: getWindowOrigin,
|
|
162
|
+
onError,
|
|
163
|
+
}));
|
|
164
|
+
useLayoutEffect(() => {
|
|
165
|
+
controller.setDependencies({
|
|
166
|
+
fetchToken,
|
|
167
|
+
now,
|
|
168
|
+
origin: getWindowOrigin,
|
|
169
|
+
onError,
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
const state = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);
|
|
173
|
+
const pageId = page?.id;
|
|
174
|
+
const pageLanguage = page?.language;
|
|
175
|
+
const pageVersion = page?.version;
|
|
176
|
+
// Layout effect: ends a session for another page or mode before the browser
|
|
177
|
+
// paints, and before the canvas's own effects read the renderings.
|
|
178
|
+
useLayoutEffect(() => {
|
|
179
|
+
controller.setTarget({
|
|
180
|
+
mode,
|
|
181
|
+
page: pageId && pageLanguage && typeof pageVersion === "number"
|
|
182
|
+
? { id: pageId, language: pageLanguage, version: pageVersion }
|
|
183
|
+
: undefined,
|
|
184
|
+
});
|
|
185
|
+
}, [controller, mode, pageId, pageLanguage, pageVersion]);
|
|
186
|
+
useEffect(() => () => controller.dispose(), [controller]);
|
|
187
|
+
const context = { mode, pageKey: getInteractivePreviewPageKey(page) };
|
|
188
|
+
const active = isInteractivePreviewActive(state, context);
|
|
189
|
+
// The canvas query the frame last (re)loaded with, so a reload after a
|
|
190
|
+
// preview date change loads what the canvas would show.
|
|
191
|
+
const frameUrl = active && state.session && page
|
|
192
|
+
? buildInteractivePreviewFrameUrl(state.session.prefix, page, state.canvasUrl, getWindowOrigin())
|
|
193
|
+
: undefined;
|
|
194
|
+
return {
|
|
195
|
+
status: state.status,
|
|
196
|
+
/** True while the sealed frame is running for this page. */
|
|
197
|
+
active,
|
|
198
|
+
frameKey: state.frameKey,
|
|
199
|
+
frameUrl,
|
|
200
|
+
/** Rendering ids the toggle is offered for (empty: no toggle). */
|
|
201
|
+
offeredRenderingIds: getOfferedClientCodeRenderings(state, context),
|
|
202
|
+
/** The page's dynamic renderings the preview strip lists. */
|
|
203
|
+
renderingIds: getPreviewRenderingIds(state, context),
|
|
204
|
+
setHint: controller.setHint,
|
|
205
|
+
start: controller.start,
|
|
206
|
+
stop: controller.stop,
|
|
207
|
+
reload: controller.reload,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=useInteractivePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInteractivePreview.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/useInteractivePreview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Clamps long content to a few lines with a "Show more" toggle, so a long
|
|
4
|
+
* comment in the margin stays a short balloon until the reader asks for it.
|
|
5
|
+
* The toggle only appears when the content actually overflows the clamp.
|
|
6
|
+
*/
|
|
7
|
+
export declare function CollapsibleText({ children, lines, className, expanded: controlledExpanded, onExpandedChange, }: {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
lines?: number;
|
|
10
|
+
className?: string;
|
|
11
|
+
expanded?: boolean;
|
|
12
|
+
onExpandedChange?: (expanded: boolean) => void;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Clamps long content to a few lines with a "Show more" toggle, so a long
|
|
6
|
+
* comment in the margin stays a short balloon until the reader asks for it.
|
|
7
|
+
* The toggle only appears when the content actually overflows the clamp.
|
|
8
|
+
*/
|
|
9
|
+
export function CollapsibleText({ children, lines = 4, className, expanded: controlledExpanded, onExpandedChange, }) {
|
|
10
|
+
const contentRef = useRef(null);
|
|
11
|
+
const [localExpanded, setLocalExpanded] = useState(false);
|
|
12
|
+
const expanded = controlledExpanded ?? localExpanded;
|
|
13
|
+
const [overflows, setOverflows] = useState(false);
|
|
14
|
+
useLayoutEffect(() => {
|
|
15
|
+
const element = contentRef.current;
|
|
16
|
+
if (!element || expanded)
|
|
17
|
+
return;
|
|
18
|
+
const check = () => setOverflows(element.scrollHeight > element.clientHeight + 1);
|
|
19
|
+
check();
|
|
20
|
+
if (typeof ResizeObserver === "undefined")
|
|
21
|
+
return;
|
|
22
|
+
const observer = new ResizeObserver(check);
|
|
23
|
+
observer.observe(element);
|
|
24
|
+
return () => observer.disconnect();
|
|
25
|
+
}, [expanded, children]);
|
|
26
|
+
const setExpanded = (next) => {
|
|
27
|
+
setLocalExpanded(next);
|
|
28
|
+
onExpandedChange?.(next);
|
|
29
|
+
};
|
|
30
|
+
return (_jsxs("div", { className: className, children: [_jsx("div", { ref: contentRef, "data-testid": "collapsible-text", "data-collapsed": !expanded && overflows ? "true" : undefined, className: cn(!expanded && "overflow-hidden"), style: expanded
|
|
31
|
+
? undefined
|
|
32
|
+
: {
|
|
33
|
+
display: "-webkit-box",
|
|
34
|
+
WebkitBoxOrient: "vertical",
|
|
35
|
+
WebkitLineClamp: lines,
|
|
36
|
+
}, children: children }), (overflows || expanded) && (_jsx("button", { type: "button", "data-testid": "collapsible-text-toggle", className: "text-neutral-grey-50 hover:text-neutral-grey-100 mt-1 text-left underline-offset-2 hover:underline", onClick: (event) => {
|
|
37
|
+
event.stopPropagation();
|
|
38
|
+
setExpanded(!expanded);
|
|
39
|
+
}, children: expanded ? "Show less" : "Show more" }))] }));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=CollapsibleText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleText.js","sourceRoot":"","sources":["../../../src/editor/reviews/CollapsibleText.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,KAAK,GAAG,CAAC,EACT,SAAS,EACT,QAAQ,EAAE,kBAAkB,EAC5B,gBAAgB,GAOjB;IACC,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,kBAAkB,IAAI,aAAa,CAAC;IACrD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,QAAQ;YAAE,OAAO;QACjC,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAChE,KAAK,EAAE,CAAC;QACR,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,OAAO;QAClD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzB,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,EAAE;QACpC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,aACvB,cACE,GAAG,EAAE,UAAU,iBACH,kBAAkB,oBACd,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC3D,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,iBAAiB,CAAC,EAC7C,KAAK,EACH,QAAQ;oBACN,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC;wBACE,OAAO,EAAE,aAAa;wBACtB,eAAe,EAAE,UAAU;wBAC3B,eAAe,EAAE,KAAK;qBACvB,YAGN,QAAQ,GACL,EACL,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAC1B,iBACE,IAAI,EAAC,QAAQ,iBACD,yBAAyB,EACrC,SAAS,EAAC,oGAAoG,EAC9G,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,KAAK,CAAC,eAAe,EAAE,CAAC;oBACxB,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC,YAEA,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAC9B,CACV,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CommentImageAttachment } from "./useCommentImagePaste";
|
|
2
|
+
/**
|
|
3
|
+
* Thumbnail strip shown above a comment composer for pasted or dropped
|
|
4
|
+
* screenshots. Uploading thumbs show a spinner, failed ones a red frame with
|
|
5
|
+
* the error as tooltip; finished ones open the shared image viewer.
|
|
6
|
+
*/
|
|
7
|
+
export declare function CommentImageAttachments({ attachments, onRemove, disabled, className, }: {
|
|
8
|
+
attachments: CommentImageAttachment[];
|
|
9
|
+
onRemove: (key: string) => void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
className?: string;
|
|
12
|
+
}): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Loader2, X } from "lucide-react";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
import { AgentImagePreview } from "../ai/AgentImagePreview";
|
|
6
|
+
/**
|
|
7
|
+
* Thumbnail strip shown above a comment composer for pasted or dropped
|
|
8
|
+
* screenshots. Uploading thumbs show a spinner, failed ones a red frame with
|
|
9
|
+
* the error as tooltip; finished ones open the shared image viewer.
|
|
10
|
+
*/
|
|
11
|
+
export function CommentImageAttachments({ attachments, onRemove, disabled = false, className, }) {
|
|
12
|
+
if (attachments.length === 0)
|
|
13
|
+
return null;
|
|
14
|
+
return (_jsx("div", { className: cn("flex flex-wrap items-start gap-2", className), "data-testid": "comment-image-attachments", children: attachments.map((attachment) => {
|
|
15
|
+
const thumb = (_jsx("img", { src: attachment.previewUrl, alt: attachment.fileName, className: cn("h-12 w-12 rounded-md object-cover", attachment.status !== "done" && "opacity-60"), draggable: false }));
|
|
16
|
+
return (_jsxs("div", { className: cn("border-border-default group relative shrink-0 overflow-hidden rounded-md border bg-white", attachment.status === "error" && "border-destructive"), "data-testid": "comment-image-attachment", "data-status": attachment.status, "data-image-id": attachment.imageId, title: attachment.error ?? attachment.fileName, children: [attachment.status === "done" ? (_jsx(AgentImagePreview, { src: attachment.previewUrl, alt: attachment.fileName, fileName: attachment.fileName, overlayClassName: "z-[300]", contentClassName: "z-[301]", portalContainer: typeof document === "undefined" ? null : document.body, children: _jsx("button", { type: "button", className: "block cursor-zoom-in", "aria-label": `Preview ${attachment.fileName}`, children: thumb }) })) : (thumb), attachment.status === "uploading" && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-white/60", "data-testid": "comment-image-uploading", role: "status", "aria-label": "Uploading image", children: _jsx(Loader2, { className: "text-neutral-grey-100 h-4 w-4 animate-spin", strokeWidth: 1.5 }) })), attachment.status === "error" && (_jsx("div", { className: "bg-destructive/80 absolute inset-x-0 bottom-0 truncate px-1 text-[9px] leading-4 text-white", "data-testid": "comment-image-upload-error", role: "alert", children: "Upload failed" })), !disabled && (_jsx("button", { type: "button", onClick: () => onRemove(attachment.key), className: "bg-neutral-grey-100 hover:bg-neutral-grey-100/90 absolute top-0.5 right-0.5 inline-flex h-4 w-4 items-center justify-center rounded-full text-white shadow-sm", "aria-label": "Remove image", title: "Remove image", "data-testid": "comment-image-remove", children: _jsx(X, { className: "h-3 w-3", strokeWidth: 2 }) }))] }, attachment.key));
|
|
17
|
+
}) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=CommentImageAttachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentImageAttachments.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentImageAttachments.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,WAAW,EACX,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,SAAS,GAMV;IACC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,SAAS,CAAC,iBAChD,2BAA2B,YAEtC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,CACZ,cACE,GAAG,EAAE,UAAU,CAAC,UAAU,EAC1B,GAAG,EAAE,UAAU,CAAC,QAAQ,EACxB,SAAS,EAAE,EAAE,CACX,mCAAmC,EACnC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,YAAY,CAC7C,EACD,SAAS,EAAE,KAAK,GAChB,CACH,CAAC;YAEF,OAAO,CACL,eAEE,SAAS,EAAE,EAAE,CACX,0FAA0F,EAC1F,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,oBAAoB,CACtD,iBACW,0BAA0B,iBACzB,UAAU,CAAC,MAAM,mBACf,UAAU,CAAC,OAAO,EACjC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,aAE7C,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAC9B,KAAC,iBAAiB,IAChB,GAAG,EAAE,UAAU,CAAC,UAAU,EAC1B,GAAG,EAAE,UAAU,CAAC,QAAQ,EACxB,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,gBAAgB,EAAC,SAAS,EAC1B,gBAAgB,EAAC,SAAS,EAC1B,eAAe,EACb,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,YAGxD,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sBAAsB,gBACpB,WAAW,UAAU,CAAC,QAAQ,EAAE,YAE3C,KAAK,GACC,GACS,CACrB,CAAC,CAAC,CAAC,CACF,KAAK,CACN,EAEA,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,CACpC,cACE,SAAS,EAAC,+DAA+D,iBAC7D,yBAAyB,EACrC,IAAI,EAAC,QAAQ,gBACF,iBAAiB,YAE5B,KAAC,OAAO,IACN,SAAS,EAAC,4CAA4C,EACtD,WAAW,EAAE,GAAG,GAChB,GACE,CACP,EACA,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,CAChC,cACE,SAAS,EAAC,6FAA6F,iBAC3F,4BAA4B,EACxC,IAAI,EAAC,OAAO,8BAGR,CACP,EAEA,CAAC,QAAQ,IAAI,CACZ,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EACvC,SAAS,EAAC,+JAA+J,gBAC9J,cAAc,EACzB,KAAK,EAAC,cAAc,iBACR,sBAAsB,YAElC,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,CAAC,GAAI,GAClC,CACV,KAnEI,UAAU,CAAC,GAAG,CAoEf,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Comment } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* How following a quote reaches the quoted comment:
|
|
4
|
+
* - `dom`: reveal the quoted comment inside the same surface (list, popover)
|
|
5
|
+
* by scrolling its nearest feedback scroll container;
|
|
6
|
+
* - `select`: select the quoted comment so the owning surface pins its thread
|
|
7
|
+
* and the canvas scrolls to its anchor (the comment margin).
|
|
8
|
+
*/
|
|
9
|
+
export type FeedbackNavigation = "dom" | "select";
|
|
10
|
+
export declare function CommentQuote({ comment, navigation, }: {
|
|
11
|
+
comment: Comment;
|
|
12
|
+
navigation?: FeedbackNavigation;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { formatDate } from "../utils";
|
|
3
|
+
import { useEditContext, useFieldsEditContext } from "../client/editContext";
|
|
4
|
+
import { useFeedbackAuthor } from "./feedbackAvatar";
|
|
5
|
+
import { stripCommentImages } from "./commentImages";
|
|
6
|
+
import { EmojiText } from "../../components/emoji/EmojiText";
|
|
7
|
+
import { isTextSelectionClick, selectFeedbackComment, } from "./feedbackSelection";
|
|
8
|
+
import { revealInFeedbackScrollContainer } from "./scrollWithin";
|
|
9
|
+
export function CommentQuote({ comment, navigation = "dom", }) {
|
|
10
|
+
const author = useFeedbackAuthor(comment);
|
|
11
|
+
const editContext = useEditContext();
|
|
12
|
+
const fieldsContext = useFieldsEditContext();
|
|
13
|
+
const created = comment.created ? new Date(comment.created) : undefined;
|
|
14
|
+
const date = created && !Number.isNaN(created.getTime()) ? created : undefined;
|
|
15
|
+
return (_jsx("button", { type: "button", className: "border-border-default hover:bg-neutral-grey-5 focus-visible:ring-highlight-100 mb-2 block w-full cursor-pointer rounded-md border bg-white px-3 py-2 text-left shadow-sm focus-visible:ring-2 focus-visible:outline-none", "aria-label": `Jump to comment by ${author.displayName}`, "data-testid": "comment-quote", onClick: (event) => {
|
|
16
|
+
event.stopPropagation();
|
|
17
|
+
if (isTextSelectionClick(event.currentTarget, event))
|
|
18
|
+
return;
|
|
19
|
+
if (navigation === "select") {
|
|
20
|
+
void selectFeedbackComment(comment, editContext, fieldsContext);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Keep navigation within the surface containing this quote: the same
|
|
24
|
+
// comment can also be mounted in the sidebar behind an open popover.
|
|
25
|
+
const thread = event.currentTarget.closest("[data-comment-thread]");
|
|
26
|
+
const target = Array.from(thread?.querySelectorAll("[data-comment-id]") || []).find((element) => element.dataset.commentId === comment.id);
|
|
27
|
+
if (!target)
|
|
28
|
+
return;
|
|
29
|
+
target.focus({ preventScroll: true });
|
|
30
|
+
// Only the surface's own scroll container moves; scrollIntoView would
|
|
31
|
+
// also scroll every ancestor (editor shell, overlay roots).
|
|
32
|
+
revealInFeedbackScrollContainer(target, { behavior: "smooth" });
|
|
33
|
+
}, children: _jsxs("span", { className: "border-neutral-grey-50 block min-w-0 border-l-2 pl-2", children: [_jsxs("span", { className: "text-neutral-grey-50 mb-0.5 flex flex-wrap items-baseline gap-x-2 text-xs leading-4", children: [_jsx("span", { className: "min-w-0 truncate font-medium", children: author.displayName }), date && (_jsx("time", { dateTime: date.toISOString(), children: formatDate(date) }))] }), _jsx("span", { className: "text-neutral-grey-100 line-clamp-3 text-sm leading-5 [overflow-wrap:anywhere] whitespace-pre-wrap select-text", children: _jsx(EmojiText, { text: stripCommentImages(comment.text) }) })] }) }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=CommentQuote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentQuote.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentQuote.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAWjE,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,UAAU,GAAG,KAAK,GAInB;IACC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,IAAI,GACR,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0NAA0N,gBACxN,sBAAsB,MAAM,CAAC,WAAW,EAAE,iBAC1C,eAAe,EAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,oBAAoB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC;gBAAE,OAAO;YAC7D,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5B,KAAK,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YACD,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,MAAM,EAAE,gBAAgB,CAAc,mBAAmB,CAAC,IAAI,EAAE,CACjE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,sEAAsE;YACtE,4DAA4D;YAC5D,+BAA+B,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC,YAED,gBAAM,SAAS,EAAC,sDAAsD,aACpE,gBAAM,SAAS,EAAC,qFAAqF,aACnG,eAAM,SAAS,EAAC,8BAA8B,YAC3C,MAAM,CAAC,WAAW,GACd,EACN,IAAI,IAAI,CACP,eAAM,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,YAAG,UAAU,CAAC,IAAI,CAAC,GAAQ,CAC9D,IACI,EACP,eAAM,SAAS,EAAC,+GAA+G,YAC7H,KAAC,SAAS,IAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAI,GAChD,IACF,GACA,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PickableRect } from "./commentTargetPicker";
|
|
2
|
+
/**
|
|
3
|
+
* Outlines what a click would comment on while picking a comment target,
|
|
4
|
+
* with a label naming it. Never takes pointer events: the surface or form
|
|
5
|
+
* underneath owns the pointer.
|
|
6
|
+
*/
|
|
7
|
+
export declare function CommentTargetOutline({ rect, label, position, zIndex, }: {
|
|
8
|
+
rect: PickableRect;
|
|
9
|
+
label: string;
|
|
10
|
+
/** `absolute` inside the canvas overlay layer, `fixed` over editor forms. */
|
|
11
|
+
position: "absolute" | "fixed";
|
|
12
|
+
zIndex: number;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { MessageCirclePlus } from "lucide-react";
|
|
3
|
+
/**
|
|
4
|
+
* Outlines what a click would comment on while picking a comment target,
|
|
5
|
+
* with a label naming it. Never takes pointer events: the surface or form
|
|
6
|
+
* underneath owns the pointer.
|
|
7
|
+
*/
|
|
8
|
+
export function CommentTargetOutline({ rect, label, position, zIndex, }) {
|
|
9
|
+
// The label sits above the box, or inside its top edge when there is no
|
|
10
|
+
// room above (targets at the very top of the page or viewport).
|
|
11
|
+
const labelInside = rect.y < 22;
|
|
12
|
+
return (_jsx("div", { "data-testid": "comment-target-outline", className: "border-highlight-100 bg-highlight-100/5 pointer-events-none rounded-[3px] border-2", style: {
|
|
13
|
+
position,
|
|
14
|
+
left: rect.x,
|
|
15
|
+
top: rect.y,
|
|
16
|
+
width: rect.width,
|
|
17
|
+
height: rect.height,
|
|
18
|
+
zIndex,
|
|
19
|
+
}, children: _jsxs("div", { "data-testid": "comment-target-label", className: "bg-highlight-100 absolute left-[-2px] flex max-w-[260px] items-center gap-1 rounded-[3px] px-1.5 py-0.5 text-[11px] leading-4 font-medium whitespace-nowrap text-white", style: labelInside ? { top: -2 } : { bottom: "100%" }, children: [_jsx(MessageCirclePlus, { className: "h-3 w-3 shrink-0", strokeWidth: 1.5 }), _jsx("span", { className: "truncate", children: label })] }) }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=CommentTargetOutline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentTargetOutline.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentTargetOutline.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,GAOP;IACC,wEAAwE;IACxE,gEAAgE;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAEhC,OAAO,CACL,6BACc,wBAAwB,EACpC,SAAS,EAAC,oFAAoF,EAC9F,KAAK,EAAE;YACL,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,CAAC;YACZ,GAAG,EAAE,IAAI,CAAC,CAAC;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM;SACP,YAED,8BACc,sBAAsB,EAClC,SAAS,EAAC,wKAAwK,EAClL,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,aAErD,KAAC,iBAAiB,IAAC,SAAS,EAAC,kBAAkB,EAAC,WAAW,EAAE,GAAG,GAAI,EACpE,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,GAAQ,IACrC,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The editor-document half of comment target picking: form fields become
|
|
3
|
+
* pickable, the picker cursor applies across the editor, Escape or a click on
|
|
4
|
+
* anything that is not a target leaves the mode. Mounted only while picking.
|
|
5
|
+
* (The canvas is covered by `CommentTargetPickerCanvasLayer`.)
|
|
6
|
+
*/
|
|
7
|
+
export declare function CommentTargetPickerDomLayer(): import("react").ReactPortal | null;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
import { COMMENT_PICKER_CURSOR, COMMENT_PICKER_IGNORE_ATTRIBUTE, stopCommentTargetPicking, } from "./commentTargetPicker";
|
|
6
|
+
import { CommentTargetOutline } from "./CommentTargetOutline";
|
|
7
|
+
/** Form fields of the editor (item form, page side form) carry these. */
|
|
8
|
+
const FORM_FIELD_SELECTOR = "[data-field-id][data-itemid]";
|
|
9
|
+
const PICKING_ATTRIBUTE = "data-comment-target-picking";
|
|
10
|
+
function closestFormField(target) {
|
|
11
|
+
return target instanceof Element
|
|
12
|
+
? target.closest(FORM_FIELD_SELECTOR)
|
|
13
|
+
: null;
|
|
14
|
+
}
|
|
15
|
+
function readFieldDescriptor(element) {
|
|
16
|
+
const fieldId = element.getAttribute("data-field-id");
|
|
17
|
+
const itemId = element.getAttribute("data-itemid");
|
|
18
|
+
if (!fieldId || !itemId)
|
|
19
|
+
return null;
|
|
20
|
+
const version = Number.parseInt(element.getAttribute("data-version") ?? "", 10);
|
|
21
|
+
return {
|
|
22
|
+
fieldId,
|
|
23
|
+
item: {
|
|
24
|
+
id: itemId,
|
|
25
|
+
language: element.getAttribute("data-language") ?? "",
|
|
26
|
+
version: Number.isFinite(version) ? version : 0,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The editor-document half of comment target picking: form fields become
|
|
32
|
+
* pickable, the picker cursor applies across the editor, Escape or a click on
|
|
33
|
+
* anything that is not a target leaves the mode. Mounted only while picking.
|
|
34
|
+
* (The canvas is covered by `CommentTargetPickerCanvasLayer`.)
|
|
35
|
+
*/
|
|
36
|
+
export function CommentTargetPickerDomLayer() {
|
|
37
|
+
const editContext = useEditContext();
|
|
38
|
+
const [hovered, setHovered] = useState();
|
|
39
|
+
// The edit context changes identity with every editor state change; the
|
|
40
|
+
// listeners only need its latest `addComment`.
|
|
41
|
+
const addCommentRef = useRef(editContext?.addComment);
|
|
42
|
+
addCommentRef.current = editContext?.addComment;
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
const root = document.documentElement;
|
|
45
|
+
root.setAttribute(PICKING_ATTRIBUTE, "");
|
|
46
|
+
const style = document.createElement("style");
|
|
47
|
+
style.textContent = `html[${PICKING_ATTRIBUTE}], html[${PICKING_ATTRIBUTE}] * { cursor: ${COMMENT_PICKER_CURSOR} !important; }`;
|
|
48
|
+
document.head.appendChild(style);
|
|
49
|
+
let hoveredElement = null;
|
|
50
|
+
const showOutline = (element) => {
|
|
51
|
+
hoveredElement = element;
|
|
52
|
+
if (!element) {
|
|
53
|
+
setHovered(undefined);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const box = element.getBoundingClientRect();
|
|
57
|
+
setHovered({
|
|
58
|
+
rect: { x: box.left, y: box.top, width: box.width, height: box.height },
|
|
59
|
+
label: element.getAttribute("data-fieldname") || "Field",
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
const handleMove = (event) => {
|
|
63
|
+
const field = closestFormField(event.target);
|
|
64
|
+
if (field !== hoveredElement)
|
|
65
|
+
showOutline(field);
|
|
66
|
+
};
|
|
67
|
+
// The outline is fixed-positioned; keep it on its field while scrolling.
|
|
68
|
+
const handleScroll = () => {
|
|
69
|
+
if (hoveredElement)
|
|
70
|
+
showOutline(hoveredElement);
|
|
71
|
+
};
|
|
72
|
+
// The mouse-down is left alone so text can be selected in the field; a
|
|
73
|
+
// selection inside it becomes the comment's range. The click that ends
|
|
74
|
+
// the gesture picks: it must not reach the field's own handlers, and the
|
|
75
|
+
// field gives the focus back so the composer can take it.
|
|
76
|
+
const handleClick = (event) => {
|
|
77
|
+
const target = event.target instanceof Element ? event.target : null;
|
|
78
|
+
if (target?.closest(`[${COMMENT_PICKER_IGNORE_ATTRIBUTE}]`))
|
|
79
|
+
return;
|
|
80
|
+
const field = closestFormField(target);
|
|
81
|
+
const descriptor = field ? readFieldDescriptor(field) : null;
|
|
82
|
+
stopCommentTargetPicking();
|
|
83
|
+
if (!descriptor)
|
|
84
|
+
return; // a click elsewhere just leaves the mode
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
event.stopPropagation();
|
|
87
|
+
const active = document.activeElement;
|
|
88
|
+
if (active instanceof HTMLElement && field?.contains(active)) {
|
|
89
|
+
active.blur();
|
|
90
|
+
}
|
|
91
|
+
addCommentRef.current?.({ field: descriptor });
|
|
92
|
+
};
|
|
93
|
+
const handleKeyDown = (event) => {
|
|
94
|
+
if (event.key !== "Escape")
|
|
95
|
+
return;
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
event.stopPropagation();
|
|
98
|
+
stopCommentTargetPicking();
|
|
99
|
+
};
|
|
100
|
+
document.addEventListener("mousemove", handleMove, true);
|
|
101
|
+
document.addEventListener("scroll", handleScroll, true);
|
|
102
|
+
document.addEventListener("click", handleClick, true);
|
|
103
|
+
document.addEventListener("keydown", handleKeyDown, true);
|
|
104
|
+
return () => {
|
|
105
|
+
document.removeEventListener("mousemove", handleMove, true);
|
|
106
|
+
document.removeEventListener("scroll", handleScroll, true);
|
|
107
|
+
document.removeEventListener("click", handleClick, true);
|
|
108
|
+
document.removeEventListener("keydown", handleKeyDown, true);
|
|
109
|
+
root.removeAttribute(PICKING_ATTRIBUTE);
|
|
110
|
+
style.remove();
|
|
111
|
+
};
|
|
112
|
+
}, []);
|
|
113
|
+
if (!hovered || typeof document === "undefined")
|
|
114
|
+
return null;
|
|
115
|
+
return createPortal(_jsx(CommentTargetOutline, { rect: hovered.rect, label: hovered.label, position: "fixed", zIndex: 300 }), document.body);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=CommentTargetPickerDomLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentTargetPickerDomLayer.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentTargetPickerDomLayer.tsx"],"names":[],"mappings":"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"}
|