@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,226 @@
|
|
|
1
|
+
import { createContext, useContext, useEffect, useSyncExternalStore, } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Paint order where marks overlap: later tones draw over earlier ones, so an
|
|
4
|
+
* open comment or a validation error stays visible on top of the text it is
|
|
5
|
+
* about, and the many small spelling marks never hide anything.
|
|
6
|
+
*/
|
|
7
|
+
export const OVERVIEW_RULER_TONE_PAINT_ORDER = [
|
|
8
|
+
"comment-resolved",
|
|
9
|
+
"spelling",
|
|
10
|
+
"added",
|
|
11
|
+
"removed",
|
|
12
|
+
"validation-suggestion",
|
|
13
|
+
"validation-warning",
|
|
14
|
+
"suggestion",
|
|
15
|
+
"validation-error",
|
|
16
|
+
"comment",
|
|
17
|
+
];
|
|
18
|
+
export const OVERVIEW_RULER_WIDTH = 10;
|
|
19
|
+
/**
|
|
20
|
+
* Every mark is a line of this height in ruler pixels, at the top of what it
|
|
21
|
+
* marks, however long the marked text is: the ruler shows where, not how much.
|
|
22
|
+
*/
|
|
23
|
+
export const OVERVIEW_RULER_MARK_HEIGHT = 3;
|
|
24
|
+
function paintIndex(tone) {
|
|
25
|
+
return OVERVIEW_RULER_TONE_PAINT_ORDER.indexOf(tone);
|
|
26
|
+
}
|
|
27
|
+
function mergeLists(a, b) {
|
|
28
|
+
if (!b?.length)
|
|
29
|
+
return a;
|
|
30
|
+
if (!a?.length)
|
|
31
|
+
return b;
|
|
32
|
+
return Array.from(new Set([...a, ...b]));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Collapses highlight rects into ruler dashes: one dash per run of marks, so a
|
|
36
|
+
* paragraph of highlights reads as a single mark instead of a stack of
|
|
37
|
+
* overlapping slivers. Each tone is merged on its own, in paint order; a
|
|
38
|
+
* merged dash keeps the ids and details of everything it covers.
|
|
39
|
+
*/
|
|
40
|
+
export function buildOverviewRulerMarks(highlights) {
|
|
41
|
+
const byTone = new Map();
|
|
42
|
+
for (const highlight of highlights) {
|
|
43
|
+
const marks = byTone.get(highlight.tone) ?? [];
|
|
44
|
+
for (const rect of highlight.rects) {
|
|
45
|
+
marks.push({
|
|
46
|
+
top: Math.round(rect.y),
|
|
47
|
+
height: Math.max(Math.round(rect.height), 1),
|
|
48
|
+
tone: highlight.tone,
|
|
49
|
+
...(highlight.ids?.length ? { ids: highlight.ids } : {}),
|
|
50
|
+
...(highlight.details?.length ? { details: highlight.details } : {}),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
byTone.set(highlight.tone, marks);
|
|
54
|
+
}
|
|
55
|
+
const merged = [];
|
|
56
|
+
for (const tone of OVERVIEW_RULER_TONE_PAINT_ORDER) {
|
|
57
|
+
const sorted = (byTone.get(tone) ?? []).sort((a, b) => a.top - b.top);
|
|
58
|
+
let last;
|
|
59
|
+
for (const mark of sorted) {
|
|
60
|
+
if (last && mark.top <= last.top + last.height + 1) {
|
|
61
|
+
last.height = Math.max(last.height, mark.top + mark.height - last.top);
|
|
62
|
+
const ids = mergeLists(last.ids, mark.ids);
|
|
63
|
+
if (ids)
|
|
64
|
+
last.ids = ids;
|
|
65
|
+
const details = mergeLists(last.details, mark.details);
|
|
66
|
+
if (details)
|
|
67
|
+
last.details = details;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
last = { ...mark };
|
|
71
|
+
merged.push(last);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return merged;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Every published mark in paint order, scaled from page pixels to fractions of
|
|
78
|
+
* the ruler. Null while no source is published or the page extent is unknown.
|
|
79
|
+
*/
|
|
80
|
+
export function layoutOverviewRuler({ sources, extent, }) {
|
|
81
|
+
const published = Object.entries(sources);
|
|
82
|
+
if (published.length === 0 || !(extent > 0))
|
|
83
|
+
return null;
|
|
84
|
+
return published
|
|
85
|
+
.flatMap(([source, marks]) => marks.map((mark) => ({ source, mark })))
|
|
86
|
+
.sort((a, b) => paintIndex(a.mark.tone) - paintIndex(b.mark.tone))
|
|
87
|
+
.map(({ source, mark }) => ({
|
|
88
|
+
top: Math.min(Math.max(mark.top / extent, 0), 1),
|
|
89
|
+
tone: mark.tone,
|
|
90
|
+
source,
|
|
91
|
+
mark,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
function marksEqual(a, b) {
|
|
95
|
+
return (a.length === b.length &&
|
|
96
|
+
a.every((mark, index) => mark.top === b[index].top &&
|
|
97
|
+
mark.height === b[index].height &&
|
|
98
|
+
mark.tone === b[index].tone &&
|
|
99
|
+
listsEqual(mark.ids, b[index].ids) &&
|
|
100
|
+
listsEqual(mark.details, b[index].details)));
|
|
101
|
+
}
|
|
102
|
+
/** For measurements producing marks: `null` means "no marks to publish". */
|
|
103
|
+
export function overviewRulerMarksEqual(a, b) {
|
|
104
|
+
return a && b ? marksEqual(a, b) : a === b;
|
|
105
|
+
}
|
|
106
|
+
function listsEqual(a, b) {
|
|
107
|
+
const left = a ?? [];
|
|
108
|
+
const right = b ?? [];
|
|
109
|
+
return (left.length === right.length &&
|
|
110
|
+
left.every((value, index) => value === right[index]));
|
|
111
|
+
}
|
|
112
|
+
export function createOverviewRulerStore() {
|
|
113
|
+
let snapshot = { sources: {}, extent: 0 };
|
|
114
|
+
const listeners = new Set();
|
|
115
|
+
const handlers = new Map();
|
|
116
|
+
let scroller = null;
|
|
117
|
+
const update = (next) => {
|
|
118
|
+
snapshot = next;
|
|
119
|
+
listeners.forEach((listener) => listener());
|
|
120
|
+
};
|
|
121
|
+
return {
|
|
122
|
+
getSnapshot: () => snapshot,
|
|
123
|
+
subscribe(listener) {
|
|
124
|
+
listeners.add(listener);
|
|
125
|
+
return () => {
|
|
126
|
+
listeners.delete(listener);
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
/**
|
|
130
|
+
* `null` withdraws the source; an empty array keeps the source published
|
|
131
|
+
* with nothing marked.
|
|
132
|
+
*/
|
|
133
|
+
publish(source, marks) {
|
|
134
|
+
const current = snapshot.sources[source];
|
|
135
|
+
if (marks === null ? !current : current && marksEqual(current, marks)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const sources = { ...snapshot.sources };
|
|
139
|
+
if (marks === null)
|
|
140
|
+
delete sources[source];
|
|
141
|
+
else
|
|
142
|
+
sources[source] = marks;
|
|
143
|
+
update({ ...snapshot, sources });
|
|
144
|
+
},
|
|
145
|
+
setExtent(extent) {
|
|
146
|
+
if (extent !== snapshot.extent)
|
|
147
|
+
update({ ...snapshot, extent });
|
|
148
|
+
},
|
|
149
|
+
/** Scrolls the canvas to a mark: what a click does by default. */
|
|
150
|
+
setScroller(next) {
|
|
151
|
+
scroller = next;
|
|
152
|
+
},
|
|
153
|
+
/** What a click on the source's marks does; not part of the snapshot. */
|
|
154
|
+
setActivateHandler(source, handler) {
|
|
155
|
+
if (handler)
|
|
156
|
+
handlers.set(source, handler);
|
|
157
|
+
else
|
|
158
|
+
handlers.delete(source);
|
|
159
|
+
},
|
|
160
|
+
activate(source, mark) {
|
|
161
|
+
const scrollToMark = () => scroller?.(mark);
|
|
162
|
+
const handler = handlers.get(source);
|
|
163
|
+
if (handler)
|
|
164
|
+
handler(mark, scrollToMark);
|
|
165
|
+
else
|
|
166
|
+
scrollToMark();
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export const OverviewRulerContext = createContext(null);
|
|
171
|
+
export function useOverviewRulerStore() {
|
|
172
|
+
return useContext(OverviewRulerContext);
|
|
173
|
+
}
|
|
174
|
+
const EMPTY_SNAPSHOT = { sources: {}, extent: 0 };
|
|
175
|
+
const subscribeNothing = () => () => { };
|
|
176
|
+
const getEmptySnapshot = () => EMPTY_SNAPSHOT;
|
|
177
|
+
export function useOverviewRulerSnapshot() {
|
|
178
|
+
const store = useContext(OverviewRulerContext);
|
|
179
|
+
return useSyncExternalStore(store?.subscribe ?? subscribeNothing, store?.getSnapshot ?? getEmptySnapshot, store?.getSnapshot ?? getEmptySnapshot);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Publishes marks into the surrounding ruler (a no-op outside one, e.g. on
|
|
183
|
+
* the minimap, or without a `source`). Pass memoized marks; `null` keeps the
|
|
184
|
+
* source out of the ruler. `onActivate` replaces scrolling to a clicked mark.
|
|
185
|
+
*/
|
|
186
|
+
export function usePublishOverviewRulerMarks(source, marks, onActivate) {
|
|
187
|
+
const store = useContext(OverviewRulerContext);
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
if (source)
|
|
190
|
+
store?.publish(source, marks);
|
|
191
|
+
}, [store, source, marks]);
|
|
192
|
+
useEffect(() => {
|
|
193
|
+
if (source)
|
|
194
|
+
store?.setActivateHandler(source, onActivate ?? null);
|
|
195
|
+
}, [store, source, onActivate]);
|
|
196
|
+
useEffect(() => {
|
|
197
|
+
if (!store || !source)
|
|
198
|
+
return;
|
|
199
|
+
return () => {
|
|
200
|
+
store.publish(source, null);
|
|
201
|
+
store.setActivateHandler(source, null);
|
|
202
|
+
};
|
|
203
|
+
}, [store, source]);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Connects the ruler to its canvas: the page height the marks are scaled
|
|
207
|
+
* against (0 = unknown) and how to scroll the canvas to a mark.
|
|
208
|
+
*/
|
|
209
|
+
export function usePublishOverviewRulerCanvas(extent, scrollToMark) {
|
|
210
|
+
const store = useContext(OverviewRulerContext);
|
|
211
|
+
useEffect(() => {
|
|
212
|
+
store?.setExtent(extent);
|
|
213
|
+
}, [store, extent]);
|
|
214
|
+
useEffect(() => {
|
|
215
|
+
store?.setScroller(scrollToMark);
|
|
216
|
+
}, [store, scrollToMark]);
|
|
217
|
+
useEffect(() => {
|
|
218
|
+
if (!store)
|
|
219
|
+
return;
|
|
220
|
+
return () => {
|
|
221
|
+
store.setExtent(0);
|
|
222
|
+
store.setScroller(null);
|
|
223
|
+
};
|
|
224
|
+
}, [store]);
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=overviewRuler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overviewRuler.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/overviewRuler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { InteractionEventPayload } from "../bridge/protocol";
|
|
2
|
+
import type { EditContextType } from "../client/editContext";
|
|
3
|
+
/**
|
|
4
|
+
* Preview mode leaves every canvas field read-only (the bridge flips
|
|
5
|
+
* contenteditable off and blurs the field), so a user who forgot to leave
|
|
6
|
+
* preview clicks into a text and types into the void: no caret, no change, no
|
|
7
|
+
* explanation. These helpers recognise that keystroke and answer it with a
|
|
8
|
+
* toast that names the cause and offers the one-click way out.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PREVIEW_EDIT_ATTEMPT_TOAST_ID = "preview-mode-edit-attempt";
|
|
11
|
+
export declare const PREVIEW_EDIT_ATTEMPT_MODE_CHANGE_REASON = "preview-edit-attempt";
|
|
12
|
+
export declare const PREVIEW_EDIT_ATTEMPT_TITLE = "Preview mode is read-only";
|
|
13
|
+
export declare const PREVIEW_EDIT_ATTEMPT_DESCRIPTION = "Switch to edit mode to change the content of this page.";
|
|
14
|
+
export declare const PREVIEW_EDIT_ATTEMPT_ACTION_LABEL = "Switch to edit mode";
|
|
15
|
+
/**
|
|
16
|
+
* Whether a bridge keydown, delivered while the editor is in preview mode, was
|
|
17
|
+
* meant to change a field's content.
|
|
18
|
+
*
|
|
19
|
+
* Only keystrokes aimed at a field count (the bridge resolves the field from
|
|
20
|
+
* the caret the click left behind). Printable characters, Backspace and Delete
|
|
21
|
+
* qualify, as do paste and cut. Deliberately left out: Space, arrows and the
|
|
22
|
+
* other navigation keys scroll a preview and Enter follows a focused link, so a
|
|
23
|
+
* hint there would interrupt legitimate previewing. A sentence typed into a
|
|
24
|
+
* read-only field trips on its first letter anyway.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isPreviewEditAttemptInteraction(interaction: InteractionEventPayload): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Shows (or refreshes) the single preview-mode hint toast. The stable id keeps
|
|
29
|
+
* a burst of keystrokes from stacking toasts; the action leaves preview mode.
|
|
30
|
+
*/
|
|
31
|
+
export declare function showPreviewEditAttemptToast(editContext: Pick<EditContextType, "changeMode">): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { toast } from "sonner";
|
|
2
|
+
/**
|
|
3
|
+
* Preview mode leaves every canvas field read-only (the bridge flips
|
|
4
|
+
* contenteditable off and blurs the field), so a user who forgot to leave
|
|
5
|
+
* preview clicks into a text and types into the void: no caret, no change, no
|
|
6
|
+
* explanation. These helpers recognise that keystroke and answer it with a
|
|
7
|
+
* toast that names the cause and offers the one-click way out.
|
|
8
|
+
*/
|
|
9
|
+
export const PREVIEW_EDIT_ATTEMPT_TOAST_ID = "preview-mode-edit-attempt";
|
|
10
|
+
export const PREVIEW_EDIT_ATTEMPT_MODE_CHANGE_REASON = "preview-edit-attempt";
|
|
11
|
+
export const PREVIEW_EDIT_ATTEMPT_TITLE = "Preview mode is read-only";
|
|
12
|
+
export const PREVIEW_EDIT_ATTEMPT_DESCRIPTION = "Switch to edit mode to change the content of this page.";
|
|
13
|
+
export const PREVIEW_EDIT_ATTEMPT_ACTION_LABEL = "Switch to edit mode";
|
|
14
|
+
const CONTENT_EDITING_KEYS = new Set(["Backspace", "Delete"]);
|
|
15
|
+
// Paste and cut. Identified by physical key as well, so a non-Latin keyboard
|
|
16
|
+
// layout (where the V key reports e.g. "м") is recognised too.
|
|
17
|
+
const CONTENT_EDITING_SHORTCUT_KEYS = new Set(["v", "x"]);
|
|
18
|
+
const CONTENT_EDITING_SHORTCUT_CODES = new Set(["KeyV", "KeyX"]);
|
|
19
|
+
/**
|
|
20
|
+
* Whether a bridge keydown, delivered while the editor is in preview mode, was
|
|
21
|
+
* meant to change a field's content.
|
|
22
|
+
*
|
|
23
|
+
* Only keystrokes aimed at a field count (the bridge resolves the field from
|
|
24
|
+
* the caret the click left behind). Printable characters, Backspace and Delete
|
|
25
|
+
* qualify, as do paste and cut. Deliberately left out: Space, arrows and the
|
|
26
|
+
* other navigation keys scroll a preview and Enter follows a focused link, so a
|
|
27
|
+
* hint there would interrupt legitimate previewing. A sentence typed into a
|
|
28
|
+
* read-only field trips on its first letter anyway.
|
|
29
|
+
*/
|
|
30
|
+
export function isPreviewEditAttemptInteraction(interaction) {
|
|
31
|
+
if (interaction.kind !== "keydown")
|
|
32
|
+
return false;
|
|
33
|
+
if (!interaction.fieldId)
|
|
34
|
+
return false;
|
|
35
|
+
if (interaction.altKey)
|
|
36
|
+
return false;
|
|
37
|
+
const key = interaction.key ?? "";
|
|
38
|
+
if (interaction.ctrlKey || interaction.metaKey) {
|
|
39
|
+
return (CONTENT_EDITING_SHORTCUT_KEYS.has(key.toLowerCase()) ||
|
|
40
|
+
CONTENT_EDITING_SHORTCUT_CODES.has(interaction.code ?? ""));
|
|
41
|
+
}
|
|
42
|
+
if (CONTENT_EDITING_KEYS.has(key))
|
|
43
|
+
return true;
|
|
44
|
+
// Named keys ("ArrowLeft", "Shift", "Dead", "Process", "Unidentified") are
|
|
45
|
+
// longer than a single code point; Space is excluded on purpose.
|
|
46
|
+
return key !== " " && [...key].length === 1;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Shows (or refreshes) the single preview-mode hint toast. The stable id keeps
|
|
50
|
+
* a burst of keystrokes from stacking toasts; the action leaves preview mode.
|
|
51
|
+
*/
|
|
52
|
+
export function showPreviewEditAttemptToast(editContext) {
|
|
53
|
+
toast.info(PREVIEW_EDIT_ATTEMPT_TITLE, {
|
|
54
|
+
id: PREVIEW_EDIT_ATTEMPT_TOAST_ID,
|
|
55
|
+
description: PREVIEW_EDIT_ATTEMPT_DESCRIPTION,
|
|
56
|
+
duration: 8000,
|
|
57
|
+
action: {
|
|
58
|
+
label: PREVIEW_EDIT_ATTEMPT_ACTION_LABEL,
|
|
59
|
+
onClick: () => {
|
|
60
|
+
toast.dismiss(PREVIEW_EDIT_ATTEMPT_TOAST_ID);
|
|
61
|
+
void editContext.changeMode("edit", {
|
|
62
|
+
reason: PREVIEW_EDIT_ATTEMPT_MODE_CHANGE_REASON,
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=previewEditAttempt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewEditAttempt.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/previewEditAttempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAK/B;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAC;AACzE,MAAM,CAAC,MAAM,uCAAuC,GAAG,sBAAsB,CAAC;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,2BAA2B,CAAC;AACtE,MAAM,CAAC,MAAM,gCAAgC,GAC3C,yDAAyD,CAAC;AAC5D,MAAM,CAAC,MAAM,iCAAiC,GAAG,qBAAqB,CAAC;AAEvE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE9D,6EAA6E;AAC7E,+DAA+D;AAC/D,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,+BAA+B,CAC7C,WAAoC;IAEpC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,WAAW,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAErC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC;IAElC,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,CACL,6BAA6B,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACpD,8BAA8B,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,2EAA2E;IAC3E,iEAAiE;IACjE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,WAAgD;IAEhD,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE;QACrC,EAAE,EAAE,6BAA6B;QACjC,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE;YACN,KAAK,EAAE,iCAAiC;YACxC,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;gBAC7C,KAAK,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;oBAClC,MAAM,EAAE,uCAAuC;iBAChD,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type PageVersion, type RenderingPageState, type RenderingState, type RenderingsResult } from "../services/renderingsService";
|
|
2
|
+
export type RenderingApprovalStatus = "approved" | "changed" | "unapproved" | "sandbox";
|
|
3
|
+
export declare function getRenderingApprovalStatus(rendering: Pick<RenderingState, "approved" | "changedSinceApproval" | "sandbox">): RenderingApprovalStatus;
|
|
4
|
+
export declare const RENDERING_APPROVAL_LABELS: Record<RenderingApprovalStatus, string>;
|
|
5
|
+
export declare const RENDERING_APPROVAL_DESCRIPTIONS: Record<RenderingApprovalStatus, string>;
|
|
6
|
+
/**
|
|
7
|
+
* What the strip says about client code that does not run, if any: client
|
|
8
|
+
* code runs only after an administrator approved its rendering. Sandbox
|
|
9
|
+
* renderings are never approved; their owner (who can review them) tries
|
|
10
|
+
* their client code in the review.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getClientCodeNotice(renderings: readonly RenderingState[], canReview?: boolean): string | undefined;
|
|
13
|
+
/** Badge colors per status (Badge has no green or orange variant). */
|
|
14
|
+
export declare const RENDERING_APPROVAL_BADGE_CLASSES: Record<RenderingApprovalStatus, string>;
|
|
15
|
+
/** An account name without its domain: "sitecore\\jane" becomes "jane". */
|
|
16
|
+
export declare function stripAccountDomain(account: string): string;
|
|
17
|
+
export declare function formatApprovalDate(value: string | null | undefined): string | undefined;
|
|
18
|
+
/** The name a rendering is listed under. */
|
|
19
|
+
export declare function getRenderingDisplayName(rendering: RenderingState): string;
|
|
20
|
+
/**
|
|
21
|
+
* The renderings in the order the page shows them (as `renderingIds` lists
|
|
22
|
+
* them), then any the server added that the page does not list, the theme
|
|
23
|
+
* last.
|
|
24
|
+
*/
|
|
25
|
+
export declare function sortRenderingsForPage(renderings: readonly RenderingState[], renderingIds: readonly string[]): RenderingState[];
|
|
26
|
+
/** The renderings a published page would leave out. */
|
|
27
|
+
export declare function getUnapprovedRenderings(renderings: readonly RenderingState[]): RenderingState[];
|
|
28
|
+
export type UseRenderingPageStateOptions = {
|
|
29
|
+
page: PageVersion | undefined;
|
|
30
|
+
renderingIds: readonly string[];
|
|
31
|
+
/** Off: nothing is requested and nothing is reported. */
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
fetchPageState?: (page: PageVersion, renderingIds: readonly string[], signal?: AbortSignal) => Promise<RenderingsResult<RenderingPageState>>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* The approval state of a page's dynamic renderings (and its tenant's theme),
|
|
37
|
+
* requested again whenever the page or its renderings change, and on
|
|
38
|
+
* `refresh()`. A refresh keeps showing the previous answer until the new one
|
|
39
|
+
* is there.
|
|
40
|
+
*/
|
|
41
|
+
export declare function useRenderingPageState({ page, renderingIds, enabled, fetchPageState, }: UseRenderingPageStateOptions): {
|
|
42
|
+
state: RenderingPageState | undefined;
|
|
43
|
+
error: string | undefined;
|
|
44
|
+
loading: boolean;
|
|
45
|
+
refresh: () => void;
|
|
46
|
+
};
|
|
47
|
+
export declare function recordPageRenderingIds(page: {
|
|
48
|
+
id: string;
|
|
49
|
+
language: string;
|
|
50
|
+
}, renderingIds: readonly string[]): void;
|
|
51
|
+
export declare function getRecordedPageRenderingIds(page: {
|
|
52
|
+
id: string;
|
|
53
|
+
language: string;
|
|
54
|
+
} | undefined): string[];
|
|
55
|
+
/** The dynamic renderings last read from the page's canvas (see above). */
|
|
56
|
+
export declare function useRecordedPageRenderingIds(page: {
|
|
57
|
+
id: string;
|
|
58
|
+
language: string;
|
|
59
|
+
} | undefined): string[];
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { useEffect, useState, useSyncExternalStore } from "react";
|
|
2
|
+
import { fetchRenderingPageState, } from "../services/renderingsService";
|
|
3
|
+
import { normalizeRenderingId, sameRenderingIds } from "./interactivePreview";
|
|
4
|
+
import { DYNAMIC_RENDERING_CHANGED_EVENT } from "./renderingChanges";
|
|
5
|
+
export function getRenderingApprovalStatus(rendering) {
|
|
6
|
+
if (rendering.sandbox)
|
|
7
|
+
return "sandbox";
|
|
8
|
+
if (rendering.approved)
|
|
9
|
+
return "approved";
|
|
10
|
+
return rendering.changedSinceApproval ? "changed" : "unapproved";
|
|
11
|
+
}
|
|
12
|
+
export const RENDERING_APPROVAL_LABELS = {
|
|
13
|
+
approved: "Approved",
|
|
14
|
+
changed: "Changed since approval",
|
|
15
|
+
unapproved: "Not approved",
|
|
16
|
+
sandbox: "Preview only",
|
|
17
|
+
};
|
|
18
|
+
export const RENDERING_APPROVAL_DESCRIPTIONS = {
|
|
19
|
+
approved: "Published pages show this rendering.",
|
|
20
|
+
changed: "The code changed after it was approved. Published pages do not show it until it is approved again.",
|
|
21
|
+
unapproved: "Published pages do not show this rendering until an administrator approves it.",
|
|
22
|
+
sandbox: "Renderings in a sandbox cannot be approved, so their client code runs only when the sandbox's owner tries it under Review.",
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* What the strip says about client code that does not run, if any: client
|
|
26
|
+
* code runs only after an administrator approved its rendering. Sandbox
|
|
27
|
+
* renderings are never approved; their owner (who can review them) tries
|
|
28
|
+
* their client code in the review.
|
|
29
|
+
*/
|
|
30
|
+
export function getClientCodeNotice(renderings, canReview = false) {
|
|
31
|
+
const waiting = renderings.some((rendering) => rendering.hasClientCode && !rendering.sandbox && !rendering.approved);
|
|
32
|
+
const sandboxed = renderings.some((rendering) => rendering.hasClientCode && rendering.sandbox);
|
|
33
|
+
const notice = [
|
|
34
|
+
waiting &&
|
|
35
|
+
"Client code runs only after an administrator approves the rendering; until then the component stays static.",
|
|
36
|
+
sandboxed &&
|
|
37
|
+
(canReview
|
|
38
|
+
? "Sandbox renderings cannot be approved, so their client code runs only when you try it: Review, then Run client code."
|
|
39
|
+
: "Client code never runs in a sandbox, because sandbox renderings cannot be approved."),
|
|
40
|
+
]
|
|
41
|
+
.filter(Boolean)
|
|
42
|
+
.join(" ");
|
|
43
|
+
return notice || undefined;
|
|
44
|
+
}
|
|
45
|
+
/** Badge colors per status (Badge has no green or orange variant). */
|
|
46
|
+
export const RENDERING_APPROVAL_BADGE_CLASSES = {
|
|
47
|
+
approved: "border-transparent bg-feedback-green-light text-feedback-green",
|
|
48
|
+
changed: "border-transparent bg-feedback-orange-light text-feedback-orange",
|
|
49
|
+
unapproved: "border-transparent bg-feedback-orange-light text-feedback-orange",
|
|
50
|
+
sandbox: "",
|
|
51
|
+
};
|
|
52
|
+
/** An account name without its domain: "sitecore\\jane" becomes "jane". */
|
|
53
|
+
export function stripAccountDomain(account) {
|
|
54
|
+
const separator = account.lastIndexOf("\\");
|
|
55
|
+
return separator >= 0 ? account.slice(separator + 1) : account;
|
|
56
|
+
}
|
|
57
|
+
export function formatApprovalDate(value) {
|
|
58
|
+
if (!value)
|
|
59
|
+
return undefined;
|
|
60
|
+
const date = new Date(value);
|
|
61
|
+
if (Number.isNaN(date.getTime()))
|
|
62
|
+
return undefined;
|
|
63
|
+
return date.toLocaleString(undefined, {
|
|
64
|
+
dateStyle: "medium",
|
|
65
|
+
timeStyle: "short",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** The name a rendering is listed under. */
|
|
69
|
+
export function getRenderingDisplayName(rendering) {
|
|
70
|
+
const name = rendering.name || rendering.path.split("/").pop() || "";
|
|
71
|
+
if (rendering.kind === "theme")
|
|
72
|
+
return name ? `Theme ${name}` : "Theme";
|
|
73
|
+
return name || rendering.id;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The renderings in the order the page shows them (as `renderingIds` lists
|
|
77
|
+
* them), then any the server added that the page does not list, the theme
|
|
78
|
+
* last.
|
|
79
|
+
*/
|
|
80
|
+
export function sortRenderingsForPage(renderings, renderingIds) {
|
|
81
|
+
const order = new Map(renderingIds.map((id, index) => [id, index]));
|
|
82
|
+
const rank = (rendering) => rendering.kind === "theme"
|
|
83
|
+
? Number.MAX_SAFE_INTEGER
|
|
84
|
+
: (order.get(normalizeRenderingId(rendering.id) ?? "") ??
|
|
85
|
+
renderingIds.length);
|
|
86
|
+
return renderings
|
|
87
|
+
.map((rendering, index) => ({ rendering, index }))
|
|
88
|
+
.sort((a, b) => rank(a.rendering) - rank(b.rendering) || a.index - b.index)
|
|
89
|
+
.map(({ rendering }) => rendering);
|
|
90
|
+
}
|
|
91
|
+
/** The renderings a published page would leave out. */
|
|
92
|
+
export function getUnapprovedRenderings(renderings) {
|
|
93
|
+
return renderings.filter((rendering) => !rendering.approved);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The approval state of a page's dynamic renderings (and its tenant's theme),
|
|
97
|
+
* requested again whenever the page or its renderings change, and on
|
|
98
|
+
* `refresh()`. A refresh keeps showing the previous answer until the new one
|
|
99
|
+
* is there.
|
|
100
|
+
*/
|
|
101
|
+
export function useRenderingPageState({ page, renderingIds, enabled, fetchPageState = fetchRenderingPageState, }) {
|
|
102
|
+
const [entry, setEntry] = useState();
|
|
103
|
+
const [revision, setRevision] = useState(0);
|
|
104
|
+
const pageId = page?.id;
|
|
105
|
+
const pageLanguage = page?.language;
|
|
106
|
+
const pageVersion = page?.version;
|
|
107
|
+
const idList = renderingIds.join(",");
|
|
108
|
+
const key = enabled && pageId && pageLanguage && typeof pageVersion === "number"
|
|
109
|
+
? [pageId, pageLanguage, pageVersion, idList].join("|")
|
|
110
|
+
: undefined;
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
if (!key || !pageId || !pageLanguage || typeof pageVersion !== "number") {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const controller = new AbortController();
|
|
116
|
+
void fetchPageState({ id: pageId, language: pageLanguage, version: pageVersion }, idList ? idList.split(",") : [], controller.signal).then((result) => {
|
|
117
|
+
if (controller.signal.aborted)
|
|
118
|
+
return;
|
|
119
|
+
setEntry(result.ok
|
|
120
|
+
? { key, state: result.data }
|
|
121
|
+
: { key, error: result.message });
|
|
122
|
+
});
|
|
123
|
+
return () => controller.abort();
|
|
124
|
+
}, [
|
|
125
|
+
fetchPageState,
|
|
126
|
+
idList,
|
|
127
|
+
key,
|
|
128
|
+
pageId,
|
|
129
|
+
pageLanguage,
|
|
130
|
+
pageVersion,
|
|
131
|
+
revision,
|
|
132
|
+
]);
|
|
133
|
+
// A rendering on the canvas changed (its code or its approval): read again.
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
if (!key)
|
|
136
|
+
return;
|
|
137
|
+
const onChanged = () => setRevision((value) => value + 1);
|
|
138
|
+
window.addEventListener(DYNAMIC_RENDERING_CHANGED_EVENT, onChanged);
|
|
139
|
+
return () => window.removeEventListener(DYNAMIC_RENDERING_CHANGED_EVENT, onChanged);
|
|
140
|
+
}, [key]);
|
|
141
|
+
const current = key && entry?.key === key ? entry : undefined;
|
|
142
|
+
return {
|
|
143
|
+
state: current?.state,
|
|
144
|
+
error: current?.error,
|
|
145
|
+
loading: !!key && !current,
|
|
146
|
+
refresh: () => setRevision((value) => value + 1),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// The dynamic renderings last read from each page's canvas, in edit and
|
|
150
|
+
// preview mode alike, so the publish dialog can ask for their approval state.
|
|
151
|
+
const recordedRenderingIds = new Map();
|
|
152
|
+
const recordListeners = new Set();
|
|
153
|
+
const NO_RECORDED_IDS = [];
|
|
154
|
+
function getRecordKey(page) {
|
|
155
|
+
return `${page.id.replace(/[{}-]/g, "").toLowerCase()}|${page.language.toLowerCase()}`;
|
|
156
|
+
}
|
|
157
|
+
export function recordPageRenderingIds(page, renderingIds) {
|
|
158
|
+
const key = getRecordKey(page);
|
|
159
|
+
const previous = recordedRenderingIds.get(key) ?? NO_RECORDED_IDS;
|
|
160
|
+
if (sameRenderingIds(previous, renderingIds))
|
|
161
|
+
return;
|
|
162
|
+
if (renderingIds.length) {
|
|
163
|
+
recordedRenderingIds.set(key, [...renderingIds]);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
recordedRenderingIds.delete(key);
|
|
167
|
+
}
|
|
168
|
+
recordListeners.forEach((listener) => listener());
|
|
169
|
+
}
|
|
170
|
+
export function getRecordedPageRenderingIds(page) {
|
|
171
|
+
return page
|
|
172
|
+
? (recordedRenderingIds.get(getRecordKey(page)) ?? NO_RECORDED_IDS)
|
|
173
|
+
: NO_RECORDED_IDS;
|
|
174
|
+
}
|
|
175
|
+
function subscribeRecordedRenderingIds(listener) {
|
|
176
|
+
recordListeners.add(listener);
|
|
177
|
+
return () => {
|
|
178
|
+
recordListeners.delete(listener);
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/** The dynamic renderings last read from the page's canvas (see above). */
|
|
182
|
+
export function useRecordedPageRenderingIds(page) {
|
|
183
|
+
const getSnapshot = () => getRecordedPageRenderingIds(page);
|
|
184
|
+
return useSyncExternalStore(subscribeRecordedRenderingIds, getSnapshot, getSnapshot);
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=renderingApproval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderingApproval.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/renderingApproval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A saved dynamic rendering (an agent's update-rendering, or anyone editing
|
|
3
|
+
* the rendering item) changes what the canvas shows, although no page item
|
|
4
|
+
* changed: the server reports it as an "item-changed" for the rendering item.
|
|
5
|
+
* This module decides whether such a change concerns the open canvas.
|
|
6
|
+
*/
|
|
7
|
+
import { type PageVersion, type RenderingPageState, type RenderingsResult } from "../services/renderingsService";
|
|
8
|
+
/** The Code and Client Code fields of a rendering item. */
|
|
9
|
+
export declare const RENDERING_CODE_FIELD_ID = "fa417e5d-357f-4855-9870-b7e43d3f97d6";
|
|
10
|
+
export declare const RENDERING_CLIENT_CODE_FIELD_ID = "e25b9910-aafc-46b8-b6d1-29e499190ea6";
|
|
11
|
+
/** Dispatched on window with `{ renderingId }` when a rendering on the canvas changed. */
|
|
12
|
+
export declare const DYNAMIC_RENDERING_CHANGED_EVENT = "parhelia:dynamic-rendering-changed";
|
|
13
|
+
export type DynamicRenderingChangedDetail = {
|
|
14
|
+
renderingId: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Whether the saved item is a dynamic rendering the canvas shows. A component
|
|
18
|
+
* is answered from the canvas, which wraps each one in its rendering id, so
|
|
19
|
+
* no other saved item costs a request. A theme leaves no id in the page:
|
|
20
|
+
* when an item's code changed and the canvas does not show it, the page's
|
|
21
|
+
* rendering state (which lists the tenant's theme) decides.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isRenderingOnCanvas({ itemId, fieldIds, iframe, page, fetchPageState, }: {
|
|
24
|
+
itemId: string | null | undefined;
|
|
25
|
+
fieldIds?: readonly string[] | null;
|
|
26
|
+
iframe: HTMLIFrameElement | null | undefined;
|
|
27
|
+
page?: PageVersion;
|
|
28
|
+
fetchPageState?: (page: PageVersion, renderingIds: string[]) => Promise<RenderingsResult<RenderingPageState>>;
|
|
29
|
+
}): Promise<boolean>;
|