@next-buildr/editor 0.0.0-stage → 2.0.1
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/LICENSE +21 -0
- package/README.md +4 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/app/builder-editor.d.ts +8 -0
- package/dist/app/builder-editor.d.ts.map +1 -0
- package/dist/app/builder-editor.js +14 -0
- package/dist/app/builder-editor.test.d.ts +2 -0
- package/dist/app/builder-editor.test.d.ts.map +1 -0
- package/dist/app/builder-editor.test.js +199 -0
- package/dist/app/config.d.ts +59 -0
- package/dist/app/config.d.ts.map +1 -0
- package/dist/app/config.js +18 -0
- package/dist/app/content-language.test.d.ts +2 -0
- package/dist/app/content-language.test.d.ts.map +1 -0
- package/dist/app/content-language.test.js +157 -0
- package/dist/app/editor-app.d.ts +17 -0
- package/dist/app/editor-app.d.ts.map +1 -0
- package/dist/app/editor-app.js +206 -0
- package/dist/app/editor-app.test.d.ts +2 -0
- package/dist/app/editor-app.test.d.ts.map +1 -0
- package/dist/app/editor-app.test.js +135 -0
- package/dist/app/layout.d.ts +32 -0
- package/dist/app/layout.d.ts.map +1 -0
- package/dist/app/layout.js +82 -0
- package/dist/app/manifest.d.ts +12 -0
- package/dist/app/manifest.d.ts.map +1 -0
- package/dist/app/manifest.js +17 -0
- package/dist/app/shell-panels.d.ts +15 -0
- package/dist/app/shell-panels.d.ts.map +1 -0
- package/dist/app/shell-panels.js +5 -0
- package/dist/app/small-screen.d.ts +12 -0
- package/dist/app/small-screen.d.ts.map +1 -0
- package/dist/app/small-screen.js +33 -0
- package/dist/app/small-screen.test.d.ts +2 -0
- package/dist/app/small-screen.test.d.ts.map +1 -0
- package/dist/app/small-screen.test.js +108 -0
- package/dist/app/status-info.d.ts +14 -0
- package/dist/app/status-info.d.ts.map +1 -0
- package/dist/app/status-info.js +34 -0
- package/dist/app/use-resizable.d.ts +34 -0
- package/dist/app/use-resizable.d.ts.map +1 -0
- package/dist/app/use-resizable.js +84 -0
- package/dist/canvas-host/canvas-frame.d.ts +53 -0
- package/dist/canvas-host/canvas-frame.d.ts.map +1 -0
- package/dist/canvas-host/canvas-frame.js +146 -0
- package/dist/canvas-host/canvas-frame.test.d.ts +2 -0
- package/dist/canvas-host/canvas-frame.test.d.ts.map +1 -0
- package/dist/canvas-host/canvas-frame.test.js +91 -0
- package/dist/canvas-host/host.d.ts +109 -0
- package/dist/canvas-host/host.d.ts.map +1 -0
- package/dist/canvas-host/host.js +293 -0
- package/dist/canvas-host/host.test.d.ts +2 -0
- package/dist/canvas-host/host.test.d.ts.map +1 -0
- package/dist/canvas-host/host.test.js +398 -0
- package/dist/canvas-host/index.d.ts +5 -0
- package/dist/canvas-host/index.d.ts.map +1 -0
- package/dist/canvas-host/index.js +2 -0
- package/dist/clipboard/clipboard.d.ts +38 -0
- package/dist/clipboard/clipboard.d.ts.map +1 -0
- package/dist/clipboard/clipboard.js +160 -0
- package/dist/clipboard/clipboard.test.d.ts +2 -0
- package/dist/clipboard/clipboard.test.d.ts.map +1 -0
- package/dist/clipboard/clipboard.test.js +457 -0
- package/dist/clipboard/format.d.ts +27 -0
- package/dist/clipboard/format.d.ts.map +1 -0
- package/dist/clipboard/format.js +37 -0
- package/dist/clipboard/index.d.ts +6 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +3 -0
- package/dist/clipboard/react.d.ts +20 -0
- package/dist/clipboard/react.d.ts.map +1 -0
- package/dist/clipboard/react.js +71 -0
- package/dist/dialogs/index.d.ts +2 -0
- package/dist/dialogs/index.d.ts.map +1 -0
- package/dist/dialogs/index.js +1 -0
- package/dist/dialogs/media-picker/index.d.ts +7 -0
- package/dist/dialogs/media-picker/index.d.ts.map +1 -0
- package/dist/dialogs/media-picker/index.js +3 -0
- package/dist/dialogs/media-picker/library.d.ts +17 -0
- package/dist/dialogs/media-picker/library.d.ts.map +1 -0
- package/dist/dialogs/media-picker/library.js +9 -0
- package/dist/dialogs/media-picker/media-picker.d.ts +18 -0
- package/dist/dialogs/media-picker/media-picker.d.ts.map +1 -0
- package/dist/dialogs/media-picker/media-picker.js +99 -0
- package/dist/dialogs/media-picker/media-picker.test.d.ts +2 -0
- package/dist/dialogs/media-picker/media-picker.test.d.ts.map +1 -0
- package/dist/dialogs/media-picker/media-picker.test.js +161 -0
- package/dist/dialogs/media-picker/media-ref.d.ts +28 -0
- package/dist/dialogs/media-picker/media-ref.d.ts.map +1 -0
- package/dist/dialogs/media-picker/media-ref.js +52 -0
- package/dist/dnd/check.d.ts +8 -0
- package/dist/dnd/check.d.ts.map +1 -0
- package/dist/dnd/check.js +12 -0
- package/dist/dnd/destinations.d.ts +15 -0
- package/dist/dnd/destinations.d.ts.map +1 -0
- package/dist/dnd/destinations.js +43 -0
- package/dist/dnd/dnd-react.test.d.ts +2 -0
- package/dist/dnd/dnd-react.test.d.ts.map +1 -0
- package/dist/dnd/dnd-react.test.js +93 -0
- package/dist/dnd/dnd.test.d.ts +2 -0
- package/dist/dnd/dnd.test.d.ts.map +1 -0
- package/dist/dnd/dnd.test.js +327 -0
- package/dist/dnd/engine.d.ts +85 -0
- package/dist/dnd/engine.d.ts.map +1 -0
- package/dist/dnd/engine.js +185 -0
- package/dist/dnd/fragment.d.ts +6 -0
- package/dist/dnd/fragment.d.ts.map +1 -0
- package/dist/dnd/fragment.js +18 -0
- package/dist/dnd/geometry.d.ts +30 -0
- package/dist/dnd/geometry.d.ts.map +1 -0
- package/dist/dnd/geometry.js +31 -0
- package/dist/dnd/index.d.ts +14 -0
- package/dist/dnd/index.d.ts.map +1 -0
- package/dist/dnd/index.js +7 -0
- package/dist/dnd/move-to-dialog.d.ts +13 -0
- package/dist/dnd/move-to-dialog.d.ts.map +1 -0
- package/dist/dnd/move-to-dialog.js +30 -0
- package/dist/dnd/react.d.ts +43 -0
- package/dist/dnd/react.d.ts.map +1 -0
- package/dist/dnd/react.js +185 -0
- package/dist/dnd/tree-target.d.ts +29 -0
- package/dist/dnd/tree-target.d.ts.map +1 -0
- package/dist/dnd/tree-target.js +97 -0
- package/dist/fonts/LICENSE-inter.txt +93 -0
- package/dist/fonts/inter-latin-400-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-500-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-600-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-ext-400-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-ext-500-normal.woff2 +0 -0
- package/dist/fonts/inter-latin-ext-600-normal.woff2 +0 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/messages/en.d.ts +335 -0
- package/dist/messages/en.d.ts.map +1 -0
- package/dist/messages/en.js +332 -0
- package/dist/messages/index.d.ts +16 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +22 -0
- package/dist/messages/pl.d.ts +3 -0
- package/dist/messages/pl.d.ts.map +1 -0
- package/dist/messages/pl.js +327 -0
- package/dist/panels/breadcrumbs/breadcrumbs.d.ts +6 -0
- package/dist/panels/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/panels/breadcrumbs/breadcrumbs.js +24 -0
- package/dist/panels/breadcrumbs/breadcrumbs.test.d.ts +2 -0
- package/dist/panels/breadcrumbs/breadcrumbs.test.d.ts.map +1 -0
- package/dist/panels/breadcrumbs/breadcrumbs.test.js +56 -0
- package/dist/panels/index.d.ts +9 -0
- package/dist/panels/index.d.ts.map +1 -0
- package/dist/panels/index.js +6 -0
- package/dist/panels/insert/catalog.d.ts +30 -0
- package/dist/panels/insert/catalog.d.ts.map +1 -0
- package/dist/panels/insert/catalog.js +76 -0
- package/dist/panels/insert/catalog.order.test.d.ts +2 -0
- package/dist/panels/insert/catalog.order.test.d.ts.map +1 -0
- package/dist/panels/insert/catalog.order.test.js +17 -0
- package/dist/panels/insert/category-name.d.ts +4 -0
- package/dist/panels/insert/category-name.d.ts.map +1 -0
- package/dist/panels/insert/category-name.js +8 -0
- package/dist/panels/insert/index.d.ts +3 -0
- package/dist/panels/insert/index.d.ts.map +1 -0
- package/dist/panels/insert/index.js +2 -0
- package/dist/panels/insert/insert-panel.d.ts +7 -0
- package/dist/panels/insert/insert-panel.d.ts.map +1 -0
- package/dist/panels/insert/insert-panel.js +155 -0
- package/dist/panels/insert/insert-panel.test.d.ts +2 -0
- package/dist/panels/insert/insert-panel.test.d.ts.map +1 -0
- package/dist/panels/insert/insert-panel.test.js +323 -0
- package/dist/panels/insert/target.d.ts +17 -0
- package/dist/panels/insert/target.d.ts.map +1 -0
- package/dist/panels/insert/target.js +48 -0
- package/dist/panels/inspector/controls/boolean.d.ts +4 -0
- package/dist/panels/inspector/controls/boolean.d.ts.map +1 -0
- package/dist/panels/inspector/controls/boolean.js +4 -0
- package/dist/panels/inspector/controls/compound.d.ts +15 -0
- package/dist/panels/inspector/controls/compound.d.ts.map +1 -0
- package/dist/panels/inspector/controls/compound.js +99 -0
- package/dist/panels/inspector/controls/compound.test.d.ts +2 -0
- package/dist/panels/inspector/controls/compound.test.d.ts.map +1 -0
- package/dist/panels/inspector/controls/compound.test.js +195 -0
- package/dist/panels/inspector/controls/icon.d.ts +5 -0
- package/dist/panels/inspector/controls/icon.d.ts.map +1 -0
- package/dist/panels/inspector/controls/icon.js +6 -0
- package/dist/panels/inspector/controls/index.d.ts +13 -0
- package/dist/panels/inspector/controls/index.d.ts.map +1 -0
- package/dist/panels/inspector/controls/index.js +11 -0
- package/dist/panels/inspector/controls/label.d.ts +4 -0
- package/dist/panels/inspector/controls/label.d.ts.map +1 -0
- package/dist/panels/inspector/controls/label.js +8 -0
- package/dist/panels/inspector/controls/link.d.ts +5 -0
- package/dist/panels/inspector/controls/link.d.ts.map +1 -0
- package/dist/panels/inspector/controls/link.js +6 -0
- package/dist/panels/inspector/controls/media.d.ts +9 -0
- package/dist/panels/inspector/controls/media.d.ts.map +1 -0
- package/dist/panels/inspector/controls/media.js +21 -0
- package/dist/panels/inspector/controls/number.d.ts +10 -0
- package/dist/panels/inspector/controls/number.d.ts.map +1 -0
- package/dist/panels/inspector/controls/number.js +33 -0
- package/dist/panels/inspector/controls/rich-text-model.d.ts +20 -0
- package/dist/panels/inspector/controls/rich-text-model.d.ts.map +1 -0
- package/dist/panels/inspector/controls/rich-text-model.js +91 -0
- package/dist/panels/inspector/controls/rich-text.d.ts +10 -0
- package/dist/panels/inspector/controls/rich-text.d.ts.map +1 -0
- package/dist/panels/inspector/controls/rich-text.js +159 -0
- package/dist/panels/inspector/controls/select.d.ts +5 -0
- package/dist/panels/inspector/controls/select.d.ts.map +1 -0
- package/dist/panels/inspector/controls/select.js +16 -0
- package/dist/panels/inspector/controls/select.test.d.ts +2 -0
- package/dist/panels/inspector/controls/select.test.d.ts.map +1 -0
- package/dist/panels/inspector/controls/select.test.js +43 -0
- package/dist/panels/inspector/controls/text.d.ts +4 -0
- package/dist/panels/inspector/controls/text.d.ts.map +1 -0
- package/dist/panels/inspector/controls/text.js +5 -0
- package/dist/panels/inspector/controls/textarea.d.ts +4 -0
- package/dist/panels/inspector/controls/textarea.d.ts.map +1 -0
- package/dist/panels/inspector/controls/textarea.js +4 -0
- package/dist/panels/inspector/controls/types.d.ts +16 -0
- package/dist/panels/inspector/controls/types.d.ts.map +1 -0
- package/dist/panels/inspector/controls/types.js +1 -0
- package/dist/panels/inspector/index.d.ts +17 -0
- package/dist/panels/inspector/index.d.ts.map +1 -0
- package/dist/panels/inspector/index.js +9 -0
- package/dist/panels/inspector/inspector.d.ts +16 -0
- package/dist/panels/inspector/inspector.d.ts.map +1 -0
- package/dist/panels/inspector/inspector.js +116 -0
- package/dist/panels/inspector/inspector.test.d.ts +2 -0
- package/dist/panels/inspector/inspector.test.d.ts.map +1 -0
- package/dist/panels/inspector/inspector.test.js +328 -0
- package/dist/panels/inspector/props-panel.d.ts +26 -0
- package/dist/panels/inspector/props-panel.d.ts.map +1 -0
- package/dist/panels/inspector/props-panel.js +117 -0
- package/dist/panels/inspector/styles/box-model.d.ts +20 -0
- package/dist/panels/inspector/styles/box-model.d.ts.map +1 -0
- package/dist/panels/inspector/styles/box-model.js +31 -0
- package/dist/panels/inspector/styles/index.d.ts +5 -0
- package/dist/panels/inspector/styles/index.d.ts.map +1 -0
- package/dist/panels/inspector/styles/index.js +2 -0
- package/dist/panels/inspector/styles/model.d.ts +55 -0
- package/dist/panels/inspector/styles/model.d.ts.map +1 -0
- package/dist/panels/inspector/styles/model.js +111 -0
- package/dist/panels/inspector/styles/segments.d.ts +18 -0
- package/dist/panels/inspector/styles/segments.d.ts.map +1 -0
- package/dist/panels/inspector/styles/segments.js +75 -0
- package/dist/panels/inspector/styles/sides-editor.d.ts +34 -0
- package/dist/panels/inspector/styles/sides-editor.d.ts.map +1 -0
- package/dist/panels/inspector/styles/sides-editor.js +86 -0
- package/dist/panels/inspector/styles/style-inspector.d.ts +15 -0
- package/dist/panels/inspector/styles/style-inspector.d.ts.map +1 -0
- package/dist/panels/inspector/styles/style-inspector.js +219 -0
- package/dist/panels/inspector/styles/style-inspector.test.d.ts +2 -0
- package/dist/panels/inspector/styles/style-inspector.test.d.ts.map +1 -0
- package/dist/panels/inspector/styles/style-inspector.test.js +265 -0
- package/dist/panels/inspector/styles/token-picker.d.ts +15 -0
- package/dist/panels/inspector/styles/token-picker.d.ts.map +1 -0
- package/dist/panels/inspector/styles/token-picker.js +23 -0
- package/dist/panels/inspector/styles/use-style-value.d.ts +28 -0
- package/dist/panels/inspector/styles/use-style-value.d.ts.map +1 -0
- package/dist/panels/inspector/styles/use-style-value.js +51 -0
- package/dist/panels/inspector/value.d.ts +20 -0
- package/dist/panels/inspector/value.d.ts.map +1 -0
- package/dist/panels/inspector/value.js +32 -0
- package/dist/panels/inspector/values/analyze.d.ts +49 -0
- package/dist/panels/inspector/values/analyze.d.ts.map +1 -0
- package/dist/panels/inspector/values/analyze.js +115 -0
- package/dist/panels/inspector/values/data.d.ts +18 -0
- package/dist/panels/inspector/values/data.d.ts.map +1 -0
- package/dist/panels/inspector/values/data.js +10 -0
- package/dist/panels/inspector/values/translation.d.ts +20 -0
- package/dist/panels/inspector/values/translation.d.ts.map +1 -0
- package/dist/panels/inspector/values/translation.js +25 -0
- package/dist/panels/inspector/values/value-editor.d.ts +30 -0
- package/dist/panels/inspector/values/value-editor.d.ts.map +1 -0
- package/dist/panels/inspector/values/value-editor.js +191 -0
- package/dist/panels/inspector/values/values.test.d.ts +2 -0
- package/dist/panels/inspector/values/values.test.d.ts.map +1 -0
- package/dist/panels/inspector/values/values.test.js +173 -0
- package/dist/panels/issues/collect.d.ts +70 -0
- package/dist/panels/issues/collect.d.ts.map +1 -0
- package/dist/panels/issues/collect.js +96 -0
- package/dist/panels/issues/index.d.ts +5 -0
- package/dist/panels/issues/index.d.ts.map +1 -0
- package/dist/panels/issues/index.js +2 -0
- package/dist/panels/issues/issues-panel.d.ts +17 -0
- package/dist/panels/issues/issues-panel.d.ts.map +1 -0
- package/dist/panels/issues/issues-panel.js +77 -0
- package/dist/panels/layers/flatten.d.ts +28 -0
- package/dist/panels/layers/flatten.d.ts.map +1 -0
- package/dist/panels/layers/flatten.js +61 -0
- package/dist/panels/layers/layers-panel.d.ts +14 -0
- package/dist/panels/layers/layers-panel.d.ts.map +1 -0
- package/dist/panels/layers/layers-panel.js +428 -0
- package/dist/panels/layers/layers-panel.test.d.ts +2 -0
- package/dist/panels/layers/layers-panel.test.d.ts.map +1 -0
- package/dist/panels/layers/layers-panel.test.js +315 -0
- package/dist/persistence/controller.d.ts +55 -0
- package/dist/persistence/controller.d.ts.map +1 -0
- package/dist/persistence/controller.js +341 -0
- package/dist/persistence/index.d.ts +6 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +3 -0
- package/dist/persistence/load.d.ts +35 -0
- package/dist/persistence/load.d.ts.map +1 -0
- package/dist/persistence/load.js +67 -0
- package/dist/persistence/persistence.test.d.ts +2 -0
- package/dist/persistence/persistence.test.d.ts.map +1 -0
- package/dist/persistence/persistence.test.js +483 -0
- package/dist/persistence/react.d.ts +18 -0
- package/dist/persistence/react.d.ts.map +1 -0
- package/dist/persistence/react.js +105 -0
- package/dist/persistence/types.d.ts +182 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +1 -0
- package/dist/preview/index.d.ts +3 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +2 -0
- package/dist/preview/prepare.d.ts +16 -0
- package/dist/preview/prepare.d.ts.map +1 -0
- package/dist/preview/prepare.js +21 -0
- package/dist/preview/preview.d.ts +27 -0
- package/dist/preview/preview.d.ts.map +1 -0
- package/dist/preview/preview.js +51 -0
- package/dist/preview/preview.test.d.ts +2 -0
- package/dist/preview/preview.test.d.ts.map +1 -0
- package/dist/preview/preview.test.js +129 -0
- package/dist/shortcuts/actions.d.ts +17 -0
- package/dist/shortcuts/actions.d.ts.map +1 -0
- package/dist/shortcuts/actions.js +85 -0
- package/dist/shortcuts/index.d.ts +11 -0
- package/dist/shortcuts/index.d.ts.map +1 -0
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/keys.d.ts +29 -0
- package/dist/shortcuts/keys.d.ts.map +1 -0
- package/dist/shortcuts/keys.js +100 -0
- package/dist/shortcuts/map.d.ts +17 -0
- package/dist/shortcuts/map.d.ts.map +1 -0
- package/dist/shortcuts/map.js +31 -0
- package/dist/shortcuts/registry.d.ts +32 -0
- package/dist/shortcuts/registry.d.ts.map +1 -0
- package/dist/shortcuts/registry.js +53 -0
- package/dist/shortcuts/shortcuts.d.ts +32 -0
- package/dist/shortcuts/shortcuts.d.ts.map +1 -0
- package/dist/shortcuts/shortcuts.js +95 -0
- package/dist/shortcuts/shortcuts.test.d.ts +2 -0
- package/dist/shortcuts/shortcuts.test.d.ts.map +1 -0
- package/dist/shortcuts/shortcuts.test.js +263 -0
- package/dist/store/create-store.d.ts +13 -0
- package/dist/store/create-store.d.ts.map +1 -0
- package/dist/store/create-store.js +248 -0
- package/dist/store/index.d.ts +9 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +5 -0
- package/dist/store/locale.d.ts +23 -0
- package/dist/store/locale.d.ts.map +1 -0
- package/dist/store/locale.js +31 -0
- package/dist/store/react.d.ts +17 -0
- package/dist/store/react.d.ts.map +1 -0
- package/dist/store/react.js +32 -0
- package/dist/store/selection.d.ts +32 -0
- package/dist/store/selection.d.ts.map +1 -0
- package/dist/store/selection.js +84 -0
- package/dist/store/selection.test.d.ts +2 -0
- package/dist/store/selection.test.d.ts.map +1 -0
- package/dist/store/selection.test.js +95 -0
- package/dist/store/selectors.d.ts +18 -0
- package/dist/store/selectors.d.ts.map +1 -0
- package/dist/store/selectors.js +39 -0
- package/dist/store/store.test.d.ts +2 -0
- package/dist/store/store.test.d.ts.map +1 -0
- package/dist/store/store.test.js +331 -0
- package/dist/store/types.d.ts +114 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +1 -0
- package/dist/styles/tokens.test.d.ts +2 -0
- package/dist/styles/tokens.test.d.ts.map +1 -0
- package/dist/styles/tokens.test.js +199 -0
- package/dist/styles.css +2885 -0
- package/dist/toolbar/brand.d.ts +7 -0
- package/dist/toolbar/brand.d.ts.map +1 -0
- package/dist/toolbar/brand.js +11 -0
- package/dist/toolbar/breakpoint-control.d.ts +9 -0
- package/dist/toolbar/breakpoint-control.d.ts.map +1 -0
- package/dist/toolbar/breakpoint-control.js +23 -0
- package/dist/toolbar/editable-title.d.ts +14 -0
- package/dist/toolbar/editable-title.d.ts.map +1 -0
- package/dist/toolbar/editable-title.js +46 -0
- package/dist/toolbar/editable-title.test.d.ts +2 -0
- package/dist/toolbar/editable-title.test.d.ts.map +1 -0
- package/dist/toolbar/editable-title.test.js +53 -0
- package/dist/toolbar/index.d.ts +12 -0
- package/dist/toolbar/index.d.ts.map +1 -0
- package/dist/toolbar/index.js +5 -0
- package/dist/toolbar/locale-switcher.d.ts +10 -0
- package/dist/toolbar/locale-switcher.d.ts.map +1 -0
- package/dist/toolbar/locale-switcher.js +20 -0
- package/dist/toolbar/more-menu.d.ts +12 -0
- package/dist/toolbar/more-menu.d.ts.map +1 -0
- package/dist/toolbar/more-menu.js +47 -0
- package/dist/toolbar/panel-toggles.d.ts +9 -0
- package/dist/toolbar/panel-toggles.d.ts.map +1 -0
- package/dist/toolbar/panel-toggles.js +19 -0
- package/dist/toolbar/publish-dialog.d.ts +18 -0
- package/dist/toolbar/publish-dialog.d.ts.map +1 -0
- package/dist/toolbar/publish-dialog.js +49 -0
- package/dist/toolbar/publish.test.d.ts +2 -0
- package/dist/toolbar/publish.test.d.ts.map +1 -0
- package/dist/toolbar/publish.test.js +258 -0
- package/dist/toolbar/sample-picker.d.ts +18 -0
- package/dist/toolbar/sample-picker.d.ts.map +1 -0
- package/dist/toolbar/sample-picker.js +72 -0
- package/dist/toolbar/sample-picker.test.d.ts +2 -0
- package/dist/toolbar/sample-picker.test.d.ts.map +1 -0
- package/dist/toolbar/sample-picker.test.js +78 -0
- package/dist/toolbar/save-indicator.d.ts +8 -0
- package/dist/toolbar/save-indicator.d.ts.map +1 -0
- package/dist/toolbar/save-indicator.js +30 -0
- package/dist/toolbar/theme.d.ts +22 -0
- package/dist/toolbar/theme.d.ts.map +1 -0
- package/dist/toolbar/theme.js +46 -0
- package/dist/toolbar/theme.test.d.ts +2 -0
- package/dist/toolbar/theme.test.d.ts.map +1 -0
- package/dist/toolbar/theme.test.js +49 -0
- package/dist/toolbar/toolbar-centre.d.ts +13 -0
- package/dist/toolbar/toolbar-centre.d.ts.map +1 -0
- package/dist/toolbar/toolbar-centre.js +7 -0
- package/dist/toolbar/toolbar-left.d.ts +12 -0
- package/dist/toolbar/toolbar-left.d.ts.map +1 -0
- package/dist/toolbar/toolbar-left.js +16 -0
- package/dist/toolbar/toolbar-right.d.ts +19 -0
- package/dist/toolbar/toolbar-right.d.ts.map +1 -0
- package/dist/toolbar/toolbar-right.js +21 -0
- package/dist/toolbar/toolbar.d.ts +38 -0
- package/dist/toolbar/toolbar.d.ts.map +1 -0
- package/dist/toolbar/toolbar.js +27 -0
- package/dist/toolbar/toolbar.test.d.ts +2 -0
- package/dist/toolbar/toolbar.test.d.ts.map +1 -0
- package/dist/toolbar/toolbar.test.js +289 -0
- package/dist/toolbar/use-overflow-level.d.ts +9 -0
- package/dist/toolbar/use-overflow-level.d.ts.map +1 -0
- package/dist/toolbar/use-overflow-level.js +40 -0
- package/dist/toolbar/zoom-menu.d.ts +10 -0
- package/dist/toolbar/zoom-menu.d.ts.map +1 -0
- package/dist/toolbar/zoom-menu.js +17 -0
- package/dist/ui/icon.d.ts +102 -0
- package/dist/ui/icon.d.ts.map +1 -0
- package/dist/ui/icon.js +182 -0
- package/dist/ui/icon.test.d.ts +2 -0
- package/dist/ui/icon.test.d.ts.map +1 -0
- package/dist/ui/icon.test.js +115 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +5 -0
- package/dist/ui/panel.d.ts +18 -0
- package/dist/ui/panel.d.ts.map +1 -0
- package/dist/ui/panel.js +21 -0
- package/dist/ui/portal.d.ts +14 -0
- package/dist/ui/portal.d.ts.map +1 -0
- package/dist/ui/portal.js +14 -0
- package/dist/ui/primitives.d.ts +190 -0
- package/dist/ui/primitives.d.ts.map +1 -0
- package/dist/ui/primitives.js +164 -0
- package/dist/ui/primitives.test.d.ts +2 -0
- package/dist/ui/primitives.test.d.ts.map +1 -0
- package/dist/ui/primitives.test.js +215 -0
- package/dist/ui/toast.d.ts +39 -0
- package/dist/ui/toast.d.ts.map +1 -0
- package/dist/ui/toast.js +76 -0
- package/dist/ui/toast.test.d.ts +2 -0
- package/dist/ui/toast.test.d.ts.map +1 -0
- package/dist/ui/toast.test.js +95 -0
- package/package.json +67 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** The Buildr mark: a rounded tile holding three stacked blocks. Decorative, the name is beside it. */
|
|
2
|
+
export declare function BrandMark({ size }: {
|
|
3
|
+
readonly size?: number;
|
|
4
|
+
}): import("react").JSX.Element;
|
|
5
|
+
/** The product identity in the top left corner: the mark and the name. */
|
|
6
|
+
export declare function Brand(): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=brand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/toolbar/brand.tsx"],"names":[],"mappings":"AAEA,uGAAuG;AACvG,wBAAgB,SAAS,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAgBlE;AAED,0EAA0E;AAC1E,wBAAgB,KAAK,gCAQpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useT } from '../messages/index.js';
|
|
3
|
+
/** The Buildr mark: a rounded tile holding three stacked blocks. Decorative, the name is beside it. */
|
|
4
|
+
export function BrandMark({ size = 24 }) {
|
|
5
|
+
return (_jsxs("svg", { className: "bd-brand-mark", width: size, height: size, viewBox: "0 0 24 24", "aria-hidden": "true", focusable: "false", children: [_jsx("rect", { className: "bd-brand-tile", width: "24", height: "24", rx: "6" }), _jsx("rect", { className: "bd-brand-block", x: "5", y: "5", width: "6", height: "6", rx: "1.5" }), _jsx("rect", { className: "bd-brand-block", x: "13", y: "5", width: "6", height: "6", rx: "1.5" }), _jsx("rect", { className: "bd-brand-block", x: "5", y: "13", width: "14", height: "6", rx: "1.5" })] }));
|
|
6
|
+
}
|
|
7
|
+
/** The product identity in the top left corner: the mark and the name. */
|
|
8
|
+
export function Brand() {
|
|
9
|
+
const t = useT();
|
|
10
|
+
return (_jsxs("span", { className: "bd-brand", children: [_jsx(BrandMark, {}), _jsx("span", { className: "bd-brand-name", children: t('toolbar.brand') })] }));
|
|
11
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BreakpointConfig } from '../app/config.ts';
|
|
2
|
+
export interface BreakpointControlProps {
|
|
3
|
+
readonly breakpoints: readonly BreakpointConfig[];
|
|
4
|
+
readonly breakpoint: string;
|
|
5
|
+
readonly onChange: (id: string) => void;
|
|
6
|
+
}
|
|
7
|
+
/** A segmented control: one icon per screen size, the width in the tooltip. */
|
|
8
|
+
export declare function BreakpointControl({ breakpoints, breakpoint, onChange }: BreakpointControlProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=breakpoint-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoint-control.d.ts","sourceRoot":"","sources":["../../src/toolbar/breakpoint-control.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAgBzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,sBAAsB,+BAwB9F"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useT } from '../messages/index.js';
|
|
3
|
+
import { Button, Icon, Tooltip } from '../ui/index.js';
|
|
4
|
+
const BREAKPOINT_LABELS = {
|
|
5
|
+
desktop: 'toolbar.breakpoint.desktop',
|
|
6
|
+
tablet: 'toolbar.breakpoint.tablet',
|
|
7
|
+
mobile: 'toolbar.breakpoint.mobile',
|
|
8
|
+
};
|
|
9
|
+
const BREAKPOINT_ICONS = {
|
|
10
|
+
desktop: 'monitor',
|
|
11
|
+
tablet: 'tablet',
|
|
12
|
+
mobile: 'smartphone',
|
|
13
|
+
};
|
|
14
|
+
/** A segmented control: one icon per screen size, the width in the tooltip. */
|
|
15
|
+
export function BreakpointControl({ breakpoints, breakpoint, onChange }) {
|
|
16
|
+
const t = useT();
|
|
17
|
+
return (_jsx("fieldset", { className: "bd-breakpoints bd-segmented", "aria-label": t('toolbar.breakpoints'), children: breakpoints.map((item) => {
|
|
18
|
+
const key = BREAKPOINT_LABELS[item.id];
|
|
19
|
+
const label = key === undefined ? item.id : t(key);
|
|
20
|
+
const icon = BREAKPOINT_ICONS[item.id];
|
|
21
|
+
return (_jsx(Tooltip, { content: `${label} · ${item.width}px`, children: _jsx(Button, { variant: "ghost", className: "bd-segment", "aria-pressed": item.id === breakpoint, "aria-label": label, onClick: () => onChange(item.id), children: icon === undefined ? label : _jsx(Icon, { name: icon }) }) }, item.id));
|
|
22
|
+
}) }));
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface EditableTitleProps {
|
|
2
|
+
readonly title: string;
|
|
3
|
+
/** Saves a new name; it rejects when the backend refused, and the name then goes back. */
|
|
4
|
+
readonly onRename: (title: string) => Promise<void>;
|
|
5
|
+
readonly disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Longest name the backends take (`createDocumentRequestSchema` in the Payload contract). */
|
|
8
|
+
export declare const MAX_TITLE_LENGTH = 200;
|
|
9
|
+
/**
|
|
10
|
+
* The page name as a field that looks like a heading: Enter or leaving it saves, Escape puts the
|
|
11
|
+
* old name back, an empty name is not saved. The field grows with the name.
|
|
12
|
+
*/
|
|
13
|
+
export declare function EditableTitle({ title, onRename, disabled }: EditableTitleProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=editable-title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-title.d.ts","sourceRoot":"","sources":["../../src/toolbar/editable-title.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAoD9E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { useT } from '../messages/index.js';
|
|
4
|
+
/** Longest name the backends take (`createDocumentRequestSchema` in the Payload contract). */
|
|
5
|
+
export const MAX_TITLE_LENGTH = 200;
|
|
6
|
+
/**
|
|
7
|
+
* The page name as a field that looks like a heading: Enter or leaving it saves, Escape puts the
|
|
8
|
+
* old name back, an empty name is not saved. The field grows with the name.
|
|
9
|
+
*/
|
|
10
|
+
export function EditableTitle({ title, onRename, disabled }) {
|
|
11
|
+
const t = useT();
|
|
12
|
+
const [draft, setDraft] = useState(title);
|
|
13
|
+
const editing = useRef(false);
|
|
14
|
+
const cancelled = useRef(false);
|
|
15
|
+
// A rename that came from elsewhere (a reload, another tab) replaces the text unless it is being typed.
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!editing.current)
|
|
18
|
+
setDraft(title);
|
|
19
|
+
}, [title]);
|
|
20
|
+
const commit = () => {
|
|
21
|
+
editing.current = false;
|
|
22
|
+
if (cancelled.current) {
|
|
23
|
+
cancelled.current = false;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const next = draft.trim();
|
|
27
|
+
if (next === '' || next === title) {
|
|
28
|
+
setDraft(title);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
setDraft(next);
|
|
32
|
+
onRename(next).catch(() => setDraft(title));
|
|
33
|
+
};
|
|
34
|
+
return (_jsx("input", { className: "bd-toolbar-title bd-title-input", value: draft, title: draft, size: Math.min(Math.max(draft.length, 8), 40), maxLength: MAX_TITLE_LENGTH, disabled: disabled === true, "aria-label": t('toolbar.title.rename'), autoComplete: "off", spellCheck: false, onFocus: (event) => {
|
|
35
|
+
editing.current = true;
|
|
36
|
+
event.currentTarget.select();
|
|
37
|
+
}, onChange: (event) => setDraft(event.target.value), onBlur: commit, onKeyDown: (event) => {
|
|
38
|
+
if (event.key === 'Enter')
|
|
39
|
+
event.currentTarget.blur();
|
|
40
|
+
else if (event.key === 'Escape') {
|
|
41
|
+
cancelled.current = true;
|
|
42
|
+
setDraft(title);
|
|
43
|
+
event.currentTarget.blur();
|
|
44
|
+
}
|
|
45
|
+
} }));
|
|
46
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-title.test.d.ts","sourceRoot":"","sources":["../../src/toolbar/editable-title.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment jsdom
|
|
3
|
+
import { act } from 'react';
|
|
4
|
+
import { createRoot } from 'react-dom/client';
|
|
5
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
+
import { MessagesProvider } from '../messages/index.js';
|
|
7
|
+
import { EditableTitle } from './editable-title.js';
|
|
8
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
9
|
+
let root;
|
|
10
|
+
afterEach(() => act(() => root?.unmount()));
|
|
11
|
+
const mount = async (onRename) => {
|
|
12
|
+
const container = document.createElement('div');
|
|
13
|
+
document.body.append(container);
|
|
14
|
+
root = createRoot(container);
|
|
15
|
+
await act(async () => root?.render(_jsx(MessagesProvider, { locale: "en", children: _jsx(EditableTitle, { title: "Home", onRename: onRename }) })));
|
|
16
|
+
const input = container.querySelector('input');
|
|
17
|
+
await act(async () => input.focus());
|
|
18
|
+
return input;
|
|
19
|
+
};
|
|
20
|
+
const type = async (input, text) => act(async () => {
|
|
21
|
+
Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(input, text);
|
|
22
|
+
input.dispatchEvent(new Event('input', { bubbles: true }));
|
|
23
|
+
});
|
|
24
|
+
const key = (input, name) => act(async () => {
|
|
25
|
+
input.dispatchEvent(new KeyboardEvent('keydown', { key: name, bubbles: true }));
|
|
26
|
+
});
|
|
27
|
+
describe('EditableTitle', () => {
|
|
28
|
+
it('saves a trimmed name on Enter', async () => {
|
|
29
|
+
const onRename = vi.fn().mockResolvedValue(undefined);
|
|
30
|
+
const input = await mount(onRename);
|
|
31
|
+
await type(input, ' About ');
|
|
32
|
+
await key(input, 'Enter');
|
|
33
|
+
expect(onRename).toHaveBeenCalledWith('About');
|
|
34
|
+
});
|
|
35
|
+
it('puts the old name back on Escape and never saves an empty name', async () => {
|
|
36
|
+
const onRename = vi.fn().mockResolvedValue(undefined);
|
|
37
|
+
const input = await mount(onRename);
|
|
38
|
+
await type(input, 'Other');
|
|
39
|
+
await key(input, 'Escape');
|
|
40
|
+
expect(input.value).toBe('Home');
|
|
41
|
+
await act(async () => input.focus());
|
|
42
|
+
await type(input, ' ');
|
|
43
|
+
await act(async () => input.blur());
|
|
44
|
+
expect(onRename).not.toHaveBeenCalled();
|
|
45
|
+
expect(input.value).toBe('Home');
|
|
46
|
+
});
|
|
47
|
+
it('reverts when the backend refuses', async () => {
|
|
48
|
+
const input = await mount(() => Promise.reject(new Error('no')));
|
|
49
|
+
await type(input, 'Nope');
|
|
50
|
+
await key(input, 'Enter');
|
|
51
|
+
expect(input.value).toBe('Home');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type { LocaleSwitcherProps } from './locale-switcher.tsx';
|
|
2
|
+
export { LocaleSwitcher } from './locale-switcher.tsx';
|
|
3
|
+
export type { PublishDialogProps } from './publish-dialog.tsx';
|
|
4
|
+
export { PublishDialog } from './publish-dialog.tsx';
|
|
5
|
+
export type { SamplePickerProps } from './sample-picker.tsx';
|
|
6
|
+
export { DEFAULT_SAMPLE, SamplePicker } from './sample-picker.tsx';
|
|
7
|
+
export type { ThemePreference, ThemeState } from './theme.tsx';
|
|
8
|
+
export { THEME_STORAGE_KEY, ThemeProvider, useTheme, useThemePreference } from './theme.tsx';
|
|
9
|
+
export type { ToolbarProps } from './toolbar.tsx';
|
|
10
|
+
export { Toolbar } from './toolbar.tsx';
|
|
11
|
+
export type { Zoom } from './zoom-menu.tsx';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toolbar/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { LocaleSwitcher } from './locale-switcher.js';
|
|
2
|
+
export { PublishDialog } from './publish-dialog.js';
|
|
3
|
+
export { DEFAULT_SAMPLE, SamplePicker } from './sample-picker.js';
|
|
4
|
+
export { THEME_STORAGE_KEY, ThemeProvider, useTheme, useThemePreference } from './theme.js';
|
|
5
|
+
export { Toolbar } from './toolbar.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface LocaleSwitcherProps {
|
|
2
|
+
/** Tells the canvas which language to render (`CanvasHost.setLocale`). */
|
|
3
|
+
readonly onChange?: ((locale: string) => void) | undefined;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Chooses the language of the content being edited (docs/editor.md#content-language). Renders
|
|
7
|
+
* nothing when there is only one language.
|
|
8
|
+
*/
|
|
9
|
+
export declare function LocaleSwitcher({ onChange }: LocaleSwitcherProps): import("react").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=locale-switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-switcher.d.ts","sourceRoot":"","sources":["../../src/toolbar/locale-switcher.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,sCAiB/D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useT } from '../messages/index.js';
|
|
3
|
+
import { useLocaleState } from '../store/index.js';
|
|
4
|
+
import { Select } from '../ui/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Chooses the language of the content being edited (docs/editor.md#content-language). Renders
|
|
7
|
+
* nothing when there is only one language.
|
|
8
|
+
*/
|
|
9
|
+
export function LocaleSwitcher({ onChange }) {
|
|
10
|
+
const t = useT();
|
|
11
|
+
const config = useLocaleState((state) => state.config);
|
|
12
|
+
const locale = useLocaleState((state) => state.locale);
|
|
13
|
+
const setLocale = useLocaleState((state) => state.setLocale);
|
|
14
|
+
if (config.locales.length < 2)
|
|
15
|
+
return null;
|
|
16
|
+
return (_jsx(Select, { label: t('locale.label'), value: locale, onValueChange: (next) => {
|
|
17
|
+
setLocale(next);
|
|
18
|
+
onChange?.(next);
|
|
19
|
+
}, options: config.locales.map((code) => ({ value: code, label: config.intl[code] ?? code })) }));
|
|
20
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface MoreMenuProps {
|
|
2
|
+
/** The version history in the CMS; listed here only when it no longer fits the row. */
|
|
3
|
+
readonly historyUrl?: string | undefined;
|
|
4
|
+
/** The page in the CMS; listed here only when it no longer fits the row. */
|
|
5
|
+
readonly cmsUrl?: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The `more` menu: the theme switch (hidden when the host fixes the theme), the shortcuts help, and
|
|
9
|
+
* the links the row had no room for. Renders nothing when it would be empty.
|
|
10
|
+
*/
|
|
11
|
+
export declare function MoreMenu({ historyUrl, cmsUrl }: MoreMenuProps): import("react").JSX.Element | null;
|
|
12
|
+
//# sourceMappingURL=more-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"more-menu.d.ts","sourceRoot":"","sources":["../../src/toolbar/more-menu.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAyBD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,aAAa,sCAkE7D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { useT } from '../messages/index.js';
|
|
4
|
+
import { useOptionalShortcutRegistry } from '../shortcuts/index.js';
|
|
5
|
+
import { Icon, IconButton, Popover } from '../ui/index.js';
|
|
6
|
+
import { useTheme } from './theme.js';
|
|
7
|
+
const THEMES = [
|
|
8
|
+
{ value: 'light', icon: 'sun' },
|
|
9
|
+
{ value: 'dark', icon: 'moon' },
|
|
10
|
+
{ value: 'system', icon: 'monitor' },
|
|
11
|
+
];
|
|
12
|
+
/** A canonical combination (`shift+?`) as the key press the registry handles. */
|
|
13
|
+
function inputOf(combo, platform) {
|
|
14
|
+
const parts = combo.split('+');
|
|
15
|
+
const key = parts.pop() ?? '';
|
|
16
|
+
const has = (name) => parts.includes(name);
|
|
17
|
+
const primary = has('mod');
|
|
18
|
+
return {
|
|
19
|
+
key,
|
|
20
|
+
mods: {
|
|
21
|
+
shift: has('shift'),
|
|
22
|
+
alt: has('alt'),
|
|
23
|
+
ctrl: has('ctrl') || (primary && platform === 'other'),
|
|
24
|
+
meta: has('meta') || (primary && platform === 'mac'),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The `more` menu: the theme switch (hidden when the host fixes the theme), the shortcuts help, and
|
|
30
|
+
* the links the row had no room for. Renders nothing when it would be empty.
|
|
31
|
+
*/
|
|
32
|
+
export function MoreMenu({ historyUrl, cmsUrl }) {
|
|
33
|
+
const t = useT();
|
|
34
|
+
const theme = useTheme();
|
|
35
|
+
const registry = useOptionalShortcutRegistry();
|
|
36
|
+
const [open, setOpen] = useState(false);
|
|
37
|
+
const helpCombo = registry?.keysFor('help.shortcuts')[0];
|
|
38
|
+
const showTheme = theme !== undefined && !theme.forced;
|
|
39
|
+
if (historyUrl === undefined && cmsUrl === undefined && helpCombo === undefined && !showTheme) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return (_jsx(Popover, { open: open, onOpenChange: setOpen, align: "end", contentClassName: "bd-menu-popover", label: t('toolbar.more'), trigger: _jsx(IconButton, { label: t('toolbar.more'), icon: "ellipsis", variant: "ghost" }), children: _jsxs("div", { className: "bd-menu-list", children: [cmsUrl !== undefined && (_jsxs("a", { className: "bd-menu-item", href: cmsUrl, children: [_jsx(Icon, { name: "arrow-left" }), " ", t('toolbar.back')] })), historyUrl !== undefined && (_jsxs("a", { className: "bd-menu-item", href: historyUrl, children: [_jsx(Icon, { name: "history" }), " ", t('toolbar.versions')] })), registry !== undefined && helpCombo !== undefined && (_jsxs("button", { type: "button", className: "bd-menu-item", onClick: () => {
|
|
43
|
+
setOpen(false);
|
|
44
|
+
// The help dialog belongs to the shortcut provider, which opens it on its own key.
|
|
45
|
+
registry.handle(inputOf(helpCombo, registry.platform), { typing: false });
|
|
46
|
+
}, children: [_jsx(Icon, { name: "keyboard" }), " ", t('shortcut.title')] })), showTheme && (_jsxs("fieldset", { className: "bd-menu-group", "aria-label": t('toolbar.theme'), children: [_jsx("legend", { className: "bd-menu-label", children: t('toolbar.theme') }), _jsx("div", { className: "bd-segmented", children: THEMES.map((item) => (_jsxs("button", { type: "button", className: "bd-button bd-segment", "data-variant": "ghost", "aria-pressed": theme.preference === item.value, onClick: () => theme.setPreference(item.value), children: [_jsx(Icon, { name: item.icon }), " ", t(`toolbar.theme.${item.value}`)] }, item.value))) })] }))] }) }));
|
|
47
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type PanelSide } from '../app/shell-panels.tsx';
|
|
2
|
+
/**
|
|
3
|
+
* The button that opens or closes one side panel while the editor is narrow (PB-122). It renders
|
|
4
|
+
* nothing when the panels sit beside the canvas.
|
|
5
|
+
*/
|
|
6
|
+
export declare function PanelToggle({ side }: {
|
|
7
|
+
readonly side: PanelSide;
|
|
8
|
+
}): import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=panel-toggles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel-toggles.d.ts","sourceRoot":"","sources":["../../src/toolbar/panel-toggles.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AASzE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,sCAajE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useShellPanels } from '../app/shell-panels.js';
|
|
3
|
+
import { useT } from '../messages/index.js';
|
|
4
|
+
import { IconButton } from '../ui/index.js';
|
|
5
|
+
const LABELS = {
|
|
6
|
+
left: 'editor.panels.left',
|
|
7
|
+
right: 'editor.panels.right',
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The button that opens or closes one side panel while the editor is narrow (PB-122). It renders
|
|
11
|
+
* nothing when the panels sit beside the canvas.
|
|
12
|
+
*/
|
|
13
|
+
export function PanelToggle({ side }) {
|
|
14
|
+
const t = useT();
|
|
15
|
+
const panels = useShellPanels();
|
|
16
|
+
if (panels === undefined || !panels.narrow)
|
|
17
|
+
return null;
|
|
18
|
+
return (_jsx(IconButton, { label: t(LABELS[side]), icon: side === 'left' ? 'panel-left' : 'panel-right', variant: "ghost", "aria-pressed": panels.open[side], onClick: () => panels.toggle(side) }));
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Diagnostic } from '@next-buildr/core';
|
|
2
|
+
import { type PublishPolicy } from '../panels/issues/index.ts';
|
|
3
|
+
export interface PublishDialogProps {
|
|
4
|
+
readonly open: boolean;
|
|
5
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
6
|
+
/** `block` refuses to publish while errors exist; `warn` (the default) only says so. */
|
|
7
|
+
readonly policy?: PublishPolicy | undefined;
|
|
8
|
+
readonly canvasDiagnostics?: readonly Diagnostic[] | undefined;
|
|
9
|
+
/** Called after the backend accepted the publication. */
|
|
10
|
+
readonly onPublished?: (() => void) | undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The publish dialog (docs/editor.md#issues-and-publishing): re-runs the checks, summarises what
|
|
14
|
+
* they found, applies the publish policy, says that publishing replaces the live page as a whole,
|
|
15
|
+
* and publishes after saving whatever is unsaved (`PersistenceController.publish`).
|
|
16
|
+
*/
|
|
17
|
+
export declare function PublishDialog(props: PublishDialogProps): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=publish-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-dialog.d.ts","sourceRoot":"","sources":["../../src/toolbar/publish-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,2BAA2B,CAAC;AAKnC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,wFAAwF;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAAC;IAC/D,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACjD;AASD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAkFtD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useT } from '../messages/index.js';
|
|
4
|
+
import { publishGate, SEVERITY_ICON, useIssues, } from '../panels/issues/index.js';
|
|
5
|
+
import { usePersistence, usePersistenceState } from '../persistence/index.js';
|
|
6
|
+
import { useEditor, useEditorState } from '../store/index.js';
|
|
7
|
+
import { Button, Dialog, Icon } from '../ui/index.js';
|
|
8
|
+
const FAILURE_KEY = {
|
|
9
|
+
conflict: 'publish.failed.conflict',
|
|
10
|
+
invalid: 'publish.failed.invalid',
|
|
11
|
+
unsaved: 'publish.failed.unsaved',
|
|
12
|
+
network: 'publish.failed.network',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* The publish dialog (docs/editor.md#issues-and-publishing): re-runs the checks, summarises what
|
|
16
|
+
* they found, applies the publish policy, says that publishing replaces the live page as a whole,
|
|
17
|
+
* and publishes after saving whatever is unsaved (`PersistenceController.publish`).
|
|
18
|
+
*/
|
|
19
|
+
export function PublishDialog(props) {
|
|
20
|
+
const { open, onOpenChange, policy, canvasDiagnostics, onPublished } = props;
|
|
21
|
+
const t = useT();
|
|
22
|
+
const store = useEditor();
|
|
23
|
+
const persistence = usePersistence();
|
|
24
|
+
const readOnly = useEditorState((state) => state.readOnly);
|
|
25
|
+
const status = usePersistenceState((state) => state.status);
|
|
26
|
+
const items = useIssues(canvasDiagnostics);
|
|
27
|
+
const gate = publishGate(items, policy);
|
|
28
|
+
const [working, setWorking] = useState(false);
|
|
29
|
+
const [outcome, setOutcome] = useState();
|
|
30
|
+
// The checks run a moment after the last edit; the dialog must not judge an older document.
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!open)
|
|
33
|
+
return;
|
|
34
|
+
setOutcome(undefined);
|
|
35
|
+
store.validateNow();
|
|
36
|
+
}, [open, store]);
|
|
37
|
+
const publish = async () => {
|
|
38
|
+
setWorking(true);
|
|
39
|
+
setOutcome(undefined);
|
|
40
|
+
store.validateNow();
|
|
41
|
+
const result = await persistence.publish();
|
|
42
|
+
setWorking(false);
|
|
43
|
+
setOutcome(result);
|
|
44
|
+
if (result.ok)
|
|
45
|
+
onPublished?.();
|
|
46
|
+
};
|
|
47
|
+
const done = outcome?.ok === true;
|
|
48
|
+
return (_jsxs(Dialog, { open: open, onOpenChange: onOpenChange, title: t('publish.title'), description: t('publish.description'), footer: _jsx(Button, { variant: "primary", disabled: gate.blocked || readOnly || working || done || status === 'conflict', onClick: () => void publish(), children: working ? t('publish.working') : t('toolbar.publish') }), children: [_jsx("p", { className: "bd-publish-notice", children: t('publish.notice') }), _jsx("ul", { className: "bd-publish-summary", "aria-label": t('publish.summary'), children: ['error', 'warning', 'info'].map((severity) => (_jsxs("li", { className: "bd-publish-badge", "data-severity": severity, children: [_jsx(Icon, { name: SEVERITY_ICON[severity] }), _jsx("span", { "aria-hidden": "true", children: gate.counts[severity] }), _jsx("span", { className: "bd-visually-hidden", children: t(`publish.count.${severity}`).replace('{count}', String(gate.counts[severity])) })] }, severity))) }), gate.blocked ? (_jsx("p", { role: "alert", className: "bd-publish-blocked", children: t(gate.reason === 'blocking' ? 'publish.blocked.corrupt' : 'publish.blocked.errors') })) : gate.counts.error + gate.counts.warning > 0 ? (_jsx("p", { className: "bd-field-hint", children: t('publish.warn') })) : null, status === 'conflict' ? (_jsx("p", { role: "alert", className: "bd-publish-blocked", children: t('publish.failed.conflict') })) : null, outcome !== undefined && !outcome.ok ? (_jsx("p", { role: "alert", className: "bd-publish-blocked", children: t(FAILURE_KEY[outcome.kind]) })) : null, done ? (_jsx("p", { role: "status", className: "bd-publish-done", children: t('publish.done') })) : null] }));
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.test.d.ts","sourceRoot":"","sources":["../../src/toolbar/publish.test.tsx"],"names":[],"mappings":""}
|