@alpaca-headless/alpaca-headless-nextjs 1.0.129 → 1.0.246
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/editor.css +439 -49
- package/dist/esm/alpacaContext.js +16 -0
- package/dist/esm/client-components/ClientLink.js +34 -0
- package/dist/{cjs/components → esm/client-components}/LinkEditor.js +22 -19
- package/dist/esm/client-components/MultiComponentEditor.js +22 -0
- package/dist/esm/client-components/index.js +4 -0
- package/dist/esm/components/Error.js +10 -0
- package/dist/{cjs → esm}/components/Image.js +4 -7
- package/dist/esm/components/Link.js +32 -0
- package/dist/esm/components/LinkPreview.js +30 -0
- package/dist/esm/components/LockedFieldIndicator.js +21 -0
- package/dist/esm/components/Picture.js +133 -0
- package/dist/esm/components/PictureEditor.js +77 -0
- package/dist/esm/components/PictureEditorWrapper.js +6 -0
- package/dist/esm/components/Placeholder.js +117 -0
- package/dist/esm/components/RichText.js +30 -0
- package/dist/esm/components/RichTextEditor.js +92 -0
- package/dist/esm/components/RichTextEditorWrapper.js +7 -0
- package/dist/esm/components/Slot.js +6 -0
- package/dist/esm/components/Text.js +29 -0
- package/dist/esm/components/TextEditor.js +78 -0
- package/dist/esm/components/TextEditorWrapper.js +19 -0
- package/dist/esm/components/Translate.js +12 -0
- package/dist/esm/components/TranslateEditor.js +24 -0
- package/dist/esm/components/index.js +7 -0
- package/dist/esm/components/picture-shared.js +26 -0
- package/dist/esm/editor/ComponentInfo.js +12 -0
- package/dist/esm/editor/ConfirmationDialog.js +29 -0
- package/dist/{cjs → esm}/editor/ContentTree.js +55 -46
- package/dist/esm/editor/ContextMenu.js +90 -0
- package/dist/esm/editor/DialogButtons.js +4 -0
- package/dist/esm/editor/DictionaryEditor.js +37 -0
- package/dist/esm/editor/EditFrame.js +115 -0
- package/dist/esm/editor/EditFrameWrapper.js +7 -0
- package/dist/esm/editor/Editor.js +15 -0
- package/dist/esm/editor/EditorClient.js +877 -0
- package/dist/esm/editor/EditorClientHost.js +15 -0
- package/dist/esm/editor/EditorWarning.js +10 -0
- package/dist/esm/editor/EditorWarnings.js +13 -0
- package/dist/esm/editor/FieldEditorPopup.js +23 -0
- package/dist/esm/editor/FieldList.js +48 -0
- package/dist/esm/editor/FieldListField.js +137 -0
- package/dist/{cjs → esm}/editor/FloatingToolbar.js +20 -23
- package/dist/esm/editor/ItemInfo.js +14 -0
- package/dist/esm/editor/ItemNameDialog.js +32 -0
- package/dist/esm/editor/LinkEditorDialog.js +61 -0
- package/dist/esm/editor/MainLayout.js +18 -0
- package/dist/esm/editor/MediaSelector.js +85 -0
- package/dist/esm/editor/Outline.js +82 -0
- package/dist/esm/editor/PageViewer.js +41 -0
- package/dist/esm/editor/PictureEditorDialog.js +201 -0
- package/dist/esm/editor/PlaceholderDropZone.js +130 -0
- package/dist/esm/editor/PlaceholderDropZoneHost.js +7 -0
- package/dist/esm/editor/PreviewClient.js +5 -0
- package/dist/esm/editor/PreviewClientHost.js +7 -0
- package/dist/esm/editor/PreviewPanel.js +7 -0
- package/dist/esm/editor/PublishDialog.js +15 -0
- package/dist/esm/editor/Terminal.js +55 -0
- package/dist/esm/editor/ai/AiPopup.js +28 -0
- package/dist/esm/editor/ai/AiResponseMessage.js +20 -0
- package/dist/{cjs/editor → esm/editor/ai}/AiTerminal.js +67 -48
- package/dist/esm/editor/ai/AiToolCall.js +15 -0
- package/dist/esm/editor/commands/commands.js +1 -0
- package/dist/esm/editor/commands/componentCommands.js +287 -0
- package/dist/esm/editor/commands/createVersionCommand.js +26 -0
- package/dist/esm/editor/commands/undo.js +22 -0
- package/dist/esm/editor/componentTreeHelper.js +20 -0
- package/dist/esm/editor/config/config.js +261 -0
- package/dist/esm/editor/editContext.js +11 -0
- package/dist/esm/editor/editor-warnings/ItemLocked.js +40 -0
- package/dist/esm/editor/editor-warnings/ValidationErrors.js +22 -0
- package/dist/esm/editor/fieldTypes/CheckboxEditor.js +21 -0
- package/dist/esm/editor/fieldTypes/DropLinkEditor.js +50 -0
- package/dist/esm/editor/fieldTypes/InternalLinkFieldEditor.js +41 -0
- package/dist/{cjs → esm}/editor/fieldTypes/LinkFieldEditor.js +14 -16
- package/dist/esm/editor/fieldTypes/MultiLineText.js +25 -0
- package/dist/esm/editor/fieldTypes/PictureFieldEditor.js +33 -0
- package/dist/esm/editor/fieldTypes/RawEditor.js +26 -0
- package/dist/esm/editor/fieldTypes/RichTextEditor.js +7 -0
- package/dist/esm/editor/fieldTypes/RichTextEditorComponent.js +46 -0
- package/dist/esm/editor/fieldTypes/SingleLineText.js +25 -0
- package/dist/esm/editor/fieldTypes/TreeListEditor.js +57 -0
- package/dist/esm/editor/index.js +4 -0
- package/dist/esm/editor/itemCommands.js +27 -0
- package/dist/esm/editor/menubar/BrowseHistory.js +39 -0
- package/dist/esm/editor/menubar/ItemLanguageVersion.js +20 -0
- package/dist/esm/editor/menubar/LanguageSelector.js +18 -0
- package/dist/esm/editor/menubar/Menu.js +105 -0
- package/dist/esm/editor/menubar/PageViewerControls.js +66 -0
- package/dist/esm/editor/menubar/VersionSelector.js +18 -0
- package/dist/esm/editor/previewContext.js +5 -0
- package/dist/esm/editor/services/contentService.js +58 -0
- package/dist/esm/editor/services/editService.js +428 -0
- package/dist/esm/editor/sidebar/ComponentPalette.js +42 -0
- package/dist/esm/editor/sidebar/ComponentTree.js +237 -0
- package/dist/esm/editor/sidebar/Debug.js +46 -0
- package/dist/esm/editor/sidebar/EditHistory.js +66 -0
- package/dist/esm/editor/sidebar/EditorForm.js +24 -0
- package/dist/esm/editor/sidebar/GraphQL.js +85 -0
- package/dist/esm/editor/sidebar/Insert.js +7 -0
- package/dist/esm/editor/sidebar/MainContentTree.js +38 -0
- package/dist/esm/editor/sidebar/Sessions.js +11 -0
- package/dist/esm/editor/sidebar/Sidebar.js +13 -0
- package/dist/esm/editor/sidebar/SidebarView.js +69 -0
- package/dist/esm/editor/sidebar/Workbox.js +77 -0
- package/dist/esm/editor/ui/CopyToClipboardButton.js +14 -0
- package/dist/esm/editor/ui/Icons.js +19 -0
- package/dist/esm/editor/ui/Section.js +8 -0
- package/dist/esm/editor/utils/insertOptions.js +39 -0
- package/dist/esm/editor/utils.js +71 -0
- package/dist/esm/editor/views/ItemEditor.js +18 -0
- package/dist/esm/fieldTypes.js +1 -0
- package/dist/esm/graphQL.js +50 -0
- package/dist/esm/graphQLTypes.js +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/{cjs → esm}/loadRouteData.js +23 -20
- package/dist/{cjs → esm}/mediaProtection.js +4 -11
- package/dist/esm/middleware/handleRequest.js +45 -0
- package/dist/esm/middleware/index.js +1 -0
- package/dist/esm/servertypes.js +1 -0
- package/dist/primereact/resources/themes/arya-blue/theme.css +854 -790
- package/dist/primereact/resources/themes/arya-green/theme.css +854 -790
- package/dist/primereact/resources/themes/arya-orange/theme.css +854 -790
- package/dist/primereact/resources/themes/arya-purple/theme.css +854 -790
- package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +678 -615
- package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +678 -615
- package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +679 -616
- package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +679 -616
- package/dist/primereact/resources/themes/fluent-light/theme.css +686 -638
- package/dist/primereact/resources/themes/lara-dark-amber/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-blue/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-cyan/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-green/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-pink/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-purple/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-dark-teal/theme.css +679 -630
- package/dist/primereact/resources/themes/lara-light-amber/theme.css +776 -725
- package/dist/primereact/resources/themes/lara-light-blue/theme.css +1011 -960
- package/dist/primereact/resources/themes/lara-light-cyan/theme.css +776 -725
- package/dist/primereact/resources/themes/lara-light-green/theme.css +820 -769
- package/dist/primereact/resources/themes/lara-light-indigo/theme.css +1016 -965
- package/dist/primereact/resources/themes/lara-light-pink/theme.css +776 -725
- package/dist/primereact/resources/themes/lara-light-purple/theme.css +1016 -965
- package/dist/primereact/resources/themes/lara-light-teal/theme.css +776 -725
- package/dist/primereact/resources/themes/luna-amber/theme.css +950 -887
- package/dist/primereact/resources/themes/luna-blue/theme.css +950 -887
- package/dist/primereact/resources/themes/luna-green/theme.css +950 -887
- package/dist/primereact/resources/themes/luna-pink/theme.css +950 -887
- package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +918 -950
- package/dist/primereact/resources/themes/md-dark-indigo/theme.css +918 -950
- package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +878 -910
- package/dist/primereact/resources/themes/md-light-indigo/theme.css +878 -910
- package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +918 -950
- package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +918 -950
- package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +878 -910
- package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +878 -910
- package/dist/primereact/resources/themes/mira/theme.css +1562 -1532
- package/dist/primereact/resources/themes/nano/theme.css +707 -641
- package/dist/primereact/resources/themes/nova/theme.css +705 -643
- package/dist/primereact/resources/themes/nova-accent/theme.css +701 -636
- package/dist/primereact/resources/themes/nova-alt/theme.css +705 -643
- package/dist/primereact/resources/themes/rhea/theme.css +876 -811
- package/dist/primereact/resources/themes/saga-blue/theme.css +896 -832
- package/dist/primereact/resources/themes/saga-green/theme.css +896 -832
- package/dist/primereact/resources/themes/saga-orange/theme.css +896 -832
- package/dist/primereact/resources/themes/saga-purple/theme.css +896 -832
- package/dist/primereact/resources/themes/soho-dark/theme.css +701 -643
- package/dist/primereact/resources/themes/soho-light/theme.css +690 -634
- package/dist/primereact/resources/themes/tailwind-light/theme.css +1370 -1306
- package/dist/primereact/resources/themes/vela-blue/theme.css +862 -798
- package/dist/primereact/resources/themes/vela-green/theme.css +862 -798
- package/dist/primereact/resources/themes/vela-orange/theme.css +862 -798
- package/dist/primereact/resources/themes/vela-purple/theme.css +862 -798
- package/dist/primereact/resources/themes/viva-dark/theme.css +655 -612
- package/dist/primereact/resources/themes/viva-light/theme.css +737 -694
- package/package.json +25 -22
- package/types/alpacaContext.d.ts +14 -8
- package/types/{components → client-components}/LinkEditor.d.ts +1 -1
- package/types/client-components/MultiComponentEditor.d.ts +4 -2
- package/types/client-components/index.d.ts +3 -2
- package/types/components/Image.d.ts +1 -0
- package/types/components/Link.d.ts +1 -0
- package/types/components/LinkPreview.d.ts +6 -0
- package/types/components/LockedFieldIndicator.d.ts +6 -0
- package/types/components/Picture.d.ts +4 -6
- package/types/components/PictureEditorWrapper.d.ts +3 -0
- package/types/components/Placeholder.d.ts +12 -11
- package/types/components/RichText.d.ts +2 -1
- package/types/components/RichTextEditor.d.ts +3 -290
- package/types/components/RichTextEditorWrapper.d.ts +2 -0
- package/types/components/Slot.d.ts +2 -1
- package/types/components/Text.d.ts +2 -1
- package/types/components/TextEditor.d.ts +3 -290
- package/types/components/TextEditorWrapper.d.ts +4 -0
- package/types/components/Translate.d.ts +1 -0
- package/types/components/picture-shared.d.ts +16 -0
- package/types/editor/ComponentInfo.d.ts +1 -1
- package/types/editor/ContentTree.d.ts +2 -2
- package/types/editor/ContextMenu.d.ts +14 -0
- package/types/editor/DictionaryEditor.d.ts +1 -4
- package/types/editor/EditFrameWrapper.d.ts +6 -0
- package/types/editor/Editor.d.ts +68 -5
- package/types/editor/EditorClient.d.ts +17 -5
- package/types/editor/EditorClientHost.d.ts +4 -2
- package/types/editor/EditorWarning.d.ts +6 -0
- package/types/editor/EditorWarnings.d.ts +9 -0
- package/types/editor/FieldEditorPopup.d.ts +10 -0
- package/types/editor/FieldList.d.ts +6 -2
- package/types/editor/FieldListField.d.ts +6 -2
- package/types/editor/ItemInfo.d.ts +1 -1
- package/types/editor/Outline.d.ts +11 -0
- package/types/editor/PageViewer.d.ts +1 -0
- package/types/editor/PictureEditorDialog.d.ts +4 -2
- package/types/editor/PlaceholderDropZone.d.ts +3 -2
- package/types/editor/PlaceholderDropZoneHost.d.ts +3 -2
- package/types/editor/PreviewClient.d.ts +4 -0
- package/types/editor/PreviewClientHost.d.ts +4 -0
- package/types/editor/PreviewPanel.d.ts +1 -0
- package/types/editor/PublishDialog.d.ts +7 -0
- package/types/editor/Terminal.d.ts +6 -2
- package/types/editor/{AiPopup.d.ts → ai/AiPopup.d.ts} +2 -3
- package/types/editor/ai/AiResponseMessage.d.ts +7 -0
- package/types/editor/ai/AiTerminal.d.ts +4 -0
- package/types/editor/ai/AiToolCall.d.ts +9 -0
- package/types/editor/commands/commands.d.ts +21 -0
- package/types/editor/commands/componentCommands.d.ts +5 -0
- package/types/editor/commands/createVersionCommand.d.ts +2 -0
- package/types/editor/commands/undo.d.ts +15 -0
- package/types/editor/componentTreeHelper.d.ts +2 -1
- package/types/editor/config/config.d.ts +2 -0
- package/types/editor/editContext.d.ts +70 -93
- package/types/editor/editor-warnings/ItemLocked.d.ts +2 -0
- package/types/editor/editor-warnings/ValidationErrors.d.ts +2 -0
- package/types/editor/fieldTypes/CheckboxEditor.d.ts +3 -2
- package/types/editor/fieldTypes/DropLinkEditor.d.ts +5 -0
- package/types/editor/fieldTypes/InternalLinkFieldEditor.d.ts +3 -2
- package/types/editor/fieldTypes/LinkFieldEditor.d.ts +3 -2
- package/types/editor/fieldTypes/MultiLineText.d.ts +3 -2
- package/types/editor/fieldTypes/PictureFieldEditor.d.ts +2 -1
- package/types/editor/fieldTypes/RawEditor.d.ts +5 -0
- package/types/editor/fieldTypes/RichTextEditor.d.ts +4 -3
- package/types/editor/fieldTypes/RichTextEditorComponent.d.ts +5 -0
- package/types/editor/fieldTypes/SingleLineText.d.ts +3 -2
- package/types/editor/fieldTypes/TreeListEditor.d.ts +2 -1
- package/types/editor/index.d.ts +2 -0
- package/types/editor/itemCommands.d.ts +3 -0
- package/types/editor/menubar/BrowseHistory.d.ts +4 -0
- package/types/editor/menubar/ItemLanguageVersion.d.ts +1 -0
- package/types/editor/menubar/LanguageSelector.d.ts +5 -0
- package/types/editor/menubar/Menu.d.ts +1 -0
- package/types/editor/menubar/PageViewerControls.d.ts +1 -0
- package/types/editor/menubar/VersionSelector.d.ts +5 -0
- package/types/editor/previewContext.d.ts +4 -0
- package/types/editor/{contentService.d.ts → services/contentService.d.ts} +2 -3
- package/types/editor/services/editService.d.ts +27 -0
- package/types/editor/sidebar/ComponentPalette.d.ts +1 -0
- package/types/editor/sidebar/ComponentTree.d.ts +1 -0
- package/types/editor/sidebar/Debug.d.ts +1 -0
- package/types/editor/sidebar/EditHistory.d.ts +1 -0
- package/types/editor/sidebar/EditorForm.d.ts +1 -0
- package/types/editor/sidebar/GraphQL.d.ts +1 -0
- package/types/editor/sidebar/Insert.d.ts +1 -0
- package/types/editor/sidebar/MainContentTree.d.ts +3 -0
- package/types/editor/sidebar/Sessions.d.ts +1 -0
- package/types/editor/sidebar/Sidebar.d.ts +4 -0
- package/types/editor/sidebar/SidebarView.d.ts +8 -0
- package/types/editor/sidebar/Workbox.d.ts +1 -0
- package/types/editor/ui/CopyToClipboardButton.d.ts +3 -0
- package/types/editor/ui/Icons.d.ts +16 -0
- package/types/editor/utils/insertOptions.d.ts +3 -0
- package/types/editor/utils.d.ts +8 -0
- package/types/editor/views/ItemEditor.d.ts +1 -0
- package/types/fieldTypes.d.ts +39 -11
- package/types/graphQL.d.ts +12 -0
- package/types/index.d.ts +4 -3
- package/types/loadRouteData.d.ts +7 -85
- package/types/middleware/handleRequest.d.ts +5 -0
- package/types/middleware/index.d.ts +1 -1
- package/types/servertypes.d.ts +306 -0
- package/dist/cjs/alpacaContext.js +0 -12
- package/dist/cjs/client-components/ClientLink.js +0 -36
- package/dist/cjs/client-components/MultiComponentEditor.js +0 -26
- package/dist/cjs/client-components/index.js +0 -19
- package/dist/cjs/components/Error.js +0 -15
- package/dist/cjs/components/Link.js +0 -36
- package/dist/cjs/components/Picture.js +0 -124
- package/dist/cjs/components/PictureEditor.js +0 -49
- package/dist/cjs/components/Placeholder.js +0 -118
- package/dist/cjs/components/RichText.js +0 -47
- package/dist/cjs/components/RichTextEditor.js +0 -94
- package/dist/cjs/components/Slot.js +0 -8
- package/dist/cjs/components/Text.js +0 -46
- package/dist/cjs/components/TextEditor.js +0 -77
- package/dist/cjs/components/Translate.js +0 -14
- package/dist/cjs/components/TranslateEditor.js +0 -28
- package/dist/cjs/components/index.js +0 -23
- package/dist/cjs/editor/AiPopup.js +0 -33
- package/dist/cjs/editor/ComponentInfo.js +0 -15
- package/dist/cjs/editor/ComponentPalette.js +0 -23
- package/dist/cjs/editor/ComponentTree.js +0 -217
- package/dist/cjs/editor/ConfirmationDialog.js +0 -31
- package/dist/cjs/editor/Debug.js +0 -26
- package/dist/cjs/editor/DialogButtons.js +0 -7
- package/dist/cjs/editor/DictionaryEditor.js +0 -41
- package/dist/cjs/editor/EditFrame.js +0 -129
- package/dist/cjs/editor/EditHistory.js +0 -43
- package/dist/cjs/editor/Editor.js +0 -27
- package/dist/cjs/editor/EditorClient.js +0 -753
- package/dist/cjs/editor/EditorClientHost.js +0 -37
- package/dist/cjs/editor/FieldList.js +0 -51
- package/dist/cjs/editor/FieldListField.js +0 -75
- package/dist/cjs/editor/GraphQL.js +0 -87
- package/dist/cjs/editor/ItemEditor.js +0 -9
- package/dist/cjs/editor/ItemInfo.js +0 -17
- package/dist/cjs/editor/ItemNameDialog.js +0 -37
- package/dist/cjs/editor/LanguageSelector.js +0 -21
- package/dist/cjs/editor/LinkEditorDialog.js +0 -67
- package/dist/cjs/editor/MainLayout.js +0 -24
- package/dist/cjs/editor/MediaSelector.js +0 -92
- package/dist/cjs/editor/PictureEditorDialog.js +0 -93
- package/dist/cjs/editor/PlaceholderDropZone.js +0 -93
- package/dist/cjs/editor/PlaceholderDropZoneHost.js +0 -37
- package/dist/cjs/editor/SidebarTabs.js +0 -47
- package/dist/cjs/editor/Terminal.js +0 -61
- package/dist/cjs/editor/Utils.js +0 -43
- package/dist/cjs/editor/VersionSelector.js +0 -21
- package/dist/cjs/editor/Workbox.js +0 -41
- package/dist/cjs/editor/componentCommands.js +0 -141
- package/dist/cjs/editor/componentTreeHelper.js +0 -18
- package/dist/cjs/editor/contentService.js +0 -80
- package/dist/cjs/editor/editContext.js +0 -40
- package/dist/cjs/editor/editService.js +0 -334
- package/dist/cjs/editor/fieldTypes/CheckboxEditor.js +0 -21
- package/dist/cjs/editor/fieldTypes/InternalLinkFieldEditor.js +0 -46
- package/dist/cjs/editor/fieldTypes/MultiLineText.js +0 -25
- package/dist/cjs/editor/fieldTypes/PictureFieldEditor.js +0 -19
- package/dist/cjs/editor/fieldTypes/RichTextEditor.js +0 -24
- package/dist/cjs/editor/fieldTypes/SingleLineText.js +0 -25
- package/dist/cjs/editor/fieldTypes/TreeListEditor.js +0 -59
- package/dist/cjs/editor/index.js +0 -18
- package/dist/cjs/editor/ui/Section.js +0 -8
- package/dist/cjs/fieldTypes.js +0 -2
- package/dist/cjs/graphQLTypes.js +0 -2
- package/dist/cjs/index.js +0 -36
- package/dist/cjs/layoutData.js +0 -2
- package/dist/cjs/middleware/authorization.js +0 -52
- package/dist/cjs/middleware/index.js +0 -17
- package/types/editor/AiTerminal.d.ts +0 -5
- package/types/editor/ComponentPalette.d.ts +0 -6
- package/types/editor/ComponentTree.d.ts +0 -5
- package/types/editor/Debug.d.ts +0 -6
- package/types/editor/EditHistory.d.ts +0 -4
- package/types/editor/GraphQL.d.ts +0 -5
- package/types/editor/ItemEditor.d.ts +0 -4
- package/types/editor/LanguageSelector.d.ts +0 -5
- package/types/editor/SidebarTabs.d.ts +0 -8
- package/types/editor/Utils.d.ts +0 -3
- package/types/editor/VersionSelector.d.ts +0 -5
- package/types/editor/Workbox.d.ts +0 -6
- package/types/editor/componentCommands.d.ts +0 -4
- package/types/editor/editService.d.ts +0 -20
- package/types/layoutData.d.ts +0 -92
- package/types/middleware/authorization.d.ts +0 -2
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEditContext } from "../editContext";
|
|
4
|
+
import { Tree, } from "primereact/tree";
|
|
5
|
+
import { useEffect, useRef, useState } from "react";
|
|
6
|
+
import { Tag } from "primereact/tag";
|
|
7
|
+
import { confirmDialog } from "primereact/confirmdialog";
|
|
8
|
+
import { getComponentCommands } from "../commands/componentCommands";
|
|
9
|
+
import { Tooltip } from "primereact/tooltip";
|
|
10
|
+
function mapPlaceholderNode(p, parent) {
|
|
11
|
+
const node = {
|
|
12
|
+
key: p.key,
|
|
13
|
+
componentId: p.key,
|
|
14
|
+
label: p.name,
|
|
15
|
+
data: p,
|
|
16
|
+
icon: "pi pi-folder",
|
|
17
|
+
parent: parent,
|
|
18
|
+
droppable: true,
|
|
19
|
+
};
|
|
20
|
+
node.children = p.components.map((c) => mapComponentNode(c, node));
|
|
21
|
+
return node;
|
|
22
|
+
}
|
|
23
|
+
function mapPlaceholders(c, parent) {
|
|
24
|
+
if (c.placeholders.length > 1)
|
|
25
|
+
return c.placeholders.map((x) => mapPlaceholderNode(x, parent));
|
|
26
|
+
else if (c.placeholders.length > 0)
|
|
27
|
+
return c.placeholders[0].components.map((c) => mapComponentNode(c, parent));
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
function mapComponentNode(c, parent) {
|
|
31
|
+
var _a;
|
|
32
|
+
const node = {
|
|
33
|
+
key: c._editor.linkItemId + "_" + c.id || c.id,
|
|
34
|
+
componentId: c.id,
|
|
35
|
+
label: c.name,
|
|
36
|
+
icon: "pi pi-stop",
|
|
37
|
+
data: c,
|
|
38
|
+
parent: parent,
|
|
39
|
+
tags: [],
|
|
40
|
+
droppable: true,
|
|
41
|
+
className: c._editor.isRemovedFromMasterLanguage ? "a-text-gray-400" : "",
|
|
42
|
+
};
|
|
43
|
+
// if (c.translations && c.translations.length > 1)
|
|
44
|
+
// node.tags!.push({
|
|
45
|
+
// severity: "info",
|
|
46
|
+
// value: c.translations!.length + " Languages",
|
|
47
|
+
// icon: "pi pi-flag",
|
|
48
|
+
// });
|
|
49
|
+
if (c._editor.isInheritedFromMasterLanguage) {
|
|
50
|
+
node.tags.push({
|
|
51
|
+
id: "inherited",
|
|
52
|
+
severity: "info",
|
|
53
|
+
value: "Inherited " +
|
|
54
|
+
(c._editor.isRemovedFromMasterLanguage ? " / removed" : ""),
|
|
55
|
+
tooltip: c._editor.isRemovedFromMasterLanguage
|
|
56
|
+
? "Component was removed from master language"
|
|
57
|
+
: "Component is inherited from master language",
|
|
58
|
+
icon: "pi pi-caret-right",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (c._editor.hostingPageItem) {
|
|
62
|
+
node.tags.push({
|
|
63
|
+
id: "layout",
|
|
64
|
+
severity: "warning",
|
|
65
|
+
value: "Layout",
|
|
66
|
+
icon: "",
|
|
67
|
+
color: "rgb(192 132 252)",
|
|
68
|
+
tooltip: "Component is inherited from layout. Click to edit layout.",
|
|
69
|
+
onClick: () => {
|
|
70
|
+
var _a;
|
|
71
|
+
confirmDialog({
|
|
72
|
+
header: "Edit layout",
|
|
73
|
+
message: "Edit layout " + ((_a = c._editor.hostingPageItem) === null || _a === void 0 ? void 0 : _a.path) + "?",
|
|
74
|
+
accept: () => window.open(c._editor.hostingPageItem.editUrl, "_blank"),
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (c._editor.linkedComponentItem) {
|
|
80
|
+
node.tags.push({
|
|
81
|
+
id: "linked",
|
|
82
|
+
severity: "warning",
|
|
83
|
+
value: "Shared",
|
|
84
|
+
icon: "",
|
|
85
|
+
tooltip: "Component is linked to " + ((_a = c._editor.linkedComponentItem) === null || _a === void 0 ? void 0 : _a.path),
|
|
86
|
+
color: "rgb(251, 146, 60)",
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (!c.visible) {
|
|
90
|
+
node.tags.push({
|
|
91
|
+
id: "hidden",
|
|
92
|
+
severity: "warning",
|
|
93
|
+
value: "Hidden",
|
|
94
|
+
icon: "pi pi-exclamation-triangle",
|
|
95
|
+
color: "rgb(251, 146, 60)",
|
|
96
|
+
tooltip: "Component is hidden. " +
|
|
97
|
+
(c._editor.messages ? c._editor.messages.join(", ") : ""),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
node.children = mapPlaceholders(c, node);
|
|
101
|
+
return node;
|
|
102
|
+
}
|
|
103
|
+
export function ComponentTree({}) {
|
|
104
|
+
const [expandedKeys, setExpandedKeys] = useState({
|
|
105
|
+
"0": true,
|
|
106
|
+
});
|
|
107
|
+
const [selectedKeys, setSelectedKeys] = useState();
|
|
108
|
+
let editContext = useEditContext();
|
|
109
|
+
const treeRef = useRef(null);
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
if (treeRef.current) {
|
|
112
|
+
const selectedNodeKey = Object.keys(selectedKeys || {})[0];
|
|
113
|
+
const selectedNodeElement = treeRef.current.querySelector(`[data-key="${selectedNodeKey}"]`);
|
|
114
|
+
if (selectedNodeElement) {
|
|
115
|
+
selectedNodeElement.scrollIntoView({
|
|
116
|
+
behavior: "smooth",
|
|
117
|
+
block: "nearest",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}, [selectedKeys]);
|
|
122
|
+
const selection = (editContext === null || editContext === void 0 ? void 0 : editContext.selection) || [];
|
|
123
|
+
const page = editContext === null || editContext === void 0 ? void 0 : editContext.page;
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
const newSelectedKeys = {};
|
|
126
|
+
selection.forEach((id) => {
|
|
127
|
+
const nodes = findNodesByComponentId(id, nodeDictionary);
|
|
128
|
+
nodes.forEach((nodeId) => {
|
|
129
|
+
newSelectedKeys[nodeId] = true;
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
const newExpandedKeys = Object.assign({}, expandedKeys);
|
|
133
|
+
Object.keys(newSelectedKeys).forEach((id) => {
|
|
134
|
+
const node = nodeDictionary[id];
|
|
135
|
+
if (node)
|
|
136
|
+
expandParents(node.parent, newExpandedKeys);
|
|
137
|
+
});
|
|
138
|
+
if (!hasSameProps(newExpandedKeys, expandedKeys))
|
|
139
|
+
setExpandedKeys(newExpandedKeys);
|
|
140
|
+
setSelectedKeys(newSelectedKeys);
|
|
141
|
+
}, [selection]);
|
|
142
|
+
if (!editContext)
|
|
143
|
+
return;
|
|
144
|
+
if (!page)
|
|
145
|
+
return _jsx(_Fragment, {});
|
|
146
|
+
const treeNodes = mapPlaceholders(page, {});
|
|
147
|
+
const nodeDictionary = {};
|
|
148
|
+
createMap(treeNodes, nodeDictionary);
|
|
149
|
+
const nodeTemplate = (node, options) => {
|
|
150
|
+
var _a;
|
|
151
|
+
let label = (_jsxs("span", { "data-key": node.key, className: "a-flex a-items-center", children: [_jsx("span", { className: node.className, children: node.label }), (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => (_jsxs("span", { children: [_jsx(Tag, { id: "id-" + node.key + x.id, icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: {
|
|
152
|
+
backgroundColor: x.color,
|
|
153
|
+
marginLeft: "8px",
|
|
154
|
+
fontSize: "10px",
|
|
155
|
+
padding: "1px 4px 2px 2px",
|
|
156
|
+
} }), _jsx(Tooltip, { target: "#id-" + node.key + x.id, content: x.tooltip })] }, node.key + x.id)))] }));
|
|
157
|
+
return _jsx("span", { className: options.className, children: label });
|
|
158
|
+
};
|
|
159
|
+
return (_jsx("div", { className: "a-p-1", ref: treeRef, children: _jsx(Tree, { value: treeNodes, selectionMode: "multiple", selectionKeys: selectedKeys, className: "a-w-full alpaca-no-border a-text-xs", onToggle: (e) => setExpandedKeys(e.value), expandedKeys: expandedKeys, nodeTemplate: nodeTemplate, dragdropScope: "ignore", onSelectionChange: (ev) => {
|
|
160
|
+
if (ev.value) {
|
|
161
|
+
const selectedKeys = Object.keys(ev.value);
|
|
162
|
+
const selectedComponentIds = selectedKeys
|
|
163
|
+
.filter((key) => nodeDictionary[key])
|
|
164
|
+
.map((key) => nodeDictionary[key].componentId);
|
|
165
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.select(selectedComponentIds);
|
|
166
|
+
if (selectedComponentIds.length === 1)
|
|
167
|
+
editContext.setScrollIntoView(selectedComponentIds[0]);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.select([]);
|
|
171
|
+
}
|
|
172
|
+
}, onDragDrop: (e) => {
|
|
173
|
+
console.log(e.dropNode);
|
|
174
|
+
console.log(e.dragNode);
|
|
175
|
+
console.log(e.dropIndex);
|
|
176
|
+
}, onContextMenu: (e) => {
|
|
177
|
+
const componentId = nodeDictionary[e.node.key].componentId;
|
|
178
|
+
let selectedComponentIds = selection;
|
|
179
|
+
if (componentId) {
|
|
180
|
+
if (selection.indexOf(componentId) < 0) {
|
|
181
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.select([componentId]);
|
|
182
|
+
selectedComponentIds = [componentId];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
let selectedEntities = selectedComponentIds
|
|
186
|
+
.filter((key) => nodeDictionary[key])
|
|
187
|
+
.map((key) => nodeDictionary[key].data)
|
|
188
|
+
.filter((x) => x);
|
|
189
|
+
if (selectedEntities.length === 0) {
|
|
190
|
+
selectedEntities = [e.node.data];
|
|
191
|
+
}
|
|
192
|
+
let commands = getComponentCommands(selectedEntities, editContext);
|
|
193
|
+
const menu = commands.map((x) => ({
|
|
194
|
+
label: x.label,
|
|
195
|
+
icon: x.icon,
|
|
196
|
+
disabled: editContext === null || editContext === void 0 ? void 0 : editContext.isCommandDisabled(x),
|
|
197
|
+
command: (ev) => {
|
|
198
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.executeCommand({
|
|
199
|
+
command: x,
|
|
200
|
+
event: ev.originalEvent,
|
|
201
|
+
});
|
|
202
|
+
},
|
|
203
|
+
}));
|
|
204
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.showContextMenu(e.originalEvent, menu);
|
|
205
|
+
} }) }));
|
|
206
|
+
}
|
|
207
|
+
function createMap(treeNodes, nodeDictionary) {
|
|
208
|
+
treeNodes.forEach((n) => {
|
|
209
|
+
if (n.key)
|
|
210
|
+
nodeDictionary[n.key] = n;
|
|
211
|
+
if (n.children)
|
|
212
|
+
createMap(n.children, nodeDictionary);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function findNodesByComponentId(id, nodesDictionary) {
|
|
216
|
+
const allNodes = Object.values(nodesDictionary);
|
|
217
|
+
return allNodes
|
|
218
|
+
.filter((x) => x.componentId === id)
|
|
219
|
+
.map((x) => { var _a; return ((_a = x.key) === null || _a === void 0 ? void 0 : _a.toString()) || ""; });
|
|
220
|
+
}
|
|
221
|
+
function expandParents(node, newExpandedKeys) {
|
|
222
|
+
if (!node)
|
|
223
|
+
return;
|
|
224
|
+
if (node.key)
|
|
225
|
+
newExpandedKeys[node.key] = true;
|
|
226
|
+
if (node.parent)
|
|
227
|
+
expandParents(node.parent, newExpandedKeys);
|
|
228
|
+
}
|
|
229
|
+
function hasSameProps(obj1, obj2) {
|
|
230
|
+
var obj1Props = Object.keys(obj1), obj2Props = Object.keys(obj2);
|
|
231
|
+
if (obj1Props.length == obj2Props.length) {
|
|
232
|
+
return obj1Props.every(function (prop) {
|
|
233
|
+
return obj2Props.indexOf(prop) >= 0;
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TabView, TabPanel } from "primereact/tabview";
|
|
3
|
+
import { CopyToClipboardButton } from "../ui/CopyToClipboardButton";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { useEditContext } from "../editContext";
|
|
6
|
+
import { getComponentById } from "../componentTreeHelper";
|
|
7
|
+
import { ObjectInspector, ObjectLabel, ObjectRootLabel } from "react-inspector";
|
|
8
|
+
export function Debug({}) {
|
|
9
|
+
const [activeTab, setActiveTab] = useState(0);
|
|
10
|
+
const editContext = useEditContext();
|
|
11
|
+
if (!editContext)
|
|
12
|
+
return;
|
|
13
|
+
const page = editContext.page;
|
|
14
|
+
let component = null;
|
|
15
|
+
if (page) {
|
|
16
|
+
const selectedComponents = editContext.selection
|
|
17
|
+
.map((x) => getComponentById(x, page))
|
|
18
|
+
.filter((x) => x);
|
|
19
|
+
component = selectedComponents.length === 1 ? selectedComponents[0] : null;
|
|
20
|
+
}
|
|
21
|
+
if (!component && !page)
|
|
22
|
+
return;
|
|
23
|
+
const replacer = function (key, value) {
|
|
24
|
+
if (key === "parentComponent" ||
|
|
25
|
+
key === "placeholderReference" ||
|
|
26
|
+
key === "_editor") {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
const tabs = [];
|
|
32
|
+
const defaultNodeRenderer = ({ depth, name, data, isNonenumerable }) => {
|
|
33
|
+
if (name == "__editor" ||
|
|
34
|
+
name == "parentComponent" ||
|
|
35
|
+
name == "placeholderReference")
|
|
36
|
+
return null;
|
|
37
|
+
return depth === 0 ? (_jsx(ObjectRootLabel, { name: name, data: data })) : (_jsx(ObjectLabel, { name: name, data: data, isNonenumerable: isNonenumerable }));
|
|
38
|
+
};
|
|
39
|
+
if (component) {
|
|
40
|
+
tabs.push(_jsx(TabPanel, { header: "Component", className: "a-relative a-h-full", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-auto a-p-2", children: _jsx(ObjectInspector, { data: component, nodeRenderer: defaultNodeRenderer }) }) }, "component"));
|
|
41
|
+
}
|
|
42
|
+
tabs.push(_jsx(TabPanel, { header: "Page", className: "a-relative a-h-full", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-auto a-p-2", children: _jsx(ObjectInspector, { data: page, nodeRenderer: defaultNodeRenderer }) }) }, "page"));
|
|
43
|
+
return (_jsxs("div", { className: "a-relative a-h-[calc(100%-6px)]", children: [_jsx(TabView, { className: "a-h-full alpaca-editor-tabs", onTabChange: (ev) => {
|
|
44
|
+
setActiveTab(ev.index);
|
|
45
|
+
}, activeIndex: activeTab, children: tabs }), _jsx("div", { className: "a-absolute a-top-2 a-right-1", children: _jsx(CopyToClipboardButton, { text: JSON.stringify(activeTab === 0 && component ? component : page, replacer, 2) }) })] }));
|
|
46
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { classNames } from "primereact/utils";
|
|
4
|
+
import { useEditContext } from "../editContext";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { WizardIcon } from "../ui/Icons";
|
|
7
|
+
export function EditHistory() {
|
|
8
|
+
const editContext = useEditContext();
|
|
9
|
+
const [showOnlyMyChanges, setShowOnlyMyChanges] = useState(true);
|
|
10
|
+
if (!editContext)
|
|
11
|
+
return;
|
|
12
|
+
let operations = showOnlyMyChanges
|
|
13
|
+
? editContext.editHistory.filter((x) => x.sessionId === editContext.sessionId)
|
|
14
|
+
: editContext.editHistory;
|
|
15
|
+
operations = filterUndone(operations);
|
|
16
|
+
const dateOptions = {
|
|
17
|
+
year: "numeric",
|
|
18
|
+
month: "numeric",
|
|
19
|
+
day: "numeric",
|
|
20
|
+
hour: "numeric",
|
|
21
|
+
minute: "numeric",
|
|
22
|
+
second: "numeric",
|
|
23
|
+
hour12: false,
|
|
24
|
+
};
|
|
25
|
+
const dateFormat = Intl.DateTimeFormat(navigator.language, dateOptions);
|
|
26
|
+
return (_jsxs("div", { className: "a-inset-0 a-absolute a-flex a-flex-col", children: [_jsx("div", { className: "a-bg-gray-50", children: _jsx("i", { className: classNames("pi pi-user a-text-xs a-cursor-pointer a-p-0.5", showOnlyMyChanges && "a-bg-gray-200"), onClick: () => setShowOnlyMyChanges(!showOnlyMyChanges), title: "Show only my changes" }) }), _jsx("div", { className: "flex-1 a-flex a-flex-col a-overflow-y-auto a-overflow-x-hidden a-text-sm", children: operations.map((o, i) => singleOperation(i, o)) })] }));
|
|
27
|
+
function getDate(o) {
|
|
28
|
+
const date = new Date(o.date);
|
|
29
|
+
return dateFormat.format(date);
|
|
30
|
+
}
|
|
31
|
+
function singleOperation(i, o) {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
let className = "a-border-b a-p-1 a-flex a-justify-between a-items-start a-text-xs";
|
|
34
|
+
if (o.undone)
|
|
35
|
+
className = className + " a-text-gray-300";
|
|
36
|
+
if (o.focus)
|
|
37
|
+
className = className + " a-cursor-pointer";
|
|
38
|
+
return (_jsxs("div", { className: className, onClick: () => {
|
|
39
|
+
if (o.focus) {
|
|
40
|
+
const focusComponents = o.focus.split(":");
|
|
41
|
+
if (focusComponents.length > 0) {
|
|
42
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.select([focusComponents[0]]);
|
|
43
|
+
}
|
|
44
|
+
if (focusComponents.length > 1) {
|
|
45
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.setFocusedField({
|
|
46
|
+
item: {
|
|
47
|
+
id: focusComponents[0],
|
|
48
|
+
language: editContext.page.language,
|
|
49
|
+
version: editContext.page.version,
|
|
50
|
+
},
|
|
51
|
+
fieldId: focusComponents[1],
|
|
52
|
+
}, false);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}, children: [_jsxs("div", { className: "a-flex a-gap-1", children: [((_a = o.user) === null || _a === void 0 ? void 0 : _a.ai) && (_jsx(WizardIcon, { className: classNames("a-w-4 a-h-4", o.undone ? "a-text-gray-200" : "a-text-gray-500") })), _jsx("div", { children: o.description })] }), _jsxs("div", { children: [_jsx("div", { className: "a-text-xs", children: getDate(o) }), !showOnlyMyChanges && (_jsx("div", { className: "a-text-xs", children: (_b = o.user) === null || _b === void 0 ? void 0 : _b.name }))] })] }, i));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function filterUndone(operations) {
|
|
59
|
+
let allUndone = true;
|
|
60
|
+
return operations.filter((o) => {
|
|
61
|
+
if (!o.undone) {
|
|
62
|
+
allUndone = false;
|
|
63
|
+
}
|
|
64
|
+
return allUndone || !o.undone;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TabPanel, TabView } from "primereact/tabview";
|
|
3
|
+
import { useEditContext } from "../editContext";
|
|
4
|
+
import { getComponentById } from "../componentTreeHelper";
|
|
5
|
+
import { FieldList } from "../FieldList";
|
|
6
|
+
export function EditorForm() {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
const editContext = useEditContext();
|
|
9
|
+
if (!editContext)
|
|
10
|
+
return;
|
|
11
|
+
const page = editContext.page;
|
|
12
|
+
if (!page)
|
|
13
|
+
return;
|
|
14
|
+
const selectedComponents = editContext.selection
|
|
15
|
+
.map((x) => getComponentById(x, page))
|
|
16
|
+
.filter((x) => x);
|
|
17
|
+
const selectedComponent = selectedComponents.length === 1 ? selectedComponents[0] : page;
|
|
18
|
+
const validators = ((_b = (_a = editContext.pageValidationResult) === null || _a === void 0 ? void 0 : _a.find((x) => x.item.id === (selectedComponent === null || selectedComponent === void 0 ? void 0 : selectedComponent.id) &&
|
|
19
|
+
x.item.language === (selectedComponent === null || selectedComponent === void 0 ? void 0 : selectedComponent.language) &&
|
|
20
|
+
x.item.version === (selectedComponent === null || selectedComponent === void 0 ? void 0 : selectedComponent.version))) === null || _b === void 0 ? void 0 : _b.results) || [];
|
|
21
|
+
return (_jsxs("div", { className: "a-flex a-flex-col a-h-full", children: [_jsxs("h1", { className: "a-border-b a-border-gray-200 a-flex a-justify-center a-items-center a-h-12", children: [selectedComponents.length > 0 && (_jsx("i", { className: "pi pi-angle-left a-cursor-pointer a-mr-2 a-p-4", onClick: () => editContext.select([]) })), _jsx("div", { className: "a-flex-1 a-text-center", children: (selectedComponent === null || selectedComponent === void 0 ? void 0 : selectedComponent.name) || page.name || "Page" }), selectedComponents.length > 0 && _jsx("div", { className: "a-w-12" })] }), _jsxs(TabView, { className: "a-flex-1 a-flex a-flex-col", children: [_jsx(TabPanel, { header: "Content", className: "a-h-full", children: _jsx("div", { className: "a-relative a-h-full", children: _jsx("div", { className: "a-p-4 a-overflow-auto a-absolute a-inset-0", children: _jsx(FieldList, { fields: (selectedComponent === null || selectedComponent === void 0 ? void 0 : selectedComponent.fields) || [], validators: validators, simplified: true, filter: (x) => editContext.configuration.alwaysVisiblePageFields.includes(x._editor.name) ||
|
|
22
|
+
editContext.renderedFields.find((y) => y.fieldId == x.id &&
|
|
23
|
+
x._editor.descriptor.item.id == y.item.id) != null }) }) }) }), _jsx(TabPanel, { header: "Advanced", className: "a-h-full", children: _jsx("div", { className: "a-relative a-h-full", children: _jsx("div", { className: "a-p-2 a-overflow-auto a-absolute a-inset-0 ", children: _jsx(FieldList, { fields: (selectedComponent === null || selectedComponent === void 0 ? void 0 : selectedComponent.fields) || [], validators: validators }) }) }) })] })] }));
|
|
24
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TabView, TabPanel } from "primereact/tabview";
|
|
3
|
+
import { FieldList } from "../FieldList";
|
|
4
|
+
import { Splitter, SplitterPanel } from "primereact/splitter";
|
|
5
|
+
import { InputTextarea } from "primereact/inputtextarea";
|
|
6
|
+
import { Button } from "primereact/button";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
8
|
+
import { format } from "graphql-formatter";
|
|
9
|
+
import { useEditContext } from "../editContext";
|
|
10
|
+
import { ObjectInspector } from "react-inspector";
|
|
11
|
+
export function GraphQL() {
|
|
12
|
+
const editContext = useEditContext();
|
|
13
|
+
const [query, setQuery] = useState("");
|
|
14
|
+
const [showSpinner, setShowSpinner] = useState(false);
|
|
15
|
+
const item = editContext === null || editContext === void 0 ? void 0 : editContext.page;
|
|
16
|
+
if (!(item === null || item === void 0 ? void 0 : item._editor))
|
|
17
|
+
return;
|
|
18
|
+
const graphql = item.graphql;
|
|
19
|
+
const graphql_query = item._editor.graphql_query;
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
setQuery(graphql_query);
|
|
22
|
+
}, [graphql_query]);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
setShowSpinner(false);
|
|
25
|
+
}, [editContext === null || editContext === void 0 ? void 0 : editContext.refreshCompletedFlag]);
|
|
26
|
+
function findFields(json) {
|
|
27
|
+
let result = {};
|
|
28
|
+
for (let key in json) {
|
|
29
|
+
if (typeof json[key] === "object" && json[key] !== null) {
|
|
30
|
+
let subResult = findFields(json[key]);
|
|
31
|
+
for (let subKey in subResult) {
|
|
32
|
+
if (result[subKey]) {
|
|
33
|
+
result[subKey] = result[subKey].concat(subResult[subKey]);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
result[subKey] = subResult[subKey];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (key === "jsonValue" && json[key]) {
|
|
41
|
+
let groupKey = `${json[key].itemId}_${json[key].language}_${json[key].version}`;
|
|
42
|
+
if (result[groupKey]) {
|
|
43
|
+
result[groupKey].push(json[key]);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
result[groupKey] = [json[key]];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
const fieldsjsonValues = findFields(graphql);
|
|
53
|
+
function renderItem(fields) {
|
|
54
|
+
var _a, _b, _c;
|
|
55
|
+
const first = fields[0];
|
|
56
|
+
const item = (_a = first._editor) === null || _a === void 0 ? void 0 : _a.descriptor.item;
|
|
57
|
+
if (!item)
|
|
58
|
+
return null;
|
|
59
|
+
return (_jsxs("div", { children: ["Item: ", item.name, " ", first.id, " ", item.language, " ", item.version, _jsx(FieldList, { fields: fields, validators: ((_c = (_b = editContext === null || editContext === void 0 ? void 0 : editContext.pageValidationResult) === null || _b === void 0 ? void 0 : _b.find((x) => x.item.id === item.id &&
|
|
60
|
+
x.item.language === item.language &&
|
|
61
|
+
x.item.version === item.version)) === null || _c === void 0 ? void 0 : _c.results) || [] })] }, first.id + item.id + item.language + item.version));
|
|
62
|
+
}
|
|
63
|
+
function refresh() {
|
|
64
|
+
if (!item)
|
|
65
|
+
return;
|
|
66
|
+
const field = {
|
|
67
|
+
_editor: {
|
|
68
|
+
name: "_GraphQL",
|
|
69
|
+
type: "jsonValue",
|
|
70
|
+
descriptor: {
|
|
71
|
+
item: item,
|
|
72
|
+
fieldId: "3622F861-ECA9-45D7-8DA7-2CDA35235002",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
id: "3622F861-ECA9-45D7-8DA7-2CDA35235002",
|
|
76
|
+
value: query,
|
|
77
|
+
};
|
|
78
|
+
const prettyQuery = format(query);
|
|
79
|
+
setQuery(prettyQuery);
|
|
80
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.editField({ field, value: prettyQuery });
|
|
81
|
+
setShowSpinner(true);
|
|
82
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
|
|
83
|
+
}
|
|
84
|
+
return (_jsxs(Splitter, { layout: "vertical", style: { height: "100%" }, children: [_jsx(SplitterPanel, { size: 50, className: "a-relative", children: _jsxs("div", { className: "a-absolute a-inset-0 a-flex", children: [_jsx(InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1 a-text-xs", style: { height: "100%" } }), _jsx(Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), _jsx(SplitterPanel, { className: "a-relative", children: _jsxs(TabView, { className: "a-inset-0 a-absolute a-flex a-flex-col", children: [_jsx(TabPanel, { header: "JSON", className: "a-relative a-h-full", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto a-p-2", children: _jsx(ObjectInspector, { data: graphql, expandLevel: 3 }) }) }), _jsx(TabPanel, { header: "Data", className: "a-relative a-h-full", children: _jsx("div", { className: "a-m-1 a-h-full", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) })] }) })] }));
|
|
85
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TabPanel, TabView } from "primereact/tabview";
|
|
3
|
+
import { ComponentPalette } from "./ComponentPalette";
|
|
4
|
+
import { MainContentTree } from "./MainContentTree";
|
|
5
|
+
export function Insert() {
|
|
6
|
+
return (_jsxs(TabView, { className: "a-flex-1 a-flex a-flex-col", children: [_jsx(TabPanel, { header: "New Components", className: "a-h-full", children: _jsx(ComponentPalette, {}) }, "new"), _jsx(TabPanel, { header: "Existing", className: "a-h-full", children: _jsx(MainContentTree, { mode: "insert" }) }, "existing")] }));
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import ContentTree from "../ContentTree";
|
|
3
|
+
import { useEditContext } from "../editContext";
|
|
4
|
+
import { getInsertOptionsForCurrentSelection } from "../utils/insertOptions";
|
|
5
|
+
export function MainContentTree({ mode }) {
|
|
6
|
+
var _a;
|
|
7
|
+
const editContext = useEditContext();
|
|
8
|
+
if (!editContext)
|
|
9
|
+
return null;
|
|
10
|
+
const page = editContext.page;
|
|
11
|
+
if (!(page === null || page === void 0 ? void 0 : page._editor))
|
|
12
|
+
return null;
|
|
13
|
+
const currentInsertOptions = getInsertOptionsForCurrentSelection(editContext);
|
|
14
|
+
return (_jsx(ContentTree, { rootItemId: "{11111111-1111-1111-1111-111111111111}", expandIdPath: page._editor.idPath, className: "a-p-1", selectionMode: mode == "insert" ? "none" : "single", selectedItemIds: editContext.secondaryItem ? [editContext.secondaryItem.id] : [page.id], secondarySelectedItemId: (_a = editContext.secondaryItem) === null || _a === void 0 ? void 0 : _a.id, onSelectionChange: (selection) => {
|
|
15
|
+
const selectedItem = selection;
|
|
16
|
+
editContext.loadItem({
|
|
17
|
+
id: selectedItem.id,
|
|
18
|
+
language: selectedItem.language,
|
|
19
|
+
version: selectedItem.version,
|
|
20
|
+
hasLayout: selectedItem.hasLayout,
|
|
21
|
+
});
|
|
22
|
+
}, isDraggable: (x) => mode !== "insert" &&
|
|
23
|
+
(currentInsertOptions === null || currentInsertOptions === void 0 ? void 0 : currentInsertOptions.find((insertOption) => {
|
|
24
|
+
var _a;
|
|
25
|
+
return insertOption.id == x.templateId ||
|
|
26
|
+
((_a = insertOption.compatibleTemplates) === null || _a === void 0 ? void 0 : _a.find((compatibleTemplate) => compatibleTemplate == x.templateId)) !== undefined;
|
|
27
|
+
})) !== undefined, dragStart: (itemNode) => {
|
|
28
|
+
editContext.dragStart({
|
|
29
|
+
type: "link-component",
|
|
30
|
+
templateId: itemNode.templateId,
|
|
31
|
+
component: {
|
|
32
|
+
id: itemNode.id,
|
|
33
|
+
language: itemNode.language,
|
|
34
|
+
version: itemNode.version,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
} }));
|
|
38
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DataTable } from "primereact/datatable";
|
|
3
|
+
import { Column } from "primereact/column";
|
|
4
|
+
import { useEditContext } from "../editContext";
|
|
5
|
+
export function Sessions() {
|
|
6
|
+
var editContext = useEditContext();
|
|
7
|
+
if (!editContext)
|
|
8
|
+
return null;
|
|
9
|
+
const sessions = editContext === null || editContext === void 0 ? void 0 : editContext.activeSessions;
|
|
10
|
+
return (_jsxs(DataTable, { value: sessions, className: "a-text-xs a-w-full", children: [_jsx(Column, { body: (session) => { var _a; return (_a = session.user) === null || _a === void 0 ? void 0 : _a.name; }, header: "User" }), _jsx(Column, { body: (session) => { var _a; return (_a = session.page) === null || _a === void 0 ? void 0 : _a.name; }, header: "Page" }), _jsx(Column, { body: (session) => { var _a; return (_a = session.page) === null || _a === void 0 ? void 0 : _a.language; }, header: "Language" }), _jsx(Column, { body: (session) => { var _a; return (_a = session.page) === null || _a === void 0 ? void 0 : _a.version; }, header: "Version" })] }));
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { classNames } from "primereact/utils";
|
|
3
|
+
import { useEditContext } from "../editContext";
|
|
4
|
+
import { SidebarView } from "./SidebarView";
|
|
5
|
+
export function Sidebar({ views }) {
|
|
6
|
+
var editContext = useEditContext();
|
|
7
|
+
if (!editContext)
|
|
8
|
+
return null;
|
|
9
|
+
const view = editContext.view;
|
|
10
|
+
return (_jsxs("div", { className: "a-flex a-items-stretch a-h-full", children: [_jsx("div", { className: "a-bg-slate-700 a-flex a-flex-col ", children: views.map((x, i) => (_jsx("div", { title: x.title, className: classNames(view.name == x.name
|
|
11
|
+
? "a-text-white"
|
|
12
|
+
: "a-text-gray-400 hover:a-text-white", "a-cursor-pointer a-p-3"), onClick: () => editContext.setView(x), children: typeof x.icon === "string" ? (_jsx("i", { className: classNames(x.icon, "a-text-xl") })) : (x.icon) }, i))) }), views.map((x, i) => (_jsx(SidebarView, { view: x, editContext: editContext, active: view.name === x.name }, i)))] }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import "allotment/dist/style.css";
|
|
3
|
+
import { Allotment } from "allotment";
|
|
4
|
+
import { useEffect, useRef, useState } from "react";
|
|
5
|
+
import { classNames } from "primereact/utils";
|
|
6
|
+
export function SidebarView({ view, editContext, active, }) {
|
|
7
|
+
const splitter = useRef(null);
|
|
8
|
+
const [sizes, setSizes] = useState([]);
|
|
9
|
+
const [preferredSizes, setPreferredSizes] = useState([]);
|
|
10
|
+
const [panelsExpanded, setPanelsExpanded] = useState([]);
|
|
11
|
+
const panelHeaderSize = 30;
|
|
12
|
+
const toggle = (panelIndex) => {
|
|
13
|
+
const newSize = panelsExpanded[panelIndex]
|
|
14
|
+
? panelHeaderSize
|
|
15
|
+
: preferredSizes[panelIndex];
|
|
16
|
+
resizePanel(panelIndex, newSize);
|
|
17
|
+
setPanelsExpanded((x) => {
|
|
18
|
+
const newState = [...x];
|
|
19
|
+
newState[panelIndex] = !newState[panelIndex];
|
|
20
|
+
return newState;
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
var _a;
|
|
25
|
+
if (sizes.length == 0)
|
|
26
|
+
return;
|
|
27
|
+
(_a = splitter.current) === null || _a === void 0 ? void 0 : _a.resize(sizes);
|
|
28
|
+
}, [sizes]);
|
|
29
|
+
const resolvedPanels = view.leftSidebar.map((x) => {
|
|
30
|
+
if (typeof x === "function") {
|
|
31
|
+
return x(editContext);
|
|
32
|
+
}
|
|
33
|
+
return x;
|
|
34
|
+
});
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
setPanelsExpanded(view.leftSidebar.map(() => true));
|
|
37
|
+
setPreferredSizes(() => resolvedPanels.map((x) => x.initialSize));
|
|
38
|
+
}, [view]);
|
|
39
|
+
const resizePanel = (panelIndex, newSize) => {
|
|
40
|
+
const totalSize = sizes.reduce((a, b) => a + b, 0);
|
|
41
|
+
const totalOther = totalSize - sizes[panelIndex];
|
|
42
|
+
const tmpSizes = [...sizes];
|
|
43
|
+
tmpSizes[panelIndex] = newSize;
|
|
44
|
+
const percentages = tmpSizes.map((x) => x / totalOther);
|
|
45
|
+
percentages[panelIndex] = 0;
|
|
46
|
+
const remaining = totalSize - newSize;
|
|
47
|
+
const newSizes = percentages.map((x) => x * remaining);
|
|
48
|
+
newSizes[panelIndex] = newSize;
|
|
49
|
+
setSizes(newSizes);
|
|
50
|
+
};
|
|
51
|
+
const getHeader = (panel, index) => {
|
|
52
|
+
if (panel.header)
|
|
53
|
+
return panel.header({ panel, index });
|
|
54
|
+
return (_jsxs("div", { className: classNames("a-p-1.5 a-bg-gray-50 a-uppercase a-text-gray-500 a-text-xs a-flex a-justify a-items-center a-cursor-pointer", panelsExpanded[index] ? "a-border-b" : ""), onClick: () => toggle(index), children: [panel.icon &&
|
|
55
|
+
(typeof panel.icon === "string" ? (_jsx("i", { className: classNames(panel.icon, "pi a-mr-1.5") })) : (_jsx("div", { className: "a-w-4 a-h-4 a-mr-1.5", children: panel.icon }))), _jsx("div", { className: "a-mr-auto", children: panel.title }), _jsx("i", { className: classNames(panelsExpanded[index] ? "pi-chevron-up" : "pi-chevron-down", "pi a-text-sm") })] }));
|
|
56
|
+
};
|
|
57
|
+
return (_jsx(Allotment, { vertical: true, snap: true, defaultSizes: resolvedPanels.map((x) => x.initialSize), className: !active ? "a-hidden a-h-full" : "a-h-full", ref: splitter, onChange: (s) => {
|
|
58
|
+
if (preferredSizes.length == 0)
|
|
59
|
+
return;
|
|
60
|
+
if (sizes.join(",") != s.join(","))
|
|
61
|
+
setSizes(s);
|
|
62
|
+
const newPreferred = [...preferredSizes];
|
|
63
|
+
s.forEach((x, i) => {
|
|
64
|
+
if (x > panelHeaderSize)
|
|
65
|
+
newPreferred[i] = x;
|
|
66
|
+
});
|
|
67
|
+
setPreferredSizes(newPreferred);
|
|
68
|
+
}, children: resolvedPanels.map((panel, index) => (_jsx(Allotment.Pane, { preferredSize: preferredSizes[index] + "%", maxSize: panelsExpanded[index] ? 10000 : panelHeaderSize, children: _jsxs("div", { className: "a-flex a-flex-col a-h-full", children: [getHeader(panel, index), panelsExpanded[index] && (_jsx("div", { className: "a-overflow-hidden a-relative a-flex-1", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: panel.content }) }))] }) }, index))) }));
|
|
69
|
+
}
|