@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,22 @@
|
|
|
1
|
+
import { formatDateOnly, formatTime } from "../utils";
|
|
2
|
+
/**
|
|
3
|
+
* Timestamp for a margin balloon, where the author name needs the room: the
|
|
4
|
+
* time for today, day and month within the current year, the full date
|
|
5
|
+
* otherwise. The complete timestamp belongs in the element's title.
|
|
6
|
+
*/
|
|
7
|
+
export function formatFeedbackBalloonDate(date, now = new Date(), options) {
|
|
8
|
+
if (Number.isNaN(date.getTime()))
|
|
9
|
+
return "";
|
|
10
|
+
if (formatDateOnly(date, options) === formatDateOnly(now, options)) {
|
|
11
|
+
return formatTime(date, options);
|
|
12
|
+
}
|
|
13
|
+
const sameYear = formatDateOnly(date, { ...options, month: undefined, day: undefined }) ===
|
|
14
|
+
formatDateOnly(now, { ...options, month: undefined, day: undefined });
|
|
15
|
+
return formatDateOnly(date, {
|
|
16
|
+
...options,
|
|
17
|
+
year: sameYear ? undefined : "numeric",
|
|
18
|
+
month: "short",
|
|
19
|
+
day: "numeric",
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=feedbackBalloonDate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackBalloonDate.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackBalloonDate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAU,EACV,GAAG,GAAS,IAAI,IAAI,EAAE,EACtB,OAA+B;IAE/B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACnE,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,QAAQ,GACZ,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACtE,cAAc,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,OAAO,cAAc,CAAC,IAAI,EAAE;QAC1B,GAAG,OAAO;QACV,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACtC,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;KACf,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { CommentImageAttachment } from "./useCommentImagePaste";
|
|
3
|
+
/**
|
|
4
|
+
* Unsaved state of one feedback thread's composers. The comment margin moves
|
|
5
|
+
* cards between presentations (anchored layer, stacked list, footer), which
|
|
6
|
+
* remounts them; anything the user typed has to survive that, so it lives
|
|
7
|
+
* here, keyed by thread id, instead of in card-local state.
|
|
8
|
+
*/
|
|
9
|
+
export type FeedbackDraft = {
|
|
10
|
+
/** Which comment a reply is addressed to; undefined = no reply editor open. */
|
|
11
|
+
replyTargetCommentId?: string;
|
|
12
|
+
replyText?: string;
|
|
13
|
+
replyAttachments?: CommentImageAttachment[];
|
|
14
|
+
/** The comment currently being edited in place (or the new draft comment). */
|
|
15
|
+
editingCommentId?: string;
|
|
16
|
+
editText?: string;
|
|
17
|
+
editTags?: string[];
|
|
18
|
+
editAttachments?: CommentImageAttachment[];
|
|
19
|
+
/** Reply list collapsed by the user. */
|
|
20
|
+
collapsed?: boolean;
|
|
21
|
+
};
|
|
22
|
+
type Listener = () => void;
|
|
23
|
+
export type FeedbackDraftStore = {
|
|
24
|
+
get: (threadId: string) => FeedbackDraft | undefined;
|
|
25
|
+
update: (threadId: string, patch: Partial<FeedbackDraft> | ((current: FeedbackDraft) => FeedbackDraft)) => void;
|
|
26
|
+
clear: (threadId: string) => void;
|
|
27
|
+
subscribe: (threadId: string, listener: Listener) => () => void;
|
|
28
|
+
};
|
|
29
|
+
export declare function createFeedbackDraftStore(): FeedbackDraftStore;
|
|
30
|
+
/**
|
|
31
|
+
* Provides the draft store to a feedback surface. A provider nested inside
|
|
32
|
+
* another one reuses the outer store: the editor shell owns one store above
|
|
33
|
+
* the desktop/mobile layout switch, so an unsaved reply survives rotating a
|
|
34
|
+
* phone, and every surface (margin, form margin, mobile panel) sees it.
|
|
35
|
+
* Standalone usages (popovers, tests) still get a store of their own.
|
|
36
|
+
*/
|
|
37
|
+
export declare function FeedbackDraftsProvider({ children, store, }: {
|
|
38
|
+
children: ReactNode;
|
|
39
|
+
/** Optional externally owned store (tests); by default one per provider. */
|
|
40
|
+
store?: FeedbackDraftStore;
|
|
41
|
+
}): import("react").JSX.Element;
|
|
42
|
+
export declare function useFeedbackDraftStore(): FeedbackDraftStore;
|
|
43
|
+
export type UseFeedbackDraftResult = [
|
|
44
|
+
draft: FeedbackDraft,
|
|
45
|
+
update: (patch: Partial<FeedbackDraft>) => void,
|
|
46
|
+
clear: () => void
|
|
47
|
+
];
|
|
48
|
+
export declare function useFeedbackDraft(threadId: string): UseFeedbackDraftResult;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useMemo, useRef, useSyncExternalStore, } from "react";
|
|
3
|
+
const EMPTY_DRAFT = Object.freeze({});
|
|
4
|
+
export function createFeedbackDraftStore() {
|
|
5
|
+
const drafts = new Map();
|
|
6
|
+
const listeners = new Map();
|
|
7
|
+
const notify = (threadId) => {
|
|
8
|
+
listeners.get(threadId)?.forEach((listener) => listener());
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
get: (threadId) => drafts.get(threadId),
|
|
12
|
+
update: (threadId, patch) => {
|
|
13
|
+
const current = drafts.get(threadId) ?? EMPTY_DRAFT;
|
|
14
|
+
const next = typeof patch === "function" ? patch(current) : { ...current, ...patch };
|
|
15
|
+
drafts.set(threadId, next);
|
|
16
|
+
notify(threadId);
|
|
17
|
+
},
|
|
18
|
+
clear: (threadId) => {
|
|
19
|
+
if (!drafts.has(threadId))
|
|
20
|
+
return;
|
|
21
|
+
drafts.delete(threadId);
|
|
22
|
+
notify(threadId);
|
|
23
|
+
},
|
|
24
|
+
subscribe: (threadId, listener) => {
|
|
25
|
+
let set = listeners.get(threadId);
|
|
26
|
+
if (!set) {
|
|
27
|
+
set = new Set();
|
|
28
|
+
listeners.set(threadId, set);
|
|
29
|
+
}
|
|
30
|
+
set.add(listener);
|
|
31
|
+
return () => {
|
|
32
|
+
set.delete(listener);
|
|
33
|
+
if (set.size === 0)
|
|
34
|
+
listeners.delete(threadId);
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const FeedbackDraftsContext = createContext(null);
|
|
40
|
+
/**
|
|
41
|
+
* Provides the draft store to a feedback surface. A provider nested inside
|
|
42
|
+
* another one reuses the outer store: the editor shell owns one store above
|
|
43
|
+
* the desktop/mobile layout switch, so an unsaved reply survives rotating a
|
|
44
|
+
* phone, and every surface (margin, form margin, mobile panel) sees it.
|
|
45
|
+
* Standalone usages (popovers, tests) still get a store of their own.
|
|
46
|
+
*/
|
|
47
|
+
export function FeedbackDraftsProvider({ children, store, }) {
|
|
48
|
+
const inherited = useContext(FeedbackDraftsContext);
|
|
49
|
+
const ownStoreRef = useRef(null);
|
|
50
|
+
if (!store && !inherited && !ownStoreRef.current) {
|
|
51
|
+
ownStoreRef.current = createFeedbackDraftStore();
|
|
52
|
+
}
|
|
53
|
+
return (_jsx(FeedbackDraftsContext.Provider, { value: store ?? inherited ?? ownStoreRef.current, children: children }));
|
|
54
|
+
}
|
|
55
|
+
export function useFeedbackDraftStore() {
|
|
56
|
+
const contextStore = useContext(FeedbackDraftsContext);
|
|
57
|
+
// Outside a provider (popovers, tests) each consumer keeps a private store,
|
|
58
|
+
// which behaves exactly like component-local state.
|
|
59
|
+
const localStoreRef = useRef(null);
|
|
60
|
+
if (!contextStore && !localStoreRef.current) {
|
|
61
|
+
localStoreRef.current = createFeedbackDraftStore();
|
|
62
|
+
}
|
|
63
|
+
return contextStore ?? localStoreRef.current;
|
|
64
|
+
}
|
|
65
|
+
export function useFeedbackDraft(threadId) {
|
|
66
|
+
const store = useFeedbackDraftStore();
|
|
67
|
+
const subscribe = useCallback((listener) => store.subscribe(threadId, listener), [store, threadId]);
|
|
68
|
+
const getSnapshot = useCallback(() => store.get(threadId) ?? EMPTY_DRAFT, [store, threadId]);
|
|
69
|
+
const draft = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
70
|
+
const update = useCallback((patch) => store.update(threadId, patch), [store, threadId]);
|
|
71
|
+
const clear = useCallback(() => store.clear(threadId), [store, threadId]);
|
|
72
|
+
return useMemo(() => [draft, update, clear], [draft, update, clear]);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=feedbackDrafts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackDrafts.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackDrafts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The feedback thread currently hovered in the comment margin (or on the
|
|
3
|
+
* canvas). Kept outside the edit context because it changes on every mouse
|
|
4
|
+
* move across cards and only the highlight overlay and the margin care.
|
|
5
|
+
*/
|
|
6
|
+
export type HoveredFeedback = {
|
|
7
|
+
kind: "comment" | "suggestion";
|
|
8
|
+
/** Thread id: the root comment's id or the suggestion's id. */
|
|
9
|
+
id: string;
|
|
10
|
+
};
|
|
11
|
+
type Listener = () => void;
|
|
12
|
+
export declare function setHoveredFeedback(next: HoveredFeedback | null): void;
|
|
13
|
+
/** Clears the hover only if it still points at `id`. */
|
|
14
|
+
export declare function clearHoveredFeedback(id: string): void;
|
|
15
|
+
export declare function getHoveredFeedback(): HoveredFeedback | null;
|
|
16
|
+
export declare function subscribeHoveredFeedback(listener: Listener): () => void;
|
|
17
|
+
export declare function useHoveredFeedback(): HoveredFeedback | null;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
let hovered = null;
|
|
3
|
+
const listeners = new Set();
|
|
4
|
+
function notify() {
|
|
5
|
+
for (const listener of listeners)
|
|
6
|
+
listener();
|
|
7
|
+
}
|
|
8
|
+
export function setHoveredFeedback(next) {
|
|
9
|
+
if ((hovered === null && next === null) ||
|
|
10
|
+
(hovered && next && hovered.kind === next.kind && hovered.id === next.id)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
hovered = next;
|
|
14
|
+
notify();
|
|
15
|
+
}
|
|
16
|
+
/** Clears the hover only if it still points at `id`. */
|
|
17
|
+
export function clearHoveredFeedback(id) {
|
|
18
|
+
if (hovered?.id !== id)
|
|
19
|
+
return;
|
|
20
|
+
hovered = null;
|
|
21
|
+
notify();
|
|
22
|
+
}
|
|
23
|
+
export function getHoveredFeedback() {
|
|
24
|
+
return hovered;
|
|
25
|
+
}
|
|
26
|
+
export function subscribeHoveredFeedback(listener) {
|
|
27
|
+
listeners.add(listener);
|
|
28
|
+
return () => {
|
|
29
|
+
listeners.delete(listener);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function useHoveredFeedback() {
|
|
33
|
+
return useSyncExternalStore(subscribeHoveredFeedback, getHoveredFeedback, getHoveredFeedback);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=feedbackHoverState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackHoverState.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackHoverState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAe7C,IAAI,OAAO,GAA2B,IAAI,CAAC;AAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;AAEtC,SAAS,MAAM;IACb,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA4B;IAC7D,IACE,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;QACnC,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EACzE,CAAC;QACD,OAAO;IACT,CAAC;IACD,OAAO,GAAG,IAAI,CAAC;IACf,MAAM,EAAE,CAAC;AACX,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE;QAAE,OAAO;IAC/B,OAAO,GAAG,IAAI,CAAC;IACf,MAAM,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAkB;IACzD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,oBAAoB,CACzB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
import { localStorageService } from "../services/localStorageService";
|
|
3
|
+
/**
|
|
4
|
+
* The "people" filter of the feedback surfaces. It is set from the toolbar
|
|
5
|
+
* (the comments split button) and read by the comment margin, so it lives in
|
|
6
|
+
* a small shared store instead of in either component; persisted per browser.
|
|
7
|
+
*/
|
|
8
|
+
const STORAGE_KEY = "comments.personFilter";
|
|
9
|
+
let selectedPeople;
|
|
10
|
+
const listeners = new Set();
|
|
11
|
+
function read() {
|
|
12
|
+
selectedPeople ??= localStorageService.getItem(STORAGE_KEY) || [];
|
|
13
|
+
return selectedPeople;
|
|
14
|
+
}
|
|
15
|
+
export function getFeedbackPersonFilter() {
|
|
16
|
+
return read();
|
|
17
|
+
}
|
|
18
|
+
export function setFeedbackPersonFilter(people) {
|
|
19
|
+
selectedPeople = people;
|
|
20
|
+
localStorageService.setItem(STORAGE_KEY, people);
|
|
21
|
+
listeners.forEach((listener) => listener());
|
|
22
|
+
}
|
|
23
|
+
function subscribe(listener) {
|
|
24
|
+
listeners.add(listener);
|
|
25
|
+
return () => {
|
|
26
|
+
listeners.delete(listener);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function useFeedbackPersonFilter() {
|
|
30
|
+
return useSyncExternalStore(subscribe, read, read);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=feedbackPersonFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackPersonFilter.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackPersonFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,IAAI,cAAoC,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,SAAS,IAAI;IACX,cAAc,KAAK,mBAAmB,CAAC,OAAO,CAAW,WAAW,CAAC,IAAI,EAAE,CAAC;IAC5E,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAgB;IACtD,cAAc,GAAG,MAAM,CAAC;IACxB,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,QAAoB;IACrC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Comment, SuggestedEdit } from "../../types";
|
|
2
|
+
import type { FeedbackThread } from "./feedbackThreads";
|
|
3
|
+
/**
|
|
4
|
+
* Maps the editor's selection (which may be a reply, or a comment attached to
|
|
5
|
+
* a suggestion) to the thread that owns it. Margin cards, pinning and leader
|
|
6
|
+
* lines are per thread, so every consumer resolves through this one function
|
|
7
|
+
* instead of comparing `selectedComment.id` against thread ids.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveSelectedThreadId(threads: readonly FeedbackThread[], selectedComment: Comment | undefined, selectedSuggestedEdit: SuggestedEdit | undefined): string | undefined;
|
|
10
|
+
export declare function getThreadForComment(threads: readonly FeedbackThread[], comment: Comment): FeedbackThread | undefined;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { feedbackIdsEqual } from "./pendingFeedbackFocus";
|
|
2
|
+
/**
|
|
3
|
+
* Maps the editor's selection (which may be a reply, or a comment attached to
|
|
4
|
+
* a suggestion) to the thread that owns it. Margin cards, pinning and leader
|
|
5
|
+
* lines are per thread, so every consumer resolves through this one function
|
|
6
|
+
* instead of comparing `selectedComment.id` against thread ids.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveSelectedThreadId(threads, selectedComment, selectedSuggestedEdit) {
|
|
9
|
+
if (selectedSuggestedEdit) {
|
|
10
|
+
return threads.find((thread) => thread.kind === "suggestion" &&
|
|
11
|
+
feedbackIdsEqual(thread.id, selectedSuggestedEdit.id))?.id;
|
|
12
|
+
}
|
|
13
|
+
if (!selectedComment)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (selectedComment.suggestedEditId) {
|
|
16
|
+
return threads.find((thread) => thread.kind === "suggestion" &&
|
|
17
|
+
feedbackIdsEqual(thread.id, selectedComment.suggestedEditId))?.id;
|
|
18
|
+
}
|
|
19
|
+
return threads.find((thread) => {
|
|
20
|
+
if (thread.kind !== "comment")
|
|
21
|
+
return false;
|
|
22
|
+
if (feedbackIdsEqual(thread.id, selectedComment.id))
|
|
23
|
+
return true;
|
|
24
|
+
return thread.replies.some((reply) => feedbackIdsEqual(reply.id, selectedComment.id));
|
|
25
|
+
})?.id;
|
|
26
|
+
}
|
|
27
|
+
export function getThreadForComment(threads, comment) {
|
|
28
|
+
const id = resolveSelectedThreadId(threads, comment, undefined);
|
|
29
|
+
return id ? threads.find((thread) => thread.id === id) : undefined;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=feedbackThreadSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackThreadSelection.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackThreadSelection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAkC,EAClC,eAAoC,EACpC,qBAAgD;IAEhD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,KAAK,YAAY;YAC5B,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC,EAAE,CAAC,CACxD,EAAE,EAAE,CAAC;IACR,CAAC;IAED,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IAEvC,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,KAAK,YAAY;YAC5B,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,eAAe,CAAC,CAC/D,EAAE,EAAE,CAAC;IACR,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC,CAC/C,CAAC;IACJ,CAAC,CAAC,EAAE,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAkC,EAClC,OAAgB;IAEhB,MAAM,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAChE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Comment, SuggestedEdit } from "../../types";
|
|
2
|
+
export type CommentThread = {
|
|
3
|
+
kind: "comment";
|
|
4
|
+
/** The root comment's id. */
|
|
5
|
+
id: string;
|
|
6
|
+
root: Comment;
|
|
7
|
+
/** Every reply in the thread, oldest first. */
|
|
8
|
+
replies: Comment[];
|
|
9
|
+
created: number;
|
|
10
|
+
};
|
|
11
|
+
export type SuggestionThread = {
|
|
12
|
+
kind: "suggestion";
|
|
13
|
+
/** The suggested edit's id. */
|
|
14
|
+
id: string;
|
|
15
|
+
suggestion: SuggestedEdit;
|
|
16
|
+
/** Comments attached to the suggestion, oldest first. */
|
|
17
|
+
comments: Comment[];
|
|
18
|
+
created: number;
|
|
19
|
+
};
|
|
20
|
+
export type FeedbackThread = CommentThread | SuggestionThread;
|
|
21
|
+
export type FeedbackSortField = "date" | "structure";
|
|
22
|
+
export type FeedbackSortDirection = "asc" | "desc";
|
|
23
|
+
export type FeedbackSort = {
|
|
24
|
+
field: FeedbackSortField;
|
|
25
|
+
direction: FeedbackSortDirection;
|
|
26
|
+
};
|
|
27
|
+
export type BuildFeedbackThreadsOptions = {
|
|
28
|
+
comments: Comment[];
|
|
29
|
+
suggestedEdits: SuggestedEdit[];
|
|
30
|
+
showResolved: boolean;
|
|
31
|
+
/** Author account names; empty means everyone. */
|
|
32
|
+
selectedPeople: string[];
|
|
33
|
+
/** Without a sort the threads are ordered by most recent activity first. */
|
|
34
|
+
sort?: FeedbackSort;
|
|
35
|
+
};
|
|
36
|
+
/** Groups the comments attached to suggestions by suggestion id. */
|
|
37
|
+
export declare function groupSuggestionComments(comments: Comment[]): Map<string, Comment[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Groups plain (non-suggestion) comments into reply lists keyed by their root
|
|
40
|
+
* comment. A reply whose parent is not loaded keeps the parent id as its root.
|
|
41
|
+
*/
|
|
42
|
+
export declare function groupCommentReplies(comments: Comment[]): Map<string, Comment[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Turns the loaded comments and suggested edits into the threads a feedback
|
|
45
|
+
* surface shows: filtered (resolved, people, no-op suggestions), grouped
|
|
46
|
+
* (replies under their root, comments under their suggestion) and ordered.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildFeedbackThreads({ comments, suggestedEdits, showResolved, selectedPeople, sort, }: BuildFeedbackThreadsOptions): FeedbackThread[];
|
|
49
|
+
/** Every comment that belongs to a thread, root/suggestion comments first. */
|
|
50
|
+
export declare function getThreadComments(thread: FeedbackThread): Comment[];
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { getFeedbackActivityTime, isResolvedFeedbackItem, isSuggestedEdit, } from "./feedbackOrdering";
|
|
2
|
+
import { shouldRemoveNoOpSuggestion } from "./suggestionContentChange";
|
|
3
|
+
function parseCreated(value) {
|
|
4
|
+
if (!value)
|
|
5
|
+
return 0;
|
|
6
|
+
const time = new Date(value).getTime();
|
|
7
|
+
return Number.isFinite(time) ? time : 0;
|
|
8
|
+
}
|
|
9
|
+
function sortByCreated(a, b) {
|
|
10
|
+
return parseCreated(a.created) - parseCreated(b.created);
|
|
11
|
+
}
|
|
12
|
+
/** Groups the comments attached to suggestions by suggestion id. */
|
|
13
|
+
export function groupSuggestionComments(comments) {
|
|
14
|
+
const map = new Map();
|
|
15
|
+
comments.forEach((comment) => {
|
|
16
|
+
if (!comment.suggestedEditId)
|
|
17
|
+
return;
|
|
18
|
+
const list = map.get(comment.suggestedEditId) || [];
|
|
19
|
+
list.push(comment);
|
|
20
|
+
map.set(comment.suggestedEditId, list);
|
|
21
|
+
});
|
|
22
|
+
map.forEach((list) => list.sort(sortByCreated));
|
|
23
|
+
return map;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Groups plain (non-suggestion) comments into reply lists keyed by their root
|
|
27
|
+
* comment. A reply whose parent is not loaded keeps the parent id as its root.
|
|
28
|
+
*/
|
|
29
|
+
export function groupCommentReplies(comments) {
|
|
30
|
+
const idToComment = new Map();
|
|
31
|
+
comments.forEach((comment) => idToComment.set(comment.id, comment));
|
|
32
|
+
const getRootId = (comment) => {
|
|
33
|
+
let current = comment;
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
while (current && current.parentCommentId) {
|
|
36
|
+
if (seen.has(current.id))
|
|
37
|
+
break;
|
|
38
|
+
seen.add(current.id);
|
|
39
|
+
const parent = idToComment.get(current.parentCommentId);
|
|
40
|
+
if (!parent)
|
|
41
|
+
return current.parentCommentId;
|
|
42
|
+
current = parent;
|
|
43
|
+
}
|
|
44
|
+
return current?.id;
|
|
45
|
+
};
|
|
46
|
+
const repliesByRootId = new Map();
|
|
47
|
+
comments.forEach((comment) => {
|
|
48
|
+
if (!comment.parentCommentId)
|
|
49
|
+
return;
|
|
50
|
+
const rootId = getRootId(comment);
|
|
51
|
+
if (!rootId)
|
|
52
|
+
return;
|
|
53
|
+
const replies = repliesByRootId.get(rootId) || [];
|
|
54
|
+
replies.push(comment);
|
|
55
|
+
repliesByRootId.set(rootId, replies);
|
|
56
|
+
});
|
|
57
|
+
repliesByRootId.forEach((replies) => replies.sort(sortByCreated));
|
|
58
|
+
return repliesByRootId;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Turns the loaded comments and suggested edits into the threads a feedback
|
|
62
|
+
* surface shows: filtered (resolved, people, no-op suggestions), grouped
|
|
63
|
+
* (replies under their root, comments under their suggestion) and ordered.
|
|
64
|
+
*/
|
|
65
|
+
export function buildFeedbackThreads({ comments, suggestedEdits, showResolved, selectedPeople, sort, }) {
|
|
66
|
+
const suggestionComments = groupSuggestionComments(comments);
|
|
67
|
+
const plainComments = comments.filter((comment) => !comment.suggestedEditId);
|
|
68
|
+
let items = [...plainComments, ...suggestedEdits];
|
|
69
|
+
items = items.filter((item) => {
|
|
70
|
+
if (!isSuggestedEdit(item))
|
|
71
|
+
return true;
|
|
72
|
+
const commentCount = (suggestionComments.get(item.id) || []).length;
|
|
73
|
+
return !shouldRemoveNoOpSuggestion(item.oldValue, item.newValue, commentCount);
|
|
74
|
+
});
|
|
75
|
+
if (!showResolved) {
|
|
76
|
+
items = items.filter((item) => !isResolvedFeedbackItem(item));
|
|
77
|
+
}
|
|
78
|
+
if (selectedPeople.length > 0) {
|
|
79
|
+
items = items.filter((item) => "author" in item && !!item.author && selectedPeople.includes(item.author));
|
|
80
|
+
}
|
|
81
|
+
const direction = sort?.direction ?? "desc";
|
|
82
|
+
const field = sort?.field ?? "date";
|
|
83
|
+
const multiplier = direction === "asc" ? 1 : -1;
|
|
84
|
+
items = items
|
|
85
|
+
.map((item, index) => ({ item, index }))
|
|
86
|
+
.sort((a, b) => {
|
|
87
|
+
switch (field) {
|
|
88
|
+
case "date": {
|
|
89
|
+
const timeDifference = getFeedbackActivityTime(a.item, suggestionComments) -
|
|
90
|
+
getFeedbackActivityTime(b.item, suggestionComments);
|
|
91
|
+
return multiplier * timeDifference || a.index - b.index;
|
|
92
|
+
}
|
|
93
|
+
case "structure": {
|
|
94
|
+
const pathA = "itemName" in a.item ? a.item.itemName || "" : "";
|
|
95
|
+
const pathB = "itemName" in b.item ? b.item.itemName || "" : "";
|
|
96
|
+
return multiplier * pathA.localeCompare(pathB) || a.index - b.index;
|
|
97
|
+
}
|
|
98
|
+
default:
|
|
99
|
+
return a.index - b.index;
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
.map(({ item }) => item);
|
|
103
|
+
const filteredComments = items.filter((item) => !isSuggestedEdit(item));
|
|
104
|
+
const repliesByRootId = groupCommentReplies(filteredComments);
|
|
105
|
+
const threads = [];
|
|
106
|
+
for (const item of items) {
|
|
107
|
+
if (isSuggestedEdit(item)) {
|
|
108
|
+
threads.push({
|
|
109
|
+
kind: "suggestion",
|
|
110
|
+
id: item.id,
|
|
111
|
+
suggestion: item,
|
|
112
|
+
comments: suggestionComments.get(item.id) || [],
|
|
113
|
+
created: parseCreated(item.created),
|
|
114
|
+
});
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (item.parentCommentId)
|
|
118
|
+
continue;
|
|
119
|
+
threads.push({
|
|
120
|
+
kind: "comment",
|
|
121
|
+
id: item.id,
|
|
122
|
+
root: item,
|
|
123
|
+
replies: repliesByRootId.get(item.id) || [],
|
|
124
|
+
created: parseCreated(item.created),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return threads;
|
|
128
|
+
}
|
|
129
|
+
/** Every comment that belongs to a thread, root/suggestion comments first. */
|
|
130
|
+
export function getThreadComments(thread) {
|
|
131
|
+
return thread.kind === "comment"
|
|
132
|
+
? [thread.root, ...thread.replies]
|
|
133
|
+
: thread.comments;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=feedbackThreads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackThreads.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackThreads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the nearest feedback scroll container between `target` and `root`
|
|
3
|
+
* that can still scroll in the wheel direction. When there is none, the wheel
|
|
4
|
+
* gesture belongs to the canvas (the margin forwards it), otherwise the
|
|
5
|
+
* container scrolls natively.
|
|
6
|
+
*/
|
|
7
|
+
export declare function findScrollableAncestor(target: Element | null, root: Element, deltaY: number): HTMLElement | null;
|
|
8
|
+
/** Wheel delta in pixels; line-mode deltas (Firefox) are approximated. */
|
|
9
|
+
export declare function wheelDeltaToPixels(deltaY: number, deltaMode: number): number;
|
|
10
|
+
/** Below this (pixels), a wheel delta is a trackpad step and is not eased. */
|
|
11
|
+
export declare const SMOOTH_WHEEL_MIN_DELTA = 40;
|
|
12
|
+
/** Time constant of the ease: about 95% of a notch lands within 3×. */
|
|
13
|
+
export declare const SMOOTH_WHEEL_TIME_CONSTANT_MS = 45;
|
|
14
|
+
type FrameScheduler = {
|
|
15
|
+
request: (callback: (time: number) => void) => number;
|
|
16
|
+
cancel: (handle: number) => void;
|
|
17
|
+
/** Same clock as the request callback's time. */
|
|
18
|
+
now: () => number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Forwards wheel gestures to a scroller that only moves instantly (the canvas
|
|
22
|
+
* bridge), so that they look like the browser's own wheel scrolling: a mouse
|
|
23
|
+
* wheel notch glides over a few frames instead of jumping, and quick notches
|
|
24
|
+
* add up to one glide. Small trackpad deltas pass straight through, as the
|
|
25
|
+
* browser does not ease those either.
|
|
26
|
+
*
|
|
27
|
+
* `forward` returns whether the gesture is handled (`canScroll`), so callers
|
|
28
|
+
* can let an unhandled wheel propagate.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createSmoothWheelForwarder(scrollBy: (y: number) => boolean, canScroll: () => boolean, frames?: FrameScheduler): {
|
|
31
|
+
forward(deltaY: number, deltaMode: number): boolean;
|
|
32
|
+
cancel: () => void;
|
|
33
|
+
};
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { FEEDBACK_SCROLLABLE_ATTRIBUTE } from "./scrollWithin";
|
|
2
|
+
/**
|
|
3
|
+
* Finds the nearest feedback scroll container between `target` and `root`
|
|
4
|
+
* that can still scroll in the wheel direction. When there is none, the wheel
|
|
5
|
+
* gesture belongs to the canvas (the margin forwards it), otherwise the
|
|
6
|
+
* container scrolls natively.
|
|
7
|
+
*/
|
|
8
|
+
export function findScrollableAncestor(target, root, deltaY) {
|
|
9
|
+
let current = target;
|
|
10
|
+
while (current && current !== root) {
|
|
11
|
+
if (current instanceof HTMLElement &&
|
|
12
|
+
current.hasAttribute(FEEDBACK_SCROLLABLE_ATTRIBUTE) &&
|
|
13
|
+
canScrollVertically(current, deltaY)) {
|
|
14
|
+
return current;
|
|
15
|
+
}
|
|
16
|
+
current = current.parentElement;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function canScrollVertically(element, deltaY) {
|
|
21
|
+
const range = element.scrollHeight - element.clientHeight;
|
|
22
|
+
if (range <= 1)
|
|
23
|
+
return false;
|
|
24
|
+
if (deltaY > 0)
|
|
25
|
+
return element.scrollTop < range - 0.5;
|
|
26
|
+
if (deltaY < 0)
|
|
27
|
+
return element.scrollTop > 0.5;
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
/** Wheel delta in pixels; line-mode deltas (Firefox) are approximated. */
|
|
31
|
+
export function wheelDeltaToPixels(deltaY, deltaMode) {
|
|
32
|
+
if (deltaMode === 1)
|
|
33
|
+
return deltaY * 16;
|
|
34
|
+
if (deltaMode === 2)
|
|
35
|
+
return deltaY * 800;
|
|
36
|
+
return deltaY;
|
|
37
|
+
}
|
|
38
|
+
/** Below this (pixels), a wheel delta is a trackpad step and is not eased. */
|
|
39
|
+
export const SMOOTH_WHEEL_MIN_DELTA = 40;
|
|
40
|
+
/** Time constant of the ease: about 95% of a notch lands within 3×. */
|
|
41
|
+
export const SMOOTH_WHEEL_TIME_CONSTANT_MS = 45;
|
|
42
|
+
const animationFrames = {
|
|
43
|
+
request: (callback) => window.requestAnimationFrame(callback),
|
|
44
|
+
cancel: (handle) => window.cancelAnimationFrame(handle),
|
|
45
|
+
now: () => performance.now(),
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Forwards wheel gestures to a scroller that only moves instantly (the canvas
|
|
49
|
+
* bridge), so that they look like the browser's own wheel scrolling: a mouse
|
|
50
|
+
* wheel notch glides over a few frames instead of jumping, and quick notches
|
|
51
|
+
* add up to one glide. Small trackpad deltas pass straight through, as the
|
|
52
|
+
* browser does not ease those either.
|
|
53
|
+
*
|
|
54
|
+
* `forward` returns whether the gesture is handled (`canScroll`), so callers
|
|
55
|
+
* can let an unhandled wheel propagate.
|
|
56
|
+
*/
|
|
57
|
+
export function createSmoothWheelForwarder(scrollBy, canScroll, frames = animationFrames) {
|
|
58
|
+
let remaining = 0;
|
|
59
|
+
let handle = null;
|
|
60
|
+
let lastTime = 0;
|
|
61
|
+
const stop = () => {
|
|
62
|
+
if (handle !== null)
|
|
63
|
+
frames.cancel(handle);
|
|
64
|
+
handle = null;
|
|
65
|
+
remaining = 0;
|
|
66
|
+
};
|
|
67
|
+
const tick = (time) => {
|
|
68
|
+
handle = null;
|
|
69
|
+
const elapsed = Math.max(time - lastTime, 1);
|
|
70
|
+
lastTime = time;
|
|
71
|
+
const share = 1 - Math.exp(-elapsed / SMOOTH_WHEEL_TIME_CONSTANT_MS);
|
|
72
|
+
// Whole pixels, at least one, so the glide ends exactly on target.
|
|
73
|
+
const step = Math.abs(remaining) <= 1
|
|
74
|
+
? Math.round(remaining)
|
|
75
|
+
: Math.round(remaining * share) || Math.sign(remaining);
|
|
76
|
+
if (step !== 0 && !scrollBy(step)) {
|
|
77
|
+
stop();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
remaining -= step;
|
|
81
|
+
if (Math.abs(remaining) >= 0.5)
|
|
82
|
+
handle = frames.request(tick);
|
|
83
|
+
else
|
|
84
|
+
stop();
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
forward(deltaY, deltaMode) {
|
|
88
|
+
const pixels = wheelDeltaToPixels(deltaY, deltaMode);
|
|
89
|
+
if (Math.abs(pixels) < SMOOTH_WHEEL_MIN_DELTA && handle === null) {
|
|
90
|
+
return scrollBy(pixels);
|
|
91
|
+
}
|
|
92
|
+
if (!canScroll())
|
|
93
|
+
return false;
|
|
94
|
+
// Reversing direction drops what is left of the previous glide.
|
|
95
|
+
if (Math.sign(pixels) !== Math.sign(remaining))
|
|
96
|
+
remaining = 0;
|
|
97
|
+
remaining += pixels;
|
|
98
|
+
if (handle === null) {
|
|
99
|
+
// The glide starts when the notch did, not a frame later.
|
|
100
|
+
lastTime = frames.now();
|
|
101
|
+
handle = frames.request(tick);
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
},
|
|
105
|
+
cancel: stop,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=feedbackWheelForwarding.js.map
|