@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,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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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Comment as CommentType } from "../../types";
|
|
2
|
+
export declare const COMMENT_THREAD_AGENT_LINK_LABEL = "Resolve with agent";
|
|
3
|
+
/**
|
|
4
|
+
* Put this class on the element whose hover reveals the link (the thread card
|
|
5
|
+
* or the popover body). Touch devices get the link permanently.
|
|
6
|
+
*/
|
|
7
|
+
export declare const COMMENT_THREAD_HOVER_GROUP_CLASS = "group/comment-thread";
|
|
8
|
+
type CommentThreadAgentLinkProps = {
|
|
9
|
+
rootComment: CommentType;
|
|
10
|
+
/** Every comment of the thread; order does not matter. */
|
|
11
|
+
threadComments: readonly CommentType[];
|
|
12
|
+
resolvedAuthorNames?: Record<string, string>;
|
|
13
|
+
className?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Shares a single line with other actions (margin balloon): never wraps;
|
|
16
|
+
* the label truncates before it would push the line apart.
|
|
17
|
+
*/
|
|
18
|
+
compact?: boolean;
|
|
19
|
+
onStarted?: () => void;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Link rendered at the end of a comment conversation that starts an agent
|
|
23
|
+
* seeded with the complete thread. Renders nothing when agents are not
|
|
24
|
+
* available or the thread cannot be worked on (resolved, read-only, unsaved).
|
|
25
|
+
* Hidden until the surrounding thread is hovered or the link has focus.
|
|
26
|
+
*/
|
|
27
|
+
export declare function CommentThreadAgentLink({ rootComment, threadComments, resolvedAuthorNames, className, compact, onStarted, }: CommentThreadAgentLinkProps): import("react").JSX.Element | null;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Sparkles } from "lucide-react";
|
|
3
|
+
import { useEditContext } from "../client/editContext";
|
|
4
|
+
import { LicenseFeatures, useFeature } from "../../licensing";
|
|
5
|
+
import { hasAgentsPanel } from "../validation/validationFixAgent";
|
|
6
|
+
import { openAiAgentForCommentThread } from "./commentAi";
|
|
7
|
+
import { cn } from "../../lib/utils";
|
|
8
|
+
export const COMMENT_THREAD_AGENT_LINK_LABEL = "Resolve with agent";
|
|
9
|
+
/**
|
|
10
|
+
* Put this class on the element whose hover reveals the link (the thread card
|
|
11
|
+
* or the popover body). Touch devices get the link permanently.
|
|
12
|
+
*/
|
|
13
|
+
export const COMMENT_THREAD_HOVER_GROUP_CLASS = "group/comment-thread";
|
|
14
|
+
/**
|
|
15
|
+
* Link rendered at the end of a comment conversation that starts an agent
|
|
16
|
+
* seeded with the complete thread. Renders nothing when agents are not
|
|
17
|
+
* available or the thread cannot be worked on (resolved, read-only, unsaved).
|
|
18
|
+
* Hidden until the surrounding thread is hovered or the link has focus.
|
|
19
|
+
*/
|
|
20
|
+
export function CommentThreadAgentLink({ rootComment, threadComments, resolvedAuthorNames, className, compact = false, onStarted, }) {
|
|
21
|
+
const editContext = useEditContext();
|
|
22
|
+
const canUseAi = useFeature(LicenseFeatures.AI);
|
|
23
|
+
if (!canUseAi ||
|
|
24
|
+
!hasAgentsPanel(editContext) ||
|
|
25
|
+
rootComment.isNew ||
|
|
26
|
+
rootComment.isResolved ||
|
|
27
|
+
editContext?.readonly) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return (_jsx("div", { className: cn("flex", compact && "min-w-0", className), children: _jsxs("button", { type: "button", className: cn("text-neutral-grey-50 hover:text-neutral-grey-100 inline-flex items-start text-left text-xs leading-4 underline-offset-2 transition-opacity hover:underline focus-visible:opacity-100", compact ? "max-w-full min-w-0 gap-1" : "gap-1.5", !editContext?.isMobile &&
|
|
31
|
+
"opacity-0 group-hover/comment-thread:opacity-100"), title: compact ? COMMENT_THREAD_AGENT_LINK_LABEL : undefined, "data-testid": "comment-thread-start-agent", onClick: (event) => {
|
|
32
|
+
event.stopPropagation();
|
|
33
|
+
openAiAgentForCommentThread(rootComment, threadComments, editContext, resolvedAuthorNames);
|
|
34
|
+
onStarted?.();
|
|
35
|
+
}, children: [_jsx(Sparkles, { className: "mt-px h-3.5 w-3.5 shrink-0", strokeWidth: 1 }), compact ? (_jsx("span", { className: "truncate", children: COMMENT_THREAD_AGENT_LINK_LABEL })) : (COMMENT_THREAD_AGENT_LINK_LABEL)] }) }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=CommentThreadAgentLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentThreadAgentLink.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentThreadAgentLink.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;AAEpE;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AAgBvE;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,EACrC,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,OAAO,GAAG,KAAK,EACf,SAAS,GACmB;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAEhD,IACE,CAAC,QAAQ;QACT,CAAC,cAAc,CAAC,WAAW,CAAC;QAC5B,WAAW,CAAC,KAAK;QACjB,WAAW,CAAC,UAAU;QACtB,WAAW,EAAE,QAAQ,EACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,SAAS,EAAE,SAAS,CAAC,YACzD,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,EAAE,CACX,sLAAsL,EACtL,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,EAChD,CAAC,WAAW,EAAE,QAAQ;gBACpB,kDAAkD,CACrD,EACD,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,SAAS,iBAChD,4BAA4B,EACxC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,2BAA2B,CACzB,WAAW,EACX,cAAc,EACd,WAAW,EACX,mBAAmB,CACpB,CAAC;gBACF,SAAS,EAAE,EAAE,CAAC;YAChB,CAAC,aAED,KAAC,QAAQ,IAAC,SAAS,EAAC,4BAA4B,EAAC,WAAW,EAAE,CAAC,GAAI,EAClE,OAAO,CAAC,CAAC,CAAC,CACT,eAAM,SAAS,EAAC,UAAU,YAAE,+BAA+B,GAAQ,CACpE,CAAC,CAAC,CAAC,CACF,+BAA+B,CAChC,IACM,GACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Ref } from "react";
|
|
2
|
+
import type { FeedbackNavigation } from "./CommentQuote";
|
|
3
|
+
import type { CommentThread } from "./feedbackThreads";
|
|
4
|
+
import type { FeedbackItem } from "./feedbackOrdering";
|
|
5
|
+
export type CommentThreadCardProps = {
|
|
6
|
+
thread: CommentThread;
|
|
7
|
+
availableTags: {
|
|
8
|
+
label: string;
|
|
9
|
+
color: string;
|
|
10
|
+
}[];
|
|
11
|
+
getAuthorName: (item: FeedbackItem) => string;
|
|
12
|
+
resolvedAuthorNames: Record<string, string>;
|
|
13
|
+
selected: boolean;
|
|
14
|
+
navigation?: FeedbackNavigation;
|
|
15
|
+
className?: string;
|
|
16
|
+
/** Bounds the thread body (which then scrolls) so one long thread never
|
|
17
|
+
* exceeds the page beside it. */
|
|
18
|
+
bodyMaxHeight?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Word-style margin balloon: flat frame without the context header, small
|
|
21
|
+
* type, replies collapsed and the reply composer opened on demand.
|
|
22
|
+
*/
|
|
23
|
+
balloon?: boolean;
|
|
24
|
+
/** Name what the thread is about (a balloon that is not beside it). */
|
|
25
|
+
showContext?: boolean;
|
|
26
|
+
onHoverChange?: (hovered: boolean) => void;
|
|
27
|
+
cardRef?: Ref<HTMLDivElement>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* One comment thread: the root comment, its replies (collapsible), the agent
|
|
31
|
+
* link and the reply composer. Reply target, reply text and collapse state
|
|
32
|
+
* live in the thread's draft so the card can be re-homed without losing them.
|
|
33
|
+
*/
|
|
34
|
+
export declare function CommentThreadCard({ thread, availableTags, getAuthorName, resolvedAuthorNames, selected, navigation, className, bodyMaxHeight, balloon, showContext, onHoverChange, cardRef, }: CommentThreadCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { ChevronDown, ChevronRight, Reply } from "lucide-react";
|
|
4
|
+
import uuid from "react-uuid";
|
|
5
|
+
import { toast } from "sonner";
|
|
6
|
+
import { useEditContext, useFieldsEditContext } from "../client/editContext";
|
|
7
|
+
import { CloseButton } from "../../components/ui/close-button";
|
|
8
|
+
import { cn } from "../../lib/utils";
|
|
9
|
+
import { createOrUpdateComment } from "../services/reviewsService";
|
|
10
|
+
import { Comment as CommentComponent } from "./Comment";
|
|
11
|
+
import { CommentEditor, COMMENT_INPUT_PLACEHOLDER } from "./CommentEditor";
|
|
12
|
+
import { COMMENT_THREAD_HOVER_GROUP_CLASS, CommentThreadAgentLink, } from "./CommentThreadAgentLink";
|
|
13
|
+
import { FeedbackCardFrame, getCommentContextSegments } from "./FeedbackCard";
|
|
14
|
+
import { canReplyToComment } from "./feedbackCommentRules";
|
|
15
|
+
import { useFeedbackDraft } from "./feedbackDrafts";
|
|
16
|
+
import { isTextSelectionClick, selectFeedbackComment, } from "./feedbackSelection";
|
|
17
|
+
import { activateCommentsMode } from "./openCommentsFeedback";
|
|
18
|
+
function buildReplyFrom(base, text, quoteParent, context) {
|
|
19
|
+
return {
|
|
20
|
+
id: uuid(),
|
|
21
|
+
isNew: false,
|
|
22
|
+
parentCommentId: base.id,
|
|
23
|
+
quoteParentComment: quoteParent,
|
|
24
|
+
itemId: base.itemId,
|
|
25
|
+
itemName: base.itemName,
|
|
26
|
+
fieldId: base.fieldId,
|
|
27
|
+
fieldName: base.fieldName,
|
|
28
|
+
mainItemId: base.mainItemId,
|
|
29
|
+
language: base.language || context.language,
|
|
30
|
+
version: base.version || context.version,
|
|
31
|
+
position: 0,
|
|
32
|
+
rangeStart: base.rangeStart,
|
|
33
|
+
rangeEnd: base.rangeEnd,
|
|
34
|
+
author: context.author,
|
|
35
|
+
authorDisplayName: context.authorDisplayName,
|
|
36
|
+
created: new Date().toISOString(),
|
|
37
|
+
text,
|
|
38
|
+
tags: "",
|
|
39
|
+
fieldValue: base.fieldValue,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* One comment thread: the root comment, its replies (collapsible), the agent
|
|
44
|
+
* link and the reply composer. Reply target, reply text and collapse state
|
|
45
|
+
* live in the thread's draft so the card can be re-homed without losing them.
|
|
46
|
+
*/
|
|
47
|
+
export function CommentThreadCard({ thread, availableTags, getAuthorName, resolvedAuthorNames, selected, navigation = "dom", className, bodyMaxHeight, balloon = false, showContext = false, onHoverChange, cardRef, }) {
|
|
48
|
+
const editContext = useEditContext();
|
|
49
|
+
const fieldsContext = useFieldsEditContext();
|
|
50
|
+
const { root, replies } = thread;
|
|
51
|
+
const [draft, updateDraft, clearDraft] = useFeedbackDraft(thread.id);
|
|
52
|
+
const [isSavingReply, setIsSavingReply] = useState(false);
|
|
53
|
+
// Balloons keep replies folded until asked; the list shows them.
|
|
54
|
+
const isCollapsed = draft.collapsed ?? balloon;
|
|
55
|
+
const replyTarget = draft.replyTargetCommentId
|
|
56
|
+
? [root, ...replies].find((comment) => comment.id === draft.replyTargetCommentId)
|
|
57
|
+
: undefined;
|
|
58
|
+
// Closing the composer discards its draft: the editor has already revoked
|
|
59
|
+
// its pasted images, which must not come back in the next composer.
|
|
60
|
+
const setReplyTarget = (target) => updateDraft(target
|
|
61
|
+
? { replyTargetCommentId: target.id, collapsed: false }
|
|
62
|
+
: {
|
|
63
|
+
replyTargetCommentId: undefined,
|
|
64
|
+
replyText: undefined,
|
|
65
|
+
replyAttachments: undefined,
|
|
66
|
+
});
|
|
67
|
+
// A card can unmount under the pointer (deleted, resolved, re-homed by the
|
|
68
|
+
// margin) without a mouseleave; do not leave its hover behind.
|
|
69
|
+
const onHoverChangeRef = useRef(onHoverChange);
|
|
70
|
+
onHoverChangeRef.current = onHoverChange;
|
|
71
|
+
useEffect(() => () => onHoverChangeRef.current?.(false), []);
|
|
72
|
+
const contextSegments = getCommentContextSegments(root, editContext?.currentItemDescriptor?.name);
|
|
73
|
+
const cancelNewComment = (event) => {
|
|
74
|
+
event.stopPropagation();
|
|
75
|
+
if (!root.isNew)
|
|
76
|
+
return;
|
|
77
|
+
editContext?.setComments?.((comments) => comments.filter((comment) => comment.id !== root.id));
|
|
78
|
+
if (editContext?.selectedComment?.id === root.id) {
|
|
79
|
+
editContext.setSelectedComment(undefined);
|
|
80
|
+
}
|
|
81
|
+
// Every draft comment has a fresh id; nothing would ever reuse this entry.
|
|
82
|
+
clearDraft();
|
|
83
|
+
};
|
|
84
|
+
const handleReplySave = async (target, text) => {
|
|
85
|
+
if (!editContext?.currentItemDescriptor)
|
|
86
|
+
return;
|
|
87
|
+
activateCommentsMode(editContext, { reason: "comment-reply" });
|
|
88
|
+
const descriptor = editContext.currentItemDescriptor;
|
|
89
|
+
// A balloon opens its composer by targeting the root; that is a plain
|
|
90
|
+
// reply to the thread, not a quote of it.
|
|
91
|
+
const quotesTarget = replyTarget?.id === target.id && !(balloon && target.id === root.id);
|
|
92
|
+
const newReply = buildReplyFrom(target, text, quotesTarget, {
|
|
93
|
+
language: descriptor.language,
|
|
94
|
+
version: descriptor.version,
|
|
95
|
+
author: editContext.user?.name,
|
|
96
|
+
authorDisplayName: editContext.user?.fullName,
|
|
97
|
+
});
|
|
98
|
+
setIsSavingReply(true);
|
|
99
|
+
try {
|
|
100
|
+
const result = await createOrUpdateComment(newReply);
|
|
101
|
+
if (result.type === "error" || result.type === "unauthorized") {
|
|
102
|
+
console.error("Failed to save reply comment:", result);
|
|
103
|
+
toast.error(result.details || result.summary || "Failed to save reply comment");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
updateDraft({
|
|
107
|
+
replyTargetCommentId: undefined,
|
|
108
|
+
replyText: undefined,
|
|
109
|
+
replyAttachments: undefined,
|
|
110
|
+
});
|
|
111
|
+
await editContext.loadComments?.();
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error("Failed to save reply comment:", error);
|
|
115
|
+
toast.error(error instanceof Error ? error.message : "Failed to save reply comment");
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
setIsSavingReply(false);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const canReplyToRoot = !!editContext && canReplyToComment(root, root, editContext.readonly);
|
|
122
|
+
const renderReplyEditor = () => {
|
|
123
|
+
if (!editContext)
|
|
124
|
+
return null;
|
|
125
|
+
// The list always offers the composer; a balloon only after "Reply".
|
|
126
|
+
if (balloon && !replyTarget)
|
|
127
|
+
return null;
|
|
128
|
+
const target = replyTarget ?? root;
|
|
129
|
+
if (!canReplyToComment(target, root, editContext.readonly)) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return (_jsxs("div", { className: balloon ? "mt-2 pl-7" : "mt-3 pt-3", onClick: (event) => event.stopPropagation(), children: [replyTarget && (!balloon || replyTarget.id !== root.id) && (_jsxs("div", { className: "text-neutral-grey-50 mb-2 flex items-center justify-between gap-2 text-xs", children: [_jsxs("span", { className: "truncate", children: ["Replying to ", getAuthorName(replyTarget)] }), _jsx("button", { type: "button", className: "badge-pad-sm text-neutral-grey-50 hover:bg-neutral-grey-5 shrink-0 rounded", onClick: () => setReplyTarget(undefined), children: "Cancel" })] })), _jsx(CommentEditor, { onSave: (text) => handleReplySave(target, text), onCancel: () => setReplyTarget(undefined), isSaving: isSavingReply, placeholder: balloon ? "Reply or @mention" : COMMENT_INPUT_PLACEHOLDER, submitLabel: "Reply", showTagSelector: false, showCancelButton: balloon, balloon: balloon, clearOnSave: true, compact: true, autoFocus: !!replyTarget, value: draft.replyText, onValueChange: (replyText) => updateDraft({ replyText }), attachments: draft.replyAttachments, onAttachmentsChange: (replyAttachments) => updateDraft({ replyAttachments }) }, target.id)] }));
|
|
133
|
+
};
|
|
134
|
+
const repliesLabel = `${replies.length} ${replies.length === 1 ? "reply" : "replies"}`;
|
|
135
|
+
const agentLink = (_jsx(CommentThreadAgentLink, { rootComment: root, threadComments: [root, ...replies], resolvedAuthorNames: resolvedAuthorNames, className: balloon ? "ml-auto" : "mt-1", compact: balloon }));
|
|
136
|
+
return (_jsx("div", { ref: cardRef, "data-feedback-thread-id": thread.id, onMouseEnter: onHoverChange ? () => onHoverChange(true) : undefined, onMouseLeave: onHoverChange ? () => onHoverChange(false) : undefined, children: _jsxs(FeedbackCardFrame, { variant: balloon ? "balloon" : "card", contextSegments: contextSegments, showBalloonContext: showContext, selected: selected, className: cn("cursor-pointer", COMMENT_THREAD_HOVER_GROUP_CLASS, className), bodyClassName: bodyMaxHeight ? "overflow-auto" : undefined, bodyStyle: bodyMaxHeight ? { maxHeight: bodyMaxHeight } : undefined, bodyScrollable: !!bodyMaxHeight, testId: "comment-thread", headerAction:
|
|
137
|
+
// The list's frame header holds the draft's close button; a balloon
|
|
138
|
+
// has no header, its input carries the cancel button instead.
|
|
139
|
+
root.isNew && !balloon ? (_jsx(CloseButton, { onClick: cancelNewComment, "data-testid": "add-comment-cancel", label: "Cancel" })) : undefined, onClick: (event) => {
|
|
140
|
+
// A mouse release that ends a text drag-selection also clicks; keep
|
|
141
|
+
// the selection instead of jumping.
|
|
142
|
+
if (isTextSelectionClick(event.currentTarget, event))
|
|
143
|
+
return;
|
|
144
|
+
void selectFeedbackComment(root, editContext, fieldsContext);
|
|
145
|
+
}, children: [_jsx(CommentComponent, { comment: root, availableTags: availableTags, rootCommentId: root.id, resolvedAuthorName: getAuthorName(root), variant: "inline", showContextHeader: false, showEditorCancelButton: !root.isNew, navigation: navigation, balloon: balloon, onReply: (target) => setReplyTarget(target) }), (replies.length > 0 || (balloon && canReplyToRoot && !root.isNew)) && (_jsxs("div", { className: cn("text-neutral-grey-50 flex items-center",
|
|
146
|
+
// One line, always: a wrapped (hover-only) agent link would
|
|
147
|
+
// reserve an empty line in every balloon.
|
|
148
|
+
balloon ? "mt-1 gap-2 pl-7 whitespace-nowrap" : "mb-3 gap-3"), children: [replies.length > 0 && (_jsxs("button", { type: "button", "data-testid": "comment-thread-replies-toggle", "aria-expanded": !isCollapsed, className: cn("hover:text-neutral-grey-100 flex items-center gap-1 text-left", !balloon && "text-neutral-grey-100 text-sm"), onClick: (event) => {
|
|
149
|
+
event.stopPropagation();
|
|
150
|
+
updateDraft({ collapsed: !isCollapsed });
|
|
151
|
+
}, children: [isCollapsed ? (_jsx(ChevronRight, { size: 12, strokeWidth: 1.5 })) : (_jsx(ChevronDown, { size: 12, strokeWidth: 1.5 })), repliesLabel] })), balloon && canReplyToRoot && !root.isNew && !replyTarget && (_jsxs("button", { type: "button", "data-testid": "comment-reply-button", className: "hover:text-neutral-grey-100 flex items-center gap-1", onClick: (event) => {
|
|
152
|
+
event.stopPropagation();
|
|
153
|
+
setReplyTarget(root);
|
|
154
|
+
}, children: [_jsx(Reply, { size: 12, strokeWidth: 1.5 }), "Reply"] })), balloon && agentLink] })), replies.length > 0 && !isCollapsed && (_jsx("div", { className: cn(balloon && "border-border-default mt-1.5 ml-2.5 border-l pl-3"), children: replies.map((reply) => (_jsx(CommentComponent, { comment: reply, availableTags: availableTags, rootCommentId: root.id, resolvedAuthorName: getAuthorName(reply), variant: "inline", showContextHeader: false, navigation: navigation, balloon: balloon, onReply: (target) => setReplyTarget(target) }, reply.id))) })), !balloon && agentLink, renderReplyEditor()] }) }));
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=CommentThreadCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentThreadCard.js","sourceRoot":"","sources":["../../../src/editor/reviews/CommentThreadCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Ref } from "react";
|
|
2
|
+
import type { FeedbackNavigation } from "./CommentQuote";
|
|
3
|
+
import type { FeedbackItem } from "./feedbackOrdering";
|
|
4
|
+
import type { SuggestionThread } from "./feedbackThreads";
|
|
5
|
+
export type SuggestionThreadCardProps = {
|
|
6
|
+
thread: SuggestionThread;
|
|
7
|
+
getAuthorName: (item: FeedbackItem) => string;
|
|
8
|
+
resolvedAuthorNames: Record<string, string>;
|
|
9
|
+
navigation?: FeedbackNavigation;
|
|
10
|
+
bodyMaxHeight?: number;
|
|
11
|
+
/** Word-style margin balloon; the comment thread is folded until asked. */
|
|
12
|
+
balloon?: boolean;
|
|
13
|
+
/** Name what the suggestion is about (a balloon that is not beside it). */
|
|
14
|
+
showContext?: boolean;
|
|
15
|
+
onHoverChange?: (hovered: boolean) => void;
|
|
16
|
+
cardRef?: Ref<HTMLDivElement>;
|
|
17
|
+
};
|
|
18
|
+
/** One suggested edit with its comment thread. */
|
|
19
|
+
export declare function SuggestionThreadCard({ thread, getAuthorName, resolvedAuthorNames, navigation, bodyMaxHeight, balloon, showContext, onHoverChange, cardRef, }: SuggestionThreadCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { ChevronDown, ChevronRight, Reply } from "lucide-react";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
import { cn } from "../../lib/utils";
|
|
6
|
+
import { useFeedbackDraft } from "./feedbackDrafts";
|
|
7
|
+
import { SuggestedEditComponent } from "./SuggestedEdit";
|
|
8
|
+
import { SuggestionCommentThread } from "./SuggestionCommentThread";
|
|
9
|
+
/** One suggested edit with its comment thread. */
|
|
10
|
+
export function SuggestionThreadCard({ thread, getAuthorName, resolvedAuthorNames, navigation = "dom", bodyMaxHeight, balloon = false, showContext = false, onHoverChange, cardRef, }) {
|
|
11
|
+
const editContext = useEditContext();
|
|
12
|
+
const { suggestion, comments } = thread;
|
|
13
|
+
const [draft, updateDraft] = useFeedbackDraft(thread.id);
|
|
14
|
+
const canComment = !editContext?.readonly;
|
|
15
|
+
const showThread = !editContext?.readonly || comments.length > 0;
|
|
16
|
+
// Balloons fold the comment thread (and its composer) until asked.
|
|
17
|
+
const expanded = balloon ? draft.collapsed === false : true;
|
|
18
|
+
const commentsLabel = `${comments.length} ${comments.length === 1 ? "comment" : "comments"}`;
|
|
19
|
+
// See CommentThreadCard: an unmount under the pointer sends no mouseleave.
|
|
20
|
+
const onHoverChangeRef = useRef(onHoverChange);
|
|
21
|
+
onHoverChangeRef.current = onHoverChange;
|
|
22
|
+
useEffect(() => () => onHoverChangeRef.current?.(false), []);
|
|
23
|
+
return (_jsx("div", { ref: cardRef, "data-testid": "suggestion-thread", "data-feedback-thread-id": thread.id, "data-suggestion-id": suggestion.id, onMouseEnter: onHoverChange ? () => onHoverChange(true) : undefined, onMouseLeave: onHoverChange ? () => onHoverChange(false) : undefined, children: _jsxs(SuggestedEditComponent, { edit: suggestion, resolvedAuthorName: getAuthorName(suggestion), navigation: navigation, bodyMaxHeight: bodyMaxHeight, balloon: balloon, showContext: showContext, children: [balloon && showThread && (_jsxs("div", { className: "text-neutral-grey-50 mt-1.5 flex items-center gap-3 pl-7", onClick: (event) => event.stopPropagation(), children: [comments.length > 0 && (_jsxs("button", { type: "button", "data-testid": "suggestion-thread-comments-toggle", "aria-expanded": expanded, className: "hover:text-neutral-grey-100 flex items-center gap-1 text-left", onClick: () => updateDraft({ collapsed: expanded }), children: [expanded ? (_jsx(ChevronDown, { size: 12, strokeWidth: 1.5 })) : (_jsx(ChevronRight, { size: 12, strokeWidth: 1.5 })), commentsLabel] })), canComment && !expanded && (_jsxs("button", { type: "button", "data-testid": "suggestion-reply-button", className: "hover:text-neutral-grey-100 flex items-center gap-1", onClick: () => updateDraft({ collapsed: false }), children: [_jsx(Reply, { size: 12, strokeWidth: 1.5 }), "Reply"] }))] })), showThread && expanded && (_jsx("div", { className: cn(balloon && "mt-1.5 pl-7"), children: _jsx(SuggestionCommentThread, { suggestion: suggestion, comments: comments, resolvedAuthorNames: resolvedAuthorNames, compact: true, navigation: navigation, balloon: balloon }) }))] }) }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=SuggestionThreadCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuggestionThreadCard.js","sourceRoot":"","sources":["../../../src/editor/reviews/SuggestionThreadCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AddCommentOptions, EditContextType, SelectionRange } from "../client/editContext";
|
|
2
|
+
/**
|
|
3
|
+
* "Add comment" on a known target (a field's comment button, the formatting
|
|
4
|
+
* toolbar, the context menu): the composer opens as a draft card in the
|
|
5
|
+
* comment margin, beside the target, exactly as after picking it with the
|
|
6
|
+
* comment target picker. A text selection inside the target field becomes
|
|
7
|
+
* the comment's range.
|
|
8
|
+
*
|
|
9
|
+
* On mobile the comments panel below the canvas is that margin. Only where
|
|
10
|
+
* neither can show (fullscreen presentation) the composer still opens as a
|
|
11
|
+
* popover at `fallbackAnchor`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function addCommentOnTarget(editContext: EditContextType, target: AddCommentOptions, fallbackAnchor: {
|
|
14
|
+
element: Element | null | undefined;
|
|
15
|
+
range?: SelectionRange;
|
|
16
|
+
} | {
|
|
17
|
+
position: {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
};
|
|
21
|
+
range?: SelectionRange;
|
|
22
|
+
}): void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { showCommentPopoverAt } from "./CommentPopover";
|
|
2
|
+
/**
|
|
3
|
+
* "Add comment" on a known target (a field's comment button, the formatting
|
|
4
|
+
* toolbar, the context menu): the composer opens as a draft card in the
|
|
5
|
+
* comment margin, beside the target, exactly as after picking it with the
|
|
6
|
+
* comment target picker. A text selection inside the target field becomes
|
|
7
|
+
* the comment's range.
|
|
8
|
+
*
|
|
9
|
+
* On mobile the comments panel below the canvas is that margin. Only where
|
|
10
|
+
* neither can show (fullscreen presentation) the composer still opens as a
|
|
11
|
+
* popover at `fallbackAnchor`.
|
|
12
|
+
*/
|
|
13
|
+
export function addCommentOnTarget(editContext, target, fallbackAnchor) {
|
|
14
|
+
const marginAvailable = !editContext.fullscreen;
|
|
15
|
+
if (marginAvailable) {
|
|
16
|
+
editContext.addComment(target);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const rect = "element" in fallbackAnchor
|
|
20
|
+
? fallbackAnchor.element?.getBoundingClientRect()
|
|
21
|
+
: undefined;
|
|
22
|
+
const position = "position" in fallbackAnchor
|
|
23
|
+
? fallbackAnchor.position
|
|
24
|
+
: rect
|
|
25
|
+
? { x: rect.left, y: rect.bottom }
|
|
26
|
+
: { x: window.innerWidth / 2, y: window.innerHeight / 2 };
|
|
27
|
+
showCommentPopoverAt(position, editContext, {
|
|
28
|
+
field: target.field,
|
|
29
|
+
range: fallbackAnchor.range,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=addCommentOnTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addCommentOnTarget.js","sourceRoot":"","sources":["../../../src/editor/reviews/addCommentOnTarget.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAA4B,EAC5B,MAAyB,EACzB,cAEkE;IAElE,MAAM,eAAe,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;IAChD,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GACR,SAAS,IAAI,cAAc;QACzB,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,qBAAqB,EAAE;QACjD,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,QAAQ,GACZ,UAAU,IAAI,cAAc;QAC1B,CAAC,CAAC,cAAc,CAAC,QAAQ;QACzB,CAAC,CAAC,IAAI;YACJ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;IAChE,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE;QAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,cAAc,CAAC,KAAK;KAC5B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Word-style balloon layout for the comment margin.
|
|
3
|
+
*
|
|
4
|
+
* Every card wants to sit at the top of the text it is anchored to. Cards are
|
|
5
|
+
* placed top to bottom without overlapping; the selected ("pinned") card stays
|
|
6
|
+
* at its anchor and pushes its neighbours away in both directions; and the
|
|
7
|
+
* whole stack is kept inside `[minY, maxY]` (the column below the header and
|
|
8
|
+
* above the footer, in document coordinates), shifting cards above their
|
|
9
|
+
* anchor when the page end is near.
|
|
10
|
+
*
|
|
11
|
+
* Precedence: bounds > pinned card at its anchor > other cards at their
|
|
12
|
+
* anchors > no overlap. When the cards cannot fit at all the layout reports
|
|
13
|
+
* `overflow` and the caller switches to a scrolling presentation.
|
|
14
|
+
*/
|
|
15
|
+
export type BalloonInput = {
|
|
16
|
+
id: string;
|
|
17
|
+
/** Document-space y of the anchored text; items must be sorted by it. */
|
|
18
|
+
anchorY: number;
|
|
19
|
+
/** Measured card height; 0 while unknown. */
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
22
|
+
export type BalloonLayoutOptions = {
|
|
23
|
+
/** Vertical gap between cards. */
|
|
24
|
+
gap: number;
|
|
25
|
+
/** Top of the usable column. */
|
|
26
|
+
minY: number;
|
|
27
|
+
/** Bottom of the usable column. */
|
|
28
|
+
maxY: number;
|
|
29
|
+
/** Card kept at its anchor (the selected thread). */
|
|
30
|
+
pinnedId?: string | null;
|
|
31
|
+
};
|
|
32
|
+
export type BalloonPosition = {
|
|
33
|
+
id: string;
|
|
34
|
+
top: number;
|
|
35
|
+
};
|
|
36
|
+
export type BalloonLayout = {
|
|
37
|
+
positions: BalloonPosition[];
|
|
38
|
+
/** The cards do not fit between minY and maxY; positions are clamped. */
|
|
39
|
+
overflow: boolean;
|
|
40
|
+
};
|
|
41
|
+
export declare function layoutBalloons(items: readonly BalloonInput[], { gap, minY, maxY, pinnedId }: BalloonLayoutOptions): BalloonLayout;
|
|
42
|
+
/** Sort helper: by anchor, then creation time, then id for a stable order. */
|
|
43
|
+
export declare function compareBalloonAnchors(a: {
|
|
44
|
+
anchorY: number;
|
|
45
|
+
created: number;
|
|
46
|
+
id: string;
|
|
47
|
+
}, b: {
|
|
48
|
+
anchorY: number;
|
|
49
|
+
created: number;
|
|
50
|
+
id: string;
|
|
51
|
+
}): number;
|