@parhelia/core 0.3.12831 → 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.d.ts +58 -0
- package/dist/editor/agent-changes/agentChangeTargets.js +180 -0
- package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -0
- package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +101 -0
- package/dist/editor/agent-changes/agentChangeTextHighlight.js +167 -0
- package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -0
- 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/activityRowNavigation.d.ts +28 -0
- package/dist/editor/ai/activityRowNavigation.js +53 -0
- package/dist/editor/ai/activityRowNavigation.js.map +1 -0
- package/dist/editor/ai/terminal/activeReasoningModel.d.ts +9 -0
- package/dist/editor/ai/terminal/activeReasoningModel.js +20 -0
- package/dist/editor/ai/terminal/activeReasoningModel.js.map +1 -0
- package/dist/editor/ai/terminal/agentDurations.d.ts +27 -0
- package/dist/editor/ai/terminal/agentDurations.js +89 -0
- package/dist/editor/ai/terminal/agentDurations.js.map +1 -0
- package/dist/editor/ai/terminal/agentTurnTiming.d.ts +35 -0
- package/dist/editor/ai/terminal/agentTurnTiming.js +128 -0
- package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.d.ts +9 -0
- package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js +75 -0
- package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.d.ts +10 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.js +12 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.js.map +1 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.d.ts +3 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +47 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.d.ts +15 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +62 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -0
- 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/components/toolCallResultJson.d.ts +1 -0
- package/dist/editor/ai/terminal/components/toolCallResultJson.js +46 -0
- package/dist/editor/ai/terminal/components/toolCallResultJson.js.map +1 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.d.ts +8 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.js +54 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.js.map +1 -0
- package/dist/editor/ai/terminal/requestUsage.d.ts +3 -0
- package/dist/editor/ai/terminal/requestUsage.js +22 -0
- package/dist/editor/ai/terminal/requestUsage.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/ai/terminal/useAgentProviderWait.d.ts +18 -0
- package/dist/editor/ai/terminal/useAgentProviderWait.js +23 -0
- package/dist/editor/ai/terminal/useAgentProviderWait.js.map +1 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.d.ts +5 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.js +10 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.js.map +1 -0
- package/dist/editor/bridge/bridgeKeys.d.ts +5 -0
- package/dist/editor/bridge/bridgeKeys.js +8 -0
- package/dist/editor/bridge/bridgeKeys.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/SessionsDialog.d.ts +2 -0
- package/dist/editor/client/SessionsDialog.js +27 -0
- package/dist/editor/client/SessionsDialog.js.map +1 -0
- package/dist/editor/client/agentLoadItemPolicy.d.ts +22 -0
- package/dist/editor/client/agentLoadItemPolicy.js +60 -0
- package/dist/editor/client/agentLoadItemPolicy.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/localUserEditActivity.d.ts +3 -0
- package/dist/editor/client/localUserEditActivity.js +12 -0
- package/dist/editor/client/localUserEditActivity.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/commands/mediaCommands.d.ts +5 -0
- package/dist/editor/commands/mediaCommands.js +59 -0
- package/dist/editor/commands/mediaCommands.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/componentVisualMode.d.ts +14 -0
- package/dist/editor/componentVisualMode.js +43 -0
- package/dist/editor/componentVisualMode.js.map +1 -0
- package/dist/editor/field-types/FieldHistoryBoundary.d.ts +7 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js +40 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -0
- 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 +32 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js +68 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -0
- 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.d.ts +16 -0
- package/dist/editor/itemContextMenuGroups.js +57 -0
- package/dist/editor/itemContextMenuGroups.js.map +1 -0
- 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/UploadMediaFileDialog.d.ts +5 -0
- package/dist/editor/media-selector/UploadMediaFileDialog.js +14 -0
- package/dist/editor/media-selector/UploadMediaFileDialog.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/OpenPublishedPageButton.d.ts +1 -0
- package/dist/editor/menubar/OpenPublishedPageButton.js +22 -0
- package/dist/editor/menubar/OpenPublishedPageButton.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 +17 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +33 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -0
- 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 +29 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +295 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -0
- 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/diffRulerSegments.d.ts +18 -0
- package/dist/editor/page-editor-chrome/diffRulerSegments.js +37 -0
- package/dist/editor/page-editor-chrome/diffRulerSegments.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/PreviewModeNotice.d.ts +7 -0
- package/dist/editor/page-viewer/PreviewModeNotice.js +19 -0
- package/dist/editor/page-viewer/PreviewModeNotice.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/previewEditAttempt.d.ts +31 -0
- package/dist/editor/page-viewer/previewEditAttempt.js +68 -0
- package/dist/editor/page-viewer/previewEditAttempt.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/migrationService.d.ts +31 -0
- package/dist/editor/services/migrationService.js +22 -0
- package/dist/editor/services/migrationService.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/publicSiteService.d.ts +40 -0
- package/dist/editor/services/publicSiteService.js +5 -0
- package/dist/editor/services/publicSiteService.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/MigrationJournalCard.d.ts +12 -0
- package/dist/editor/settings/MigrationJournalCard.js +114 -0
- package/dist/editor/settings/MigrationJournalCard.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/PublicSiteEntryDialog.d.ts +8 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.js +113 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.js.map +1 -0
- package/dist/editor/settings/panels/PublicSitesPanel.d.ts +1 -0
- package/dist/editor/settings/panels/PublicSitesPanel.js +153 -0
- package/dist/editor/settings/panels/PublicSitesPanel.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/settings/panels/publicSiteHelpers.d.ts +6 -0
- package/dist/editor/settings/panels/publicSiteHelpers.js +30 -0
- package/dist/editor/settings/panels/publicSiteHelpers.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.d.ts +14 -0
- package/dist/editor/sidebar/OperationDetailsContent.js +571 -0
- package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -0
- package/dist/editor/sidebar/liveComponentThumbnails.d.ts +66 -0
- package/dist/editor/sidebar/liveComponentThumbnails.js +225 -0
- package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -0
- 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/PublishReadinessSummary.d.ts +12 -0
- package/dist/editor/ui/PublishReadinessSummary.js +34 -0
- package/dist/editor/ui/PublishReadinessSummary.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/ui/publishReadiness.d.ts +98 -0
- package/dist/editor/ui/publishReadiness.js +307 -0
- package/dist/editor/ui/publishReadiness.js.map +1 -0
- package/dist/editor/ui/usePublishingItem.d.ts +8 -0
- package/dist/editor/ui/usePublishingItem.js +47 -0
- package/dist/editor/ui/usePublishingItem.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/utils/linkDisplay.d.ts +12 -0
- package/dist/editor/utils/linkDisplay.js +23 -0
- package/dist/editor/utils/linkDisplay.js.map +1 -0
- package/dist/editor/validation/ValidationIssuesPopover.d.ts +39 -0
- package/dist/editor/validation/ValidationIssuesPopover.js +51 -0
- package/dist/editor/validation/ValidationIssuesPopover.js.map +1 -0
- package/dist/editor/validation/navigateToValidationIssue.d.ts +13 -0
- package/dist/editor/validation/navigateToValidationIssue.js +43 -0
- package/dist/editor/validation/navigateToValidationIssue.js.map +1 -0
- package/dist/editor/validation/validationFixAgent.d.ts +26 -0
- package/dist/editor/validation/validationFixAgent.js +124 -0
- package/dist/editor/validation/validationFixAgent.js.map +1 -0
- 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/editor/validation/validationSeverity.d.ts +15 -0
- package/dist/editor/validation/validationSeverity.js +47 -0
- package/dist/editor/validation/validationSeverity.js.map +1 -0
- package/dist/lib/viewportClip.d.ts +18 -0
- package/dist/lib/viewportClip.js +22 -0
- package/dist/lib/viewportClip.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/ProjectProgressIndicator.d.ts +8 -0
- package/dist/task-board/components/ProjectProgressIndicator.js +17 -0
- package/dist/task-board/components/ProjectProgressIndicator.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/components/commentAuthor.d.ts +14 -0
- package/dist/task-board/components/commentAuthor.js +25 -0
- package/dist/task-board/components/commentAuthor.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.d.ts +68 -0
- package/dist/task-board/utils/projectDashboardModel.js +369 -0
- package/dist/task-board/utils/projectDashboardModel.js.map +1 -0
- package/dist/task-board/views/ProjectDashboardView.d.ts +28 -0
- package/dist/task-board/views/ProjectDashboardView.js +308 -0
- package/dist/task-board/views/ProjectDashboardView.js.map +1 -0
- package/dist/tour/TourInputBoundary.d.ts +6 -0
- package/dist/tour/TourInputBoundary.js +82 -0
- package/dist/tour/TourInputBoundary.js.map +1 -0
- 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 +112 -6
- package/dist/tour/sandbox-tour.js.map +1 -1
- package/dist/tour/tour-utils.d.ts +6 -0
- package/dist/tour/tour-utils.js +10 -0
- package/dist/tour/tour-utils.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,252 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { buildCommentImageMarkdown, getImageFilesFromDataTransfer, splitCommentImages, uploadCommentImage, } from "./commentImages";
|
|
3
|
+
/**
|
|
4
|
+
* Splits the text of a comment being edited into the plain text and the
|
|
5
|
+
* attachments for the images it references. Order of the images is kept;
|
|
6
|
+
* on save they are appended after the text again.
|
|
7
|
+
*/
|
|
8
|
+
export function splitInitialCommentText(initialText) {
|
|
9
|
+
if (!initialText)
|
|
10
|
+
return { text: "", attachments: [] };
|
|
11
|
+
const attachments = [];
|
|
12
|
+
const textParts = [];
|
|
13
|
+
for (const segment of splitCommentImages(initialText)) {
|
|
14
|
+
if (segment.type === "image") {
|
|
15
|
+
attachments.push({
|
|
16
|
+
key: `existing-${segment.imageId}`,
|
|
17
|
+
imageId: segment.imageId,
|
|
18
|
+
previewUrl: segment.src,
|
|
19
|
+
fileName: `${segment.alt}.png`,
|
|
20
|
+
status: "done",
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
textParts.push(segment.value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { text: textParts.join("\n").trim(), attachments };
|
|
28
|
+
}
|
|
29
|
+
let attachmentSequence = 0;
|
|
30
|
+
// Uploads keyed by attachment key, kept briefly after they settle, so a
|
|
31
|
+
// composer remounted with a persisted draft can pick up an upload that was
|
|
32
|
+
// still running when the previous instance unmounted.
|
|
33
|
+
const inflightUploads = new Map();
|
|
34
|
+
const INFLIGHT_RETENTION_MS = 30_000;
|
|
35
|
+
function rememberUpload(key, upload) {
|
|
36
|
+
inflightUploads.set(key, upload);
|
|
37
|
+
const forget = () => {
|
|
38
|
+
window.setTimeout(() => {
|
|
39
|
+
if (inflightUploads.get(key) === upload)
|
|
40
|
+
inflightUploads.delete(key);
|
|
41
|
+
}, INFLIGHT_RETENTION_MS);
|
|
42
|
+
};
|
|
43
|
+
upload.then(forget, forget);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Lets a comment composer accept pasted (or dropped) screenshots. Each image
|
|
47
|
+
* shows up as a thumbnail above the textarea while it uploads; the composer
|
|
48
|
+
* keeps typing text only, and `buildSubmitText` appends one markdown
|
|
49
|
+
* reference line per uploaded image when the comment is saved.
|
|
50
|
+
*
|
|
51
|
+
* Uploads are bound to the composer target: when `scope`/`scopeId` change while
|
|
52
|
+
* an upload is in flight (e.g. the task panel switches tasks), the attachments
|
|
53
|
+
* are dropped instead of ending up on the new target's comment.
|
|
54
|
+
*/
|
|
55
|
+
export function useCommentImagePaste({ scope, scopeId, scopeLanguage, initialText, initialAttachments, onAttachmentsChange, disabled = false, }) {
|
|
56
|
+
const persistent = initialAttachments !== undefined;
|
|
57
|
+
const [attachments, setAttachments] = React.useState(() => initialAttachments ?? splitInitialCommentText(initialText).attachments);
|
|
58
|
+
const attachmentsRef = React.useRef(attachments);
|
|
59
|
+
attachmentsRef.current = attachments;
|
|
60
|
+
const onAttachmentsChangeRef = React.useRef(onAttachmentsChange);
|
|
61
|
+
onAttachmentsChangeRef.current = onAttachmentsChange;
|
|
62
|
+
const persistentRef = React.useRef(persistent);
|
|
63
|
+
persistentRef.current = persistent;
|
|
64
|
+
React.useEffect(() => {
|
|
65
|
+
onAttachmentsChangeRef.current?.(attachments);
|
|
66
|
+
}, [attachments]);
|
|
67
|
+
const waitersRef = React.useRef([]);
|
|
68
|
+
const mountedRef = React.useRef(true);
|
|
69
|
+
// Every target change starts a new generation; uploads remember the generation
|
|
70
|
+
// they started in and become no-ops once it moves on.
|
|
71
|
+
const targetKey = `${scope}:${scopeId ?? ""}`;
|
|
72
|
+
const targetKeyRef = React.useRef(targetKey);
|
|
73
|
+
const generationRef = React.useRef(0);
|
|
74
|
+
const pendingCount = React.useMemo(() => attachments.filter((a) => a.status === "uploading").length, [attachments]);
|
|
75
|
+
const readyCount = React.useMemo(() => attachments.filter((a) => a.status === "done" && a.imageId).length, [attachments]);
|
|
76
|
+
const resolveWaiters = React.useCallback(() => {
|
|
77
|
+
const waiters = waitersRef.current;
|
|
78
|
+
waitersRef.current = [];
|
|
79
|
+
waiters.forEach((resolve) => resolve());
|
|
80
|
+
}, []);
|
|
81
|
+
React.useEffect(() => {
|
|
82
|
+
if (pendingCount === 0)
|
|
83
|
+
resolveWaiters();
|
|
84
|
+
}, [pendingCount, resolveWaiters]);
|
|
85
|
+
const revokePreview = (attachment) => {
|
|
86
|
+
if (attachment.previewUrl.startsWith("blob:")) {
|
|
87
|
+
URL.revokeObjectURL(attachment.previewUrl);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
React.useEffect(() => {
|
|
91
|
+
mountedRef.current = true;
|
|
92
|
+
return () => {
|
|
93
|
+
mountedRef.current = false;
|
|
94
|
+
generationRef.current += 1;
|
|
95
|
+
// A persisted draft keeps its thumbnails alive across remounts.
|
|
96
|
+
if (!persistentRef.current) {
|
|
97
|
+
attachmentsRef.current.forEach(revokePreview);
|
|
98
|
+
}
|
|
99
|
+
resolveWaiters();
|
|
100
|
+
};
|
|
101
|
+
}, [resolveWaiters]);
|
|
102
|
+
const clearAttachments = React.useCallback(() => {
|
|
103
|
+
generationRef.current += 1;
|
|
104
|
+
attachmentsRef.current.forEach(revokePreview);
|
|
105
|
+
setAttachments([]);
|
|
106
|
+
resolveWaiters();
|
|
107
|
+
}, [resolveWaiters]);
|
|
108
|
+
React.useEffect(() => {
|
|
109
|
+
if (targetKeyRef.current === targetKey)
|
|
110
|
+
return;
|
|
111
|
+
targetKeyRef.current = targetKey;
|
|
112
|
+
clearAttachments();
|
|
113
|
+
}, [clearAttachments, targetKey]);
|
|
114
|
+
const updateAttachment = React.useCallback((key, patch) => {
|
|
115
|
+
setAttachments((current) => current.map((a) => (a.key === key ? { ...a, ...patch } : a)));
|
|
116
|
+
}, []);
|
|
117
|
+
// Resume uploads that a previous composer instance started for this draft.
|
|
118
|
+
React.useEffect(() => {
|
|
119
|
+
const generation = generationRef.current;
|
|
120
|
+
const isStale = () => !mountedRef.current || generation !== generationRef.current;
|
|
121
|
+
attachmentsRef.current.forEach((attachment) => {
|
|
122
|
+
if (attachment.status !== "uploading")
|
|
123
|
+
return;
|
|
124
|
+
const pending = inflightUploads.get(attachment.key);
|
|
125
|
+
if (!pending) {
|
|
126
|
+
updateAttachment(attachment.key, {
|
|
127
|
+
status: "error",
|
|
128
|
+
error: "Image upload was interrupted",
|
|
129
|
+
});
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
pending.then((uploaded) => {
|
|
133
|
+
if (isStale())
|
|
134
|
+
return;
|
|
135
|
+
updateAttachment(attachment.key, {
|
|
136
|
+
imageId: uploaded.imageId,
|
|
137
|
+
status: "done",
|
|
138
|
+
});
|
|
139
|
+
}, (err) => {
|
|
140
|
+
if (isStale())
|
|
141
|
+
return;
|
|
142
|
+
updateAttachment(attachment.key, {
|
|
143
|
+
status: "error",
|
|
144
|
+
error: err instanceof Error && err.message
|
|
145
|
+
? err.message
|
|
146
|
+
: "Image upload failed",
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
// Runs once per mount: only attachments restored from a draft can be mid-upload.
|
|
151
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
152
|
+
}, []);
|
|
153
|
+
const uploadFiles = React.useCallback(async (files) => {
|
|
154
|
+
const generation = generationRef.current;
|
|
155
|
+
const isStale = () => !mountedRef.current || generation !== generationRef.current;
|
|
156
|
+
const created = files.map((file) => ({
|
|
157
|
+
key: `pasted-${Date.now()}-${attachmentSequence++}`,
|
|
158
|
+
previewUrl: URL.createObjectURL(file),
|
|
159
|
+
fileName: file.name,
|
|
160
|
+
status: "uploading",
|
|
161
|
+
}));
|
|
162
|
+
setAttachments((current) => [...current, ...created]);
|
|
163
|
+
for (let index = 0; index < files.length; index++) {
|
|
164
|
+
const file = files[index];
|
|
165
|
+
const key = created[index].key;
|
|
166
|
+
try {
|
|
167
|
+
const upload = uploadCommentImage(file, scope, scopeId, scopeLanguage);
|
|
168
|
+
rememberUpload(key, upload);
|
|
169
|
+
const uploaded = await upload;
|
|
170
|
+
if (isStale())
|
|
171
|
+
return;
|
|
172
|
+
updateAttachment(key, { imageId: uploaded.imageId, status: "done" });
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
if (isStale())
|
|
176
|
+
return;
|
|
177
|
+
updateAttachment(key, {
|
|
178
|
+
status: "error",
|
|
179
|
+
error: err instanceof Error && err.message
|
|
180
|
+
? err.message
|
|
181
|
+
: "Image upload failed",
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}, [scope, scopeId, scopeLanguage, updateAttachment]);
|
|
186
|
+
const removeAttachment = React.useCallback((key) => {
|
|
187
|
+
setAttachments((current) => {
|
|
188
|
+
const target = current.find((a) => a.key === key);
|
|
189
|
+
if (target)
|
|
190
|
+
revokePreview(target);
|
|
191
|
+
return current.filter((a) => a.key !== key);
|
|
192
|
+
});
|
|
193
|
+
}, []);
|
|
194
|
+
const onPaste = React.useCallback((event) => {
|
|
195
|
+
if (disabled)
|
|
196
|
+
return;
|
|
197
|
+
const files = getImageFilesFromDataTransfer(event.clipboardData);
|
|
198
|
+
if (files.length === 0)
|
|
199
|
+
return;
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
void uploadFiles(files);
|
|
202
|
+
}, [disabled, uploadFiles]);
|
|
203
|
+
const onDragOver = React.useCallback((event) => {
|
|
204
|
+
if (disabled)
|
|
205
|
+
return;
|
|
206
|
+
// File lists are not readable during drag-over; the types tell us enough.
|
|
207
|
+
const types = Array.from(event.dataTransfer?.types ?? []);
|
|
208
|
+
if (!types.includes("Files"))
|
|
209
|
+
return;
|
|
210
|
+
event.preventDefault();
|
|
211
|
+
event.dataTransfer.dropEffect = "copy";
|
|
212
|
+
}, [disabled]);
|
|
213
|
+
const onDrop = React.useCallback((event) => {
|
|
214
|
+
if (disabled)
|
|
215
|
+
return;
|
|
216
|
+
const files = getImageFilesFromDataTransfer(event.dataTransfer);
|
|
217
|
+
if (files.length === 0)
|
|
218
|
+
return;
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
void uploadFiles(files);
|
|
221
|
+
}, [disabled, uploadFiles]);
|
|
222
|
+
const waitForUploads = React.useCallback(() => new Promise((resolve) => {
|
|
223
|
+
const pending = attachmentsRef.current.some((a) => a.status === "uploading");
|
|
224
|
+
if (!pending) {
|
|
225
|
+
resolve();
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
waitersRef.current.push(resolve);
|
|
229
|
+
}), []);
|
|
230
|
+
const buildSubmitText = React.useCallback((text) => {
|
|
231
|
+
const references = attachmentsRef.current
|
|
232
|
+
.filter((a) => a.status === "done" && a.imageId)
|
|
233
|
+
.map((a) => buildCommentImageMarkdown(a.imageId));
|
|
234
|
+
const body = text.trim();
|
|
235
|
+
if (references.length === 0)
|
|
236
|
+
return body;
|
|
237
|
+
return body ? `${body}\n${references.join("\n")}` : references.join("\n");
|
|
238
|
+
}, []);
|
|
239
|
+
return {
|
|
240
|
+
onPaste,
|
|
241
|
+
onDragOver,
|
|
242
|
+
onDrop,
|
|
243
|
+
attachments,
|
|
244
|
+
removeAttachment,
|
|
245
|
+
clearAttachments,
|
|
246
|
+
uploading: pendingCount > 0,
|
|
247
|
+
readyCount,
|
|
248
|
+
waitForUploads,
|
|
249
|
+
buildSubmitText,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=useCommentImagePaste.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCommentImagePaste.js","sourceRoot":"","sources":["../../../src/editor/reviews/useCommentImagePaste.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { FeedbackItem } from "./feedbackOrdering";
|
|
2
|
+
import { type FeedbackSort, type FeedbackThread } from "./feedbackThreads";
|
|
3
|
+
export declare function formatAccountName(userName?: string): string;
|
|
4
|
+
export declare function getStoredAuthorName(item: FeedbackItem): string | undefined;
|
|
5
|
+
export type FeedbackAuthorOption = {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
export type UseFeedbackThreadsOptions = {
|
|
10
|
+
/** Explicit ordering (the list); the margin orders by anchor and omits it. */
|
|
11
|
+
sort?: FeedbackSort;
|
|
12
|
+
};
|
|
13
|
+
export type UseFeedbackThreadsResult = {
|
|
14
|
+
threads: FeedbackThread[];
|
|
15
|
+
availableAuthors: FeedbackAuthorOption[];
|
|
16
|
+
selectedPersonFilter: string[];
|
|
17
|
+
setSelectedPersonFilter: (people: string[]) => void;
|
|
18
|
+
resolvedAuthorNames: Record<string, string>;
|
|
19
|
+
getAuthorName: (item: FeedbackItem) => string;
|
|
20
|
+
availableTags: {
|
|
21
|
+
label: string;
|
|
22
|
+
color: string;
|
|
23
|
+
}[];
|
|
24
|
+
showResolved: boolean;
|
|
25
|
+
setShowResolved: (showResolved: boolean) => void;
|
|
26
|
+
suggestionsAvailable: boolean;
|
|
27
|
+
isSuggestionsMode: boolean;
|
|
28
|
+
commentsLoaded: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The data behind every feedback surface: the loaded comments and suggested
|
|
32
|
+
* edits as filtered, grouped threads, plus the shared filter state and author
|
|
33
|
+
* display-name resolution.
|
|
34
|
+
*/
|
|
35
|
+
export declare function useFeedbackThreads(options?: UseFeedbackThreadsOptions): UseFeedbackThreadsResult;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { useEditContext } from "../client/editContext";
|
|
3
|
+
import { searchUsers } from "../services/userService";
|
|
4
|
+
import { setFeedbackPersonFilter, useFeedbackPersonFilter, } from "./feedbackPersonFilter";
|
|
5
|
+
import { buildFeedbackThreads, } from "./feedbackThreads";
|
|
6
|
+
import { isSuggestionsModeAvailable } from "./openCommentsFeedback";
|
|
7
|
+
export function formatAccountName(userName) {
|
|
8
|
+
const trimmed = userName?.trim();
|
|
9
|
+
if (!trimmed)
|
|
10
|
+
return "Unknown";
|
|
11
|
+
const slashIndex = trimmed.lastIndexOf("\\");
|
|
12
|
+
if (slashIndex >= 0 && slashIndex < trimmed.length - 1) {
|
|
13
|
+
return trimmed.slice(slashIndex + 1);
|
|
14
|
+
}
|
|
15
|
+
return trimmed;
|
|
16
|
+
}
|
|
17
|
+
export function getStoredAuthorName(item) {
|
|
18
|
+
const storedDisplayName = item.authorDisplayName?.trim();
|
|
19
|
+
const author = item.author?.trim() || "";
|
|
20
|
+
if (storedDisplayName &&
|
|
21
|
+
storedDisplayName.localeCompare(author, undefined, {
|
|
22
|
+
sensitivity: "accent",
|
|
23
|
+
}) !== 0) {
|
|
24
|
+
return storedDisplayName;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The data behind every feedback surface: the loaded comments and suggested
|
|
30
|
+
* edits as filtered, grouped threads, plus the shared filter state and author
|
|
31
|
+
* display-name resolution.
|
|
32
|
+
*/
|
|
33
|
+
export function useFeedbackThreads(options = {}) {
|
|
34
|
+
const editContext = useEditContext();
|
|
35
|
+
const [resolvedAuthorNames, setResolvedAuthorNames] = useState({});
|
|
36
|
+
const selectedPersonFilter = useFeedbackPersonFilter();
|
|
37
|
+
const setSelectedPersonFilter = setFeedbackPersonFilter;
|
|
38
|
+
const comments = editContext?.comments;
|
|
39
|
+
const suggestedEdits = editContext?.suggestedEdits;
|
|
40
|
+
const showResolved = !!editContext?.showResolvedComments;
|
|
41
|
+
const threads = useMemo(() => buildFeedbackThreads({
|
|
42
|
+
comments: comments || [],
|
|
43
|
+
suggestedEdits: suggestedEdits || [],
|
|
44
|
+
showResolved,
|
|
45
|
+
selectedPeople: selectedPersonFilter,
|
|
46
|
+
sort: options.sort,
|
|
47
|
+
}), [
|
|
48
|
+
comments,
|
|
49
|
+
suggestedEdits,
|
|
50
|
+
showResolved,
|
|
51
|
+
selectedPersonFilter,
|
|
52
|
+
options.sort?.field,
|
|
53
|
+
options.sort?.direction,
|
|
54
|
+
]);
|
|
55
|
+
const availableAuthors = useMemo(() => {
|
|
56
|
+
const authors = new Map();
|
|
57
|
+
(comments || []).forEach((c) => {
|
|
58
|
+
if (c.author) {
|
|
59
|
+
authors.set(c.author, getStoredAuthorName(c) ||
|
|
60
|
+
resolvedAuthorNames[c.author] ||
|
|
61
|
+
formatAccountName(c.author));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return Array.from(authors.entries()).map(([id, name]) => ({ id, name }));
|
|
65
|
+
}, [comments, resolvedAuthorNames]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
const allFeedbackItems = [
|
|
68
|
+
...(comments || []),
|
|
69
|
+
...(suggestedEdits || []),
|
|
70
|
+
];
|
|
71
|
+
const authors = Array.from(new Set(allFeedbackItems
|
|
72
|
+
.map((item) => item.author?.trim())
|
|
73
|
+
.filter((author) => !!author))).filter((author) => !resolvedAuthorNames[author]);
|
|
74
|
+
if (authors.length === 0)
|
|
75
|
+
return;
|
|
76
|
+
let cancelled = false;
|
|
77
|
+
const resolveAuthors = async () => {
|
|
78
|
+
const entries = await Promise.all(authors.map(async (author) => {
|
|
79
|
+
try {
|
|
80
|
+
const users = await searchUsers(author, 5);
|
|
81
|
+
const exact = users.find((user) => user.userName.localeCompare(author, undefined, {
|
|
82
|
+
sensitivity: "accent",
|
|
83
|
+
}) === 0) || users[0];
|
|
84
|
+
const displayName = exact?.displayName?.trim();
|
|
85
|
+
if (displayName &&
|
|
86
|
+
displayName.localeCompare(author, undefined, {
|
|
87
|
+
sensitivity: "accent",
|
|
88
|
+
}) !== 0) {
|
|
89
|
+
return [author, displayName];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Best effort: older feedback may only have the account id stored.
|
|
94
|
+
}
|
|
95
|
+
return [author, formatAccountName(author)];
|
|
96
|
+
}));
|
|
97
|
+
if (cancelled)
|
|
98
|
+
return;
|
|
99
|
+
setResolvedAuthorNames((current) => {
|
|
100
|
+
const next = { ...current };
|
|
101
|
+
entries.forEach(([author, displayName]) => {
|
|
102
|
+
next[author] = displayName;
|
|
103
|
+
});
|
|
104
|
+
return next;
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
resolveAuthors();
|
|
108
|
+
return () => {
|
|
109
|
+
cancelled = true;
|
|
110
|
+
};
|
|
111
|
+
}, [comments, suggestedEdits, resolvedAuthorNames]);
|
|
112
|
+
const getAuthorName = useCallback((item) => {
|
|
113
|
+
const storedName = getStoredAuthorName(item);
|
|
114
|
+
if (storedName)
|
|
115
|
+
return storedName;
|
|
116
|
+
if (item.author && resolvedAuthorNames[item.author]) {
|
|
117
|
+
return resolvedAuthorNames[item.author];
|
|
118
|
+
}
|
|
119
|
+
return formatAccountName(item.author);
|
|
120
|
+
}, [resolvedAuthorNames]);
|
|
121
|
+
const setShowResolved = useCallback((value) => editContext?.setShowResolvedComments(value), [editContext]);
|
|
122
|
+
return {
|
|
123
|
+
threads,
|
|
124
|
+
availableAuthors,
|
|
125
|
+
selectedPersonFilter,
|
|
126
|
+
setSelectedPersonFilter,
|
|
127
|
+
resolvedAuthorNames,
|
|
128
|
+
getAuthorName,
|
|
129
|
+
availableTags: editContext?.availableCommentTags || [],
|
|
130
|
+
showResolved,
|
|
131
|
+
setShowResolved,
|
|
132
|
+
suggestionsAvailable: isSuggestionsModeAvailable(editContext),
|
|
133
|
+
isSuggestionsMode: editContext?.mode === "suggestions",
|
|
134
|
+
commentsLoaded: !!editContext?.commentsLoaded,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=useFeedbackThreads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFeedbackThreads.js","sourceRoot":"","sources":["../../../src/editor/reviews/useFeedbackThreads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks the rendered height of many elements (the margin cards).
|
|
3
|
+
*
|
|
4
|
+
* Cards register their element through a stable callback ref. Heights are
|
|
5
|
+
* read with `getBoundingClientRect` in `syncMeasurements`, which the owner
|
|
6
|
+
* calls from a layout effect after each of its renders, and which a
|
|
7
|
+
* MutationObserver on the column (`observeMutations`) triggers after any DOM
|
|
8
|
+
* change inside a card (composer opened, text expanded, replies unfolded).
|
|
9
|
+
* A ResizeObserver covers size changes without DOM mutations (images).
|
|
10
|
+
*
|
|
11
|
+
* The ref callback returns a cleanup bound to its element, and an id may
|
|
12
|
+
* hold several elements at once: a thread can be mounted twice for a moment
|
|
13
|
+
* (the new card attaches before the stale one detaches, or a transient copy
|
|
14
|
+
* appears in the footer while the anchored card stays). Measurements always
|
|
15
|
+
* use the element that is still connected.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useMeasuredHeights(): {
|
|
18
|
+
heights: Record<string, number>;
|
|
19
|
+
registerCard: (id: string) => (element: HTMLElement | null) => (() => void) | void;
|
|
20
|
+
prune: (liveIds: Iterable<string>) => void;
|
|
21
|
+
syncMeasurements: (options?: {
|
|
22
|
+
all?: boolean;
|
|
23
|
+
}) => void;
|
|
24
|
+
observeMutations: (root: Element | null) => () => void;
|
|
25
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Tracks the rendered height of many elements (the margin cards).
|
|
4
|
+
*
|
|
5
|
+
* Cards register their element through a stable callback ref. Heights are
|
|
6
|
+
* read with `getBoundingClientRect` in `syncMeasurements`, which the owner
|
|
7
|
+
* calls from a layout effect after each of its renders, and which a
|
|
8
|
+
* MutationObserver on the column (`observeMutations`) triggers after any DOM
|
|
9
|
+
* change inside a card (composer opened, text expanded, replies unfolded).
|
|
10
|
+
* A ResizeObserver covers size changes without DOM mutations (images).
|
|
11
|
+
*
|
|
12
|
+
* The ref callback returns a cleanup bound to its element, and an id may
|
|
13
|
+
* hold several elements at once: a thread can be mounted twice for a moment
|
|
14
|
+
* (the new card attaches before the stale one detaches, or a transient copy
|
|
15
|
+
* appears in the footer while the anchored card stays). Measurements always
|
|
16
|
+
* use the element that is still connected.
|
|
17
|
+
*/
|
|
18
|
+
export function useMeasuredHeights() {
|
|
19
|
+
const [heights, setHeights] = useState({});
|
|
20
|
+
const heightsRef = useRef(heights);
|
|
21
|
+
heightsRef.current = heights;
|
|
22
|
+
const observerRef = useRef(null);
|
|
23
|
+
const elementsRef = useRef(new Map());
|
|
24
|
+
const observedRef = useRef(new WeakSet());
|
|
25
|
+
const idsRef = useRef(new WeakMap());
|
|
26
|
+
const callbacksRef = useRef(new Map());
|
|
27
|
+
const frameRef = useRef(null);
|
|
28
|
+
const applyHeights = useCallback((patch) => {
|
|
29
|
+
setHeights((current) => {
|
|
30
|
+
let next = null;
|
|
31
|
+
for (const [id, height] of Object.entries(patch)) {
|
|
32
|
+
if ((next ?? current)[id] === height)
|
|
33
|
+
continue;
|
|
34
|
+
next ??= { ...current };
|
|
35
|
+
next[id] = height;
|
|
36
|
+
}
|
|
37
|
+
return next ?? current;
|
|
38
|
+
});
|
|
39
|
+
}, []);
|
|
40
|
+
const getObserver = useCallback(() => {
|
|
41
|
+
if (observerRef.current)
|
|
42
|
+
return observerRef.current;
|
|
43
|
+
if (typeof ResizeObserver === "undefined")
|
|
44
|
+
return null;
|
|
45
|
+
observerRef.current = new ResizeObserver((entries) => {
|
|
46
|
+
const patch = {};
|
|
47
|
+
for (const entry of entries) {
|
|
48
|
+
const id = idsRef.current.get(entry.target);
|
|
49
|
+
if (!id)
|
|
50
|
+
continue;
|
|
51
|
+
patch[id] =
|
|
52
|
+
entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height;
|
|
53
|
+
}
|
|
54
|
+
if (Object.keys(patch).length > 0)
|
|
55
|
+
applyHeights(patch);
|
|
56
|
+
});
|
|
57
|
+
return observerRef.current;
|
|
58
|
+
}, [applyHeights]);
|
|
59
|
+
const unregister = useCallback((id, element) => {
|
|
60
|
+
observerRef.current?.unobserve(element);
|
|
61
|
+
observedRef.current.delete(element);
|
|
62
|
+
idsRef.current.delete(element);
|
|
63
|
+
const elements = elementsRef.current.get(id);
|
|
64
|
+
if (!elements)
|
|
65
|
+
return;
|
|
66
|
+
elements.delete(element);
|
|
67
|
+
if (elements.size === 0)
|
|
68
|
+
elementsRef.current.delete(id);
|
|
69
|
+
}, []);
|
|
70
|
+
/** A stable callback ref for the element that renders thread `id`. */
|
|
71
|
+
const registerCard = useCallback((id) => {
|
|
72
|
+
const cached = callbacksRef.current.get(id);
|
|
73
|
+
if (cached)
|
|
74
|
+
return cached;
|
|
75
|
+
const callback = (element) => {
|
|
76
|
+
if (!element)
|
|
77
|
+
return undefined;
|
|
78
|
+
let elements = elementsRef.current.get(id);
|
|
79
|
+
if (!elements) {
|
|
80
|
+
elements = new Set();
|
|
81
|
+
elementsRef.current.set(id, elements);
|
|
82
|
+
}
|
|
83
|
+
elements.add(element);
|
|
84
|
+
idsRef.current.set(element, id);
|
|
85
|
+
return () => unregister(id, element);
|
|
86
|
+
};
|
|
87
|
+
callbacksRef.current.set(id, callback);
|
|
88
|
+
return callback;
|
|
89
|
+
}, [unregister]);
|
|
90
|
+
/**
|
|
91
|
+
* Observe every registered element and refresh heights from a direct
|
|
92
|
+
* measurement: unknown heights always, known ones when `all` is set.
|
|
93
|
+
*/
|
|
94
|
+
const syncMeasurements = useCallback((options = {}) => {
|
|
95
|
+
const observer = getObserver();
|
|
96
|
+
let patch = null;
|
|
97
|
+
elementsRef.current.forEach((elements, id) => {
|
|
98
|
+
let live = null;
|
|
99
|
+
elements.forEach((element) => {
|
|
100
|
+
if (observer && !observedRef.current.has(element)) {
|
|
101
|
+
observer.observe(element, { box: "border-box" });
|
|
102
|
+
observedRef.current.add(element);
|
|
103
|
+
}
|
|
104
|
+
if (!live && element.isConnected)
|
|
105
|
+
live = element;
|
|
106
|
+
});
|
|
107
|
+
if (!live)
|
|
108
|
+
return;
|
|
109
|
+
const known = heightsRef.current[id];
|
|
110
|
+
if (options.all || !(known > 0)) {
|
|
111
|
+
const height = live.getBoundingClientRect().height;
|
|
112
|
+
if (height > 0 && height !== known)
|
|
113
|
+
(patch ??= {})[id] = height;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
if (patch)
|
|
117
|
+
applyHeights(patch);
|
|
118
|
+
}, [getObserver, applyHeights]);
|
|
119
|
+
/**
|
|
120
|
+
* Re-measure after any DOM change under `root` (the column): cards grow and
|
|
121
|
+
* shrink through their own renders, which the owner cannot observe.
|
|
122
|
+
*/
|
|
123
|
+
const observeMutations = useCallback((root) => {
|
|
124
|
+
if (!root || typeof MutationObserver === "undefined")
|
|
125
|
+
return () => { };
|
|
126
|
+
const schedule = () => {
|
|
127
|
+
if (frameRef.current != null)
|
|
128
|
+
return;
|
|
129
|
+
frameRef.current = window.requestAnimationFrame(() => {
|
|
130
|
+
frameRef.current = null;
|
|
131
|
+
syncMeasurements({ all: true });
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
const observer = new MutationObserver(schedule);
|
|
135
|
+
observer.observe(root, {
|
|
136
|
+
subtree: true,
|
|
137
|
+
childList: true,
|
|
138
|
+
attributes: true,
|
|
139
|
+
characterData: true,
|
|
140
|
+
});
|
|
141
|
+
return () => {
|
|
142
|
+
observer.disconnect();
|
|
143
|
+
if (frameRef.current != null) {
|
|
144
|
+
window.cancelAnimationFrame(frameRef.current);
|
|
145
|
+
frameRef.current = null;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}, [syncMeasurements]);
|
|
149
|
+
// Forget heights of cards that are no longer rendered anywhere.
|
|
150
|
+
const prune = useCallback((liveIds) => {
|
|
151
|
+
const keep = new Set(liveIds);
|
|
152
|
+
callbacksRef.current.forEach((_, id) => {
|
|
153
|
+
if (!keep.has(id) && !elementsRef.current.has(id)) {
|
|
154
|
+
callbacksRef.current.delete(id);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
setHeights((current) => {
|
|
158
|
+
const stale = Object.keys(current).filter((id) => !keep.has(id));
|
|
159
|
+
if (stale.length === 0)
|
|
160
|
+
return current;
|
|
161
|
+
const next = { ...current };
|
|
162
|
+
stale.forEach((id) => delete next[id]);
|
|
163
|
+
return next;
|
|
164
|
+
});
|
|
165
|
+
}, []);
|
|
166
|
+
useEffect(() => () => {
|
|
167
|
+
// Drop the observer together with its bookkeeping. StrictMode runs
|
|
168
|
+
// this cleanup and then the layout effects again: with the observed
|
|
169
|
+
// set kept, nothing would be re-observed by the replacement observer.
|
|
170
|
+
observerRef.current?.disconnect();
|
|
171
|
+
observerRef.current = null;
|
|
172
|
+
observedRef.current = new WeakSet();
|
|
173
|
+
}, []);
|
|
174
|
+
return { heights, registerCard, prune, syncMeasurements, observeMutations };
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=useMeasuredHeights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMeasuredHeights.js","sourceRoot":"","sources":["../../../src/editor/reviews/useMeasuredHeights.ts"],"names":[],"mappings":"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"}
|