@batterai/editor-shell 0.1.0
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/CHANGELOG.md +5 -0
- package/LICENSE +101 -0
- package/README.md +11 -0
- package/dist/App.d.ts +4 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +388 -0
- package/dist/App.js.map +1 -0
- package/dist/app/AppCanvas.d.ts +52 -0
- package/dist/app/AppCanvas.d.ts.map +1 -0
- package/dist/app/AppCanvas.js +43 -0
- package/dist/app/AppCanvas.js.map +1 -0
- package/dist/app/AppDialogs.d.ts +25 -0
- package/dist/app/AppDialogs.d.ts.map +1 -0
- package/dist/app/AppDialogs.js +16 -0
- package/dist/app/AppDialogs.js.map +1 -0
- package/dist/app/AppInspectorPanel.d.ts +66 -0
- package/dist/app/AppInspectorPanel.d.ts.map +1 -0
- package/dist/app/AppInspectorPanel.js +94 -0
- package/dist/app/AppInspectorPanel.js.map +1 -0
- package/dist/app/AppStates.d.ts +5 -0
- package/dist/app/AppStates.d.ts.map +1 -0
- package/dist/app/AppStates.js +8 -0
- package/dist/app/AppStates.js.map +1 -0
- package/dist/app/AppTypes.d.ts +18 -0
- package/dist/app/AppTypes.d.ts.map +1 -0
- package/dist/app/AppTypes.js +2 -0
- package/dist/app/AppTypes.js.map +1 -0
- package/dist/app/OperationErrorBanner.d.ts +5 -0
- package/dist/app/OperationErrorBanner.d.ts.map +1 -0
- package/dist/app/OperationErrorBanner.js +5 -0
- package/dist/app/OperationErrorBanner.js.map +1 -0
- package/dist/app/capability-guards.d.ts +9 -0
- package/dist/app/capability-guards.d.ts.map +1 -0
- package/dist/app/capability-guards.js +22 -0
- package/dist/app/capability-guards.js.map +1 -0
- package/dist/app/deriveSelectionState.d.ts +31 -0
- package/dist/app/deriveSelectionState.d.ts.map +1 -0
- package/dist/app/deriveSelectionState.js +79 -0
- package/dist/app/deriveSelectionState.js.map +1 -0
- package/dist/app/helpers.d.ts +31 -0
- package/dist/app/helpers.d.ts.map +1 -0
- package/dist/app/helpers.js +145 -0
- package/dist/app/helpers.js.map +1 -0
- package/dist/app/hostServices.d.ts +2 -0
- package/dist/app/hostServices.d.ts.map +1 -0
- package/dist/app/hostServices.js +2 -0
- package/dist/app/hostServices.js.map +1 -0
- package/dist/app/persistence-machine.d.ts +27 -0
- package/dist/app/persistence-machine.d.ts.map +1 -0
- package/dist/app/persistence-machine.js +66 -0
- package/dist/app/persistence-machine.js.map +1 -0
- package/dist/app/useCollectionEditing.d.ts +30 -0
- package/dist/app/useCollectionEditing.d.ts.map +1 -0
- package/dist/app/useCollectionEditing.js +80 -0
- package/dist/app/useCollectionEditing.js.map +1 -0
- package/dist/app/useCommitActions.d.ts +64 -0
- package/dist/app/useCommitActions.d.ts.map +1 -0
- package/dist/app/useCommitActions.js +319 -0
- package/dist/app/useCommitActions.js.map +1 -0
- package/dist/app/useEditorCollaboration.d.ts +30 -0
- package/dist/app/useEditorCollaboration.d.ts.map +1 -0
- package/dist/app/useEditorCollaboration.js +374 -0
- package/dist/app/useEditorCollaboration.js.map +1 -0
- package/dist/app/useEditorEffects.d.ts +42 -0
- package/dist/app/useEditorEffects.d.ts.map +1 -0
- package/dist/app/useEditorEffects.js +105 -0
- package/dist/app/useEditorEffects.js.map +1 -0
- package/dist/app/useEditorRuntime.d.ts +34 -0
- package/dist/app/useEditorRuntime.d.ts.map +1 -0
- package/dist/app/useEditorRuntime.js +68 -0
- package/dist/app/useEditorRuntime.js.map +1 -0
- package/dist/app/useEditorState.d.ts +55 -0
- package/dist/app/useEditorState.d.ts.map +1 -0
- package/dist/app/useEditorState.js +68 -0
- package/dist/app/useEditorState.js.map +1 -0
- package/dist/app/usePageOps.d.ts +37 -0
- package/dist/app/usePageOps.d.ts.map +1 -0
- package/dist/app/usePageOps.js +69 -0
- package/dist/app/usePageOps.js.map +1 -0
- package/dist/app/usePersistence.d.ts +48 -0
- package/dist/app/usePersistence.d.ts.map +1 -0
- package/dist/app/usePersistence.js +344 -0
- package/dist/app/usePersistence.js.map +1 -0
- package/dist/app/usePreviewSession.d.ts +22 -0
- package/dist/app/usePreviewSession.d.ts.map +1 -0
- package/dist/app/usePreviewSession.js +21 -0
- package/dist/app/usePreviewSession.js.map +1 -0
- package/dist/app/useWorkspaceDocumentSync.d.ts +33 -0
- package/dist/app/useWorkspaceDocumentSync.d.ts.map +1 -0
- package/dist/app/useWorkspaceDocumentSync.js +128 -0
- package/dist/app/useWorkspaceDocumentSync.js.map +1 -0
- package/dist/appearance.d.ts +6 -0
- package/dist/appearance.d.ts.map +1 -0
- package/dist/appearance.js +53 -0
- package/dist/appearance.js.map +1 -0
- package/dist/bindingChips.d.ts +28 -0
- package/dist/bindingChips.d.ts.map +1 -0
- package/dist/bindingChips.js +93 -0
- package/dist/bindingChips.js.map +1 -0
- package/dist/block-factory.d.ts +21 -0
- package/dist/block-factory.d.ts.map +1 -0
- package/dist/block-factory.js +78 -0
- package/dist/block-factory.js.map +1 -0
- package/dist/blockHost.d.ts +22 -0
- package/dist/blockHost.d.ts.map +1 -0
- package/dist/blockHost.js +103 -0
- package/dist/blockHost.js.map +1 -0
- package/dist/blockInteraction.d.ts +11 -0
- package/dist/blockInteraction.d.ts.map +1 -0
- package/dist/blockInteraction.js +16 -0
- package/dist/blockInteraction.js.map +1 -0
- package/dist/blockPresets.d.ts +4 -0
- package/dist/blockPresets.d.ts.map +1 -0
- package/dist/blockPresets.js +11 -0
- package/dist/blockPresets.js.map +1 -0
- package/dist/collaboration.d.ts +41 -0
- package/dist/collaboration.d.ts.map +1 -0
- package/dist/collaboration.js +4 -0
- package/dist/collaboration.js.map +1 -0
- package/dist/collectionItemAddress.d.ts +12 -0
- package/dist/collectionItemAddress.d.ts.map +1 -0
- package/dist/collectionItemAddress.js +19 -0
- package/dist/collectionItemAddress.js.map +1 -0
- package/dist/components/AddCollectionItemControl.d.ts +15 -0
- package/dist/components/AddCollectionItemControl.d.ts.map +1 -0
- package/dist/components/AddCollectionItemControl.js +19 -0
- package/dist/components/AddCollectionItemControl.js.map +1 -0
- package/dist/components/AuditHistoryPanel.d.ts +10 -0
- package/dist/components/AuditHistoryPanel.d.ts.map +1 -0
- package/dist/components/AuditHistoryPanel.js +11 -0
- package/dist/components/AuditHistoryPanel.js.map +1 -0
- package/dist/components/Canvas.d.ts +64 -0
- package/dist/components/Canvas.d.ts.map +1 -0
- package/dist/components/Canvas.js +238 -0
- package/dist/components/Canvas.js.map +1 -0
- package/dist/components/CollaborationLayer.d.ts +13 -0
- package/dist/components/CollaborationLayer.d.ts.map +1 -0
- package/dist/components/CollaborationLayer.js +91 -0
- package/dist/components/CollaborationLayer.js.map +1 -0
- package/dist/components/DesignSettingsPanel.d.ts +10 -0
- package/dist/components/DesignSettingsPanel.d.ts.map +1 -0
- package/dist/components/DesignSettingsPanel.js +26 -0
- package/dist/components/DesignSettingsPanel.js.map +1 -0
- package/dist/components/EditableDate.d.ts +24 -0
- package/dist/components/EditableDate.d.ts.map +1 -0
- package/dist/components/EditableDate.js +41 -0
- package/dist/components/EditableDate.js.map +1 -0
- package/dist/components/EditableText.d.ts +23 -0
- package/dist/components/EditableText.d.ts.map +1 -0
- package/dist/components/EditableText.js +53 -0
- package/dist/components/EditableText.js.map +1 -0
- package/dist/components/FieldControl.d.ts +15 -0
- package/dist/components/FieldControl.d.ts.map +1 -0
- package/dist/components/FieldControl.js +64 -0
- package/dist/components/FieldControl.js.map +1 -0
- package/dist/components/IconFieldEditor.d.ts +9 -0
- package/dist/components/IconFieldEditor.d.ts.map +1 -0
- package/dist/components/IconFieldEditor.js +15 -0
- package/dist/components/IconFieldEditor.js.map +1 -0
- package/dist/components/ImageFieldEditor.d.ts +15 -0
- package/dist/components/ImageFieldEditor.d.ts.map +1 -0
- package/dist/components/ImageFieldEditor.js +37 -0
- package/dist/components/ImageFieldEditor.js.map +1 -0
- package/dist/components/Inspector.d.ts +55 -0
- package/dist/components/Inspector.d.ts.map +1 -0
- package/dist/components/Inspector.js +44 -0
- package/dist/components/Inspector.js.map +1 -0
- package/dist/components/LayoutBlockEditor.d.ts +32 -0
- package/dist/components/LayoutBlockEditor.d.ts.map +1 -0
- package/dist/components/LayoutBlockEditor.js +176 -0
- package/dist/components/LayoutBlockEditor.js.map +1 -0
- package/dist/components/LicenseWatermark.d.ts +5 -0
- package/dist/components/LicenseWatermark.d.ts.map +1 -0
- package/dist/components/LicenseWatermark.js +7 -0
- package/dist/components/LicenseWatermark.js.map +1 -0
- package/dist/components/NestedBlockItem.d.ts +26 -0
- package/dist/components/NestedBlockItem.d.ts.map +1 -0
- package/dist/components/NestedBlockItem.js +164 -0
- package/dist/components/NestedBlockItem.js.map +1 -0
- package/dist/components/NestedInsertSlot.d.ts +18 -0
- package/dist/components/NestedInsertSlot.d.ts.map +1 -0
- package/dist/components/NestedInsertSlot.js +51 -0
- package/dist/components/NestedInsertSlot.js.map +1 -0
- package/dist/components/NewPageDialog.d.ts +9 -0
- package/dist/components/NewPageDialog.d.ts.map +1 -0
- package/dist/components/NewPageDialog.js +12 -0
- package/dist/components/NewPageDialog.js.map +1 -0
- package/dist/components/PageFrame.d.ts +75 -0
- package/dist/components/PageFrame.d.ts.map +1 -0
- package/dist/components/PageFrame.js +87 -0
- package/dist/components/PageFrame.js.map +1 -0
- package/dist/components/PageInspector.d.ts +16 -0
- package/dist/components/PageInspector.d.ts.map +1 -0
- package/dist/components/PageInspector.js +56 -0
- package/dist/components/PageInspector.js.map +1 -0
- package/dist/components/PresetSaveDialog.d.ts +8 -0
- package/dist/components/PresetSaveDialog.d.ts.map +1 -0
- package/dist/components/PresetSaveDialog.js +7 -0
- package/dist/components/PresetSaveDialog.js.map +1 -0
- package/dist/components/ReferenceChipsEditor.d.ts +23 -0
- package/dist/components/ReferenceChipsEditor.d.ts.map +1 -0
- package/dist/components/ReferenceChipsEditor.js +68 -0
- package/dist/components/ReferenceChipsEditor.js.map +1 -0
- package/dist/components/TopBar.d.ts +49 -0
- package/dist/components/TopBar.d.ts.map +1 -0
- package/dist/components/TopBar.js +41 -0
- package/dist/components/TopBar.js.map +1 -0
- package/dist/components/canvas/CanvasBoard.d.ts +97 -0
- package/dist/components/canvas/CanvasBoard.d.ts.map +1 -0
- package/dist/components/canvas/CanvasBoard.js +35 -0
- package/dist/components/canvas/CanvasBoard.js.map +1 -0
- package/dist/components/canvas/EditableCanvasTitle.d.ts +13 -0
- package/dist/components/canvas/EditableCanvasTitle.d.ts.map +1 -0
- package/dist/components/canvas/EditableCanvasTitle.js +74 -0
- package/dist/components/canvas/EditableCanvasTitle.js.map +1 -0
- package/dist/components/canvas/camera.d.ts +9 -0
- package/dist/components/canvas/camera.d.ts.map +1 -0
- package/dist/components/canvas/camera.js +31 -0
- package/dist/components/canvas/camera.js.map +1 -0
- package/dist/components/canvas/column-window.d.ts +10 -0
- package/dist/components/canvas/column-window.d.ts.map +1 -0
- package/dist/components/canvas/column-window.js +46 -0
- package/dist/components/canvas/column-window.js.map +1 -0
- package/dist/components/canvas/keyboard-nav.d.ts +7 -0
- package/dist/components/canvas/keyboard-nav.d.ts.map +1 -0
- package/dist/components/canvas/keyboard-nav.js +44 -0
- package/dist/components/canvas/keyboard-nav.js.map +1 -0
- package/dist/components/canvas/links.d.ts +2 -0
- package/dist/components/canvas/links.d.ts.map +1 -0
- package/dist/components/canvas/links.js +7 -0
- package/dist/components/canvas/links.js.map +1 -0
- package/dist/components/editable-text/BindingInlineEditor.d.ts +13 -0
- package/dist/components/editable-text/BindingInlineEditor.d.ts.map +1 -0
- package/dist/components/editable-text/BindingInlineEditor.js +24 -0
- package/dist/components/editable-text/BindingInlineEditor.js.map +1 -0
- package/dist/components/editable-text/BindingPicker.d.ts +10 -0
- package/dist/components/editable-text/BindingPicker.d.ts.map +1 -0
- package/dist/components/editable-text/BindingPicker.js +20 -0
- package/dist/components/editable-text/BindingPicker.js.map +1 -0
- package/dist/components/editable-text/RichTextToolbar.d.ts +13 -0
- package/dist/components/editable-text/RichTextToolbar.d.ts.map +1 -0
- package/dist/components/editable-text/RichTextToolbar.js +24 -0
- package/dist/components/editable-text/RichTextToolbar.js.map +1 -0
- package/dist/components/editable-text/bindingHtml.d.ts +19 -0
- package/dist/components/editable-text/bindingHtml.d.ts.map +1 -0
- package/dist/components/editable-text/bindingHtml.js +106 -0
- package/dist/components/editable-text/bindingHtml.js.map +1 -0
- package/dist/components/editable-text/editableTextDom.d.ts +5 -0
- package/dist/components/editable-text/editableTextDom.d.ts.map +1 -0
- package/dist/components/editable-text/editableTextDom.js +24 -0
- package/dist/components/editable-text/editableTextDom.js.map +1 -0
- package/dist/components/editable-text/floatingPosition.d.ts +25 -0
- package/dist/components/editable-text/floatingPosition.d.ts.map +1 -0
- package/dist/components/editable-text/floatingPosition.js +35 -0
- package/dist/components/editable-text/floatingPosition.js.map +1 -0
- package/dist/components/editable-text/formatting.d.ts +15 -0
- package/dist/components/editable-text/formatting.d.ts.map +1 -0
- package/dist/components/editable-text/formatting.js +82 -0
- package/dist/components/editable-text/formatting.js.map +1 -0
- package/dist/components/editable-text/richCommands.d.ts +9 -0
- package/dist/components/editable-text/richCommands.d.ts.map +1 -0
- package/dist/components/editable-text/richCommands.js +41 -0
- package/dist/components/editable-text/richCommands.js.map +1 -0
- package/dist/components/editable-text/richHtml.d.ts +5 -0
- package/dist/components/editable-text/richHtml.d.ts.map +1 -0
- package/dist/components/editable-text/richHtml.js +150 -0
- package/dist/components/editable-text/richHtml.js.map +1 -0
- package/dist/components/editable-text/selection.d.ts +12 -0
- package/dist/components/editable-text/selection.d.ts.map +1 -0
- package/dist/components/editable-text/selection.js +119 -0
- package/dist/components/editable-text/selection.js.map +1 -0
- package/dist/components/editable-text/types.d.ts +32 -0
- package/dist/components/editable-text/types.d.ts.map +1 -0
- package/dist/components/editable-text/types.js +2 -0
- package/dist/components/editable-text/types.js.map +1 -0
- package/dist/components/editable-text/useEditableText.d.ts +35 -0
- package/dist/components/editable-text/useEditableText.d.ts.map +1 -0
- package/dist/components/editable-text/useEditableText.js +395 -0
- package/dist/components/editable-text/useEditableText.js.map +1 -0
- package/dist/components/image-editor/ImageEditorDialog.d.ts +16 -0
- package/dist/components/image-editor/ImageEditorDialog.d.ts.map +1 -0
- package/dist/components/image-editor/ImageEditorDialog.js +137 -0
- package/dist/components/image-editor/ImageEditorDialog.js.map +1 -0
- package/dist/components/image-editor/ImagePreview.d.ts +15 -0
- package/dist/components/image-editor/ImagePreview.d.ts.map +1 -0
- package/dist/components/image-editor/ImagePreview.js +16 -0
- package/dist/components/image-editor/ImagePreview.js.map +1 -0
- package/dist/components/image-editor/MediaBrowser.d.ts +22 -0
- package/dist/components/image-editor/MediaBrowser.d.ts.map +1 -0
- package/dist/components/image-editor/MediaBrowser.js +16 -0
- package/dist/components/image-editor/MediaBrowser.js.map +1 -0
- package/dist/components/image-editor/UsageSettingsForm.d.ts +10 -0
- package/dist/components/image-editor/UsageSettingsForm.d.ts.map +1 -0
- package/dist/components/image-editor/UsageSettingsForm.js +29 -0
- package/dist/components/image-editor/UsageSettingsForm.js.map +1 -0
- package/dist/components/image-editor/preview-style.d.ts +7 -0
- package/dist/components/image-editor/preview-style.d.ts.map +1 -0
- package/dist/components/image-editor/preview-style.js +47 -0
- package/dist/components/image-editor/preview-style.js.map +1 -0
- package/dist/components/image-editor/stage.d.ts +14 -0
- package/dist/components/image-editor/stage.d.ts.map +1 -0
- package/dist/components/image-editor/stage.js +116 -0
- package/dist/components/image-editor/stage.js.map +1 -0
- package/dist/components/image-editor/types.d.ts +38 -0
- package/dist/components/image-editor/types.d.ts.map +1 -0
- package/dist/components/image-editor/types.js +10 -0
- package/dist/components/image-editor/types.js.map +1 -0
- package/dist/components/image-editor/usage-conversion.d.ts +35 -0
- package/dist/components/image-editor/usage-conversion.d.ts.map +1 -0
- package/dist/components/image-editor/usage-conversion.js +249 -0
- package/dist/components/image-editor/usage-conversion.js.map +1 -0
- package/dist/components/inspector/CollectionItemFields.d.ts +10 -0
- package/dist/components/inspector/CollectionItemFields.d.ts.map +1 -0
- package/dist/components/inspector/CollectionItemFields.js +13 -0
- package/dist/components/inspector/CollectionItemFields.js.map +1 -0
- package/dist/components/inspector/ContentBindingControl.d.ts +14 -0
- package/dist/components/inspector/ContentBindingControl.d.ts.map +1 -0
- package/dist/components/inspector/ContentBindingControl.js +42 -0
- package/dist/components/inspector/ContentBindingControl.js.map +1 -0
- package/dist/components/inspector/PinControl.d.ts +10 -0
- package/dist/components/inspector/PinControl.d.ts.map +1 -0
- package/dist/components/inspector/PinControl.js +14 -0
- package/dist/components/inspector/PinControl.js.map +1 -0
- package/dist/components/inspector/constants.d.ts +8 -0
- package/dist/components/inspector/constants.d.ts.map +1 -0
- package/dist/components/inspector/constants.js +12 -0
- package/dist/components/inspector/constants.js.map +1 -0
- package/dist/components/inspector/content-item-label.d.ts +2 -0
- package/dist/components/inspector/content-item-label.d.ts.map +1 -0
- package/dist/components/inspector/content-item-label.js +23 -0
- package/dist/components/inspector/content-item-label.js.map +1 -0
- package/dist/components/page-frame/InsertSlot.d.ts +19 -0
- package/dist/components/page-frame/InsertSlot.d.ts.map +1 -0
- package/dist/components/page-frame/InsertSlot.js +55 -0
- package/dist/components/page-frame/InsertSlot.js.map +1 -0
- package/dist/components/page-frame/PageFrameBlockList.d.ts +43 -0
- package/dist/components/page-frame/PageFrameBlockList.d.ts.map +1 -0
- package/dist/components/page-frame/PageFrameBlockList.js +204 -0
- package/dist/components/page-frame/PageFrameBlockList.js.map +1 -0
- package/dist/components/page-frame/PageFrameControls.d.ts +23 -0
- package/dist/components/page-frame/PageFrameControls.d.ts.map +1 -0
- package/dist/components/page-frame/PageFrameControls.js +36 -0
- package/dist/components/page-frame/PageFrameControls.js.map +1 -0
- package/dist/components/page-frame/PageFramePathEditor.d.ts +33 -0
- package/dist/components/page-frame/PageFramePathEditor.d.ts.map +1 -0
- package/dist/components/page-frame/PageFramePathEditor.js +5 -0
- package/dist/components/page-frame/PageFramePathEditor.js.map +1 -0
- package/dist/components/page-frame/viewport.d.ts +26 -0
- package/dist/components/page-frame/viewport.d.ts.map +1 -0
- package/dist/components/page-frame/viewport.js +37 -0
- package/dist/components/page-frame/viewport.js.map +1 -0
- package/dist/content-model.d.ts +36 -0
- package/dist/content-model.d.ts.map +1 -0
- package/dist/content-model.js +15 -0
- package/dist/content-model.js.map +1 -0
- package/dist/contentModel.d.ts +3 -0
- package/dist/contentModel.d.ts.map +1 -0
- package/dist/contentModel.js +2 -0
- package/dist/contentModel.js.map +1 -0
- package/dist/designSettings.d.ts +11 -0
- package/dist/designSettings.d.ts.map +1 -0
- package/dist/designSettings.js +96 -0
- package/dist/designSettings.js.map +1 -0
- package/dist/drag-transfer.d.ts +28 -0
- package/dist/drag-transfer.d.ts.map +1 -0
- package/dist/drag-transfer.js +42 -0
- package/dist/drag-transfer.js.map +1 -0
- package/dist/editor/app/AppCanvas.d.ts +2 -0
- package/dist/editor/app/AppCanvas.d.ts.map +1 -0
- package/dist/editor/app/AppCanvas.js +2 -0
- package/dist/editor/app/AppCanvas.js.map +1 -0
- package/dist/editor/app/AppDialogs.d.ts +2 -0
- package/dist/editor/app/AppDialogs.d.ts.map +1 -0
- package/dist/editor/app/AppDialogs.js +2 -0
- package/dist/editor/app/AppDialogs.js.map +1 -0
- package/dist/editor/app/AppInspectorPanel.d.ts +2 -0
- package/dist/editor/app/AppInspectorPanel.d.ts.map +1 -0
- package/dist/editor/app/AppInspectorPanel.js +2 -0
- package/dist/editor/app/AppInspectorPanel.js.map +1 -0
- package/dist/editor/app/deriveSelectionState.d.ts +2 -0
- package/dist/editor/app/deriveSelectionState.d.ts.map +1 -0
- package/dist/editor/app/deriveSelectionState.js +2 -0
- package/dist/editor/app/deriveSelectionState.js.map +1 -0
- package/dist/editor/app/helpers.d.ts +2 -0
- package/dist/editor/app/helpers.d.ts.map +1 -0
- package/dist/editor/app/helpers.js +2 -0
- package/dist/editor/app/helpers.js.map +1 -0
- package/dist/editor/app/useCollectionEditing.d.ts +2 -0
- package/dist/editor/app/useCollectionEditing.d.ts.map +1 -0
- package/dist/editor/app/useCollectionEditing.js +2 -0
- package/dist/editor/app/useCollectionEditing.js.map +1 -0
- package/dist/editor/app/useCommitActions.d.ts +2 -0
- package/dist/editor/app/useCommitActions.d.ts.map +1 -0
- package/dist/editor/app/useCommitActions.js +2 -0
- package/dist/editor/app/useCommitActions.js.map +1 -0
- package/dist/editor/app/useEditorEffects.d.ts +2 -0
- package/dist/editor/app/useEditorEffects.d.ts.map +1 -0
- package/dist/editor/app/useEditorEffects.js +2 -0
- package/dist/editor/app/useEditorEffects.js.map +1 -0
- package/dist/editor/app/useEditorRuntime.d.ts +2 -0
- package/dist/editor/app/useEditorRuntime.d.ts.map +1 -0
- package/dist/editor/app/useEditorRuntime.js +2 -0
- package/dist/editor/app/useEditorRuntime.js.map +1 -0
- package/dist/editor/app/useEditorState.d.ts +2 -0
- package/dist/editor/app/useEditorState.d.ts.map +1 -0
- package/dist/editor/app/useEditorState.js +2 -0
- package/dist/editor/app/useEditorState.js.map +1 -0
- package/dist/editor/app/usePageOps.d.ts +2 -0
- package/dist/editor/app/usePageOps.d.ts.map +1 -0
- package/dist/editor/app/usePageOps.js +2 -0
- package/dist/editor/app/usePageOps.js.map +1 -0
- package/dist/editor/app/usePersistence.d.ts +2 -0
- package/dist/editor/app/usePersistence.d.ts.map +1 -0
- package/dist/editor/app/usePersistence.js +2 -0
- package/dist/editor/app/usePersistence.js.map +1 -0
- package/dist/editor/app/usePreviewSession.d.ts +2 -0
- package/dist/editor/app/usePreviewSession.d.ts.map +1 -0
- package/dist/editor/app/usePreviewSession.js +2 -0
- package/dist/editor/app/usePreviewSession.js.map +1 -0
- package/dist/editor/app/useWorkspaceDocumentSync.d.ts +2 -0
- package/dist/editor/app/useWorkspaceDocumentSync.d.ts.map +1 -0
- package/dist/editor/app/useWorkspaceDocumentSync.js +2 -0
- package/dist/editor/app/useWorkspaceDocumentSync.js.map +1 -0
- package/dist/editor/bindingChips.d.ts +2 -0
- package/dist/editor/bindingChips.d.ts.map +1 -0
- package/dist/editor/bindingChips.js +2 -0
- package/dist/editor/bindingChips.js.map +1 -0
- package/dist/editor/blockInteraction.d.ts +2 -0
- package/dist/editor/blockInteraction.d.ts.map +1 -0
- package/dist/editor/blockInteraction.js +2 -0
- package/dist/editor/blockInteraction.js.map +1 -0
- package/dist/editor/blockPresets.d.ts +2 -0
- package/dist/editor/blockPresets.d.ts.map +1 -0
- package/dist/editor/blockPresets.js +2 -0
- package/dist/editor/blockPresets.js.map +1 -0
- package/dist/editor/collectionItemAddress.d.ts +2 -0
- package/dist/editor/collectionItemAddress.d.ts.map +1 -0
- package/dist/editor/collectionItemAddress.js +2 -0
- package/dist/editor/collectionItemAddress.js.map +1 -0
- package/dist/editor/contentModel.d.ts +2 -0
- package/dist/editor/contentModel.d.ts.map +1 -0
- package/dist/editor/contentModel.js +2 -0
- package/dist/editor/contentModel.js.map +1 -0
- package/dist/editor/designSettings.d.ts +2 -0
- package/dist/editor/designSettings.d.ts.map +1 -0
- package/dist/editor/designSettings.js +2 -0
- package/dist/editor/designSettings.js.map +1 -0
- package/dist/editor/editorClipboard.d.ts +2 -0
- package/dist/editor/editorClipboard.d.ts.map +1 -0
- package/dist/editor/editorClipboard.js +2 -0
- package/dist/editor/editorClipboard.js.map +1 -0
- package/dist/editor/formatDate.d.ts +2 -0
- package/dist/editor/formatDate.d.ts.map +1 -0
- package/dist/editor/formatDate.js +2 -0
- package/dist/editor/formatDate.js.map +1 -0
- package/dist/editor/iconCatalog.d.ts +2 -0
- package/dist/editor/iconCatalog.d.ts.map +1 -0
- package/dist/editor/iconCatalog.js +2 -0
- package/dist/editor/iconCatalog.js.map +1 -0
- package/dist/editor/pageActions.d.ts +2 -0
- package/dist/editor/pageActions.d.ts.map +1 -0
- package/dist/editor/pageActions.js +2 -0
- package/dist/editor/pageActions.js.map +1 -0
- package/dist/editor/pagePaths.d.ts +2 -0
- package/dist/editor/pagePaths.d.ts.map +1 -0
- package/dist/editor/pagePaths.js +2 -0
- package/dist/editor/pagePaths.js.map +1 -0
- package/dist/editor/pagesActions.d.ts +2 -0
- package/dist/editor/pagesActions.d.ts.map +1 -0
- package/dist/editor/pagesActions.js +2 -0
- package/dist/editor/pagesActions.js.map +1 -0
- package/dist/editor/renderActions.d.ts +2 -0
- package/dist/editor/renderActions.d.ts.map +1 -0
- package/dist/editor/renderActions.js +2 -0
- package/dist/editor/renderActions.js.map +1 -0
- package/dist/editor/translation.d.ts +2 -0
- package/dist/editor/translation.d.ts.map +1 -0
- package/dist/editor/translation.js +2 -0
- package/dist/editor/translation.js.map +1 -0
- package/dist/editor/useCanvasBackStack.d.ts +2 -0
- package/dist/editor/useCanvasBackStack.d.ts.map +1 -0
- package/dist/editor/useCanvasBackStack.js +2 -0
- package/dist/editor/useCanvasBackStack.js.map +1 -0
- package/dist/editor/useCanvasCamera.d.ts +2 -0
- package/dist/editor/useCanvasCamera.d.ts.map +1 -0
- package/dist/editor/useCanvasCamera.js +2 -0
- package/dist/editor/useCanvasCamera.js.map +1 -0
- package/dist/editor/useCanvasFocus.d.ts +2 -0
- package/dist/editor/useCanvasFocus.d.ts.map +1 -0
- package/dist/editor/useCanvasFocus.js +2 -0
- package/dist/editor/useCanvasFocus.js.map +1 -0
- package/dist/editor/useCanvasKeyboardNav.d.ts +2 -0
- package/dist/editor/useCanvasKeyboardNav.d.ts.map +1 -0
- package/dist/editor/useCanvasKeyboardNav.js +2 -0
- package/dist/editor/useCanvasKeyboardNav.js.map +1 -0
- package/dist/editor/useClipboardActions.d.ts +2 -0
- package/dist/editor/useClipboardActions.d.ts.map +1 -0
- package/dist/editor/useClipboardActions.js +2 -0
- package/dist/editor/useClipboardActions.js.map +1 -0
- package/dist/editor/useColumnWindow.d.ts +2 -0
- package/dist/editor/useColumnWindow.d.ts.map +1 -0
- package/dist/editor/useColumnWindow.js +2 -0
- package/dist/editor/useColumnWindow.js.map +1 -0
- package/dist/editor/useEditorHistory.d.ts +2 -0
- package/dist/editor/useEditorHistory.d.ts.map +1 -0
- package/dist/editor/useEditorHistory.js +2 -0
- package/dist/editor/useEditorHistory.js.map +1 -0
- package/dist/editor/usePagePathEditor.d.ts +2 -0
- package/dist/editor/usePagePathEditor.d.ts.map +1 -0
- package/dist/editor/usePagePathEditor.js +2 -0
- package/dist/editor/usePagePathEditor.js.map +1 -0
- package/dist/editor/usePageTitleEditor.d.ts +2 -0
- package/dist/editor/usePageTitleEditor.d.ts.map +1 -0
- package/dist/editor/usePageTitleEditor.js +2 -0
- package/dist/editor/usePageTitleEditor.js.map +1 -0
- package/dist/editor/useTextFocusIntent.d.ts +2 -0
- package/dist/editor/useTextFocusIntent.d.ts.map +1 -0
- package/dist/editor/useTextFocusIntent.js +2 -0
- package/dist/editor/useTextFocusIntent.js.map +1 -0
- package/dist/editorClipboard.d.ts +23 -0
- package/dist/editorClipboard.d.ts.map +1 -0
- package/dist/editorClipboard.js +46 -0
- package/dist/editorClipboard.js.map +1 -0
- package/dist/fields-bridge.d.ts +26 -0
- package/dist/fields-bridge.d.ts.map +1 -0
- package/dist/fields-bridge.js +217 -0
- package/dist/fields-bridge.js.map +1 -0
- package/dist/formatDate.d.ts +8 -0
- package/dist/formatDate.d.ts.map +1 -0
- package/dist/formatDate.js +34 -0
- package/dist/formatDate.js.map +1 -0
- package/dist/grid-state.d.ts +29 -0
- package/dist/grid-state.d.ts.map +1 -0
- package/dist/grid-state.js +207 -0
- package/dist/grid-state.js.map +1 -0
- package/dist/history/commands.d.ts +29 -0
- package/dist/history/commands.d.ts.map +1 -0
- package/dist/history/commands.js +63 -0
- package/dist/history/commands.js.map +1 -0
- package/dist/history/diff.d.ts +22 -0
- package/dist/history/diff.d.ts.map +1 -0
- package/dist/history/diff.js +259 -0
- package/dist/history/diff.js.map +1 -0
- package/dist/history/transforms.d.ts +19 -0
- package/dist/history/transforms.d.ts.map +1 -0
- package/dist/history/transforms.js +69 -0
- package/dist/history/transforms.js.map +1 -0
- package/dist/history/types.d.ts +23 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +11 -0
- package/dist/history/types.js.map +1 -0
- package/dist/host-services.d.ts +57 -0
- package/dist/host-services.d.ts.map +1 -0
- package/dist/host-services.js +2 -0
- package/dist/host-services.js.map +1 -0
- package/dist/iconCatalog.d.ts +16 -0
- package/dist/iconCatalog.d.ts.map +1 -0
- package/dist/iconCatalog.js +32 -0
- package/dist/iconCatalog.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/insert-menu.d.ts +17 -0
- package/dist/insert-menu.d.ts.map +1 -0
- package/dist/insert-menu.js +35 -0
- package/dist/insert-menu.js.map +1 -0
- package/dist/model/bind-map.d.ts +6 -0
- package/dist/model/bind-map.d.ts.map +1 -0
- package/dist/model/bind-map.js +6 -0
- package/dist/model/bind-map.js.map +1 -0
- package/dist/model/layout-columns.d.ts +51 -0
- package/dist/model/layout-columns.d.ts.map +1 -0
- package/dist/model/layout-columns.js +74 -0
- package/dist/model/layout-columns.js.map +1 -0
- package/dist/model/page-topology.d.ts +20 -0
- package/dist/model/page-topology.d.ts.map +1 -0
- package/dist/model/page-topology.js +94 -0
- package/dist/model/page-topology.js.map +1 -0
- package/dist/model/page-tree-bridge.d.ts +81 -0
- package/dist/model/page-tree-bridge.d.ts.map +1 -0
- package/dist/model/page-tree-bridge.js +234 -0
- package/dist/model/page-tree-bridge.js.map +1 -0
- package/dist/model/prop-access.d.ts +69 -0
- package/dist/model/prop-access.d.ts.map +1 -0
- package/dist/model/prop-access.js +94 -0
- package/dist/model/prop-access.js.map +1 -0
- package/dist/mount.d.ts +25 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +26 -0
- package/dist/mount.js.map +1 -0
- package/dist/page-actions.d.ts +26 -0
- package/dist/page-actions.d.ts.map +1 -0
- package/dist/page-actions.js +118 -0
- package/dist/page-actions.js.map +1 -0
- package/dist/pageActions.d.ts +4 -0
- package/dist/pageActions.d.ts.map +1 -0
- package/dist/pageActions.js +4 -0
- package/dist/pageActions.js.map +1 -0
- package/dist/pagePaths.d.ts +30 -0
- package/dist/pagePaths.d.ts.map +1 -0
- package/dist/pagePaths.js +102 -0
- package/dist/pagePaths.js.map +1 -0
- package/dist/pagesActions.d.ts +60 -0
- package/dist/pagesActions.d.ts.map +1 -0
- package/dist/pagesActions.js +216 -0
- package/dist/pagesActions.js.map +1 -0
- package/dist/preview-auth.d.ts +29 -0
- package/dist/preview-auth.d.ts.map +1 -0
- package/dist/preview-auth.js +18 -0
- package/dist/preview-auth.js.map +1 -0
- package/dist/renderActions.d.ts +30 -0
- package/dist/renderActions.d.ts.map +1 -0
- package/dist/renderActions.js +2 -0
- package/dist/renderActions.js.map +1 -0
- package/dist/translation.d.ts +78 -0
- package/dist/translation.d.ts.map +1 -0
- package/dist/translation.js +64 -0
- package/dist/translation.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/useCanvasBackStack.d.ts +19 -0
- package/dist/useCanvasBackStack.d.ts.map +1 -0
- package/dist/useCanvasBackStack.js +49 -0
- package/dist/useCanvasBackStack.js.map +1 -0
- package/dist/useCanvasCamera.d.ts +37 -0
- package/dist/useCanvasCamera.d.ts.map +1 -0
- package/dist/useCanvasCamera.js +247 -0
- package/dist/useCanvasCamera.js.map +1 -0
- package/dist/useCanvasFocus.d.ts +32 -0
- package/dist/useCanvasFocus.d.ts.map +1 -0
- package/dist/useCanvasFocus.js +114 -0
- package/dist/useCanvasFocus.js.map +1 -0
- package/dist/useCanvasKeyboardNav.d.ts +32 -0
- package/dist/useCanvasKeyboardNav.d.ts.map +1 -0
- package/dist/useCanvasKeyboardNav.js +185 -0
- package/dist/useCanvasKeyboardNav.js.map +1 -0
- package/dist/useClipboardActions.d.ts +37 -0
- package/dist/useClipboardActions.d.ts.map +1 -0
- package/dist/useClipboardActions.js +126 -0
- package/dist/useClipboardActions.js.map +1 -0
- package/dist/useColumnWindow.d.ts +29 -0
- package/dist/useColumnWindow.d.ts.map +1 -0
- package/dist/useColumnWindow.js +80 -0
- package/dist/useColumnWindow.js.map +1 -0
- package/dist/useEditorHistory.d.ts +18 -0
- package/dist/useEditorHistory.d.ts.map +1 -0
- package/dist/useEditorHistory.js +91 -0
- package/dist/useEditorHistory.js.map +1 -0
- package/dist/usePagePathEditor.d.ts +36 -0
- package/dist/usePagePathEditor.d.ts.map +1 -0
- package/dist/usePagePathEditor.js +163 -0
- package/dist/usePagePathEditor.js.map +1 -0
- package/dist/usePageTitleEditor.d.ts +17 -0
- package/dist/usePageTitleEditor.d.ts.map +1 -0
- package/dist/usePageTitleEditor.js +101 -0
- package/dist/usePageTitleEditor.js.map +1 -0
- package/dist/useTextFocusIntent.d.ts +13 -0
- package/dist/useTextFocusIntent.d.ts.map +1 -0
- package/dist/useTextFocusIntent.js +70 -0
- package/dist/useTextFocusIntent.js.map +1 -0
- package/package.json +58 -0
- package/styles/index.css +196 -0
- package/styles/preview-auth.css +17 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddCollectionItemControl.d.ts","sourceRoot":"","sources":["../../src/components/AddCollectionItemControl.tsx"],"names":[],"mappings":"AAEA,KAAK,6BAA6B,GAAG;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,UAAU,EACV,KAAK,EACL,KAAK,GACN,EAAE,6BAA6B,+BAiB/B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Plus } from "lucide-react";
|
|
3
|
+
/**
|
|
4
|
+
* The "+ add item" affordance handed to a collection-list block via
|
|
5
|
+
* RendererActions.addItemControl. The shell owns this control so every list
|
|
6
|
+
* gets the same look and behavior; the block only decides where to drop it.
|
|
7
|
+
* Clicking it creates a fresh item with default content and opens the
|
|
8
|
+
* collection's detail template on it.
|
|
9
|
+
*/
|
|
10
|
+
export function AddCollectionItemControl({ collection, label, onAdd, }) {
|
|
11
|
+
return (_jsxs("button", { type: "button", className: "collection-add-item", onClick: (event) => {
|
|
12
|
+
// Stay inside the selected block: don't let the click bubble to the
|
|
13
|
+
// canvas (deselect / link-jump handlers) or re-trigger block select.
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
event.stopPropagation();
|
|
16
|
+
onAdd(collection);
|
|
17
|
+
}, children: [_jsx(Plus, { size: 18 }), _jsxs("span", { children: ["Add ", label] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AddCollectionItemControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddCollectionItemControl.js","sourceRoot":"","sources":["../../src/components/AddCollectionItemControl.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAQpC;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,EACvC,UAAU,EACV,KAAK,EACL,KAAK,GACyB;IAC9B,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,qBAAqB,EAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,oEAAoE;YACpE,qEAAqE;YACrE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,UAAU,CAAC,CAAC;QACpB,CAAC,aAED,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,EAClB,mCAAW,KAAK,IAAQ,IACjB,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EditorCollaborationAuditEvent } from "../collaboration";
|
|
2
|
+
type AuditHistoryPanelProps = {
|
|
3
|
+
readonly events: readonly EditorCollaborationAuditEvent[];
|
|
4
|
+
readonly loading: boolean;
|
|
5
|
+
readonly error?: string;
|
|
6
|
+
readonly onClose: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function AuditHistoryPanel({ events, loading, error, onClose }: AuditHistoryPanelProps): import("react").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=AuditHistoryPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditHistoryPanel.d.ts","sourceRoot":"","sources":["../../src/components/AuditHistoryPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEtE,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAQF,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sBAAsB,+BAgC5F"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { X } from "lucide-react";
|
|
3
|
+
function describeTarget(event) {
|
|
4
|
+
const field = event.target.field ? ` · ${event.target.field}` : "";
|
|
5
|
+
const block = event.target.blockId ? ` · block ${event.target.blockId}` : "";
|
|
6
|
+
return `${event.target.kind}${block}${field}`;
|
|
7
|
+
}
|
|
8
|
+
export function AuditHistoryPanel({ events, loading, error, onClose }) {
|
|
9
|
+
return (_jsxs("aside", { className: "audit-history", "aria-label": "Collaboration history", children: [_jsxs("header", { children: [_jsxs("div", { children: [_jsx("strong", { children: "Collaboration history" }), _jsx("span", { children: "Accepted changes and their CMS persistence state" })] }), _jsx("button", { type: "button", className: "icon-button", onClick: onClose, "aria-label": "Close collaboration history", children: _jsx(X, { size: 16 }) })] }), loading ? _jsx("p", { className: "audit-history-empty", children: "Loading history\u2026" }) : null, error ? _jsx("p", { className: "audit-history-error", role: "alert", children: error }) : null, !loading && !error && events.length === 0 ? _jsx("p", { className: "audit-history-empty", children: "No collaborative changes yet." }) : null, _jsx("ol", { children: [...events].reverse().map((event) => (_jsxs("li", { children: [_jsx("span", { className: "audit-history-avatar", "aria-hidden": "true", children: event.actor.displayName.trim().slice(0, 1).toUpperCase() }), _jsxs("div", { children: [_jsx("strong", { children: event.actor.displayName }), _jsxs("span", { children: [event.operationKind, " \u00B7 ", describeTarget(event)] }), _jsx("time", { dateTime: event.acceptedAt, children: new Date(event.acceptedAt).toLocaleString() }), _jsx("small", { className: event.persistedAt ? "is-persisted" : "is-pending", children: event.releaseId ? `Published in ${event.releaseId}` : event.persistedAt ? "Saved to CMS draft" : "Accepted, awaiting autosave" })] })] }, event.eventId))) })] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=AuditHistoryPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditHistoryPanel.js","sourceRoot":"","sources":["../../src/components/AuditHistoryPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAUjC,SAAS,cAAc,CAAC,KAAoC;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAA0B;IAC3F,OAAO,CACL,iBAAO,SAAS,EAAC,eAAe,gBAAY,uBAAuB,aACjE,6BACE,0BACE,qDAAsC,EACtC,8EAA6D,IACzD,EACN,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,aAAa,EAAC,OAAO,EAAE,OAAO,gBAAa,6BAA6B,YACtG,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,IACF,EACR,OAAO,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,qBAAqB,sCAAqB,CAAC,CAAC,CAAC,IAAI,EACxE,KAAK,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,qBAAqB,EAAC,IAAI,EAAC,OAAO,YAAE,KAAK,GAAK,CAAC,CAAC,CAAC,IAAI,EAC1E,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,qBAAqB,8CAAkC,CAAC,CAAC,CAAC,IAAI,EACxH,uBACG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpC,yBACE,eAAM,SAAS,EAAC,sBAAsB,iBAAa,MAAM,YAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAQ,EAC3H,0BACE,2BAAS,KAAK,CAAC,KAAK,CAAC,WAAW,GAAU,EAC1C,2BAAO,KAAK,CAAC,aAAa,cAAK,cAAc,CAAC,KAAK,CAAC,IAAQ,EAC5D,eAAM,QAAQ,EAAE,KAAK,CAAC,UAAU,YAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,GAAQ,EACtF,gBAAO,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,YAChE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,6BAA6B,GACzH,IACJ,KATC,KAAK,CAAC,OAAO,CAUjB,CACN,CAAC,GACC,IACC,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ResolvedEditorPreviewAuth } from "../preview-auth";
|
|
2
|
+
import type { EditorRuntime } from "../translation";
|
|
3
|
+
import { type Viewport } from "./page-frame/viewport";
|
|
4
|
+
import type { PageNode } from "@batterai/bind-core";
|
|
5
|
+
import type { LayoutColumnView } from "../model/layout-columns";
|
|
6
|
+
import type { CanvasPageRevisionKind, HostPageState } from "@batterai/contract";
|
|
7
|
+
import type { EditorShellContentModel } from "../contentModel";
|
|
8
|
+
import type { BlockDefinition, BlockLibrary, CmsContent, CollectionItem, CanvasPage, PortalUser } from "../types";
|
|
9
|
+
type CanvasProps = {
|
|
10
|
+
globalViewport: Viewport;
|
|
11
|
+
activePageId: string;
|
|
12
|
+
activeRevision: CanvasPageRevisionKind;
|
|
13
|
+
revisionBusy: boolean;
|
|
14
|
+
pageStates?: Readonly<Record<string, HostPageState>>;
|
|
15
|
+
collectionPreviewItems: Record<string, string>;
|
|
16
|
+
content: CmsContent;
|
|
17
|
+
contentModel: EditorShellContentModel;
|
|
18
|
+
/** The logged-in visitor user, or null when logged out. Protected frames
|
|
19
|
+
* then redirect to the site login page and render no sensitive blocks. */
|
|
20
|
+
currentUser: PortalUser | null;
|
|
21
|
+
definitions: BlockDefinition[];
|
|
22
|
+
isDragging: boolean;
|
|
23
|
+
isTextEditing: boolean;
|
|
24
|
+
library: BlockLibrary;
|
|
25
|
+
pages: CanvasPage[];
|
|
26
|
+
runtime: EditorRuntime;
|
|
27
|
+
previewAuth: ResolvedEditorPreviewAuth;
|
|
28
|
+
selectedId: string | null;
|
|
29
|
+
selectedIds: string[];
|
|
30
|
+
siteTitle: string;
|
|
31
|
+
onActivatePage: (pageId: string) => void;
|
|
32
|
+
onRevisionChange: (revision: CanvasPageRevisionKind) => void;
|
|
33
|
+
onStage: () => void;
|
|
34
|
+
onUnstage: () => void;
|
|
35
|
+
onRenameSiteTitle: (title: string) => void;
|
|
36
|
+
onPreviewLogin: (user: PortalUser) => void;
|
|
37
|
+
onRenamePage: (pageId: string, title: string) => void;
|
|
38
|
+
onChangePagePath: (pageId: string, parentId: string | null, path: string) => void;
|
|
39
|
+
onAddToColumn: (columnId: string, blocks: PageNode[]) => void;
|
|
40
|
+
onOpenCollectionItem: (collection: string, itemId: string) => void;
|
|
41
|
+
onEditCollectionItem: (collection: string, itemId: string, patch: Partial<CollectionItem>) => void;
|
|
42
|
+
onAddCollectionItem: (collection: string) => void;
|
|
43
|
+
onEditServiceCardIcon: (blockId: string, iconId: string) => void;
|
|
44
|
+
onBlockDropOnBlock: (sourceId: string, targetId: string, x: number, y: number) => void;
|
|
45
|
+
onDraggingChange: (dragging: boolean) => void;
|
|
46
|
+
onEndTextEditing: () => void;
|
|
47
|
+
onInsertBlocks: (pageId: string, index: number, blocks: PageNode[]) => void;
|
|
48
|
+
onInsertBlocksToColumn: (columnId: string, index: number, blocks: PageNode[]) => void;
|
|
49
|
+
onMoveBlockToColumn: (blockId: string, columnId: string, index: number) => void;
|
|
50
|
+
onMoveBlockToIndex: (pageId: string, blockId: string, index: number) => void;
|
|
51
|
+
onRequestAddPage: (parentId: string | null) => void;
|
|
52
|
+
onSelect: (blockId: string | null, extend?: boolean) => void;
|
|
53
|
+
onOpenInspector: () => void;
|
|
54
|
+
onOpenPageInspector: () => void;
|
|
55
|
+
onUpdateItems: (blockId: string, items: LayoutColumnView[]) => void;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Figma-style canvas board: every page is on the board at once. Top-level
|
|
59
|
+
* pages flow left-to-right in seed order; child/detail pages stack below
|
|
60
|
+
* their parent in the same column. The board scrolls in both directions.
|
|
61
|
+
*/
|
|
62
|
+
export declare function Canvas({ globalViewport, activePageId, activeRevision, revisionBusy, pageStates, collectionPreviewItems, content, contentModel, currentUser, definitions, isDragging, isTextEditing, library, pages, runtime, previewAuth, selectedId, selectedIds, siteTitle, onActivatePage, onRevisionChange, onStage, onUnstage, onRenameSiteTitle, onPreviewLogin, onRenamePage, onChangePagePath, onAddToColumn, onOpenCollectionItem, onEditCollectionItem, onAddCollectionItem, onEditServiceCardIcon, onBlockDropOnBlock, onDraggingChange, onEndTextEditing, onInsertBlocks, onInsertBlocksToColumn, onMoveBlockToColumn, onMoveBlockToIndex, onRequestAddPage, onSelect, onOpenInspector, onOpenPageInspector, onUpdateItems, }: CanvasProps): import("react").JSX.Element;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=Canvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { scrollPageFrameIntoView } from "@batterai/canvas";
|
|
4
|
+
import { normalizePagePath, parentPathOptions, splitPagePath } from "../pagePaths.js";
|
|
5
|
+
import { useCanvasBackStack } from "../useCanvasBackStack.js";
|
|
6
|
+
import { useCanvasCamera } from "../useCanvasCamera.js";
|
|
7
|
+
import { useCanvasKeyboardNav } from "../useCanvasKeyboardNav.js";
|
|
8
|
+
import { useColumnWindow } from "../useColumnWindow.js";
|
|
9
|
+
import { CanvasBoard } from "./canvas/CanvasBoard.js";
|
|
10
|
+
import { EXPANDED_COLUMN_WIDTH } from "./canvas/column-window.js";
|
|
11
|
+
import { VIEWPORT_WIDTHS } from "./page-frame/viewport.js";
|
|
12
|
+
import { CANVAS_DESELECT_IGNORE_SELECTOR, CANVAS_KEYBOARD_IGNORE_SELECTOR, } from "./canvas/keyboard-nav.js";
|
|
13
|
+
import { isInternalHref } from "./canvas/links.js";
|
|
14
|
+
import { buildPageTopology } from "../model/page-topology.js";
|
|
15
|
+
/**
|
|
16
|
+
* Figma-style canvas board: every page is on the board at once. Top-level
|
|
17
|
+
* pages flow left-to-right in seed order; child/detail pages stack below
|
|
18
|
+
* their parent in the same column. The board scrolls in both directions.
|
|
19
|
+
*/
|
|
20
|
+
export function Canvas({ globalViewport, activePageId, activeRevision, revisionBusy, pageStates, collectionPreviewItems, content, contentModel, currentUser, definitions, isDragging, isTextEditing, library, pages, runtime, previewAuth, selectedId, selectedIds, siteTitle, onActivatePage, onRevisionChange, onStage, onUnstage, onRenameSiteTitle, onPreviewLogin, onRenamePage, onChangePagePath, onAddToColumn, onOpenCollectionItem, onEditCollectionItem, onAddCollectionItem, onEditServiceCardIcon, onBlockDropOnBlock, onDraggingChange, onEndTextEditing, onInsertBlocks, onInsertBlocksToColumn, onMoveBlockToColumn, onMoveBlockToIndex, onRequestAddPage, onSelect, onOpenInspector, onOpenPageInspector, onUpdateItems, }) {
|
|
21
|
+
const [movingBlockId, setMovingBlockId] = useState(null);
|
|
22
|
+
// Zoom/pan controller (constants, refs, DOM writes, gesture settling). The
|
|
23
|
+
// refs it owns — shell/board/sizer/zoomLabel + the settle timer + zoomRef —
|
|
24
|
+
// are shared back here because the column-window code below reads them.
|
|
25
|
+
const { zoom, shellRef, boardRef, sizerRef, zoomLabelRef, settleTimerRef, zoomRef, zoomLabelDragRef, applyZoom, centerFrameOnViewport, handleZoomLabelPointerDown, } = useCanvasCamera({ onActivatePage });
|
|
26
|
+
// Back history, read by handleLogin below to pick the return page.
|
|
27
|
+
const { backStack, handleBack } = useCanvasBackStack({ activePageId, onActivatePage });
|
|
28
|
+
const [authReturnPageId, setAuthReturnPageId] = useState(null);
|
|
29
|
+
const pageTopology = useMemo(() => buildPageTopology(pages), [pages]);
|
|
30
|
+
const topLevel = pageTopology.roots;
|
|
31
|
+
const pagesInColumn = (topLevelId) => pageTopology.pagesByRoot.get(topLevelId) ?? [];
|
|
32
|
+
const parentPathOptionsFor = (page) => parentPathOptions(pages, page);
|
|
33
|
+
const [pageViewports, setPageViewports] = useState({});
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
setPageViewports({});
|
|
36
|
+
}, [globalViewport]);
|
|
37
|
+
const viewportForPage = (pageId) => pageViewports[pageId] ?? globalViewport;
|
|
38
|
+
const setPageViewport = (pageId, viewport) => {
|
|
39
|
+
setPageViewports((current) => ({ ...current, [pageId]: viewport }));
|
|
40
|
+
};
|
|
41
|
+
// Pages toggled to show all three viewport variants side by side. Owned here
|
|
42
|
+
// (not inside PageFrame) because an expanded frame widens its whole column,
|
|
43
|
+
// which shifts every downstream column and changes the lazy-load offsets.
|
|
44
|
+
const [expandedPages, setExpandedPages] = useState(new Set());
|
|
45
|
+
const toggleExpanded = (pageId) => setExpandedPages((current) => {
|
|
46
|
+
const next = new Set(current);
|
|
47
|
+
if (next.has(pageId))
|
|
48
|
+
next.delete(pageId);
|
|
49
|
+
else
|
|
50
|
+
next.add(pageId);
|
|
51
|
+
return next;
|
|
52
|
+
});
|
|
53
|
+
// A column is wide when its top-level page OR any of its stacked children is
|
|
54
|
+
// showing all viewports.
|
|
55
|
+
const columnExpanded = (topLevelId) => pagesInColumn(topLevelId).some((candidate) => expandedPages.has(candidate.id));
|
|
56
|
+
const columnWidth = (topLevelId) => columnExpanded(topLevelId)
|
|
57
|
+
? EXPANDED_COLUMN_WIDTH
|
|
58
|
+
: Math.max(...pagesInColumn(topLevelId).map((page) => VIEWPORT_WIDTHS[viewportForPage(page.id)]));
|
|
59
|
+
const authConfig = previewAuth;
|
|
60
|
+
const loginPage = pages.find((page) => page.id === authConfig.loginPageId) ??
|
|
61
|
+
pages.find((page) => page.path === "/login") ??
|
|
62
|
+
null;
|
|
63
|
+
function activateAndScroll(pageId, behavior = "smooth") {
|
|
64
|
+
onActivatePage(pageId);
|
|
65
|
+
scrollPageFrameIntoView(pageId, behavior);
|
|
66
|
+
}
|
|
67
|
+
const { handleCanvasKeyDown } = useCanvasKeyboardNav({
|
|
68
|
+
boardRef,
|
|
69
|
+
shellRef,
|
|
70
|
+
pages,
|
|
71
|
+
topLevel,
|
|
72
|
+
pagesInColumn,
|
|
73
|
+
activePageId,
|
|
74
|
+
selectedId,
|
|
75
|
+
isTextEditing,
|
|
76
|
+
onSelect,
|
|
77
|
+
setMovingBlockId,
|
|
78
|
+
activateAndScroll,
|
|
79
|
+
});
|
|
80
|
+
function redirectToLogin(targetPage) {
|
|
81
|
+
if (!loginPage || loginPage.id === targetPage.id)
|
|
82
|
+
return false;
|
|
83
|
+
setAuthReturnPageId(targetPage.id);
|
|
84
|
+
requestAnimationFrame(() => activateAndScroll(loginPage.id));
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
function requestPage(targetPage) {
|
|
88
|
+
if (previewAuth.isProtectedPage(targetPage) && !currentUser)
|
|
89
|
+
return redirectToLogin(targetPage);
|
|
90
|
+
requestAnimationFrame(() => activateAndScroll(targetPage.id));
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
function handleLogin(user) {
|
|
94
|
+
onPreviewLogin(user);
|
|
95
|
+
let previousPageId;
|
|
96
|
+
for (let index = backStack.length - 1; index >= 0; index -= 1) {
|
|
97
|
+
if (backStack[index] !== loginPage?.id) {
|
|
98
|
+
previousPageId = backStack[index];
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const targetId = authReturnPageId && pages.some((page) => page.id === authReturnPageId)
|
|
103
|
+
? authReturnPageId
|
|
104
|
+
: previousPageId;
|
|
105
|
+
setAuthReturnPageId(null);
|
|
106
|
+
if (targetId && targetId !== activePageId) {
|
|
107
|
+
requestAnimationFrame(() => activateAndScroll(targetId));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Which top-level columns (parent + its children) are fully mounted — the
|
|
111
|
+
// lazy-load window that keeps the board cheap with many pages on it.
|
|
112
|
+
const { loadedColumns } = useColumnWindow({
|
|
113
|
+
shellRef,
|
|
114
|
+
zoomRef,
|
|
115
|
+
settleTimerRef,
|
|
116
|
+
zoom,
|
|
117
|
+
topLevel,
|
|
118
|
+
activePageId,
|
|
119
|
+
topLevelAncestorOf: (pageId) => pageTopology.topLevelAncestorById.get(pageId) ?? pageId,
|
|
120
|
+
columnWidth,
|
|
121
|
+
isDragging,
|
|
122
|
+
expandedPages,
|
|
123
|
+
});
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
const activePage = pages.find((page) => page.id === activePageId);
|
|
126
|
+
if (!activePage || !previewAuth.isProtectedPage(activePage) || currentUser)
|
|
127
|
+
return;
|
|
128
|
+
redirectToLogin(activePage);
|
|
129
|
+
}, [activePageId, currentUser, loginPage?.id, pages]);
|
|
130
|
+
// Any in-canvas link (nav, CTA, card) that points to another page's own
|
|
131
|
+
// path jumps to and centers that page's frame — the same "go look at it"
|
|
132
|
+
// shortcut as opening a collection item, generalized to whole pages. This
|
|
133
|
+
// has to be a native capture-phase listener: handleBlockSelectClick calls
|
|
134
|
+
// stopPropagation on every block click, so a React onClick on the board
|
|
135
|
+
// would never see clicks that originate inside a block.
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
const shell = shellRef.current;
|
|
138
|
+
if (!shell)
|
|
139
|
+
return;
|
|
140
|
+
function jumpToPath(href) {
|
|
141
|
+
const normalizedHref = normalizePagePath(href);
|
|
142
|
+
const targetPage = pages.find((page) => normalizePagePath(page.path) === normalizedHref);
|
|
143
|
+
if (!targetPage) {
|
|
144
|
+
for (const detailPage of pages) {
|
|
145
|
+
const collection = detailPage.contentBinding?.contentType;
|
|
146
|
+
if (!collection)
|
|
147
|
+
continue;
|
|
148
|
+
const { parentPath } = splitPagePath(normalizePagePath(detailPage.path));
|
|
149
|
+
const basePath = normalizePagePath(parentPath ?? "/");
|
|
150
|
+
const prefix = basePath === "/" ? "/" : `${basePath}/`;
|
|
151
|
+
if (!normalizedHref.startsWith(prefix))
|
|
152
|
+
continue;
|
|
153
|
+
const slug = normalizedHref.slice(prefix.length);
|
|
154
|
+
const item = contentModel
|
|
155
|
+
.collectionItems(content, collection)
|
|
156
|
+
.find((candidate) => (candidate.slug || candidate.id) === slug);
|
|
157
|
+
if (!item)
|
|
158
|
+
continue;
|
|
159
|
+
onOpenCollectionItem(collection, item.id);
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
if (targetPage.id === activePageId && (!previewAuth.isProtectedPage(targetPage) || currentUser)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
return requestPage(targetPage);
|
|
168
|
+
}
|
|
169
|
+
function handleLinkClick(event) {
|
|
170
|
+
if (!(event.target instanceof Element))
|
|
171
|
+
return;
|
|
172
|
+
// The corner navigate icon always wins, in any mode: for a
|
|
173
|
+
// cover-interaction block (whole surface is one link) a surface click
|
|
174
|
+
// selects the block, so this icon is the ONLY way to follow its link.
|
|
175
|
+
const navIcon = event.target.closest(".be-block-nav");
|
|
176
|
+
if (navIcon) {
|
|
177
|
+
event.preventDefault();
|
|
178
|
+
event.stopImmediatePropagation();
|
|
179
|
+
if (jumpToPath(navIcon.getAttribute("href") ?? ""))
|
|
180
|
+
onSelect(null);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Every in-canvas anchor pointing at an internal path (nav item, CTA,
|
|
184
|
+
// card, portal link) is a *preview* link, never a real navigation: the
|
|
185
|
+
// board either jumps to that page's frame or — in an edit/selection
|
|
186
|
+
// context below — lets the click select the block. In all of these the
|
|
187
|
+
// browser must NOT follow the href, which would unload the whole editor.
|
|
188
|
+
// So cancel the default here, before the mode/selection guards, for any
|
|
189
|
+
// internal link. External links and new-tab links are left to behave
|
|
190
|
+
// normally. preventDefault doesn't stop propagation, so block selection
|
|
191
|
+
// (a bubble-phase handler) still fires.
|
|
192
|
+
const anchor = event.target.closest("a[href]");
|
|
193
|
+
const href = anchor?.getAttribute("href");
|
|
194
|
+
if (anchor && href && anchor.target !== "_blank" && isInternalHref(href)) {
|
|
195
|
+
event.preventDefault();
|
|
196
|
+
}
|
|
197
|
+
if (runtime.editMode)
|
|
198
|
+
return;
|
|
199
|
+
// A cover-interaction block's whole surface is a link; in the editor that
|
|
200
|
+
// click must select the block so it can be edited, not navigate away.
|
|
201
|
+
if (event.target.closest("[data-cover-interaction]"))
|
|
202
|
+
return;
|
|
203
|
+
// A selected block is an editing context: clicking a link's text there
|
|
204
|
+
// means "edit this", not "navigate there".
|
|
205
|
+
if (event.target.closest(".editable-block.is-selected, .be-nested-block.is-selected")) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (!href)
|
|
209
|
+
return;
|
|
210
|
+
if (jumpToPath(href)) {
|
|
211
|
+
onSelect(null);
|
|
212
|
+
event.stopImmediatePropagation();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
shell.addEventListener("click", handleLinkClick, true);
|
|
216
|
+
return () => shell.removeEventListener("click", handleLinkClick, true);
|
|
217
|
+
}, [pages, runtime.editMode, activePageId, currentUser, onSelect, onOpenCollectionItem, content, contentModel]);
|
|
218
|
+
function handleBoardClick(event) {
|
|
219
|
+
const target = event.target;
|
|
220
|
+
if (event.defaultPrevented ||
|
|
221
|
+
(target instanceof Element && target.closest(CANVAS_DESELECT_IGNORE_SELECTOR))) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
setMovingBlockId(null);
|
|
225
|
+
onSelect(null);
|
|
226
|
+
}
|
|
227
|
+
function handleBoardMouseDown(event) {
|
|
228
|
+
const target = event.target;
|
|
229
|
+
if (target instanceof Element && !target.closest(".is-editable-text")) {
|
|
230
|
+
onEndTextEditing();
|
|
231
|
+
}
|
|
232
|
+
if (target instanceof Element && !target.closest(CANVAS_KEYBOARD_IGNORE_SELECTOR)) {
|
|
233
|
+
shellRef.current?.focus({ preventScroll: true });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return (_jsx(CanvasBoard, { viewportForPage: viewportForPage, setPageViewport: setPageViewport, activePageId: activePageId, activeRevision: activeRevision, revisionBusy: revisionBusy, pageStates: pageStates, collectionPreviewItems: collectionPreviewItems, content: content, contentModel: contentModel, currentUser: currentUser, definitions: definitions, isDragging: isDragging, isTextEditing: isTextEditing, library: library, pages: pages, runtime: runtime, selectedId: selectedId, selectedIds: selectedIds, siteTitle: siteTitle, topLevel: topLevel, pagesInColumn: pagesInColumn, columnExpanded: columnExpanded, expandedPages: expandedPages, toggleExpanded: toggleExpanded, movingBlockId: movingBlockId, setMovingBlockId: setMovingBlockId, parentPathOptionsFor: parentPathOptionsFor, backStack: backStack, loadedColumns: loadedColumns, zoom: zoom, shellRef: shellRef, boardRef: boardRef, sizerRef: sizerRef, zoomLabelRef: zoomLabelRef, zoomRef: zoomRef, zoomLabelDragRef: zoomLabelDragRef, applyZoom: applyZoom, centerFrameOnViewport: centerFrameOnViewport, handleZoomLabelPointerDown: handleZoomLabelPointerDown, handleCanvasKeyDown: handleCanvasKeyDown, handleBoardClick: handleBoardClick, handleBoardMouseDown: handleBoardMouseDown, handleBack: handleBack, handleLogin: handleLogin, previewAuth: previewAuth, onActivatePage: onActivatePage, onRevisionChange: onRevisionChange, onStage: onStage, onUnstage: onUnstage, onRenameSiteTitle: onRenameSiteTitle, onRenamePage: onRenamePage, onChangePagePath: onChangePagePath, onAddToColumn: onAddToColumn, onOpenCollectionItem: onOpenCollectionItem, onEditCollectionItem: onEditCollectionItem, onAddCollectionItem: onAddCollectionItem, onEditServiceCardIcon: onEditServiceCardIcon, onBlockDropOnBlock: onBlockDropOnBlock, onDraggingChange: onDraggingChange, onInsertBlocks: onInsertBlocks, onInsertBlocksToColumn: onInsertBlocksToColumn, onMoveBlockToColumn: onMoveBlockToColumn, onMoveBlockToIndex: onMoveBlockToIndex, onRequestAddPage: onRequestAddPage, onSelect: onSelect, onOpenInspector: onOpenInspector, onOpenPageInspector: onOpenPageInspector, onUpdateItems: onUpdateItems }));
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=Canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Canvas.js","sourceRoot":"","sources":["../../src/components/Canvas.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAiB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAiE3D;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,EACrB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,sBAAsB,EACtB,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,OAAO,EACP,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,aAAa,GACD;IACZ,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,0BAA0B,GAC3B,GAAG,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IACxC,mEAAmE;IACnE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;IACvF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC;IACpC,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC7F,MAAM,oBAAoB,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAA2B,EAAE,CAAC,CAAC;IACjF,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACrB,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC;IACpF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,QAAkB,EAAE,EAAE;QAC7D,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;IACF,6EAA6E;IAC7E,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE,CACxC,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;YACrC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,6EAA6E;IAC7E,yBAAyB;IACzB,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,EAAE,CAC5C,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,EAAE,CACzC,cAAc,CAAC,UAAU,CAAC;QACxB,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,UAAU,GAAG,WAAW,CAAC;IAC/B,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,WAAW,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC5C,IAAI,CAAC;IACP,SAAS,iBAAiB,CAAC,MAAc,EAAE,WAA2B,QAAQ;QAC5E,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,oBAAoB,CAAC;QACnD,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,aAAa;QACb,YAAY;QACZ,UAAU;QACV,aAAa;QACb,QAAQ;QACR,gBAAgB;QAChB,iBAAiB;KAClB,CAAC,CAAC;IACH,SAAS,eAAe,CAAC,UAAsB;QAC7C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC/D,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnC,qBAAqB,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,SAAS,WAAW,CAAC,UAAsB;QACzC,IAAI,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;QAChG,qBAAqB,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,SAAS,WAAW,CAAC,IAAgB;QACnC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,cAAkC,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9D,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,EAAE,EAAE,CAAC;gBACvC,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GACZ,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,gBAAgB,CAAC;YACpE,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,cAAc,CAAC;QACrB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,qBAAqB,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC;QACxC,QAAQ;QACR,OAAO;QACP,cAAc;QACd,IAAI;QACJ,QAAQ;QACR,YAAY;QACZ,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM;QACvF,WAAW;QACX,UAAU;QACV,aAAa;KACd,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,WAAW;YAAE,OAAO;QACnF,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,wEAAwE;IACxE,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,SAAS,UAAU,CAAC,IAAY;YAC9B,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC;YACzF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;oBAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC;oBAC1D,IAAI,CAAC,UAAU;wBAAE,SAAS;oBAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;oBACtD,MAAM,MAAM,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;oBACvD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,SAAS;oBACjD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjD,MAAM,IAAI,GAAG,YAAY;yBACtB,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC;yBACpC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;oBAClE,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1C,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,UAAU,CAAC,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC;gBAChG,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QACD,SAAS,eAAe,CAAC,KAAiB;YACxC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC;gBAAE,OAAO;YAC/C,2DAA2D;YAC3D,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAoB,eAAe,CAAC,CAAC;YACzE,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;gBACjC,IAAI,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YACD,sEAAsE;YACtE,uEAAuE;YACvE,oEAAoE;YACpE,uEAAuE;YACvE,yEAAyE;YACzE,wEAAwE;YACxE,qEAAqE;YACrE,wEAAwE;YACxE,wCAAwC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAoB,SAAS,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzE,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ;gBAAE,OAAO;YAC7B,0EAA0E;YAC1E,sEAAsE;YACtE,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC;gBAAE,OAAO;YAC7D,uEAAuE;YACvE,2CAA2C;YAC3C,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,2DAA2D,CAAC,EAAE,CAAC;gBACtF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,KAAK,CAAC,wBAAwB,EAAE,CAAC;YACnC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAChH,SAAS,gBAAgB,CAAC,KAAmC;QAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IACE,KAAK,CAAC,gBAAgB;YACtB,CAAC,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,EAC9E,CAAC;YACD,OAAO;QACT,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,SAAS,oBAAoB,CAAC,KAAmC;QAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtE,gBAAgB,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,MAAM,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,EAAE,CAAC;YAClF,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,CACL,KAAC,WAAW,IACV,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,oBAAoB,EAC1C,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,qBAAqB,EAAE,qBAAqB,EAC5C,0BAA0B,EAAE,0BAA0B,EACtD,mBAAmB,EAAE,mBAAmB,EACxC,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,oBAAoB,EAAE,oBAAoB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EACxC,qBAAqB,EAAE,qBAAqB,EAC5C,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,EAC9B,sBAAsB,EAAE,sBAAsB,EAC9C,mBAAmB,EAAE,mBAAmB,EACxC,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type EditorCollaborationView } from "../collaboration";
|
|
2
|
+
export type CollaborationMarker = {
|
|
3
|
+
readonly nodeId: string;
|
|
4
|
+
readonly displayName: string;
|
|
5
|
+
readonly avatar: string;
|
|
6
|
+
readonly color: string;
|
|
7
|
+
readonly locked: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function collaborationMarkers(view: EditorCollaborationView): CollaborationMarker[];
|
|
10
|
+
export declare function CollaborationLayer({ view }: {
|
|
11
|
+
readonly view: EditorCollaborationView;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=CollaborationLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollaborationLayer.d.ts","sourceRoot":"","sources":["../../src/components/CollaborationLayer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC;AAeF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,EAAE,CAmCzF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;CAAE,+BAmDtF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { collaboratorIdentity } from "../collaboration.js";
|
|
4
|
+
function isCurrentUserSession(view, sessionId, displayName, color) {
|
|
5
|
+
if (sessionId === view.sessionId)
|
|
6
|
+
return true;
|
|
7
|
+
const currentUser = view.roster.find((entry) => entry.sessionId === view.sessionId);
|
|
8
|
+
if (!currentUser || !displayName || !color)
|
|
9
|
+
return false;
|
|
10
|
+
return collaboratorIdentity(displayName, color) ===
|
|
11
|
+
collaboratorIdentity(currentUser.displayName, currentUser.color);
|
|
12
|
+
}
|
|
13
|
+
export function collaborationMarkers(view) {
|
|
14
|
+
const roster = new Map(view.roster.map((entry) => [entry.sessionId, entry]));
|
|
15
|
+
const markers = new Map();
|
|
16
|
+
for (const presence of view.presence) {
|
|
17
|
+
const identity = roster.get(presence.sessionId);
|
|
18
|
+
if (isCurrentUserSession(view, presence.sessionId, identity?.displayName, identity?.color))
|
|
19
|
+
continue;
|
|
20
|
+
for (const target of presence.selection ?? []) {
|
|
21
|
+
if (target.kind !== "block-edit" && target.kind !== "subtree-structure")
|
|
22
|
+
continue;
|
|
23
|
+
const displayName = identity?.displayName ?? "Another editor";
|
|
24
|
+
markers.set(target.nodeId, {
|
|
25
|
+
nodeId: target.nodeId,
|
|
26
|
+
displayName,
|
|
27
|
+
avatar: displayName.trim().slice(0, 1).toUpperCase(),
|
|
28
|
+
color: identity?.color ?? "#5965d8",
|
|
29
|
+
locked: false,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const lock of view.locks) {
|
|
34
|
+
if (isCurrentUserSession(view, lock.holderSessionId, lock.holderName, lock.holderColor))
|
|
35
|
+
continue;
|
|
36
|
+
if (lock.target.kind !== "block-edit" && lock.target.kind !== "subtree-structure")
|
|
37
|
+
continue;
|
|
38
|
+
markers.set(lock.target.nodeId, {
|
|
39
|
+
nodeId: lock.target.nodeId,
|
|
40
|
+
displayName: lock.holderName,
|
|
41
|
+
avatar: lock.holderName.trim().slice(0, 1).toUpperCase(),
|
|
42
|
+
color: lock.holderColor,
|
|
43
|
+
locked: true,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return [...markers.values()];
|
|
47
|
+
}
|
|
48
|
+
export function CollaborationLayer({ view }) {
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
const marked = document.querySelectorAll("[data-collab-selected-by]");
|
|
51
|
+
marked.forEach((element) => {
|
|
52
|
+
element.removeAttribute("data-collab-selected-by");
|
|
53
|
+
element.removeAttribute("data-collab-locked-by");
|
|
54
|
+
element.removeAttribute("data-collab-avatar");
|
|
55
|
+
element.style.removeProperty("--collab-selection-color");
|
|
56
|
+
});
|
|
57
|
+
for (const marker of collaborationMarkers(view)) {
|
|
58
|
+
const element = document.querySelector(`[data-block-id="${CSS.escape(marker.nodeId)}"]`);
|
|
59
|
+
if (!element)
|
|
60
|
+
continue;
|
|
61
|
+
element.dataset.collabSelectedBy = marker.displayName;
|
|
62
|
+
if (marker.locked)
|
|
63
|
+
element.dataset.collabLockedBy = marker.displayName;
|
|
64
|
+
element.dataset.collabAvatar = marker.avatar;
|
|
65
|
+
element.style.setProperty("--collab-selection-color", marker.color);
|
|
66
|
+
}
|
|
67
|
+
return () => {
|
|
68
|
+
document.querySelectorAll("[data-collab-selected-by]").forEach((element) => {
|
|
69
|
+
element.removeAttribute("data-collab-selected-by");
|
|
70
|
+
element.removeAttribute("data-collab-locked-by");
|
|
71
|
+
element.removeAttribute("data-collab-avatar");
|
|
72
|
+
element.style.removeProperty("--collab-selection-color");
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
}, [view.locks, view.presence, view.roster, view.sessionId]);
|
|
76
|
+
const roster = new Map(view.roster.map((entry) => [entry.sessionId, entry]));
|
|
77
|
+
return (_jsx("div", { className: "collab-pointer-layer", "aria-hidden": "true", children: view.presence.flatMap((presence) => {
|
|
78
|
+
const identity = roster.get(presence.sessionId);
|
|
79
|
+
if (isCurrentUserSession(view, presence.sessionId, identity?.displayName, identity?.color))
|
|
80
|
+
return [];
|
|
81
|
+
if (!presence.pointer)
|
|
82
|
+
return [];
|
|
83
|
+
const avatar = (identity?.displayName ?? "Editor").trim().slice(0, 1).toUpperCase();
|
|
84
|
+
return [(_jsx("div", { className: "collab-pointer", style: {
|
|
85
|
+
left: presence.pointer.x,
|
|
86
|
+
top: presence.pointer.y,
|
|
87
|
+
"--collab-color": identity?.color ?? "#5965d8",
|
|
88
|
+
}, children: _jsx("span", { title: identity?.displayName ?? "Editor", children: avatar }) }, presence.sessionId))];
|
|
89
|
+
}) }));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=CollaborationLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollaborationLayer.js","sourceRoot":"","sources":["../../src/components/CollaborationLayer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BlockNode } from "@batterai/bind-core";
|
|
2
|
+
import type { BlockDefinition, BlockDesignSettings } from "../types";
|
|
3
|
+
type Props = {
|
|
4
|
+
block: BlockNode;
|
|
5
|
+
definition: BlockDefinition;
|
|
6
|
+
onChange: (settings: BlockDesignSettings) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function DesignSettingsPanel({ block, definition, onChange }: Props): import("react").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=DesignSettingsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignSettingsPanel.d.ts","sourceRoot":"","sources":["../../src/components/DesignSettingsPanel.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAmB,MAAM,UAAU,CAAC;AAEtF,KAAK,KAAK,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAAE,CAAC;AAelH,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,KAAK,+BAkDzE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { blockDesign, blockDesignDefaults, designsEqual } from "../designSettings.js";
|
|
3
|
+
import { DragNumberInput } from "@batterai/canvas";
|
|
4
|
+
import { CANVAS_SPACING_TOKENS, } from "@batterai/contract";
|
|
5
|
+
const SPACING_VALUES = Object.values(CANVAS_SPACING_TOKENS);
|
|
6
|
+
function spacingPx(value) {
|
|
7
|
+
return CANVAS_SPACING_TOKENS[value.token];
|
|
8
|
+
}
|
|
9
|
+
function spacingToken(value) {
|
|
10
|
+
const token = Object.entries(CANVAS_SPACING_TOKENS)
|
|
11
|
+
.find(([, pixels]) => pixels === value)?.[0] ?? "space-0";
|
|
12
|
+
return { type: "token", token };
|
|
13
|
+
}
|
|
14
|
+
export function DesignSettingsPanel({ block, definition, onChange }) {
|
|
15
|
+
const defaults = blockDesignDefaults(definition);
|
|
16
|
+
const design = blockDesign(block, definition);
|
|
17
|
+
function updateSizing(key, value) {
|
|
18
|
+
onChange({ ...design, sizing: { ...design.sizing, [key]: value } });
|
|
19
|
+
}
|
|
20
|
+
function updateBox(box, side, value) {
|
|
21
|
+
onChange({ ...design, [box]: { ...design[box], [side]: spacingToken(value) } });
|
|
22
|
+
}
|
|
23
|
+
const spacingInput = (box, side) => (_jsx(DragNumberInput, { allowedValues: SPACING_VALUES, label: `${side[0].toUpperCase()}${side.slice(1)} ${box}`, value: spacingPx(design[box][side]), onChange: (value) => updateBox(box, side, value) }));
|
|
24
|
+
return (_jsxs("div", { className: "design-panel", children: [_jsxs("section", { className: "box-model-card", "aria-label": "Sizing, margin, and padding", children: [_jsxs("div", { className: "box-row box-row-top", children: [_jsx("span", { children: "Margin" }), spacingInput("margin", "top")] }), _jsxs("div", { className: "box-middle", children: [spacingInput("margin", "left"), _jsxs("div", { className: "padding-box", children: [_jsxs("div", { className: "box-row box-row-top", children: [_jsx("span", { children: "Padding" }), spacingInput("padding", "top")] }), _jsxs("div", { className: "box-middle", children: [spacingInput("padding", "left"), _jsxs("div", { className: "content-box", "aria-label": "Width and height", children: [_jsx(DragNumberInput, { label: "Width", max: 100, min: 20, suffix: "%", value: design.sizing.width, onChange: (value) => updateSizing("width", value) }), _jsx("span", { className: "content-box-x", "aria-hidden": "true", children: "\u00D7" }), _jsx(DragNumberInput, { label: "Min. height", max: 1600, suffix: "px", value: design.sizing.minHeight, onChange: (value) => updateSizing("minHeight", value) })] }), spacingInput("padding", "right")] }), spacingInput("padding", "bottom")] }), spacingInput("margin", "right")] }), spacingInput("margin", "bottom")] }), designsEqual(design, defaults) ? (_jsx("p", { className: "design-note", children: "This block uses the default settings from the block definition." })) : null] }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=DesignSettingsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignSettingsPanel.js","sourceRoot":"","sources":["../../src/components/DesignSettingsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ElementType } from "react";
|
|
2
|
+
import type { EditorRuntime } from "../translation";
|
|
3
|
+
type EditableDateProps = {
|
|
4
|
+
runtime: EditorRuntime;
|
|
5
|
+
blockId: string;
|
|
6
|
+
field: string;
|
|
7
|
+
/** ISO date string (yyyy-mm-dd) — the stored value; the browser renders it
|
|
8
|
+
* localized inside the picker. */
|
|
9
|
+
value: string;
|
|
10
|
+
as?: ElementType;
|
|
11
|
+
className?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Same philosophy as EditableText, for the date type: the value renders as
|
|
15
|
+
* plain text with no chrome. With direct editing on, clicking it opens the
|
|
16
|
+
* native calendar picker only — the text is never swapped for a segmented,
|
|
17
|
+
* keyboard-editable date field. A transparent <input type="date"> is overlaid
|
|
18
|
+
* purely to host showPicker() and receive the chosen date; the visible text
|
|
19
|
+
* stays a plain <time>. Dates are not per-locale content, so editing is limited
|
|
20
|
+
* to the base locale; commits flow through the same runtime channel as text.
|
|
21
|
+
*/
|
|
22
|
+
export declare function EditableDate({ runtime, blockId, field, value, as, className }: EditableDateProps): import("react").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=EditableDate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditableDate.d.ts","sourceRoot":"","sources":["../../src/components/EditableDate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd;sCACkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BA+ChG"}
|