@parhelia/core 0.3.12832 → 0.3.12833
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/emoji/EmojiPicker.d.ts +18 -0
- package/dist/components/emoji/EmojiPicker.js +102 -0
- package/dist/components/emoji/EmojiPicker.js.map +1 -0
- package/dist/components/emoji/EmojiText.d.ts +19 -0
- package/dist/components/emoji/EmojiText.js +30 -0
- package/dist/components/emoji/EmojiText.js.map +1 -0
- package/dist/components/emoji/emojiData.generated.d.ts +2 -0
- package/dist/components/emoji/emojiData.generated.js +1878 -0
- package/dist/components/emoji/emojiData.generated.js.map +1 -0
- package/dist/components/emoji/emojiIndex.d.ts +46 -0
- package/dist/components/emoji/emojiIndex.js +173 -0
- package/dist/components/emoji/emojiIndex.js.map +1 -0
- package/dist/components/emoji/emoticons.d.ts +21 -0
- package/dist/components/emoji/emoticons.js +167 -0
- package/dist/components/emoji/emoticons.js.map +1 -0
- package/dist/components/emoji/textareaInsert.d.ts +19 -0
- package/dist/components/emoji/textareaInsert.js +29 -0
- package/dist/components/emoji/textareaInsert.js.map +1 -0
- package/dist/components/emoji/twemoji.d.ts +30 -0
- package/dist/components/emoji/twemoji.js +84 -0
- package/dist/components/emoji/twemoji.js.map +1 -0
- package/dist/editor/agent-changes/agentChangeTargets.js +6 -0
- package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -1
- package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +48 -4
- package/dist/editor/agent-changes/agentChangeTextHighlight.js +67 -9
- package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -1
- package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
- package/dist/editor/ai/AgentImagePreview.js +41 -0
- package/dist/editor/ai/AgentImagePreview.js.map +1 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +1 -1
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +1 -2
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.d.ts +6 -0
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js +61 -0
- package/dist/editor/ai/terminal/components/ToolCallDiagnosticsPanel.js.map +1 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.d.ts +34 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.js +218 -0
- package/dist/editor/ai/terminal/toolCallDiagnostics.js.map +1 -0
- package/dist/editor/bridge/linkDownload.d.ts +3 -0
- package/dist/editor/bridge/linkDownload.js +52 -0
- package/dist/editor/bridge/linkDownload.js.map +1 -0
- package/dist/editor/client/clipboardStorage.d.ts +10 -0
- package/dist/editor/client/clipboardStorage.js +57 -0
- package/dist/editor/client/clipboardStorage.js.map +1 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.d.ts +4 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.js +62 -0
- package/dist/editor/client/hooks/useRepositoryItemRefresh.js.map +1 -0
- package/dist/editor/client/liveEditState.d.ts +16 -0
- package/dist/editor/client/liveEditState.js +25 -0
- package/dist/editor/client/liveEditState.js.map +1 -0
- package/dist/editor/client/liveSessionState.d.ts +6 -0
- package/dist/editor/client/liveSessionState.js +20 -0
- package/dist/editor/client/liveSessionState.js.map +1 -0
- package/dist/editor/client/valueStore.d.ts +22 -0
- package/dist/editor/client/valueStore.js +29 -0
- package/dist/editor/client/valueStore.js.map +1 -0
- package/dist/editor/commands/componentClipboardCommands.d.ts +35 -0
- package/dist/editor/commands/componentClipboardCommands.js +271 -0
- package/dist/editor/commands/componentClipboardCommands.js.map +1 -0
- package/dist/editor/commands/componentMenuGroups.d.ts +2 -0
- package/dist/editor/commands/componentMenuGroups.js +43 -0
- package/dist/editor/commands/componentMenuGroups.js.map +1 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.d.ts +12 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.js +40 -0
- package/dist/editor/component-conversion/ComponentTypePickerDialog.js.map +1 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.d.ts +17 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.js +80 -0
- package/dist/editor/component-conversion/ConversionAiDebugButton.js.map +1 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.d.ts +28 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.js +633 -0
- package/dist/editor/component-conversion/ConvertComponentDialog.js.map +1 -0
- package/dist/editor/component-conversion/conversionModel.d.ts +109 -0
- package/dist/editor/component-conversion/conversionModel.js +519 -0
- package/dist/editor/component-conversion/conversionModel.js.map +1 -0
- package/dist/editor/component-conversion/conversionService.d.ts +12 -0
- package/dist/editor/component-conversion/conversionService.js +16 -0
- package/dist/editor/component-conversion/conversionService.js.map +1 -0
- package/dist/editor/component-conversion/conversionTypes.d.ts +214 -0
- package/dist/editor/component-conversion/conversionTypes.js +2 -0
- package/dist/editor/component-conversion/conversionTypes.js.map +1 -0
- package/dist/editor/component-conversion/convertComponentsCommand.d.ts +25 -0
- package/dist/editor/component-conversion/convertComponentsCommand.js +196 -0
- package/dist/editor/component-conversion/convertComponentsCommand.js.map +1 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js +28 -7
- package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -1
- package/dist/editor/field-types/fieldStyles.d.ts +21 -0
- package/dist/editor/field-types/fieldStyles.js +22 -0
- package/dist/editor/field-types/fieldStyles.js.map +1 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +14 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js +12 -1
- package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/spellCheckText.d.ts +31 -0
- package/dist/editor/field-types/richtext/utils/spellCheckText.js +82 -0
- package/dist/editor/field-types/richtext/utils/spellCheckText.js.map +1 -0
- package/dist/editor/field-types/useFocusedFieldInput.d.ts +13 -0
- package/dist/editor/field-types/useFocusedFieldInput.js +50 -0
- package/dist/editor/field-types/useFocusedFieldInput.js.map +1 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +43 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.js +149 -0
- package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
- package/dist/editor/find-replace/FindReplacePanel.d.ts +11 -0
- package/dist/editor/find-replace/FindReplacePanel.js +311 -0
- package/dist/editor/find-replace/FindReplacePanel.js.map +1 -0
- package/dist/editor/find-replace/findReplaceCommand.d.ts +8 -0
- package/dist/editor/find-replace/findReplaceCommand.js +25 -0
- package/dist/editor/find-replace/findReplaceCommand.js.map +1 -0
- package/dist/editor/find-replace/findReplaceMatches.d.ts +42 -0
- package/dist/editor/find-replace/findReplaceMatches.js +66 -0
- package/dist/editor/find-replace/findReplaceMatches.js.map +1 -0
- package/dist/editor/find-replace/findReplaceStore.d.ts +30 -0
- package/dist/editor/find-replace/findReplaceStore.js +61 -0
- package/dist/editor/find-replace/findReplaceStore.js.map +1 -0
- package/dist/editor/find-replace/findReplaceTargets.d.ts +51 -0
- package/dist/editor/find-replace/findReplaceTargets.js +110 -0
- package/dist/editor/find-replace/findReplaceTargets.js.map +1 -0
- package/dist/editor/find-replace/findReplaceText.d.ts +50 -0
- package/dist/editor/find-replace/findReplaceText.js +189 -0
- package/dist/editor/find-replace/findReplaceText.js.map +1 -0
- package/dist/editor/itemContextMenuGroups.js +10 -1
- package/dist/editor/itemContextMenuGroups.js.map +1 -1
- package/dist/editor/media-selector/MediaDetailsView.d.ts +14 -0
- package/dist/editor/media-selector/MediaDetailsView.js +152 -0
- package/dist/editor/media-selector/MediaDetailsView.js.map +1 -0
- package/dist/editor/media-selector/useMediaFolderDrag.d.ts +26 -0
- package/dist/editor/media-selector/useMediaFolderDrag.js +153 -0
- package/dist/editor/media-selector/useMediaFolderDrag.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.d.ts +11 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js +65 -0
- package/dist/editor/menubar/toolbar-sections/CommentsToggleControl.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.d.ts +6 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js +31 -0
- package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.d.ts +5 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js +16 -0
- package/dist/editor/menubar/toolbar-sections/SpellCheckToggleControl.js.map +1 -0
- package/dist/editor/mobileBottomPanel.d.ts +40 -0
- package/dist/editor/mobileBottomPanel.js +63 -0
- package/dist/editor/mobileBottomPanel.js.map +1 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +3 -6
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +8 -6
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.d.ts +6 -0
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js +100 -0
- package/dist/editor/page-editor-chrome/BridgePasteCleanupOverlay.js.map +1 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.d.ts +9 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js +32 -0
- package/dist/editor/page-editor-chrome/CanvasOverviewRulerBinding.js.map +1 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.d.ts +14 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js +110 -0
- package/dist/editor/page-editor-chrome/CommentTargetPickerCanvasLayer.js.map +1 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.d.ts +8 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.js +75 -0
- package/dist/editor/page-editor-chrome/ConversionIndicators.js.map +1 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +9 -13
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +25 -20
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.d.ts +15 -0
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js +31 -0
- package/dist/editor/page-editor-chrome/FeedbackLeaderCanvasSegment.js.map +1 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +11 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +120 -0
- package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.d.ts +12 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js +197 -0
- package/dist/editor/page-editor-chrome/SpellCheckHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.d.ts +11 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.js +56 -0
- package/dist/editor/page-editor-chrome/ValidationRulerMarks.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.d.ts +44 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js +89 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.d.ts +17 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js +53 -0
- package/dist/editor/page-editor-chrome/overlay/feedbackAnchorStore.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.d.ts +11 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js +84 -0
- package/dist/editor/page-editor-chrome/overlay/useBridgeTextRangeRequest.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.d.ts +34 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js +229 -0
- package/dist/editor/page-editor-chrome/overlay/useCommentAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.d.ts +9 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js +34 -0
- package/dist/editor/page-editor-chrome/overlay/useOverlayViewportRight.js.map +1 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.d.ts +49 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js +241 -0
- package/dist/editor/page-editor-chrome/overlay/useSuggestionAnchorMeasurements.js.map +1 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.d.ts +11 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.js +65 -0
- package/dist/editor/page-viewer/CanvasOverviewRuler.js.map +1 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.d.ts +23 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.js +28 -0
- package/dist/editor/page-viewer/DynamicRenderingsBar.js.map +1 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.d.ts +18 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.js +29 -0
- package/dist/editor/page-viewer/DynamicRenderingsStrip.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMargin.d.ts +57 -0
- package/dist/editor/page-viewer/FeedbackMargin.js +377 -0
- package/dist/editor/page-viewer/FeedbackMargin.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginController.d.ts +76 -0
- package/dist/editor/page-viewer/FeedbackMarginController.js +241 -0
- package/dist/editor/page-viewer/FeedbackMarginController.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.d.ts +16 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.js +24 -0
- package/dist/editor/page-viewer/FeedbackMarginMarker.js.map +1 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.d.ts +23 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js +105 -0
- package/dist/editor/page-viewer/FeedbackMarginResizeHandle.js.map +1 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.d.ts +24 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.js +31 -0
- package/dist/editor/page-viewer/InteractivePreviewBar.js.map +1 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.d.ts +16 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.js +112 -0
- package/dist/editor/page-viewer/MobileCommentsPanel.js.map +1 -0
- package/dist/editor/page-viewer/RenderingAiCheck.d.ts +18 -0
- package/dist/editor/page-viewer/RenderingAiCheck.js +45 -0
- package/dist/editor/page-viewer/RenderingAiCheck.js.map +1 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.d.ts +32 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.js +191 -0
- package/dist/editor/page-viewer/RenderingApprovalDialog.js.map +1 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.d.ts +17 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.js +38 -0
- package/dist/editor/page-viewer/SealedClientCodePreview.js.map +1 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.d.ts +18 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.js +36 -0
- package/dist/editor/page-viewer/canvasFrameNavigation.js.map +1 -0
- package/dist/editor/page-viewer/canvasLoadSettling.d.ts +42 -0
- package/dist/editor/page-viewer/canvasLoadSettling.js +46 -0
- package/dist/editor/page-viewer/canvasLoadSettling.js.map +1 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.d.ts +34 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.js +55 -0
- package/dist/editor/page-viewer/canvasScrollHandoff.js.map +1 -0
- package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
- package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
- package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.d.ts +119 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.js +155 -0
- package/dist/editor/page-viewer/feedbackMarginLayout.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginSources.d.ts +36 -0
- package/dist/editor/page-viewer/feedbackMarginSources.js +196 -0
- package/dist/editor/page-viewer/feedbackMarginSources.js.map +1 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.d.ts +43 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.js +107 -0
- package/dist/editor/page-viewer/feedbackMarginWidth.js.map +1 -0
- package/dist/editor/page-viewer/interactivePreview.d.ts +168 -0
- package/dist/editor/page-viewer/interactivePreview.js +344 -0
- package/dist/editor/page-viewer/interactivePreview.js.map +1 -0
- package/dist/editor/page-viewer/minimapViewport.d.ts +2 -0
- package/dist/editor/page-viewer/minimapViewport.js +34 -0
- package/dist/editor/page-viewer/minimapViewport.js.map +1 -0
- package/dist/editor/page-viewer/openPageItems.d.ts +29 -0
- package/dist/editor/page-viewer/openPageItems.js +73 -0
- package/dist/editor/page-viewer/openPageItems.js.map +1 -0
- package/dist/editor/page-viewer/overviewRuler.d.ts +128 -0
- package/dist/editor/page-viewer/overviewRuler.js +226 -0
- package/dist/editor/page-viewer/overviewRuler.js.map +1 -0
- package/dist/editor/page-viewer/renderingApproval.d.ts +59 -0
- package/dist/editor/page-viewer/renderingApproval.js +186 -0
- package/dist/editor/page-viewer/renderingApproval.js.map +1 -0
- package/dist/editor/page-viewer/renderingChanges.d.ts +29 -0
- package/dist/editor/page-viewer/renderingChanges.js +40 -0
- package/dist/editor/page-viewer/renderingChanges.js.map +1 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.d.ts +23 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.js +26 -0
- package/dist/editor/page-viewer/scrollIntoViewTextRanges.js.map +1 -0
- package/dist/editor/page-viewer/useInteractivePreview.d.ts +77 -0
- package/dist/editor/page-viewer/useInteractivePreview.js +210 -0
- package/dist/editor/page-viewer/useInteractivePreview.js.map +1 -0
- package/dist/editor/reviews/CollapsibleText.d.ts +13 -0
- package/dist/editor/reviews/CollapsibleText.js +41 -0
- package/dist/editor/reviews/CollapsibleText.js.map +1 -0
- package/dist/editor/reviews/CommentImageAttachments.d.ts +12 -0
- package/dist/editor/reviews/CommentImageAttachments.js +19 -0
- package/dist/editor/reviews/CommentImageAttachments.js.map +1 -0
- package/dist/editor/reviews/CommentQuote.d.ts +13 -0
- package/dist/editor/reviews/CommentQuote.js +35 -0
- package/dist/editor/reviews/CommentQuote.js.map +1 -0
- package/dist/editor/reviews/CommentTargetOutline.d.ts +13 -0
- package/dist/editor/reviews/CommentTargetOutline.js +21 -0
- package/dist/editor/reviews/CommentTargetOutline.js.map +1 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.d.ts +7 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.js +117 -0
- package/dist/editor/reviews/CommentTargetPickerDomLayer.js.map +1 -0
- package/dist/editor/reviews/CommentThreadAgentLink.d.ts +28 -0
- package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
- package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
- package/dist/editor/reviews/CommentThreadCard.d.ts +34 -0
- package/dist/editor/reviews/CommentThreadCard.js +156 -0
- package/dist/editor/reviews/CommentThreadCard.js.map +1 -0
- package/dist/editor/reviews/SuggestionThreadCard.d.ts +19 -0
- package/dist/editor/reviews/SuggestionThreadCard.js +25 -0
- package/dist/editor/reviews/SuggestionThreadCard.js.map +1 -0
- package/dist/editor/reviews/addCommentOnTarget.d.ts +22 -0
- package/dist/editor/reviews/addCommentOnTarget.js +32 -0
- package/dist/editor/reviews/addCommentOnTarget.js.map +1 -0
- package/dist/editor/reviews/balloonLayout.d.ts +51 -0
- package/dist/editor/reviews/balloonLayout.js +101 -0
- package/dist/editor/reviews/balloonLayout.js.map +1 -0
- package/dist/editor/reviews/commentAgentAttachments.d.ts +5 -0
- package/dist/editor/reviews/commentAgentAttachments.js +51 -0
- package/dist/editor/reviews/commentAgentAttachments.js.map +1 -0
- package/dist/editor/reviews/commentImages.d.ts +48 -0
- package/dist/editor/reviews/commentImages.js +128 -0
- package/dist/editor/reviews/commentImages.js.map +1 -0
- package/dist/editor/reviews/commentTargetPicker.d.ts +114 -0
- package/dist/editor/reviews/commentTargetPicker.js +153 -0
- package/dist/editor/reviews/commentTargetPicker.js.map +1 -0
- package/dist/editor/reviews/feedbackBalloonDate.d.ts +8 -0
- package/dist/editor/reviews/feedbackBalloonDate.js +22 -0
- package/dist/editor/reviews/feedbackBalloonDate.js.map +1 -0
- package/dist/editor/reviews/feedbackDrafts.d.ts +49 -0
- package/dist/editor/reviews/feedbackDrafts.js +74 -0
- package/dist/editor/reviews/feedbackDrafts.js.map +1 -0
- package/dist/editor/reviews/feedbackHoverState.d.ts +18 -0
- package/dist/editor/reviews/feedbackHoverState.js +35 -0
- package/dist/editor/reviews/feedbackHoverState.js.map +1 -0
- package/dist/editor/reviews/feedbackPersonFilter.d.ts +3 -0
- package/dist/editor/reviews/feedbackPersonFilter.js +32 -0
- package/dist/editor/reviews/feedbackPersonFilter.js.map +1 -0
- package/dist/editor/reviews/feedbackThreadSelection.d.ts +10 -0
- package/dist/editor/reviews/feedbackThreadSelection.js +31 -0
- package/dist/editor/reviews/feedbackThreadSelection.js.map +1 -0
- package/dist/editor/reviews/feedbackThreads.d.ts +50 -0
- package/dist/editor/reviews/feedbackThreads.js +135 -0
- package/dist/editor/reviews/feedbackThreads.js.map +1 -0
- package/dist/editor/reviews/feedbackWheelForwarding.d.ts +34 -0
- package/dist/editor/reviews/feedbackWheelForwarding.js +108 -0
- package/dist/editor/reviews/feedbackWheelForwarding.js.map +1 -0
- package/dist/editor/reviews/reviewUrlScope.d.ts +23 -0
- package/dist/editor/reviews/reviewUrlScope.js +86 -0
- package/dist/editor/reviews/reviewUrlScope.js.map +1 -0
- package/dist/editor/reviews/scrollWithin.d.ts +29 -0
- package/dist/editor/reviews/scrollWithin.js +87 -0
- package/dist/editor/reviews/scrollWithin.js.map +1 -0
- package/dist/editor/reviews/subtreeFeedback.d.ts +57 -0
- package/dist/editor/reviews/subtreeFeedback.js +137 -0
- package/dist/editor/reviews/subtreeFeedback.js.map +1 -0
- package/dist/editor/reviews/useCommentImagePaste.d.ts +80 -0
- package/dist/editor/reviews/useCommentImagePaste.js +252 -0
- package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
- package/dist/editor/reviews/useFeedbackThreads.d.ts +35 -0
- package/dist/editor/reviews/useFeedbackThreads.js +137 -0
- package/dist/editor/reviews/useFeedbackThreads.js.map +1 -0
- package/dist/editor/reviews/useMeasuredHeights.d.ts +25 -0
- package/dist/editor/reviews/useMeasuredHeights.js +176 -0
- package/dist/editor/reviews/useMeasuredHeights.js.map +1 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.d.ts +7 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.js +42 -0
- package/dist/editor/reviews/usePendingFeedbackFocus.js.map +1 -0
- package/dist/editor/services/mcpAccessService.d.ts +93 -0
- package/dist/editor/services/mcpAccessService.js +41 -0
- package/dist/editor/services/mcpAccessService.js.map +1 -0
- package/dist/editor/services/previewTokenService.d.ts +14 -0
- package/dist/editor/services/previewTokenService.js +34 -0
- package/dist/editor/services/previewTokenService.js.map +1 -0
- package/dist/editor/services/renderingsService.d.ts +117 -0
- package/dist/editor/services/renderingsService.js +245 -0
- package/dist/editor/services/renderingsService.js.map +1 -0
- package/dist/editor/services/spellCheckService.d.ts +13 -0
- package/dist/editor/services/spellCheckService.js +33 -0
- package/dist/editor/services/spellCheckService.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessPanel.d.ts +7 -0
- package/dist/editor/settings/panels/McpAccessPanel.js +95 -0
- package/dist/editor/settings/panels/McpAccessPanel.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.d.ts +8 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.js +221 -0
- package/dist/editor/settings/panels/McpAccessSettingsView.js.map +1 -0
- package/dist/editor/settings/panels/SpellCheckPanel.d.ts +8 -0
- package/dist/editor/settings/panels/SpellCheckPanel.js +253 -0
- package/dist/editor/settings/panels/SpellCheckPanel.js.map +1 -0
- package/dist/editor/sidebar/FeedbackSidebar.d.ts +7 -0
- package/dist/editor/sidebar/FeedbackSidebar.js +300 -0
- package/dist/editor/sidebar/FeedbackSidebar.js.map +1 -0
- package/dist/editor/sidebar/OperationDetailsContent.js +50 -0
- package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -1
- package/dist/editor/sidebar/liveComponentThumbnails.d.ts +19 -6
- package/dist/editor/sidebar/liveComponentThumbnails.js +39 -18
- package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -1
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.d.ts +30 -0
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js +69 -0
- package/dist/editor/spellcheck/canvasSpellCheckContextMenu.js.map +1 -0
- package/dist/editor/spellcheck/htmlSpellDocument.d.ts +60 -0
- package/dist/editor/spellcheck/htmlSpellDocument.js +181 -0
- package/dist/editor/spellcheck/htmlSpellDocument.js.map +1 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.d.ts +45 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.js +277 -0
- package/dist/editor/spellcheck/htmlSpellTokenizer.js.map +1 -0
- package/dist/editor/spellcheck/replacementGuard.d.ts +27 -0
- package/dist/editor/spellcheck/replacementGuard.js +29 -0
- package/dist/editor/spellcheck/replacementGuard.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.d.ts +17 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.js +37 -0
- package/dist/editor/spellcheck/spellCheckCanvasStore.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.d.ts +71 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.js +126 -0
- package/dist/editor/spellcheck/spellCheckCanvasTargets.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckClient.d.ts +66 -0
- package/dist/editor/spellcheck/spellCheckClient.js +0 -0
- package/dist/editor/spellcheck/spellCheckClient.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.d.ts +52 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.js +120 -0
- package/dist/editor/spellcheck/spellCheckContextMenu.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckReplace.d.ts +8 -0
- package/dist/editor/spellcheck/spellCheckReplace.js +20 -0
- package/dist/editor/spellcheck/spellCheckReplace.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckStyles.d.ts +11 -0
- package/dist/editor/spellcheck/spellCheckStyles.js +12 -0
- package/dist/editor/spellcheck/spellCheckStyles.js.map +1 -0
- package/dist/editor/spellcheck/spellCheckTypes.d.ts +94 -0
- package/dist/editor/spellcheck/spellCheckTypes.js +2 -0
- package/dist/editor/spellcheck/spellCheckTypes.js.map +1 -0
- package/dist/editor/spellcheck/textMarkHitTest.d.ts +14 -0
- package/dist/editor/spellcheck/textMarkHitTest.js +39 -0
- package/dist/editor/spellcheck/textMarkHitTest.js.map +1 -0
- package/dist/editor/spellcheck/useSpellCheck.d.ts +16 -0
- package/dist/editor/spellcheck/useSpellCheck.js +57 -0
- package/dist/editor/spellcheck/useSpellCheck.js.map +1 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.d.ts +14 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.js +40 -0
- package/dist/editor/ui/DynamicRenderingsPublishWarning.js.map +1 -0
- package/dist/editor/ui/ParheliaMark.d.ts +15 -0
- package/dist/editor/ui/ParheliaMark.js +12 -0
- package/dist/editor/ui/ParheliaMark.js.map +1 -0
- package/dist/editor/ui/RootItemPicker.d.ts +18 -0
- package/dist/editor/ui/RootItemPicker.js +112 -0
- package/dist/editor/ui/RootItemPicker.js.map +1 -0
- package/dist/editor/undoEligibility.d.ts +2 -0
- package/dist/editor/undoEligibility.js +8 -0
- package/dist/editor/undoEligibility.js.map +1 -0
- package/dist/editor/utils/dataTransferImages.d.ts +7 -0
- package/dist/editor/utils/dataTransferImages.js +43 -0
- package/dist/editor/utils/dataTransferImages.js.map +1 -0
- package/dist/editor/validation/navigateToValidationIssue.d.ts +2 -2
- package/dist/editor/validation/navigateToValidationIssue.js +1 -1
- package/dist/editor/validation/navigateToValidationIssue.js.map +1 -1
- package/dist/editor/validation/validationRulerIssues.d.ts +17 -0
- package/dist/editor/validation/validationRulerIssues.js +44 -0
- package/dist/editor/validation/validationRulerIssues.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/task-board/components/AttentionPromptDialog.d.ts +13 -0
- package/dist/task-board/components/AttentionPromptDialog.js +45 -0
- package/dist/task-board/components/AttentionPromptDialog.js.map +1 -0
- package/dist/task-board/components/GoalFindingsTable.d.ts +43 -0
- package/dist/task-board/components/GoalFindingsTable.js +160 -0
- package/dist/task-board/components/GoalFindingsTable.js.map +1 -0
- package/dist/task-board/components/IssuePanel.d.ts +31 -0
- package/dist/task-board/components/IssuePanel.js +268 -0
- package/dist/task-board/components/IssuePanel.js.map +1 -0
- package/dist/task-board/components/SubgoalFindings.d.ts +40 -0
- package/dist/task-board/components/SubgoalFindings.js +88 -0
- package/dist/task-board/components/SubgoalFindings.js.map +1 -0
- package/dist/task-board/services/issueService.d.ts +193 -0
- package/dist/task-board/services/issueService.js +97 -0
- package/dist/task-board/services/issueService.js.map +1 -0
- package/dist/task-board/taskBlockers.d.ts +10 -0
- package/dist/task-board/taskBlockers.js +66 -0
- package/dist/task-board/taskBlockers.js.map +1 -0
- package/dist/task-board/utils/projectDashboardModel.js +14 -0
- package/dist/task-board/utils/projectDashboardModel.js.map +1 -1
- package/dist/task-board/views/ProjectDashboardView.js +5 -13
- package/dist/task-board/views/ProjectDashboardView.js.map +1 -1
- package/dist/tour/sandbox-tour-copy.d.ts +8 -0
- package/dist/tour/sandbox-tour-copy.js +8 -0
- package/dist/tour/sandbox-tour-copy.js.map +1 -1
- package/dist/tour/sandbox-tour.d.ts +3 -0
- package/dist/tour/sandbox-tour.js +107 -3
- package/dist/tour/sandbox-tour.js.map +1 -1
- package/package.json +1 -1
- package/dist/editor/page-editor-chrome/bridgeLinkValue.d.ts +0 -10
- package/dist/editor/page-editor-chrome/bridgeLinkValue.js +0 -55
- package/dist/editor/page-editor-chrome/bridgeLinkValue.js.map +0 -1
|
@@ -0,0 +1,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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackWheelForwarding.js","sourceRoot":"","sources":["../../../src/editor/reviews/feedbackWheelForwarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type ReviewScopeItem = {
|
|
2
|
+
itemId: string;
|
|
3
|
+
language: string;
|
|
4
|
+
includeSubitems: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type ReviewScopeTarget = {
|
|
7
|
+
id: string;
|
|
8
|
+
language: string;
|
|
9
|
+
/** Sitecore long ID path ("/{guid}/.../{guid}"), ending with the item itself. */
|
|
10
|
+
idPath?: string;
|
|
11
|
+
};
|
|
12
|
+
/** Same rules as CollectionMembershipService.IsMember on the server. */
|
|
13
|
+
export declare function reviewCoversItem(items: ReviewScopeItem[], target: ReviewScopeTarget): boolean;
|
|
14
|
+
export declare function getReviewIdFromUrl(): string | null;
|
|
15
|
+
/** Sets or removes reviewId in place, without adding a history entry. */
|
|
16
|
+
export declare function setReviewIdInUrl(reviewId: string | undefined): void;
|
|
17
|
+
/**
|
|
18
|
+
* Drops reviewId from the URL when the editor opens a page the review does not
|
|
19
|
+
* cover, or the review is gone or not accessible. Runs on page changes only, so
|
|
20
|
+
* opening a review while another page is shown keeps the id until the user
|
|
21
|
+
* moves on.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useLeftoverReviewIdCleanup(target: ReviewScopeTarget | undefined, enabled: boolean): void;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
import { getReviewStatus } from "../services/reviewsService";
|
|
3
|
+
// The editor keeps reviewId in its URL so review pages load review-scoped
|
|
4
|
+
// comments and suggestions. The id belongs there only while the user is on a
|
|
5
|
+
// page the review covers; once they browse elsewhere it is a leftover.
|
|
6
|
+
const REVIEW_ID_PARAM = "reviewId";
|
|
7
|
+
function normalizeId(id) {
|
|
8
|
+
return id.replace(/[{}]/g, "").trim().toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
/** Same rules as CollectionMembershipService.IsMember on the server. */
|
|
11
|
+
export function reviewCoversItem(items, target) {
|
|
12
|
+
const targetId = normalizeId(target.id);
|
|
13
|
+
const languageMatches = (item) => item.language === target.language || item.language === "*";
|
|
14
|
+
if (items.some((item) => normalizeId(item.itemId) === targetId && languageMatches(item))) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
const ancestorIds = new Set((target.idPath ?? "").split("/").filter(Boolean).map(normalizeId));
|
|
18
|
+
return items.some((item) => item.includeSubitems &&
|
|
19
|
+
languageMatches(item) &&
|
|
20
|
+
ancestorIds.has(normalizeId(item.itemId)));
|
|
21
|
+
}
|
|
22
|
+
export function getReviewIdFromUrl() {
|
|
23
|
+
if (typeof window === "undefined")
|
|
24
|
+
return null;
|
|
25
|
+
return new URLSearchParams(window.location.search).get(REVIEW_ID_PARAM);
|
|
26
|
+
}
|
|
27
|
+
/** Sets or removes reviewId in place, without adding a history entry. */
|
|
28
|
+
export function setReviewIdInUrl(reviewId) {
|
|
29
|
+
if (typeof window === "undefined")
|
|
30
|
+
return;
|
|
31
|
+
const params = new URLSearchParams(window.location.search);
|
|
32
|
+
if ((params.get(REVIEW_ID_PARAM) ?? undefined) === reviewId)
|
|
33
|
+
return;
|
|
34
|
+
if (reviewId)
|
|
35
|
+
params.set(REVIEW_ID_PARAM, reviewId);
|
|
36
|
+
else
|
|
37
|
+
params.delete(REVIEW_ID_PARAM);
|
|
38
|
+
const query = params.toString();
|
|
39
|
+
const pathname = window.location.pathname;
|
|
40
|
+
window.history.replaceState(window.history.state, "", query ? `${pathname}?${query}` : pathname);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Drops reviewId from the URL when the editor opens a page the review does not
|
|
44
|
+
* cover, or the review is gone or not accessible. Runs on page changes only, so
|
|
45
|
+
* opening a review while another page is shown keeps the id until the user
|
|
46
|
+
* moves on.
|
|
47
|
+
*/
|
|
48
|
+
export function useLeftoverReviewIdCleanup(target, enabled) {
|
|
49
|
+
const reviewItemsRef = useRef(new Map());
|
|
50
|
+
const itemId = target?.id;
|
|
51
|
+
const language = target?.language;
|
|
52
|
+
const idPath = target?.idPath;
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!enabled || !itemId || !language)
|
|
55
|
+
return;
|
|
56
|
+
const reviewId = getReviewIdFromUrl();
|
|
57
|
+
if (!reviewId)
|
|
58
|
+
return;
|
|
59
|
+
const pageTarget = { id: itemId, language, idPath };
|
|
60
|
+
const knownItems = reviewItemsRef.current.get(reviewId);
|
|
61
|
+
if (knownItems && reviewCoversItem(knownItems, pageTarget))
|
|
62
|
+
return;
|
|
63
|
+
let cancelled = false;
|
|
64
|
+
void getReviewStatus(reviewId).then((result) => {
|
|
65
|
+
if (cancelled || getReviewIdFromUrl() !== reviewId)
|
|
66
|
+
return;
|
|
67
|
+
if (result.type === "success" && result.data) {
|
|
68
|
+
reviewItemsRef.current.set(reviewId, result.data.items);
|
|
69
|
+
if (!reviewCoversItem(result.data.items, pageTarget)) {
|
|
70
|
+
setReviewIdInUrl(undefined);
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Deleted or inaccessible reviews scope nothing. Other failures may be
|
|
75
|
+
// transient, so the id stays.
|
|
76
|
+
const status = result.response?.status;
|
|
77
|
+
if (result.type === "error" && (status === 403 || status === 404)) {
|
|
78
|
+
setReviewIdInUrl(undefined);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return () => {
|
|
82
|
+
cancelled = true;
|
|
83
|
+
};
|
|
84
|
+
}, [enabled, itemId, language, idPath]);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=reviewUrlScope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewUrlScope.js","sourceRoot":"","sources":["../../../src/editor/reviews/reviewUrlScope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scroll helpers for the feedback surfaces.
|
|
3
|
+
*
|
|
4
|
+
* `Element.scrollIntoView` walks every scrollable ancestor and scrolls each
|
|
5
|
+
* one, and its `block` option only chooses the alignment. Inside the comment
|
|
6
|
+
* margin the nearest such ancestor is the overlay root that must never
|
|
7
|
+
* scroll, and in the list it is the editor shell. So every programmatic
|
|
8
|
+
* reveal names its container and only that container's `scrollTop` changes.
|
|
9
|
+
*/
|
|
10
|
+
export declare const FEEDBACK_SCROLLABLE_ATTRIBUTE = "data-feedback-scrollable";
|
|
11
|
+
export type ScrollWithinOptions = {
|
|
12
|
+
behavior?: "auto" | "smooth";
|
|
13
|
+
block?: "nearest" | "center";
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Scrolls `container` so that `element` (a descendant) is visible. Only the
|
|
17
|
+
* container's own scroll offset changes.
|
|
18
|
+
*/
|
|
19
|
+
export declare function scrollElementIntoContainer(element: HTMLElement, container: HTMLElement, { behavior, block }?: ScrollWithinOptions): void;
|
|
20
|
+
/**
|
|
21
|
+
* The nearest ancestor (inclusive) marked as a feedback scroll container,
|
|
22
|
+
* stopping at `root` when given.
|
|
23
|
+
*/
|
|
24
|
+
export declare function findFeedbackScrollContainer(element: Element | null, root?: Element | null): HTMLElement | null;
|
|
25
|
+
/**
|
|
26
|
+
* Reveals `element` inside its nearest feedback scroll container. Does nothing
|
|
27
|
+
* when no container is found; it never falls back to `scrollIntoView`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function revealInFeedbackScrollContainer(element: HTMLElement, options?: ScrollWithinOptions): boolean;
|