@next-buildr/editor 2.0.0 → 3.0.0-rc.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/README.md +7 -0
- package/UPGRADING.md +322 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/app/builder-editor.test.js +223 -18
- package/dist/app/config.d.ts +27 -4
- package/dist/app/config.d.ts.map +1 -1
- package/dist/app/config.js +4 -3
- package/dist/app/contracts.d.ts +40 -0
- package/dist/app/contracts.d.ts.map +1 -0
- package/dist/app/contracts.js +4 -0
- package/dist/app/editor-app.d.ts.map +1 -1
- package/dist/app/editor-app.js +316 -24
- package/dist/app/editor-app.test.js +144 -6
- package/dist/app/layout.d.ts +11 -2
- package/dist/app/layout.d.ts.map +1 -1
- package/dist/app/layout.js +170 -9
- package/dist/app/manifest.d.ts +7 -2
- package/dist/app/manifest.d.ts.map +1 -1
- package/dist/app/manifest.js +16 -4
- package/dist/app/shell-panels.d.ts +15 -0
- package/dist/app/shell-panels.d.ts.map +1 -1
- package/dist/app/small-screen.test.js +2 -2
- package/dist/app/stage-slots.d.ts +9 -0
- package/dist/app/stage-slots.d.ts.map +1 -0
- package/dist/app/stage-slots.js +10 -0
- package/dist/app/status-info.d.ts +2 -3
- package/dist/app/status-info.d.ts.map +1 -1
- package/dist/app/status-info.js +49 -16
- package/dist/canvas-host/canvas-frame.d.ts +13 -1
- package/dist/canvas-host/canvas-frame.d.ts.map +1 -1
- package/dist/canvas-host/canvas-frame.js +96 -8
- package/dist/canvas-host/canvas-frame.test.js +156 -3
- package/dist/canvas-host/host.d.ts +6 -0
- package/dist/canvas-host/host.d.ts.map +1 -1
- package/dist/canvas-host/host.js +116 -4
- package/dist/canvas-host/host.test.js +195 -6
- package/dist/clipboard/clipboard.d.ts +1 -1
- package/dist/clipboard/clipboard.d.ts.map +1 -1
- package/dist/clipboard/clipboard.js +5 -0
- package/dist/clipboard/clipboard.test.js +21 -1
- package/dist/clipboard/format.d.ts +3 -1
- package/dist/clipboard/format.d.ts.map +1 -1
- package/dist/clipboard/react.d.ts +1 -1
- package/dist/clipboard/react.d.ts.map +1 -1
- package/dist/clipboard/react.js +49 -3
- package/dist/dialogs/external-source.d.ts +15 -0
- package/dist/dialogs/external-source.d.ts.map +1 -0
- package/dist/dialogs/external-source.js +18 -0
- package/dist/dialogs/index.d.ts +4 -0
- package/dist/dialogs/index.d.ts.map +1 -1
- package/dist/dialogs/index.js +2 -0
- package/dist/dialogs/media-picker/index.d.ts +2 -2
- package/dist/dialogs/media-picker/index.d.ts.map +1 -1
- package/dist/dialogs/media-picker/index.js +1 -1
- package/dist/dialogs/media-picker/media-picker.d.ts +5 -0
- package/dist/dialogs/media-picker/media-picker.d.ts.map +1 -1
- package/dist/dialogs/media-picker/media-picker.js +67 -5
- package/dist/dialogs/media-picker/media-picker.test.js +72 -1
- package/dist/dialogs/media-picker/media-ref.d.ts +15 -0
- package/dist/dialogs/media-picker/media-ref.d.ts.map +1 -1
- package/dist/dialogs/media-picker/media-ref.js +29 -0
- package/dist/dialogs/remove-confirm.d.ts +14 -0
- package/dist/dialogs/remove-confirm.d.ts.map +1 -0
- package/dist/dialogs/remove-confirm.js +42 -0
- package/dist/dialogs/remove-confirm.test.d.ts +2 -0
- package/dist/dialogs/remove-confirm.test.d.ts.map +1 -0
- package/dist/dialogs/remove-confirm.test.js +118 -0
- package/dist/dnd/dnd-react.test.js +11 -2
- package/dist/dnd/dnd.test.js +23 -0
- package/dist/dnd/engine.d.ts +4 -2
- package/dist/dnd/engine.d.ts.map +1 -1
- package/dist/dnd/engine.js +6 -0
- package/dist/dnd/move-to-dialog.d.ts +4 -3
- package/dist/dnd/move-to-dialog.d.ts.map +1 -1
- package/dist/dnd/move-to-dialog.js +67 -10
- package/dist/dnd/react.d.ts.map +1 -1
- package/dist/dnd/react.js +5 -0
- package/dist/i18n/diagnostics.d.ts +22 -0
- package/dist/i18n/diagnostics.d.ts.map +1 -0
- package/dist/i18n/diagnostics.js +153 -0
- package/dist/i18n/diagnostics.test.d.ts +2 -0
- package/dist/i18n/diagnostics.test.d.ts.map +1 -0
- package/dist/i18n/diagnostics.test.js +74 -0
- package/dist/i18n/label-catalog.d.ts +20 -0
- package/dist/i18n/label-catalog.d.ts.map +1 -0
- package/dist/i18n/label-catalog.js +1 -0
- package/dist/i18n/locale-name.d.ts +7 -0
- package/dist/i18n/locale-name.d.ts.map +1 -0
- package/dist/i18n/locale-name.js +31 -0
- package/dist/i18n/localize-manifest.d.ts +11 -0
- package/dist/i18n/localize-manifest.d.ts.map +1 -0
- package/dist/i18n/localize-manifest.js +78 -0
- package/dist/i18n/localize-manifest.test.d.ts +2 -0
- package/dist/i18n/localize-manifest.test.d.ts.map +1 -0
- package/dist/i18n/localize-manifest.test.js +71 -0
- package/dist/messages/catalogs.test.d.ts +2 -0
- package/dist/messages/catalogs.test.d.ts.map +1 -0
- package/dist/messages/catalogs.test.js +80 -0
- package/dist/messages/en/app.d.ts +8 -0
- package/dist/messages/en/app.d.ts.map +1 -0
- package/dist/messages/en/app.js +7 -0
- package/dist/messages/en/blocks.d.ts +54 -0
- package/dist/messages/en/blocks.d.ts.map +1 -0
- package/dist/messages/en/blocks.js +53 -0
- package/dist/messages/en/canvas.d.ts +31 -0
- package/dist/messages/en/canvas.d.ts.map +1 -0
- package/dist/messages/en/canvas.js +30 -0
- package/dist/messages/en/clipboard.d.ts +13 -0
- package/dist/messages/en/clipboard.d.ts.map +1 -0
- package/dist/messages/en/clipboard.js +12 -0
- package/dist/messages/en/colorPicker.d.ts +20 -0
- package/dist/messages/en/colorPicker.d.ts.map +1 -0
- package/dist/messages/en/colorPicker.js +19 -0
- package/dist/messages/en/diagnostics.d.ts +40 -0
- package/dist/messages/en/diagnostics.d.ts.map +1 -0
- package/dist/messages/en/diagnostics.js +39 -0
- package/dist/messages/en/dialogs/common.d.ts +6 -0
- package/dist/messages/en/dialogs/common.d.ts.map +1 -0
- package/dist/messages/en/dialogs/common.js +5 -0
- package/dist/messages/en/dialogs/conflict.d.ts +15 -0
- package/dist/messages/en/dialogs/conflict.d.ts.map +1 -0
- package/dist/messages/en/dialogs/conflict.js +14 -0
- package/dist/messages/en/dialogs/delete.d.ts +19 -0
- package/dist/messages/en/dialogs/delete.d.ts.map +1 -0
- package/dist/messages/en/dialogs/delete.js +18 -0
- package/dist/messages/en/dialogs/pageOptions.d.ts +9 -0
- package/dist/messages/en/dialogs/pageOptions.d.ts.map +1 -0
- package/dist/messages/en/dialogs/pageOptions.js +8 -0
- package/dist/messages/en/dialogs/publish.d.ts +15 -0
- package/dist/messages/en/dialogs/publish.d.ts.map +1 -0
- package/dist/messages/en/dialogs/publish.js +14 -0
- package/dist/messages/en/dnd.d.ts +19 -0
- package/dist/messages/en/dnd.d.ts.map +1 -0
- package/dist/messages/en/dnd.js +18 -0
- package/dist/messages/en/editor.d.ts +30 -0
- package/dist/messages/en/editor.d.ts.map +1 -0
- package/dist/messages/en/editor.js +29 -0
- package/dist/messages/en/external.d.ts +6 -0
- package/dist/messages/en/external.d.ts.map +1 -0
- package/dist/messages/en/external.js +5 -0
- package/dist/messages/en/insert.d.ts +25 -0
- package/dist/messages/en/insert.d.ts.map +1 -0
- package/dist/messages/en/insert.js +24 -0
- package/dist/messages/en/inspector.d.ts +176 -0
- package/dist/messages/en/inspector.d.ts.map +1 -0
- package/dist/messages/en/inspector.js +175 -0
- package/dist/messages/en/issues.d.ts +36 -0
- package/dist/messages/en/issues.d.ts.map +1 -0
- package/dist/messages/en/issues.js +35 -0
- package/dist/messages/en/layers.d.ts +29 -0
- package/dist/messages/en/layers.d.ts.map +1 -0
- package/dist/messages/en/layers.js +28 -0
- package/dist/messages/en/leftPanel.d.ts +15 -0
- package/dist/messages/en/leftPanel.d.ts.map +1 -0
- package/dist/messages/en/leftPanel.js +14 -0
- package/dist/messages/en/list.d.ts +9 -0
- package/dist/messages/en/list.d.ts.map +1 -0
- package/dist/messages/en/list.js +8 -0
- package/dist/messages/en/locale.d.ts +4 -0
- package/dist/messages/en/locale.d.ts.map +1 -0
- package/dist/messages/en/locale.js +3 -0
- package/dist/messages/en/media.d.ts +51 -0
- package/dist/messages/en/media.d.ts.map +1 -0
- package/dist/messages/en/media.js +50 -0
- package/dist/messages/en/menu.d.ts +12 -0
- package/dist/messages/en/menu.d.ts.map +1 -0
- package/dist/messages/en/menu.js +11 -0
- package/dist/messages/en/patterns.d.ts +24 -0
- package/dist/messages/en/patterns.d.ts.map +1 -0
- package/dist/messages/en/patterns.js +23 -0
- package/dist/messages/en/preview.d.ts +8 -0
- package/dist/messages/en/preview.d.ts.map +1 -0
- package/dist/messages/en/preview.js +7 -0
- package/dist/messages/en/publish.d.ts +19 -0
- package/dist/messages/en/publish.d.ts.map +1 -0
- package/dist/messages/en/publish.js +18 -0
- package/dist/messages/en/richText.d.ts +21 -0
- package/dist/messages/en/richText.d.ts.map +1 -0
- package/dist/messages/en/richText.js +20 -0
- package/dist/messages/en/sample.d.ts +5 -0
- package/dist/messages/en/sample.d.ts.map +1 -0
- package/dist/messages/en/sample.js +4 -0
- package/dist/messages/en/save.d.ts +15 -0
- package/dist/messages/en/save.d.ts.map +1 -0
- package/dist/messages/en/save.js +14 -0
- package/dist/messages/en/shortcut.d.ts +36 -0
- package/dist/messages/en/shortcut.d.ts.map +1 -0
- package/dist/messages/en/shortcut.js +35 -0
- package/dist/messages/en/statusBar.d.ts +14 -0
- package/dist/messages/en/statusBar.d.ts.map +1 -0
- package/dist/messages/en/statusBar.js +13 -0
- package/dist/messages/en/structure.d.ts +28 -0
- package/dist/messages/en/structure.d.ts.map +1 -0
- package/dist/messages/en/structure.js +27 -0
- package/dist/messages/en/style.d.ts +168 -0
- package/dist/messages/en/style.d.ts.map +1 -0
- package/dist/messages/en/style.js +167 -0
- package/dist/messages/en/styleField.d.ts +301 -0
- package/dist/messages/en/styleField.d.ts.map +1 -0
- package/dist/messages/en/styleField.js +300 -0
- package/dist/messages/en/styleOption.d.ts +128 -0
- package/dist/messages/en/styleOption.d.ts.map +1 -0
- package/dist/messages/en/styleOption.js +127 -0
- package/dist/messages/en/styleSection.d.ts +16 -0
- package/dist/messages/en/styleSection.d.ts.map +1 -0
- package/dist/messages/en/styleSection.js +15 -0
- package/dist/messages/en/toast.d.ts +22 -0
- package/dist/messages/en/toast.d.ts.map +1 -0
- package/dist/messages/en/toast.js +21 -0
- package/dist/messages/en/toolbar.d.ts +47 -0
- package/dist/messages/en/toolbar.d.ts.map +1 -0
- package/dist/messages/en/toolbar.js +46 -0
- package/dist/messages/en/translation.d.ts +7 -0
- package/dist/messages/en/translation.d.ts.map +1 -0
- package/dist/messages/en/translation.js +6 -0
- package/dist/messages/en/ui.d.ts +4 -0
- package/dist/messages/en/ui.d.ts.map +1 -0
- package/dist/messages/en/ui.js +3 -0
- package/dist/messages/en/values.d.ts +45 -0
- package/dist/messages/en/values.d.ts.map +1 -0
- package/dist/messages/en/values.js +44 -0
- package/dist/messages/en.d.ts +1298 -202
- package/dist/messages/en.d.ts.map +1 -1
- package/dist/messages/en.js +82 -330
- package/dist/messages/index.d.ts +12 -0
- package/dist/messages/index.d.ts.map +1 -1
- package/dist/messages/index.js +28 -1
- package/dist/messages/pl/app.d.ts +8 -0
- package/dist/messages/pl/app.d.ts.map +1 -0
- package/dist/messages/pl/app.js +7 -0
- package/dist/messages/pl/blocks.d.ts +54 -0
- package/dist/messages/pl/blocks.d.ts.map +1 -0
- package/dist/messages/pl/blocks.js +53 -0
- package/dist/messages/pl/canvas.d.ts +31 -0
- package/dist/messages/pl/canvas.d.ts.map +1 -0
- package/dist/messages/pl/canvas.js +30 -0
- package/dist/messages/pl/clipboard.d.ts +13 -0
- package/dist/messages/pl/clipboard.d.ts.map +1 -0
- package/dist/messages/pl/clipboard.js +12 -0
- package/dist/messages/pl/colorPicker.d.ts +20 -0
- package/dist/messages/pl/colorPicker.d.ts.map +1 -0
- package/dist/messages/pl/colorPicker.js +19 -0
- package/dist/messages/pl/componentLabels.d.ts +9 -0
- package/dist/messages/pl/componentLabels.d.ts.map +1 -0
- package/dist/messages/pl/componentLabels.js +308 -0
- package/dist/messages/pl/diagnostics.d.ts +39 -0
- package/dist/messages/pl/diagnostics.d.ts.map +1 -0
- package/dist/messages/pl/diagnostics.js +38 -0
- package/dist/messages/pl/dialogs/common.d.ts +6 -0
- package/dist/messages/pl/dialogs/common.d.ts.map +1 -0
- package/dist/messages/pl/dialogs/common.js +5 -0
- package/dist/messages/pl/dialogs/conflict.d.ts +15 -0
- package/dist/messages/pl/dialogs/conflict.d.ts.map +1 -0
- package/dist/messages/pl/dialogs/conflict.js +14 -0
- package/dist/messages/pl/dialogs/delete.d.ts +19 -0
- package/dist/messages/pl/dialogs/delete.d.ts.map +1 -0
- package/dist/messages/pl/dialogs/delete.js +18 -0
- package/dist/messages/pl/dialogs/pageOptions.d.ts +9 -0
- package/dist/messages/pl/dialogs/pageOptions.d.ts.map +1 -0
- package/dist/messages/pl/dialogs/pageOptions.js +8 -0
- package/dist/messages/pl/dialogs/publish.d.ts +15 -0
- package/dist/messages/pl/dialogs/publish.d.ts.map +1 -0
- package/dist/messages/pl/dialogs/publish.js +14 -0
- package/dist/messages/pl/dnd.d.ts +19 -0
- package/dist/messages/pl/dnd.d.ts.map +1 -0
- package/dist/messages/pl/dnd.js +18 -0
- package/dist/messages/pl/editor.d.ts +30 -0
- package/dist/messages/pl/editor.d.ts.map +1 -0
- package/dist/messages/pl/editor.js +29 -0
- package/dist/messages/pl/external.d.ts +6 -0
- package/dist/messages/pl/external.d.ts.map +1 -0
- package/dist/messages/pl/external.js +5 -0
- package/dist/messages/pl/insert.d.ts +25 -0
- package/dist/messages/pl/insert.d.ts.map +1 -0
- package/dist/messages/pl/insert.js +24 -0
- package/dist/messages/pl/inspector.d.ts +176 -0
- package/dist/messages/pl/inspector.d.ts.map +1 -0
- package/dist/messages/pl/inspector.js +175 -0
- package/dist/messages/pl/issues.d.ts +36 -0
- package/dist/messages/pl/issues.d.ts.map +1 -0
- package/dist/messages/pl/issues.js +35 -0
- package/dist/messages/pl/layers.d.ts +29 -0
- package/dist/messages/pl/layers.d.ts.map +1 -0
- package/dist/messages/pl/layers.js +28 -0
- package/dist/messages/pl/leftPanel.d.ts +15 -0
- package/dist/messages/pl/leftPanel.d.ts.map +1 -0
- package/dist/messages/pl/leftPanel.js +14 -0
- package/dist/messages/pl/list.d.ts +9 -0
- package/dist/messages/pl/list.d.ts.map +1 -0
- package/dist/messages/pl/list.js +8 -0
- package/dist/messages/pl/locale.d.ts +4 -0
- package/dist/messages/pl/locale.d.ts.map +1 -0
- package/dist/messages/pl/locale.js +3 -0
- package/dist/messages/pl/media.d.ts +51 -0
- package/dist/messages/pl/media.d.ts.map +1 -0
- package/dist/messages/pl/media.js +50 -0
- package/dist/messages/pl/menu.d.ts +12 -0
- package/dist/messages/pl/menu.d.ts.map +1 -0
- package/dist/messages/pl/menu.js +11 -0
- package/dist/messages/pl/patterns.d.ts +24 -0
- package/dist/messages/pl/patterns.d.ts.map +1 -0
- package/dist/messages/pl/patterns.js +23 -0
- package/dist/messages/pl/preview.d.ts +8 -0
- package/dist/messages/pl/preview.d.ts.map +1 -0
- package/dist/messages/pl/preview.js +7 -0
- package/dist/messages/pl/publish.d.ts +19 -0
- package/dist/messages/pl/publish.d.ts.map +1 -0
- package/dist/messages/pl/publish.js +18 -0
- package/dist/messages/pl/richText.d.ts +21 -0
- package/dist/messages/pl/richText.d.ts.map +1 -0
- package/dist/messages/pl/richText.js +20 -0
- package/dist/messages/pl/sample.d.ts +5 -0
- package/dist/messages/pl/sample.d.ts.map +1 -0
- package/dist/messages/pl/sample.js +4 -0
- package/dist/messages/pl/save.d.ts +15 -0
- package/dist/messages/pl/save.d.ts.map +1 -0
- package/dist/messages/pl/save.js +14 -0
- package/dist/messages/pl/shortcut.d.ts +36 -0
- package/dist/messages/pl/shortcut.d.ts.map +1 -0
- package/dist/messages/pl/shortcut.js +35 -0
- package/dist/messages/pl/statusBar.d.ts +14 -0
- package/dist/messages/pl/statusBar.d.ts.map +1 -0
- package/dist/messages/pl/statusBar.js +13 -0
- package/dist/messages/pl/structure.d.ts +28 -0
- package/dist/messages/pl/structure.d.ts.map +1 -0
- package/dist/messages/pl/structure.js +27 -0
- package/dist/messages/pl/style.d.ts +168 -0
- package/dist/messages/pl/style.d.ts.map +1 -0
- package/dist/messages/pl/style.js +167 -0
- package/dist/messages/pl/styleField.d.ts +301 -0
- package/dist/messages/pl/styleField.d.ts.map +1 -0
- package/dist/messages/pl/styleField.js +300 -0
- package/dist/messages/pl/styleOption.d.ts +128 -0
- package/dist/messages/pl/styleOption.d.ts.map +1 -0
- package/dist/messages/pl/styleOption.js +127 -0
- package/dist/messages/pl/styleSection.d.ts +16 -0
- package/dist/messages/pl/styleSection.d.ts.map +1 -0
- package/dist/messages/pl/styleSection.js +15 -0
- package/dist/messages/pl/toast.d.ts +22 -0
- package/dist/messages/pl/toast.d.ts.map +1 -0
- package/dist/messages/pl/toast.js +21 -0
- package/dist/messages/pl/toolbar.d.ts +47 -0
- package/dist/messages/pl/toolbar.d.ts.map +1 -0
- package/dist/messages/pl/toolbar.js +46 -0
- package/dist/messages/pl/translation.d.ts +7 -0
- package/dist/messages/pl/translation.d.ts.map +1 -0
- package/dist/messages/pl/translation.js +6 -0
- package/dist/messages/pl/ui.d.ts +4 -0
- package/dist/messages/pl/ui.d.ts.map +1 -0
- package/dist/messages/pl/ui.js +3 -0
- package/dist/messages/pl/values.d.ts +45 -0
- package/dist/messages/pl/values.d.ts.map +1 -0
- package/dist/messages/pl/values.js +44 -0
- package/dist/messages/pl.d.ts.map +1 -1
- package/dist/messages/pl.js +82 -325
- package/dist/messages/plural.test.d.ts +2 -0
- package/dist/messages/plural.test.d.ts.map +1 -0
- package/dist/messages/plural.test.js +50 -0
- package/dist/panels/breadcrumbs/breadcrumbs.d.ts +1 -1
- package/dist/panels/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/panels/breadcrumbs/breadcrumbs.js +10 -3
- package/dist/panels/breadcrumbs/breadcrumbs.test.js +9 -2
- package/dist/panels/index.d.ts +3 -0
- package/dist/panels/index.d.ts.map +1 -1
- package/dist/panels/index.js +1 -0
- package/dist/panels/insert/catalog.d.ts +21 -1
- package/dist/panels/insert/catalog.d.ts.map +1 -1
- package/dist/panels/insert/catalog.js +85 -3
- package/dist/panels/insert/catalog.order.test.js +106 -1
- package/dist/panels/insert/index.d.ts +1 -0
- package/dist/panels/insert/index.d.ts.map +1 -1
- package/dist/panels/insert/insert-panel.d.ts +14 -4
- package/dist/panels/insert/insert-panel.d.ts.map +1 -1
- package/dist/panels/insert/insert-panel.js +128 -69
- package/dist/panels/insert/insert-panel.test.js +278 -37
- package/dist/panels/insert/target.d.ts +5 -1
- package/dist/panels/insert/target.d.ts.map +1 -1
- package/dist/panels/insert/target.js +11 -1
- package/dist/panels/inspector/author-fields.d.ts +21 -0
- package/dist/panels/inspector/author-fields.d.ts.map +1 -0
- package/dist/panels/inspector/author-fields.js +191 -0
- package/dist/panels/inspector/author-fields.test.d.ts +2 -0
- package/dist/panels/inspector/author-fields.test.d.ts.map +1 -0
- package/dist/panels/inspector/author-fields.test.js +237 -0
- package/dist/panels/inspector/controls/external-link.d.ts +24 -0
- package/dist/panels/inspector/controls/external-link.d.ts.map +1 -0
- package/dist/panels/inspector/controls/external-link.js +43 -0
- package/dist/panels/inspector/controls/external-link.test.d.ts +2 -0
- package/dist/panels/inspector/controls/external-link.test.d.ts.map +1 -0
- package/dist/panels/inspector/controls/external-link.test.js +105 -0
- package/dist/panels/inspector/controls/index.d.ts +1 -0
- package/dist/panels/inspector/controls/index.d.ts.map +1 -1
- package/dist/panels/inspector/controls/index.js +1 -0
- package/dist/panels/inspector/controls/media.d.ts +3 -1
- package/dist/panels/inspector/controls/media.d.ts.map +1 -1
- package/dist/panels/inspector/controls/media.js +8 -3
- package/dist/panels/inspector/controls/rich-text.d.ts.map +1 -1
- package/dist/panels/inspector/controls/rich-text.js +36 -6
- package/dist/panels/inspector/controls/textarea.d.ts +7 -2
- package/dist/panels/inspector/controls/textarea.d.ts.map +1 -1
- package/dist/panels/inspector/controls/textarea.js +37 -2
- package/dist/panels/inspector/default-hint.d.ts +13 -0
- package/dist/panels/inspector/default-hint.d.ts.map +1 -0
- package/dist/panels/inspector/default-hint.js +30 -0
- package/dist/panels/inspector/default-hint.test.d.ts +2 -0
- package/dist/panels/inspector/default-hint.test.d.ts.map +1 -0
- package/dist/panels/inspector/default-hint.test.js +46 -0
- package/dist/panels/inspector/index.d.ts +3 -3
- package/dist/panels/inspector/index.d.ts.map +1 -1
- package/dist/panels/inspector/index.js +2 -2
- package/dist/panels/inspector/inspector.d.ts +20 -2
- package/dist/panels/inspector/inspector.d.ts.map +1 -1
- package/dist/panels/inspector/inspector.js +246 -26
- package/dist/panels/inspector/inspector.test.js +276 -11
- package/dist/panels/inspector/props-panel.d.ts +36 -0
- package/dist/panels/inspector/props-panel.d.ts.map +1 -1
- package/dist/panels/inspector/props-panel.js +99 -17
- package/dist/panels/inspector/props-panel.test.d.ts +2 -0
- package/dist/panels/inspector/props-panel.test.d.ts.map +1 -0
- package/dist/panels/inspector/props-panel.test.js +17 -0
- package/dist/panels/inspector/scrub-label.d.ts +14 -0
- package/dist/panels/inspector/scrub-label.d.ts.map +1 -0
- package/dist/panels/inspector/scrub-label.js +75 -0
- package/dist/panels/inspector/scrub-label.test.d.ts +2 -0
- package/dist/panels/inspector/scrub-label.test.d.ts.map +1 -0
- package/dist/panels/inspector/scrub-label.test.js +132 -0
- package/dist/panels/inspector/styles/background-media.d.ts +28 -0
- package/dist/panels/inspector/styles/background-media.d.ts.map +1 -0
- package/dist/panels/inspector/styles/background-media.js +78 -0
- package/dist/panels/inspector/styles/box-model.d.ts +13 -16
- package/dist/panels/inspector/styles/box-model.d.ts.map +1 -1
- package/dist/panels/inspector/styles/box-model.js +10 -25
- package/dist/panels/inspector/styles/color-input.d.ts +3 -0
- package/dist/panels/inspector/styles/color-input.d.ts.map +1 -0
- package/dist/panels/inspector/styles/color-input.js +72 -0
- package/dist/panels/inspector/styles/gradient-fields.d.ts +9 -0
- package/dist/panels/inspector/styles/gradient-fields.d.ts.map +1 -0
- package/dist/panels/inspector/styles/gradient-fields.js +50 -0
- package/dist/panels/inspector/styles/index.d.ts +2 -0
- package/dist/panels/inspector/styles/index.d.ts.map +1 -1
- package/dist/panels/inspector/styles/index.js +2 -0
- package/dist/panels/inspector/styles/model.d.ts +27 -5
- package/dist/panels/inspector/styles/model.d.ts.map +1 -1
- package/dist/panels/inspector/styles/model.js +101 -3
- package/dist/panels/inspector/styles/motion-rows.d.ts +17 -0
- package/dist/panels/inspector/styles/motion-rows.d.ts.map +1 -0
- package/dist/panels/inspector/styles/motion-rows.js +117 -0
- package/dist/panels/inspector/styles/number-input.d.ts +4 -0
- package/dist/panels/inspector/styles/number-input.d.ts.map +1 -0
- package/dist/panels/inspector/styles/number-input.js +12 -0
- package/dist/panels/inspector/styles/option-label.d.ts +7 -0
- package/dist/panels/inspector/styles/option-label.d.ts.map +1 -0
- package/dist/panels/inspector/styles/option-label.js +9 -0
- package/dist/panels/inspector/styles/property-label.d.ts +9 -0
- package/dist/panels/inspector/styles/property-label.d.ts.map +1 -0
- package/dist/panels/inspector/styles/property-label.js +11 -0
- package/dist/panels/inspector/styles/section-state.d.ts +22 -0
- package/dist/panels/inspector/styles/section-state.d.ts.map +1 -0
- package/dist/panels/inspector/styles/section-state.js +96 -0
- package/dist/panels/inspector/styles/section.d.ts +25 -0
- package/dist/panels/inspector/styles/section.d.ts.map +1 -0
- package/dist/panels/inspector/styles/section.js +43 -0
- package/dist/panels/inspector/styles/sections-context.d.ts +13 -0
- package/dist/panels/inspector/styles/sections-context.d.ts.map +1 -0
- package/dist/panels/inspector/styles/sections-context.js +19 -0
- package/dist/panels/inspector/styles/sections-context.test.d.ts +2 -0
- package/dist/panels/inspector/styles/sections-context.test.d.ts.map +1 -0
- package/dist/panels/inspector/styles/sections-context.test.js +18 -0
- package/dist/panels/inspector/styles/sections-toggle.d.ts +6 -0
- package/dist/panels/inspector/styles/sections-toggle.d.ts.map +1 -0
- package/dist/panels/inspector/styles/sections-toggle.js +18 -0
- package/dist/panels/inspector/styles/segments.d.ts +3 -0
- package/dist/panels/inspector/styles/segments.d.ts.map +1 -1
- package/dist/panels/inspector/styles/segments.js +11 -4
- package/dist/panels/inspector/styles/sides-editor.d.ts +1 -1
- package/dist/panels/inspector/styles/sides-editor.d.ts.map +1 -1
- package/dist/panels/inspector/styles/sides-editor.js +33 -4
- package/dist/panels/inspector/styles/style-inspector.d.ts +3 -1
- package/dist/panels/inspector/styles/style-inspector.d.ts.map +1 -1
- package/dist/panels/inspector/styles/style-inspector.js +610 -42
- package/dist/panels/inspector/styles/style-inspector.test.js +694 -14
- package/dist/panels/inspector/styles/token-picker.d.ts +1 -1
- package/dist/panels/inspector/styles/token-picker.d.ts.map +1 -1
- package/dist/panels/inspector/styles/token-picker.js +10 -3
- package/dist/panels/inspector/styles/widgets.d.ts +116 -0
- package/dist/panels/inspector/styles/widgets.d.ts.map +1 -0
- package/dist/panels/inspector/styles/widgets.js +304 -0
- package/dist/panels/inspector/styles/widgets.test.d.ts +2 -0
- package/dist/panels/inspector/styles/widgets.test.d.ts.map +1 -0
- package/dist/panels/inspector/styles/widgets.test.js +247 -0
- package/dist/panels/inspector/values/value-editor.d.ts +1 -1
- package/dist/panels/inspector/values/value-editor.d.ts.map +1 -1
- package/dist/panels/inspector/values/value-editor.js +9 -8
- package/dist/panels/inspector/values/values.test.js +9 -3
- package/dist/panels/issues/collect.d.ts +2 -0
- package/dist/panels/issues/collect.d.ts.map +1 -1
- package/dist/panels/issues/collect.js +1 -0
- package/dist/panels/issues/index.d.ts +1 -0
- package/dist/panels/issues/index.d.ts.map +1 -1
- package/dist/panels/issues/index.js +1 -0
- package/dist/panels/issues/issues-panel.d.ts +4 -3
- package/dist/panels/issues/issues-panel.d.ts.map +1 -1
- package/dist/panels/issues/issues-panel.js +22 -35
- package/dist/panels/issues/path.d.ts +7 -0
- package/dist/panels/issues/path.d.ts.map +1 -0
- package/dist/panels/issues/path.js +21 -0
- package/dist/panels/layers/flatten.d.ts +16 -2
- package/dist/panels/layers/flatten.d.ts.map +1 -1
- package/dist/panels/layers/flatten.js +48 -4
- package/dist/panels/layers/layers-panel.d.ts +5 -2
- package/dist/panels/layers/layers-panel.d.ts.map +1 -1
- package/dist/panels/layers/layers-panel.js +177 -35
- package/dist/panels/layers/layers-panel.test.js +173 -15
- package/dist/panels/left-panel.d.ts +17 -0
- package/dist/panels/left-panel.d.ts.map +1 -0
- package/dist/panels/left-panel.js +47 -0
- package/dist/panels/left-panel.test.d.ts +2 -0
- package/dist/panels/left-panel.test.d.ts.map +1 -0
- package/dist/panels/left-panel.test.js +77 -0
- package/dist/persistence/persistence.test.js +9 -3
- package/dist/persistence/react.d.ts.map +1 -1
- package/dist/persistence/react.js +2 -2
- package/dist/preview/preview.d.ts +8 -0
- package/dist/preview/preview.d.ts.map +1 -1
- package/dist/preview/preview.js +21 -1
- package/dist/preview/preview.test.js +18 -1
- package/dist/shortcuts/actions.d.ts +13 -2
- package/dist/shortcuts/actions.d.ts.map +1 -1
- package/dist/shortcuts/actions.js +70 -15
- package/dist/shortcuts/help.d.ts +11 -0
- package/dist/shortcuts/help.d.ts.map +1 -0
- package/dist/shortcuts/help.js +77 -0
- package/dist/shortcuts/index.d.ts +5 -2
- package/dist/shortcuts/index.d.ts.map +1 -1
- package/dist/shortcuts/index.js +3 -1
- package/dist/shortcuts/map.d.ts +1 -1
- package/dist/shortcuts/map.d.ts.map +1 -1
- package/dist/shortcuts/map.js +14 -8
- package/dist/shortcuts/navigation.d.ts +13 -0
- package/dist/shortcuts/navigation.d.ts.map +1 -0
- package/dist/shortcuts/navigation.js +48 -0
- package/dist/shortcuts/shortcuts.d.ts +12 -1
- package/dist/shortcuts/shortcuts.d.ts.map +1 -1
- package/dist/shortcuts/shortcuts.js +61 -14
- package/dist/shortcuts/shortcuts.test.js +206 -5
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +19 -1
- package/dist/store/index.d.ts +4 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +3 -1
- package/dist/store/react.d.ts +4 -0
- package/dist/store/react.d.ts.map +1 -1
- package/dist/store/react.js +7 -0
- package/dist/store/store.test.js +24 -0
- package/dist/store/structure-lock.d.ts +16 -0
- package/dist/store/structure-lock.d.ts.map +1 -0
- package/dist/store/structure-lock.js +43 -0
- package/dist/store/structure-lock.test.d.ts +2 -0
- package/dist/store/structure-lock.test.d.ts.map +1 -0
- package/dist/store/structure-lock.test.js +49 -0
- package/dist/store/types.d.ts +9 -0
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/view.d.ts +20 -0
- package/dist/store/view.d.ts.map +1 -0
- package/dist/store/view.js +17 -0
- package/dist/store/view.test.d.ts +2 -0
- package/dist/store/view.test.d.ts.map +1 -0
- package/dist/store/view.test.js +103 -0
- package/dist/styles/tokens.test.js +88 -9
- package/dist/styles.css +4112 -586
- package/dist/toolbar/brand.d.ts +2 -2
- package/dist/toolbar/brand.d.ts.map +1 -1
- package/dist/toolbar/brand.js +4 -4
- package/dist/toolbar/breakpoint-control.d.ts +4 -0
- package/dist/toolbar/breakpoint-control.d.ts.map +1 -1
- package/dist/toolbar/breakpoint-control.js +11 -4
- package/dist/toolbar/editable-title.d.ts +4 -1
- package/dist/toolbar/editable-title.d.ts.map +1 -1
- package/dist/toolbar/editable-title.js +2 -2
- package/dist/toolbar/editable-title.test.js +10 -0
- package/dist/toolbar/locale-chip.d.ts +10 -0
- package/dist/toolbar/locale-chip.d.ts.map +1 -0
- package/dist/toolbar/locale-chip.js +27 -0
- package/dist/toolbar/locale-switcher.d.ts.map +1 -1
- package/dist/toolbar/locale-switcher.js +4 -1
- package/dist/toolbar/more-menu.d.ts +26 -4
- package/dist/toolbar/more-menu.d.ts.map +1 -1
- package/dist/toolbar/more-menu.js +60 -13
- package/dist/toolbar/page-chip.d.ts +10 -0
- package/dist/toolbar/page-chip.d.ts.map +1 -0
- package/dist/toolbar/page-chip.js +12 -0
- package/dist/toolbar/page-options-dialog.d.ts +16 -0
- package/dist/toolbar/page-options-dialog.d.ts.map +1 -0
- package/dist/toolbar/page-options-dialog.js +13 -0
- package/dist/toolbar/panel-toggles.d.ts +3 -2
- package/dist/toolbar/panel-toggles.d.ts.map +1 -1
- package/dist/toolbar/panel-toggles.js +9 -4
- package/dist/toolbar/publish-dialog.d.ts +3 -0
- package/dist/toolbar/publish-dialog.d.ts.map +1 -1
- package/dist/toolbar/publish-dialog.js +34 -7
- package/dist/toolbar/publish.test.js +63 -19
- package/dist/toolbar/safe-history.d.ts +3 -0
- package/dist/toolbar/safe-history.d.ts.map +1 -0
- package/dist/toolbar/safe-history.js +5 -0
- package/dist/toolbar/sample-picker.d.ts +24 -4
- package/dist/toolbar/sample-picker.d.ts.map +1 -1
- package/dist/toolbar/sample-picker.js +42 -18
- package/dist/toolbar/toolbar-centre.d.ts +3 -11
- package/dist/toolbar/toolbar-centre.d.ts.map +1 -1
- package/dist/toolbar/toolbar-centre.js +4 -5
- package/dist/toolbar/toolbar-left.d.ts +4 -7
- package/dist/toolbar/toolbar-left.d.ts.map +1 -1
- package/dist/toolbar/toolbar-left.js +13 -11
- package/dist/toolbar/toolbar-right.d.ts +21 -6
- package/dist/toolbar/toolbar-right.d.ts.map +1 -1
- package/dist/toolbar/toolbar-right.js +28 -14
- package/dist/toolbar/toolbar.d.ts +23 -17
- package/dist/toolbar/toolbar.d.ts.map +1 -1
- package/dist/toolbar/toolbar.js +28 -11
- package/dist/toolbar/toolbar.test.js +238 -23
- package/dist/toolbar/use-overflow-level.d.ts +2 -1
- package/dist/toolbar/use-overflow-level.d.ts.map +1 -1
- package/dist/toolbar/use-overflow-level.js +9 -3
- package/dist/toolbar/zoom-menu.d.ts +5 -1
- package/dist/toolbar/zoom-menu.d.ts.map +1 -1
- package/dist/toolbar/zoom-menu.js +3 -2
- package/dist/ui/icon.d.ts +53 -0
- package/dist/ui/icon.d.ts.map +1 -1
- package/dist/ui/icon.js +58 -1
- package/dist/ui/icon.test.js +101 -3
- package/dist/ui/index.d.ts +4 -3
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +3 -2
- package/dist/ui/primitives.d.ts +97 -14
- package/dist/ui/primitives.d.ts.map +1 -1
- package/dist/ui/primitives.js +108 -22
- package/dist/ui/primitives.test.js +204 -3
- package/dist/ui/structure-locked.d.ts +9 -0
- package/dist/ui/structure-locked.d.ts.map +1 -0
- package/dist/ui/structure-locked.js +28 -0
- package/dist/ui/toast.d.ts +3 -1
- package/dist/ui/toast.d.ts.map +1 -1
- package/dist/ui/toast.js +21 -5
- package/dist/ui/toast.test.js +34 -0
- package/package.json +6 -4
package/dist/app/layout.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type ReactNode } from 'react';
|
|
|
2
2
|
export interface IssueCounts {
|
|
3
3
|
readonly error: number;
|
|
4
4
|
readonly warning: number;
|
|
5
|
+
readonly info?: number;
|
|
5
6
|
}
|
|
6
7
|
export interface EditorLayoutProps {
|
|
7
8
|
readonly toolbar?: ReactNode;
|
|
@@ -15,18 +16,26 @@ export interface EditorLayoutProps {
|
|
|
15
16
|
readonly issues?: ReactNode;
|
|
16
17
|
/** Error and warning counts shown on the status bar's issues toggle. */
|
|
17
18
|
readonly issueCounts?: IssueCounts | undefined;
|
|
18
|
-
/**
|
|
19
|
+
/** The right of the status bar: device readout and zoom menu. */
|
|
19
20
|
readonly status?: ReactNode;
|
|
21
|
+
/** The collapsed right panel's rail (the inspector's tabs as icons); the plain expand button without it. */
|
|
22
|
+
readonly rightRail?: ReactNode;
|
|
23
|
+
/** The selection path on the left of the status bar. */
|
|
24
|
+
readonly breadcrumbs?: ReactNode;
|
|
20
25
|
}
|
|
21
26
|
/** Below this editor width the side panels become overlays (the editor may be embedded: measured, not a media query). */
|
|
22
27
|
export declare const NARROW_BELOW = 1100;
|
|
23
28
|
/** The canvas never gets narrower than this while the panels sit beside it. */
|
|
24
29
|
export declare const CANVAS_MIN = 480;
|
|
30
|
+
/** At this editor width and below the toolbar and the status bar collapse to what a phone needs. */
|
|
31
|
+
export declare const COMPACT_AT = 768;
|
|
32
|
+
/** At this editor width and below the toolbar keeps only icons. */
|
|
33
|
+
export declare const TIGHT_AT = 480;
|
|
25
34
|
/**
|
|
26
35
|
* The shell's three columns and the status bar: toolbar on top, the left panel, the canvas and
|
|
27
36
|
* the inspector between two splitters, the status bar with the collapsible issues drawer at the
|
|
28
37
|
* bottom. Each region is a landmark with a translated name; the panels themselves are slots the
|
|
29
38
|
* later tasks fill. Below `NARROW_BELOW` the side panels are overlays the toolbar toggles.
|
|
30
39
|
*/
|
|
31
|
-
export declare function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, }: EditorLayoutProps): import("react").JSX.Element;
|
|
40
|
+
export declare function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, breadcrumbs, rightRail, }: EditorLayoutProps): import("react").JSX.Element;
|
|
32
41
|
//# sourceMappingURL=layout.d.ts.map
|
package/dist/app/layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,qBAAqB;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,4GAA4G;IAC5G,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;CAClC;AAgED,yHAAyH;AACzH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,+EAA+E;AAC/E,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,oGAAoG;AACpG,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,mEAAmE;AACnE,eAAO,MAAM,QAAQ,MAAM,CAAC;AAsB5B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,MAAM,EACN,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,+BAgYnB"}
|
package/dist/app/layout.js
CHANGED
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
3
|
-
import { useT } from '../messages/index.js';
|
|
4
|
-
import {
|
|
3
|
+
import { usePlural, useT } from '../messages/index.js';
|
|
4
|
+
import { Icon, IconButton, Panel } from '../ui/index.js';
|
|
5
5
|
import { ShellPanelsContext } from './shell-panels.js';
|
|
6
|
+
import { StageSlotsContext } from './stage-slots.js';
|
|
6
7
|
import { useResizable } from './use-resizable.js';
|
|
8
|
+
const COLLAPSE_KEY = 'buildr:editor:collapsed';
|
|
9
|
+
const EXPANDED = { left: false, right: false };
|
|
10
|
+
/** The stored collapse of both panels; anything that is not an object with boolean sides is ignored. */
|
|
11
|
+
function readCollapsed() {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(window.localStorage.getItem(COLLAPSE_KEY) ?? 'null');
|
|
14
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
15
|
+
return EXPANDED;
|
|
16
|
+
const { left, right } = parsed;
|
|
17
|
+
return { left: left === true, right: right === true };
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return EXPANDED;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function writeCollapsed(value) {
|
|
24
|
+
try {
|
|
25
|
+
window.localStorage.setItem(COLLAPSE_KEY, JSON.stringify(value));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Storage is unavailable: the collapse just is not remembered.
|
|
29
|
+
}
|
|
30
|
+
}
|
|
7
31
|
/**
|
|
8
32
|
* A vertical separator that can be dragged or moved with the keyboard (the WAI-ARIA window
|
|
9
33
|
* splitter); double-click puts it back. It draws a 1px line and has a wider invisible hit area.
|
|
10
34
|
*/
|
|
11
|
-
function Splitter({ resizable, min, max, label, controls }) {
|
|
12
|
-
return (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": label, "aria-controls": controls, "aria-valuenow": resizable.size, "aria-valuemin": min, "aria-valuemax": max, tabIndex: 0, className: "bd-splitter", "data-dragging": resizable.dragging, ...resizable.bind }));
|
|
35
|
+
function Splitter({ resizable, min, max, label, controls, inert = false }) {
|
|
36
|
+
return (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": label, "aria-controls": controls, "aria-valuenow": resizable.size, "aria-valuemin": min, "aria-valuemax": max, tabIndex: inert ? -1 : 0, "aria-hidden": inert ? true : undefined, className: "bd-splitter", "data-dragging": resizable.dragging, "data-inert": inert, ...resizable.bind }));
|
|
13
37
|
}
|
|
14
38
|
const LEFT = { initial: 280, min: 200, max: 480 };
|
|
15
39
|
const RIGHT = { initial: 320, min: 240, max: 520 };
|
|
@@ -17,6 +41,10 @@ const RIGHT = { initial: 320, min: 240, max: 520 };
|
|
|
17
41
|
export const NARROW_BELOW = 1100;
|
|
18
42
|
/** The canvas never gets narrower than this while the panels sit beside it. */
|
|
19
43
|
export const CANVAS_MIN = 480;
|
|
44
|
+
/** At this editor width and below the toolbar and the status bar collapse to what a phone needs. */
|
|
45
|
+
export const COMPACT_AT = 768;
|
|
46
|
+
/** At this editor width and below the toolbar keeps only icons. */
|
|
47
|
+
export const TIGHT_AT = 480;
|
|
20
48
|
const SPLITTERS = 2;
|
|
21
49
|
/** The editor's own width, watched with a `ResizeObserver`; 0 while unknown (jsdom). */
|
|
22
50
|
function useEditorWidth(ref) {
|
|
@@ -45,8 +73,9 @@ function useEditorWidth(ref) {
|
|
|
45
73
|
* bottom. Each region is a landmark with a translated name; the panels themselves are slots the
|
|
46
74
|
* later tasks fill. Below `NARROW_BELOW` the side panels are overlays the toolbar toggles.
|
|
47
75
|
*/
|
|
48
|
-
export function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, }) {
|
|
76
|
+
export function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, breadcrumbs, rightRail, }) {
|
|
49
77
|
const t = useT();
|
|
78
|
+
const plural = usePlural();
|
|
50
79
|
const ids = { left: useId(), right: useId(), issues: useId() };
|
|
51
80
|
const leftSize = useResizable({ ...LEFT, direction: 1, storageKey: 'buildr:editor:left-width' });
|
|
52
81
|
const rightSize = useResizable({
|
|
@@ -56,27 +85,159 @@ export function EditorLayout({ toolbar, left, center, right, issues, issueCounts
|
|
|
56
85
|
});
|
|
57
86
|
const [issuesOpen, setIssuesOpen] = useState(false);
|
|
58
87
|
const [overlay, setOverlay] = useState({ left: false, right: false });
|
|
88
|
+
const [collapsed, setCollapsed] = useState(readCollapsed);
|
|
89
|
+
const collapsedRef = useRef(collapsed);
|
|
90
|
+
collapsedRef.current = collapsed;
|
|
91
|
+
const [leftTab, setLeftTab] = useState('blocks');
|
|
92
|
+
const [stage, setStage] = useState(null);
|
|
59
93
|
const toolbarRef = useRef(null);
|
|
60
94
|
const width = useEditorWidth(toolbarRef);
|
|
61
95
|
const narrow = width > 0 && width < NARROW_BELOW;
|
|
96
|
+
const compact = width > 0 && width <= COMPACT_AT;
|
|
97
|
+
const tight = width > 0 && width <= TIGHT_AT;
|
|
62
98
|
const toggle = useCallback((side) => setOverlay((current) => ({
|
|
63
99
|
left: side === 'left' && !current.left,
|
|
64
100
|
right: side === 'right' && !current.right,
|
|
65
101
|
})), []);
|
|
66
|
-
const
|
|
102
|
+
const closeOverlay = useCallback(() => setOverlay((current) => current.left || current.right ? { left: false, right: false } : current), []);
|
|
103
|
+
const update = useCallback((change) => {
|
|
104
|
+
setCollapsed((current) => {
|
|
105
|
+
const next = change(current);
|
|
106
|
+
writeCollapsed(next);
|
|
107
|
+
return next;
|
|
108
|
+
});
|
|
109
|
+
}, []);
|
|
110
|
+
// Focus follows a user-initiated expand or collapse only (never mount or restored state).
|
|
111
|
+
const focusAfter = useRef(null);
|
|
112
|
+
const toggleCollapsed = useCallback((side) => {
|
|
113
|
+
focusAfter.current = { side, open: collapsedRef.current[side] };
|
|
114
|
+
update((current) => ({ ...current, [side]: !current[side] }));
|
|
115
|
+
}, [update]);
|
|
116
|
+
const collapseAll = useCallback(() => {
|
|
117
|
+
focusAfter.current = { side: 'left', open: false };
|
|
118
|
+
update(() => ({ left: true, right: true }));
|
|
119
|
+
}, [update]);
|
|
120
|
+
const expandAll = useCallback(() => {
|
|
121
|
+
focusAfter.current = { side: 'left', open: true };
|
|
122
|
+
update(() => EXPANDED);
|
|
123
|
+
}, [update]);
|
|
124
|
+
const panels = useMemo(() => ({
|
|
125
|
+
narrow,
|
|
126
|
+
compact,
|
|
127
|
+
tight,
|
|
128
|
+
open: overlay,
|
|
129
|
+
toggle,
|
|
130
|
+
closeOverlay,
|
|
131
|
+
collapsed,
|
|
132
|
+
toggleCollapsed,
|
|
133
|
+
collapseAll,
|
|
134
|
+
expandAll,
|
|
135
|
+
leftTab,
|
|
136
|
+
setLeftTab,
|
|
137
|
+
}), [
|
|
138
|
+
narrow,
|
|
139
|
+
compact,
|
|
140
|
+
tight,
|
|
141
|
+
overlay,
|
|
142
|
+
toggle,
|
|
143
|
+
closeOverlay,
|
|
144
|
+
collapsed,
|
|
145
|
+
toggleCollapsed,
|
|
146
|
+
collapseAll,
|
|
147
|
+
expandAll,
|
|
148
|
+
leftTab,
|
|
149
|
+
]);
|
|
150
|
+
const slots = useMemo(() => ({ stage, issuesOpen, setIssuesOpen }), [stage, issuesOpen]);
|
|
151
|
+
// The overlay mode always shows a panel in full; the rail is the wide layout's collapsed state.
|
|
152
|
+
const rail = { left: !narrow && collapsed.left, right: !narrow && collapsed.right };
|
|
67
153
|
// Beside the canvas, the panels give way so it keeps CANVAS_MIN (never below their own minimum).
|
|
68
154
|
const room = width > 0 && !narrow ? width - CANVAS_MIN - SPLITTERS : Number.POSITIVE_INFINITY;
|
|
69
155
|
const leftShown = Math.max(LEFT.min, Math.min(leftSize.size, room - RIGHT.min));
|
|
70
156
|
const rightShown = Math.max(RIGHT.min, Math.min(rightSize.size, room - leftShown));
|
|
71
157
|
const style = {
|
|
72
|
-
'--bd-left': `${leftShown}px`,
|
|
73
|
-
'--bd-right': `${rightShown}px`,
|
|
158
|
+
'--bd-left': rail.left ? 'var(--bd-rail)' : `${leftShown}px`,
|
|
159
|
+
'--bd-right': rail.right ? 'var(--bd-rail)' : `${rightShown}px`,
|
|
160
|
+
};
|
|
161
|
+
const expand = (side) => {
|
|
162
|
+
focusAfter.current = { side, open: true };
|
|
163
|
+
update((current) => ({ ...current, [side]: false }));
|
|
74
164
|
};
|
|
165
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: runs after a collapse change only; the ids are stable
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
const pending = focusAfter.current;
|
|
168
|
+
if (pending === null)
|
|
169
|
+
return;
|
|
170
|
+
focusAfter.current = null;
|
|
171
|
+
const panel = document.getElementById(ids[pending.side]);
|
|
172
|
+
if (panel === null)
|
|
173
|
+
return;
|
|
174
|
+
if (pending.open) {
|
|
175
|
+
const content = panel.querySelector('.bd-panel-content');
|
|
176
|
+
const first = content?.querySelector('button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])');
|
|
177
|
+
(first ?? content)?.focus();
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
panel.querySelector('.bd-rail button')?.focus();
|
|
181
|
+
}
|
|
182
|
+
}, [collapsed]);
|
|
183
|
+
const issueText = (count, kind) => plural(`issues.count.${kind}`, count);
|
|
75
184
|
const closeOnEscape = (side) => (event) => {
|
|
76
185
|
if (narrow && event.key === 'Escape' && overlay[side]) {
|
|
77
186
|
event.stopPropagation();
|
|
78
187
|
setOverlay((current) => ({ ...current, [side]: false }));
|
|
79
188
|
}
|
|
80
189
|
};
|
|
81
|
-
|
|
190
|
+
const sheetOpen = narrow && (overlay.left || overlay.right);
|
|
191
|
+
const sheetSide = !narrow
|
|
192
|
+
? null
|
|
193
|
+
: overlay.left
|
|
194
|
+
? 'left'
|
|
195
|
+
: overlay.right
|
|
196
|
+
? 'right'
|
|
197
|
+
: null;
|
|
198
|
+
// A sheet takes focus: it moves into it when it opens and returns to what opened it when it closes.
|
|
199
|
+
const opener = useRef(null);
|
|
200
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: runs when the open sheet changes; the ids are stable
|
|
201
|
+
useEffect(() => {
|
|
202
|
+
if (sheetSide === null) {
|
|
203
|
+
opener.current?.focus();
|
|
204
|
+
opener.current = null;
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (opener.current === null && document.activeElement instanceof HTMLElement) {
|
|
208
|
+
opener.current = document.activeElement;
|
|
209
|
+
}
|
|
210
|
+
const panel = document.getElementById(ids[sheetSide]);
|
|
211
|
+
const first = panel?.querySelector('.bd-sheet-close, button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])');
|
|
212
|
+
(first ?? panel)?.focus();
|
|
213
|
+
}, [sheetSide]);
|
|
214
|
+
// The sheet is a non-modal dialog on purpose: the toolbar stays live while it is open, because its
|
|
215
|
+
// Blocks / Structure / Inspector toggles swap one sheet for the other. So no `aria-modal` (it would
|
|
216
|
+
// claim the toolbar is unreachable) and the toolbar is not `inert`; the canvas, splitters and status
|
|
217
|
+
// bar are inert, and the scrim, the close button and Escape close the sheet.
|
|
218
|
+
const sheetProps = (side) => (sheetSide === side ? { role: 'dialog' } : {});
|
|
219
|
+
// Escape closes a sheet wherever the focus is (the canvas frame aside), unless a menu or dialog
|
|
220
|
+
// above it already took the key.
|
|
221
|
+
useEffect(() => {
|
|
222
|
+
if (!sheetOpen)
|
|
223
|
+
return;
|
|
224
|
+
const onKey = (event) => {
|
|
225
|
+
if (event.key === 'Escape' && !event.defaultPrevented)
|
|
226
|
+
closeOverlay();
|
|
227
|
+
};
|
|
228
|
+
document.addEventListener('keydown', onKey);
|
|
229
|
+
return () => document.removeEventListener('keydown', onKey);
|
|
230
|
+
}, [sheetOpen, closeOverlay]);
|
|
231
|
+
// A sheet that no longer is one (the editor grew wide) must not stay open behind the layout.
|
|
232
|
+
useEffect(() => {
|
|
233
|
+
if (!narrow)
|
|
234
|
+
closeOverlay();
|
|
235
|
+
}, [narrow, closeOverlay]);
|
|
236
|
+
return (_jsx(ShellPanelsContext.Provider, { value: panels, children: _jsxs(StageSlotsContext.Provider, { value: slots, children: [_jsx("div", { className: "bd-toolbar", role: "toolbar", "aria-label": t('editor.toolbar'), "data-compact": compact, ref: toolbarRef, children: toolbar }), _jsxs("div", { className: "bd-body", style: style, "data-narrow": narrow, "data-compact": compact, "data-dragging": leftSize.dragging || rightSize.dragging, children: [_jsxs(Panel, { as: "aside", id: ids.left, "aria-label": t('editor.leftPanel'), hidden: narrow && !overlay.left, tabIndex: sheetSide === 'left' ? -1 : undefined, ...sheetProps('left'), "data-side": "left", "data-collapsed": rail.left, onKeyDown: closeOnEscape('left'), children: [narrow && (_jsxs("div", { className: "bd-sheet-bar", children: [_jsx("span", { className: "bd-sheet-title", children: t('editor.leftPanel') }), _jsx(IconButton, { size: "sm", icon: "x", label: t('ui.close'), className: "bd-sheet-close", onClick: () => setOverlay((current) => ({ ...current, left: false })) })] })), _jsx("div", { className: "bd-panel-content", hidden: rail.left, tabIndex: -1, children: left }), rail.left && (_jsxs("div", { className: "bd-rail", children: [_jsx(IconButton, { label: t('leftPanel.tab.blocks'), icon: "layout-grid", onClick: () => {
|
|
237
|
+
setLeftTab('blocks');
|
|
238
|
+
expand('left');
|
|
239
|
+
} }), _jsx(IconButton, { label: t('leftPanel.tab.structure'), icon: "list-tree", onClick: () => {
|
|
240
|
+
setLeftTab('structure');
|
|
241
|
+
expand('left');
|
|
242
|
+
} })] }))] }), _jsx(Splitter, { resizable: leftSize, min: LEFT.min, max: LEFT.max, label: t('editor.resize.left'), controls: ids.left, inert: rail.left || sheetOpen }), _jsxs("main", { className: "bd-canvas", "aria-label": t('editor.canvas'), tabIndex: -1, inert: sheetOpen, ref: setStage, children: [_jsx("div", { className: "bd-stage-scroll", children: center }), _jsx("section", { className: "bd-issues", "data-open": issuesOpen, "aria-label": t('issues.drawer'), id: ids.issues, inert: !issuesOpen, children: issues })] }), _jsx(Splitter, { resizable: rightSize, min: RIGHT.min, max: RIGHT.max, label: t('editor.resize.right'), controls: ids.right, inert: rail.right || sheetOpen }), _jsxs(Panel, { as: "aside", id: ids.right, "aria-label": t('editor.inspector'), hidden: narrow && !overlay.right, tabIndex: sheetSide === 'right' ? -1 : undefined, ...sheetProps('right'), "data-side": "right", "data-collapsed": rail.right, onKeyDown: closeOnEscape('right'), children: [narrow && (_jsxs("div", { className: "bd-sheet-bar", children: [_jsx("span", { className: "bd-sheet-title", children: t('editor.inspector') }), _jsx(IconButton, { size: "sm", icon: "x", label: t('ui.close'), className: "bd-sheet-close", onClick: () => setOverlay((current) => ({ ...current, right: false })) })] })), _jsx("div", { className: "bd-panel-content", hidden: rail.right, tabIndex: -1, children: right }), rail.right && (_jsx("div", { className: "bd-rail", children: rightRail ?? (_jsx(IconButton, { label: t('inspector.expand'), icon: "panel-right", onClick: () => expand('right') })) }))] }), sheetOpen && (_jsx("button", { type: "button", className: "bd-scrim", "aria-label": t('ui.close'), tabIndex: -1, onClick: closeOverlay }))] }), _jsxs("section", { className: "bd-status", "aria-label": t('statusBar.label'), "data-compact": compact, inert: sheetOpen, children: [_jsx("div", { className: "bd-status-crumbs", children: breadcrumbs }), _jsx("button", { type: "button", className: "bd-status-btn", "aria-expanded": issuesOpen, "aria-controls": ids.issues, title: t('statusBar.issues.show'), onClick: () => setIssuesOpen((open) => !open), children: issueCounts === undefined ? (t('editor.issues.show')) : issueCounts.error + issueCounts.warning + (issueCounts.info ?? 0) === 0 ? (_jsxs(_Fragment, { children: [_jsx(Icon, { name: "circle-check" }), t('statusBar.noIssues')] })) : (_jsxs(_Fragment, { children: [issueCounts.error > 0 && (_jsxs("span", { className: "bd-status-count", "data-severity": "error", children: [_jsx(Icon, { name: "circle-alert" }), _jsx("span", { className: "bd-tabular", children: issueText(issueCounts.error, 'error') })] })), issueCounts.warning > 0 && (_jsxs("span", { className: "bd-status-count", "data-severity": "warning", children: [_jsx(Icon, { name: "triangle-alert" }), _jsx("span", { className: "bd-tabular", children: issueText(issueCounts.warning, 'warning') })] })), (issueCounts.info ?? 0) > 0 && (_jsxs("span", { className: "bd-status-count", "data-severity": "info", children: [_jsx(Icon, { name: "info" }), _jsx("span", { className: "bd-tabular", children: issueText(issueCounts.info ?? 0, 'info') })] }))] })) }), _jsx("span", { className: "bd-status-divider", "aria-hidden": "true" }), status] })] }) }));
|
|
82
243
|
}
|
package/dist/app/manifest.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { ComponentMeta, RegistryManifest } from '@next-buildr/core';
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* What the palette, the layers and the inspector know about the components (`toManifest`). The
|
|
5
|
+
* panels read it with its labels in the interface language (`i18n/localize-manifest.ts`).
|
|
6
|
+
*/
|
|
4
7
|
export declare function ManifestProvider(props: {
|
|
5
8
|
readonly manifest: RegistryManifest;
|
|
6
9
|
readonly children: ReactNode;
|
|
7
10
|
}): import("react").JSX.Element;
|
|
8
|
-
/** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). */
|
|
11
|
+
/** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). Its labels are in the interface language. */
|
|
9
12
|
export declare function useManifest(): RegistryManifest | undefined;
|
|
13
|
+
/** The manifest as the application registered it, in its own (English) words: what the checks' messages quote. */
|
|
14
|
+
export declare function useSourceManifest(): RegistryManifest | undefined;
|
|
10
15
|
/** One component's metadata, or `undefined` when the manifest does not have it. */
|
|
11
16
|
export declare function componentMeta(manifest: RegistryManifest | undefined, type: string): ComponentMeta | undefined;
|
|
12
17
|
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/app/manifest.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAiB,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/app/manifest.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAiB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAO3E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B,+BAWA;AAED,+JAA+J;AAC/J,wBAAgB,WAAW,IAAI,gBAAgB,GAAG,SAAS,CAE1D;AAED,kHAAkH;AAClH,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAEhE;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,SAAS,CAI3B"}
|
package/dist/app/manifest.js
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext } from 'react';
|
|
2
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
3
|
+
import { localizeManifest } from '../i18n/localize-manifest.js';
|
|
4
|
+
import { useUiLocale } from '../messages/index.js';
|
|
3
5
|
const ManifestContext = createContext(undefined);
|
|
4
|
-
|
|
6
|
+
const SourceManifestContext = createContext(undefined);
|
|
7
|
+
/**
|
|
8
|
+
* What the palette, the layers and the inspector know about the components (`toManifest`). The
|
|
9
|
+
* panels read it with its labels in the interface language (`i18n/localize-manifest.ts`).
|
|
10
|
+
*/
|
|
5
11
|
export function ManifestProvider(props) {
|
|
6
|
-
|
|
12
|
+
const locale = useUiLocale();
|
|
13
|
+
const localized = useMemo(() => localizeManifest(props.manifest, locale), [props.manifest, locale]);
|
|
14
|
+
return (_jsx(SourceManifestContext.Provider, { value: props.manifest, children: _jsx(ManifestContext.Provider, { value: localized, children: props.children }) }));
|
|
7
15
|
}
|
|
8
|
-
/** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). */
|
|
16
|
+
/** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). Its labels are in the interface language. */
|
|
9
17
|
export function useManifest() {
|
|
10
18
|
return useContext(ManifestContext);
|
|
11
19
|
}
|
|
20
|
+
/** The manifest as the application registered it, in its own (English) words: what the checks' messages quote. */
|
|
21
|
+
export function useSourceManifest() {
|
|
22
|
+
return useContext(SourceManifestContext);
|
|
23
|
+
}
|
|
12
24
|
/** One component's metadata, or `undefined` when the manifest does not have it. */
|
|
13
25
|
export function componentMeta(manifest, type) {
|
|
14
26
|
return manifest !== undefined && Object.hasOwn(manifest.components, type)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LeftPanelTab } from './contracts.ts';
|
|
1
2
|
export type PanelSide = 'left' | 'right';
|
|
2
3
|
/**
|
|
3
4
|
* The side panels' overlay mode (below 1100px the layout hides them and the toolbar's toggle
|
|
@@ -7,8 +8,22 @@ export type PanelSide = 'left' | 'right';
|
|
|
7
8
|
export interface ShellPanels {
|
|
8
9
|
/** The editor is narrower than the overlay breakpoint. */
|
|
9
10
|
readonly narrow: boolean;
|
|
11
|
+
/** The editor is phone or small tablet wide (768px and less): the toolbar and the status bar collapse. */
|
|
12
|
+
readonly compact?: boolean;
|
|
13
|
+
/** The editor is phone wide (480px and less): the toolbar keeps only icons. */
|
|
14
|
+
readonly tight?: boolean;
|
|
10
15
|
readonly open: Readonly<Record<PanelSide, boolean>>;
|
|
11
16
|
toggle(side: PanelSide): void;
|
|
17
|
+
/** Closes the open overlay (`narrow` only). */
|
|
18
|
+
closeOverlay?(): void;
|
|
19
|
+
/** Persisted collapse of each side panel (wide layout). */
|
|
20
|
+
readonly collapsed?: Readonly<Record<PanelSide, boolean>>;
|
|
21
|
+
toggleCollapsed?(side: PanelSide): void;
|
|
22
|
+
collapseAll?(): void;
|
|
23
|
+
expandAll?(): void;
|
|
24
|
+
/** The active tab of the left panel. */
|
|
25
|
+
readonly leftTab?: LeftPanelTab;
|
|
26
|
+
setLeftTab?(tab: LeftPanelTab): void;
|
|
12
27
|
}
|
|
13
28
|
export declare const ShellPanelsContext: import("react").Context<ShellPanels | undefined>;
|
|
14
29
|
export declare function useShellPanels(): ShellPanels | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-panels.d.ts","sourceRoot":"","sources":["../../src/app/shell-panels.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shell-panels.d.ts","sourceRoot":"","sources":["../../src/app/shell-panels.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0GAA0G;IAC1G,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,+CAA+C;IAC/C,YAAY,CAAC,IAAI,IAAI,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,eAAe,CAAC,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACxC,WAAW,CAAC,IAAI,IAAI,CAAC;IACrB,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,UAAU,CAAC,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,kBAAkB,kDAAoD,CAAC;AAEpF,wBAAgB,cAAc,IAAI,WAAW,GAAG,SAAS,CAExD"}
|
|
@@ -99,10 +99,10 @@ describe('useViewportTooNarrow on the server and while hydrating', () => {
|
|
|
99
99
|
});
|
|
100
100
|
});
|
|
101
101
|
describe('SmallScreenNotice', () => {
|
|
102
|
-
it('asks for a
|
|
102
|
+
it('asks for a wider window, in the interface language, as an alert', async () => {
|
|
103
103
|
const view = await mount(_jsx(MessagesProvider, { locale: "pl", children: _jsx(SmallScreenNotice, {}) }));
|
|
104
104
|
const alert = view.querySelector('[role="alert"]');
|
|
105
105
|
expect(alert?.querySelector('h1')?.textContent).toBe('Edytor wymaga większego ekranu');
|
|
106
|
-
expect(alert?.textContent).toContain('
|
|
106
|
+
expect(alert?.textContent).toContain('zbyt wąskie');
|
|
107
107
|
});
|
|
108
108
|
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StageSlots } from './contracts.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The stage element and the issues drawer state. `EditorLayout` provides it; toasts and the issues
|
|
4
|
+
* drawer read it to portal into the stage. Without a provider (a panel rendered on its own) the
|
|
5
|
+
* consumers fall back to their previous placement.
|
|
6
|
+
*/
|
|
7
|
+
export declare const StageSlotsContext: import("react").Context<StageSlots | undefined>;
|
|
8
|
+
export declare function useStageSlots(): StageSlots | undefined;
|
|
9
|
+
//# sourceMappingURL=stage-slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-slots.d.ts","sourceRoot":"","sources":["../../src/app/stage-slots.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iDAAmD,CAAC;AAElF,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The stage element and the issues drawer state. `EditorLayout` provides it; toasts and the issues
|
|
4
|
+
* drawer read it to portal into the stage. Without a provider (a panel rendered on its own) the
|
|
5
|
+
* consumers fall back to their previous placement.
|
|
6
|
+
*/
|
|
7
|
+
export const StageSlotsContext = createContext(undefined);
|
|
8
|
+
export function useStageSlots() {
|
|
9
|
+
return useContext(StageSlotsContext);
|
|
10
|
+
}
|
|
@@ -6,9 +6,8 @@ export interface StatusInfoProps {
|
|
|
6
6
|
readonly breakpoint: string;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* The status bar's
|
|
10
|
-
*
|
|
11
|
-
* the save state is plain text (the toolbar's status carries the live region).
|
|
9
|
+
* The status bar's right side: the active screen size with its icon and width (`Komputer · pełna
|
|
10
|
+
* szerokość`), and the canvas zoom menu (the host's `setZoom`). The save state lives in the toolbar.
|
|
12
11
|
*/
|
|
13
12
|
export declare function StatusInfo({ host, breakpoints, breakpoint }: StatusInfoProps): import("react").JSX.Element;
|
|
14
13
|
//# sourceMappingURL=status-info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-info.d.ts","sourceRoot":"","sources":["../../src/app/status-info.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"status-info.d.ts","sourceRoot":"","sources":["../../src/app/status-info.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA2DD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,eAAe,+BA6B5E"}
|
package/dist/app/status-info.js
CHANGED
|
@@ -1,34 +1,67 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useSyncExternalStore } from 'react';
|
|
3
|
-
import { useT } from '../messages/index.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { useEffect, useState, useSyncExternalStore } from 'react';
|
|
3
|
+
import { interpolate, useT } from '../messages/index.js';
|
|
4
|
+
import { ZoomMenu } from '../toolbar/zoom-menu.js';
|
|
5
|
+
import { Icon } from '../ui/index.js';
|
|
6
6
|
const BREAKPOINT_LABELS = {
|
|
7
7
|
desktop: 'toolbar.breakpoint.desktop',
|
|
8
8
|
tablet: 'toolbar.breakpoint.tablet',
|
|
9
9
|
mobile: 'toolbar.breakpoint.mobile',
|
|
10
10
|
};
|
|
11
|
+
const BREAKPOINT_ICONS = {
|
|
12
|
+
desktop: 'monitor',
|
|
13
|
+
tablet: 'tablet',
|
|
14
|
+
mobile: 'smartphone',
|
|
15
|
+
};
|
|
11
16
|
const NO_ZOOM = 'fit';
|
|
12
17
|
function useZoom(host) {
|
|
13
18
|
return useSyncExternalStore((notify) => (host === null ? () => undefined : host.state.subscribe(notify)), () => host?.state.getState().zoom ?? NO_ZOOM, () => NO_ZOOM);
|
|
14
19
|
}
|
|
20
|
+
/** The scale the canvas frame is shown at, in percent, read from the frame (`Fit` is not a number). */
|
|
21
|
+
function useShownPercent(host, zoom, breakpoint) {
|
|
22
|
+
const [percent, setPercent] = useState(100);
|
|
23
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: `zoom` and the breakpoint change the frame's scale
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (typeof zoom === 'number') {
|
|
26
|
+
setPercent(Math.round(zoom * 100));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const read = () => {
|
|
30
|
+
const frame = document.querySelector('.bd-canvas-frame');
|
|
31
|
+
if (frame === null || frame.offsetWidth === 0)
|
|
32
|
+
return;
|
|
33
|
+
setPercent(Math.round((frame.getBoundingClientRect().width / frame.offsetWidth) * 100));
|
|
34
|
+
};
|
|
35
|
+
const timer = setTimeout(read, 0);
|
|
36
|
+
window.addEventListener('resize', read);
|
|
37
|
+
const area = document.querySelector('.bd-canvas-stage-area');
|
|
38
|
+
const observer = typeof ResizeObserver === 'undefined' || area === null ? undefined : new ResizeObserver(read);
|
|
39
|
+
if (area !== null)
|
|
40
|
+
observer?.observe(area);
|
|
41
|
+
const unsubscribe = host?.state.subscribe(read);
|
|
42
|
+
return () => {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
window.removeEventListener('resize', read);
|
|
45
|
+
observer?.disconnect();
|
|
46
|
+
unsubscribe?.();
|
|
47
|
+
};
|
|
48
|
+
}, [host, zoom, breakpoint]);
|
|
49
|
+
return percent;
|
|
50
|
+
}
|
|
15
51
|
/**
|
|
16
|
-
* The status bar's
|
|
17
|
-
*
|
|
18
|
-
* the save state is plain text (the toolbar's status carries the live region).
|
|
52
|
+
* The status bar's right side: the active screen size with its icon and width (`Komputer · pełna
|
|
53
|
+
* szerokość`), and the canvas zoom menu (the host's `setZoom`). The save state lives in the toolbar.
|
|
19
54
|
*/
|
|
20
55
|
export function StatusInfo({ host, breakpoints, breakpoint }) {
|
|
21
56
|
const t = useT();
|
|
22
57
|
const zoom = useZoom(host);
|
|
23
|
-
const
|
|
24
|
-
const error = usePersistenceState((state) => state.error);
|
|
25
|
-
const readOnly = useEditorState((state) => state.readOnly);
|
|
58
|
+
const shown = useShownPercent(host, zoom, breakpoint);
|
|
26
59
|
const active = breakpoints.find((item) => item.id === breakpoint);
|
|
27
60
|
const key = BREAKPOINT_LABELS[breakpoint];
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return (_jsxs(_Fragment, { children: [_jsxs("span", { className: "bd-status-
|
|
61
|
+
const name = key === undefined ? breakpoint : t(key);
|
|
62
|
+
const detail = active === undefined || active === breakpoints[0]
|
|
63
|
+
? t('statusBar.device.full')
|
|
64
|
+
: interpolate(t('statusBar.device.width'), { width: active.width });
|
|
65
|
+
const icon = BREAKPOINT_ICONS[breakpoint];
|
|
66
|
+
return (_jsxs(_Fragment, { children: [_jsxs("span", { className: "bd-status-btn bd-status-static bd-tabular", title: t('editor.status.breakpoint'), children: [icon === undefined ? null : _jsx(Icon, { name: icon }), name, " \u00B7 ", detail] }), _jsx(ZoomMenu, { zoom: zoom, shown: shown, variant: "status", onChange: (next) => host?.setZoom(next) })] }));
|
|
34
67
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BreakpointConfig } from '../app/config.ts';
|
|
2
|
+
import type { EmptyPageActions } from '../app/contracts.ts';
|
|
2
3
|
import { type CanvasHost, type CanvasHostOptions } from './host.ts';
|
|
3
4
|
export interface CanvasFrameProps {
|
|
4
5
|
/** The canvas route (`@next-buildr/react/canvas` runs there). */
|
|
@@ -13,7 +14,9 @@ export interface CanvasFrameProps {
|
|
|
13
14
|
readonly handshakeTimeoutMs?: number;
|
|
14
15
|
/** Gets the host once the frame is mounted (and `null` when it goes), for the toolbar and the drag-and-drop engine. */
|
|
15
16
|
readonly onHost?: (host: CanvasHost | null) => void;
|
|
16
|
-
|
|
17
|
+
/** The actions of the empty-page state; the buttons show only when it is given. */
|
|
18
|
+
readonly emptyPage?: EmptyPageActions;
|
|
19
|
+
readonly callbacks?: Pick<CanvasHostOptions, 'onAction' | 'onInsert' | 'onKeyDown' | 'onContextMenu' | 'onNodeDoubleClick' | 'onDropTarget' | 'onCommandError' | 'onLocked'>;
|
|
17
20
|
}
|
|
18
21
|
/** A random nonce for the canvas URL: 32 hex characters, unguessable by the page in the frame's neighbours. */
|
|
19
22
|
export declare function createSession(): string;
|
|
@@ -44,6 +47,15 @@ export declare function stageMetrics(input: {
|
|
|
44
47
|
readonly roomHeight: number;
|
|
45
48
|
readonly zoom: 'fit' | number;
|
|
46
49
|
}): StageMetrics;
|
|
50
|
+
/**
|
|
51
|
+
* At most 40 UTF-16 units, as the protocol's `.max(40)` counts, without splitting a surrogate pair
|
|
52
|
+
* (cutting by code points would let ~21 astral characters through, and the canvas drops the message).
|
|
53
|
+
*/
|
|
54
|
+
export declare function cutLabel(label: string): string;
|
|
55
|
+
/** The localized component names the canvas shows on its chip: only what the protocol accepts, at most 128. */
|
|
56
|
+
export declare function typeLabelsOf(components: Readonly<Record<string, {
|
|
57
|
+
readonly label?: string | undefined;
|
|
58
|
+
}>> | undefined): Record<string, string>;
|
|
47
59
|
/**
|
|
48
60
|
* The canvas iframe, its channel and its status screens. A "Reload canvas" button (or a fatal
|
|
49
61
|
* error) mounts a new frame with a new session; nothing is lost, because the store holds the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-frame.d.ts","sourceRoot":"","sources":["../../src/canvas-host/canvas-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvas-frame.d.ts","sourceRoot":"","sources":["../../src/canvas-host/canvas-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAoB,MAAM,WAAW,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,uHAAuH;IACvH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CACvB,iBAAiB,EACf,UAAU,GACV,UAAU,GACV,WAAW,GACX,eAAe,GACf,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,UAAU,CACb,CAAC;CACH;AAED,+GAA+G;AAC/G,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIhG;AAED,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CAC/B,GAAG,YAAY,CAUf;AAcD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,CAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC,GAAG,SAAS,GACxF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BAyNlD"}
|