@kywi-software/core 0.13.0 → 0.15.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/AGENT-PATTERNS.md +153 -17
- package/README.md +38 -12
- package/dist/admin/chrome.d.ts.map +1 -1
- package/dist/admin/chrome.js +57 -8
- package/dist/admin/chrome.js.map +1 -1
- package/dist/admin/field-components.d.ts.map +1 -1
- package/dist/admin/field-components.js +27 -1
- package/dist/admin/field-components.js.map +1 -1
- package/dist/admin/form-helpers.d.ts.map +1 -1
- package/dist/admin/form-helpers.js +6 -1
- package/dist/admin/form-helpers.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/layout-editor/chrome-env.d.ts +35 -0
- package/dist/admin/layout-editor/chrome-env.d.ts.map +1 -0
- package/dist/admin/layout-editor/chrome-env.js +13 -0
- package/dist/admin/layout-editor/chrome-env.js.map +1 -0
- package/dist/admin/layout-editor/component-actions.d.ts +58 -7
- package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-actions.js +131 -5
- package/dist/admin/layout-editor/component-actions.js.map +1 -1
- package/dist/admin/layout-editor/component-fork.d.ts +4 -4
- package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-fork.js +76 -10
- package/dist/admin/layout-editor/component-fork.js.map +1 -1
- package/dist/admin/layout-editor/component-picker-field.d.ts +17 -3
- package/dist/admin/layout-editor/component-picker-field.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-picker-field.js +5 -2
- package/dist/admin/layout-editor/component-picker-field.js.map +1 -1
- package/dist/admin/layout-editor/drag-feedback.d.ts +25 -1
- package/dist/admin/layout-editor/drag-feedback.d.ts.map +1 -1
- package/dist/admin/layout-editor/drag-feedback.js +9 -0
- package/dist/admin/layout-editor/drag-feedback.js.map +1 -1
- package/dist/admin/layout-editor/drag-utils.d.ts +103 -5
- package/dist/admin/layout-editor/drag-utils.d.ts.map +1 -1
- package/dist/admin/layout-editor/drag-utils.js +131 -4
- package/dist/admin/layout-editor/drag-utils.js.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts +11 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +134 -20
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-dialog.d.ts +58 -3
- package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-dialog.js +71 -9
- package/dist/admin/layout-editor/editor-dialog.js.map +1 -1
- package/dist/admin/layout-editor/editor-state.d.ts +119 -0
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +188 -6
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor-toolbar.d.ts +10 -1
- package/dist/admin/layout-editor/editor-toolbar.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-toolbar.js +2 -2
- package/dist/admin/layout-editor/editor-toolbar.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +216 -8
- package/dist/admin/layout-editor/inline-text.d.ts +15 -1
- package/dist/admin/layout-editor/inline-text.d.ts.map +1 -1
- package/dist/admin/layout-editor/inline-text.js +30 -2
- package/dist/admin/layout-editor/inline-text.js.map +1 -1
- package/dist/admin/layout-editor/layout-editor.d.ts +21 -16
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +40 -17
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/linked-component-notes.d.ts +88 -0
- package/dist/admin/layout-editor/linked-component-notes.d.ts.map +1 -0
- package/dist/admin/layout-editor/linked-component-notes.js +88 -0
- package/dist/admin/layout-editor/linked-component-notes.js.map +1 -0
- package/dist/admin/layout-editor/module-overlay.d.ts +23 -4
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +56 -10
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-config.js +9 -2
- package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-panel.d.ts +75 -0
- package/dist/admin/layout-editor/module-variant-container-panel.d.ts.map +1 -0
- package/dist/admin/layout-editor/module-variant-container-panel.js +29 -0
- package/dist/admin/layout-editor/module-variant-container-panel.js.map +1 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
- package/dist/admin/layout-editor/node-lookup.js +33 -3
- package/dist/admin/layout-editor/node-lookup.js.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +19 -4
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +28 -11
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +75 -125
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.js +11 -2
- package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/use-chrome-flip.d.ts +99 -11
- package/dist/admin/layout-editor/use-chrome-flip.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-chrome-flip.js +268 -97
- package/dist/admin/layout-editor/use-chrome-flip.js.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.d.ts +13 -0
- package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.js +116 -20
- package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
- package/dist/admin/layout-editor/use-component-fork.d.ts +49 -19
- package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-fork.js +28 -19
- package/dist/admin/layout-editor/use-component-fork.js.map +1 -1
- package/dist/admin/layout-editor/use-component-library.d.ts +4 -4
- package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-library.js +1 -1
- package/dist/admin/layout-editor/use-component-library.js.map +1 -1
- package/dist/admin/layout-editor/use-editor-dnd.d.ts +10 -0
- package/dist/admin/layout-editor/use-editor-dnd.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-editor-dnd.js +234 -14
- package/dist/admin/layout-editor/use-editor-dnd.js.map +1 -1
- package/dist/admin/layout-editor/variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/variant-container-config.js +1 -1
- package/dist/admin/layout-editor/variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/variant-editor.d.ts +16 -15
- package/dist/admin/layout-editor/variant-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/variant-editor.js +16 -5
- package/dist/admin/layout-editor/variant-editor.js.map +1 -1
- package/dist/admin/primitives.d.ts.map +1 -1
- package/dist/admin/primitives.js +1 -1
- package/dist/admin/primitives.js.map +1 -1
- package/dist/admin/registry.d.ts +24 -2
- package/dist/admin/registry.d.ts.map +1 -1
- package/dist/admin/registry.js +27 -0
- package/dist/admin/registry.js.map +1 -1
- package/dist/admin/server.d.ts +10 -1
- package/dist/admin/server.d.ts.map +1 -1
- package/dist/admin/server.js +4 -1
- package/dist/admin/server.js.map +1 -1
- package/dist/admin/site-switcher.d.ts +16 -3
- package/dist/admin/site-switcher.d.ts.map +1 -1
- package/dist/admin/site-switcher.js +18 -3
- package/dist/admin/site-switcher.js.map +1 -1
- package/dist/admin/styles/admin.css +0 -3
- package/dist/admin/surface-matcher.d.ts +6 -2
- package/dist/admin/surface-matcher.d.ts.map +1 -1
- package/dist/admin/surface-matcher.js +42 -5
- package/dist/admin/surface-matcher.js.map +1 -1
- package/dist/admin/surfaces/account/account-password.d.ts +3 -0
- package/dist/admin/surfaces/account/account-password.d.ts.map +1 -0
- package/dist/admin/surfaces/account/account-password.js +58 -0
- package/dist/admin/surfaces/account/account-password.js.map +1 -0
- package/dist/admin/surfaces/components/components-data.d.ts +31 -11
- package/dist/admin/surfaces/components/components-data.d.ts.map +1 -1
- package/dist/admin/surfaces/components/components-data.js +17 -4
- package/dist/admin/surfaces/components/components-data.js.map +1 -1
- package/dist/admin/surfaces/components/components-list.d.ts.map +1 -1
- package/dist/admin/surfaces/components/components-list.js +20 -7
- package/dist/admin/surfaces/components/components-list.js.map +1 -1
- package/dist/admin/surfaces/components/definition-canvas.d.ts +11 -3
- package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
- package/dist/admin/surfaces/components/definition-canvas.js +138 -17
- package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
- package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
- package/dist/admin/surfaces/dashboard/dashboard-index.js +2 -2
- package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.js +12 -11
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
- package/dist/admin/surfaces/login.d.ts.map +1 -1
- package/dist/admin/surfaces/login.js +13 -1
- package/dist/admin/surfaces/login.js.map +1 -1
- package/dist/admin/surfaces/menus/menu-editor.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menu-editor.js +17 -4
- package/dist/admin/surfaces/menus/menu-editor.js.map +1 -1
- package/dist/admin/surfaces/menus/menu-tree.d.ts +18 -4
- package/dist/admin/surfaces/menus/menu-tree.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menu-tree.js +18 -3
- package/dist/admin/surfaces/menus/menu-tree.js.map +1 -1
- package/dist/admin/surfaces/menus/menus-data.d.ts +18 -0
- package/dist/admin/surfaces/menus/menus-data.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menus-data.js +4 -0
- package/dist/admin/surfaces/menus/menus-data.js.map +1 -1
- package/dist/admin/surfaces/menus/menus-list.d.ts.map +1 -1
- package/dist/admin/surfaces/menus/menus-list.js +2 -12
- package/dist/admin/surfaces/menus/menus-list.js.map +1 -1
- package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -1
- package/dist/admin/surfaces/settings/admin-features.js +12 -1
- package/dist/admin/surfaces/settings/admin-features.js.map +1 -1
- package/dist/admin/surfaces/users/users-data.d.ts +16 -0
- package/dist/admin/surfaces/users/users-data.d.ts.map +1 -1
- package/dist/admin/surfaces/users/users-data.js +19 -0
- package/dist/admin/surfaces/users/users-data.js.map +1 -1
- package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -1
- package/dist/admin/surfaces/users/users-detail.js +87 -6
- package/dist/admin/surfaces/users/users-detail.js.map +1 -1
- package/dist/admin/surfaces/users/users-new.d.ts.map +1 -1
- package/dist/admin/surfaces/users/users-new.js +9 -5
- package/dist/admin/surfaces/users/users-new.js.map +1 -1
- package/dist/admin/user-form.d.ts +13 -2
- package/dist/admin/user-form.d.ts.map +1 -1
- package/dist/admin/user-form.js +3 -2
- package/dist/admin/user-form.js.map +1 -1
- package/dist/api/admin-features-routes.js +2 -2
- package/dist/api/admin-features-routes.js.map +1 -1
- package/dist/api/audience-preview-routes.d.ts +7 -0
- package/dist/api/audience-preview-routes.d.ts.map +1 -1
- package/dist/api/audience-preview-routes.js +4 -4
- package/dist/api/audience-preview-routes.js.map +1 -1
- package/dist/api/audience-routes.d.ts +7 -0
- package/dist/api/audience-routes.d.ts.map +1 -1
- package/dist/api/audience-routes.js +21 -15
- package/dist/api/audience-routes.js.map +1 -1
- package/dist/api/audience-runtime-routes.d.ts +6 -0
- package/dist/api/audience-runtime-routes.d.ts.map +1 -1
- package/dist/api/audience-runtime-routes.js +38 -3
- package/dist/api/audience-runtime-routes.js.map +1 -1
- package/dist/api/auth-routes.d.ts.map +1 -1
- package/dist/api/auth-routes.js +33 -4
- package/dist/api/auth-routes.js.map +1 -1
- package/dist/api/auth.d.ts +1 -0
- package/dist/api/auth.d.ts.map +1 -1
- package/dist/api/auth.js +43 -3
- package/dist/api/auth.js.map +1 -1
- package/dist/api/bulk-routes.d.ts.map +1 -1
- package/dist/api/bulk-routes.js +7 -7
- package/dist/api/bulk-routes.js.map +1 -1
- package/dist/api/category-routes.js +3 -3
- package/dist/api/category-routes.js.map +1 -1
- package/dist/api/comment-routes.js +8 -8
- package/dist/api/comment-routes.js.map +1 -1
- package/dist/api/component-routes.d.ts +25 -0
- package/dist/api/component-routes.d.ts.map +1 -1
- package/dist/api/component-routes.js +41 -16
- package/dist/api/component-routes.js.map +1 -1
- package/dist/api/content-routes.js +13 -13
- package/dist/api/content-routes.js.map +1 -1
- package/dist/api/dashboard-routes.js +1 -1
- package/dist/api/dashboard-routes.js.map +1 -1
- package/dist/api/experiment-routes.d.ts +7 -0
- package/dist/api/experiment-routes.d.ts.map +1 -1
- package/dist/api/experiment-routes.js +8 -8
- package/dist/api/experiment-routes.js.map +1 -1
- package/dist/api/experiment-runtime-routes.d.ts +6 -0
- package/dist/api/experiment-runtime-routes.d.ts.map +1 -1
- package/dist/api/experiment-runtime-routes.js +47 -11
- package/dist/api/experiment-runtime-routes.js.map +1 -1
- package/dist/api/feed-routes.d.ts +2 -2
- package/dist/api/feed-routes.js +3 -3
- package/dist/api/feed-routes.js.map +1 -1
- package/dist/api/form-routes.js +4 -4
- package/dist/api/form-routes.js.map +1 -1
- package/dist/api/graphql/resolvers.d.ts +1 -1
- package/dist/api/graphql/resolvers.d.ts.map +1 -1
- package/dist/api/graphql/resolvers.js +68 -33
- package/dist/api/graphql/resolvers.js.map +1 -1
- package/dist/api/group-routes.js +6 -6
- package/dist/api/group-routes.js.map +1 -1
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +97 -7
- package/dist/api/index.js.map +1 -1
- package/dist/api/layout-routes.d.ts.map +1 -1
- package/dist/api/layout-routes.js +27 -3
- package/dist/api/layout-routes.js.map +1 -1
- package/dist/api/media-routes.d.ts.map +1 -1
- package/dist/api/media-routes.js +50 -26
- package/dist/api/media-routes.js.map +1 -1
- package/dist/api/menu-routes.d.ts +9 -1
- package/dist/api/menu-routes.d.ts.map +1 -1
- package/dist/api/menu-routes.js +44 -10
- package/dist/api/menu-routes.js.map +1 -1
- package/dist/api/nav-routes.d.ts +6 -0
- package/dist/api/nav-routes.d.ts.map +1 -1
- package/dist/api/nav-routes.js +24 -3
- package/dist/api/nav-routes.js.map +1 -1
- package/dist/api/openapi.d.ts.map +1 -1
- package/dist/api/openapi.js +68 -33
- package/dist/api/openapi.js.map +1 -1
- package/dist/api/password-gate.d.ts +23 -0
- package/dist/api/password-gate.d.ts.map +1 -0
- package/dist/api/password-gate.js +41 -0
- package/dist/api/password-gate.js.map +1 -0
- package/dist/api/password-reset-routes.d.ts.map +1 -1
- package/dist/api/password-reset-routes.js +13 -6
- package/dist/api/password-reset-routes.js.map +1 -1
- package/dist/api/search-routes.js +2 -2
- package/dist/api/search-routes.js.map +1 -1
- package/dist/api/section-template-routes.d.ts.map +1 -1
- package/dist/api/section-template-routes.js +35 -18
- package/dist/api/section-template-routes.js.map +1 -1
- package/dist/api/site-admin-routes.d.ts +10 -1
- package/dist/api/site-admin-routes.d.ts.map +1 -1
- package/dist/api/site-admin-routes.js +21 -1
- package/dist/api/site-admin-routes.js.map +1 -1
- package/dist/api/site-context.d.ts +35 -5
- package/dist/api/site-context.d.ts.map +1 -1
- package/dist/api/site-context.js +21 -6
- package/dist/api/site-context.js.map +1 -1
- package/dist/api/tag-routes.js +3 -3
- package/dist/api/tag-routes.js.map +1 -1
- package/dist/api/translation-routes.js +5 -5
- package/dist/api/translation-routes.js.map +1 -1
- package/dist/api/user-routes.d.ts +4 -0
- package/dist/api/user-routes.d.ts.map +1 -1
- package/dist/api/user-routes.js +240 -17
- package/dist/api/user-routes.js.map +1 -1
- package/dist/api/webhook-routes.js +5 -5
- package/dist/api/webhook-routes.js.map +1 -1
- package/dist/api/workflow-routes.js +8 -8
- package/dist/api/workflow-routes.js.map +1 -1
- package/dist/audiences/collectors/identity.d.ts +14 -1
- package/dist/audiences/collectors/identity.d.ts.map +1 -1
- package/dist/audiences/collectors/identity.js +16 -3
- package/dist/audiences/collectors/identity.js.map +1 -1
- package/dist/audiences/collectors/index.d.ts +12 -2
- package/dist/audiences/collectors/index.d.ts.map +1 -1
- package/dist/audiences/collectors/index.js +16 -5
- package/dist/audiences/collectors/index.js.map +1 -1
- package/dist/audiences/collectors/pinned-audience.d.ts +28 -2
- package/dist/audiences/collectors/pinned-audience.d.ts.map +1 -1
- package/dist/audiences/collectors/pinned-audience.js +35 -5
- package/dist/audiences/collectors/pinned-audience.js.map +1 -1
- package/dist/audiences/collectors/utm.d.ts +15 -1
- package/dist/audiences/collectors/utm.d.ts.map +1 -1
- package/dist/audiences/collectors/utm.js +16 -2
- package/dist/audiences/collectors/utm.js.map +1 -1
- package/dist/audiences/consent-config.d.ts +21 -0
- package/dist/audiences/consent-config.d.ts.map +1 -0
- package/dist/audiences/consent-config.js +15 -0
- package/dist/audiences/consent-config.js.map +1 -0
- package/dist/audiences/consent-startup.d.ts +39 -0
- package/dist/audiences/consent-startup.d.ts.map +1 -0
- package/dist/audiences/consent-startup.js +105 -0
- package/dist/audiences/consent-startup.js.map +1 -0
- package/dist/audiences/consent.d.ts +192 -0
- package/dist/audiences/consent.d.ts.map +1 -0
- package/dist/audiences/consent.js +322 -0
- package/dist/audiences/consent.js.map +1 -0
- package/dist/audiences/engine.d.ts +7 -0
- package/dist/audiences/engine.d.ts.map +1 -1
- package/dist/audiences/engine.js +6 -2
- package/dist/audiences/engine.js.map +1 -1
- package/dist/audiences/index.d.ts +3 -0
- package/dist/audiences/index.d.ts.map +1 -1
- package/dist/audiences/index.js +6 -0
- package/dist/audiences/index.js.map +1 -1
- package/dist/audiences/server-eval.d.ts +13 -1
- package/dist/audiences/server-eval.d.ts.map +1 -1
- package/dist/audiences/server-eval.js +18 -2
- package/dist/audiences/server-eval.js.map +1 -1
- package/dist/audiences/ssr.d.ts +18 -1
- package/dist/audiences/ssr.d.ts.map +1 -1
- package/dist/audiences/ssr.js +18 -1
- package/dist/audiences/ssr.js.map +1 -1
- package/dist/audiences/utm-persistence.d.ts +20 -7
- package/dist/audiences/utm-persistence.d.ts.map +1 -1
- package/dist/audiences/utm-persistence.js +20 -7
- package/dist/audiences/utm-persistence.js.map +1 -1
- package/dist/auth/roles.d.ts +11 -0
- package/dist/auth/roles.d.ts.map +1 -1
- package/dist/auth/roles.js +13 -0
- package/dist/auth/roles.js.map +1 -1
- package/dist/auth/tokens.d.ts +7 -0
- package/dist/auth/tokens.d.ts.map +1 -1
- package/dist/auth/tokens.js +24 -2
- package/dist/auth/tokens.js.map +1 -1
- package/dist/config/types.d.ts +50 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +3 -0
- package/dist/config/validate.js.map +1 -1
- package/dist/db/apply-snapshot.d.ts +18 -0
- package/dist/db/apply-snapshot.d.ts.map +1 -1
- package/dist/db/apply-snapshot.js +41 -16
- package/dist/db/apply-snapshot.js.map +1 -1
- package/dist/db/component-instance-queries.d.ts +79 -19
- package/dist/db/component-instance-queries.d.ts.map +1 -1
- package/dist/db/component-instance-queries.js +266 -83
- package/dist/db/component-instance-queries.js.map +1 -1
- package/dist/db/component-queries.d.ts +1 -16
- package/dist/db/component-queries.d.ts.map +1 -1
- package/dist/db/component-queries.js +7 -56
- package/dist/db/component-queries.js.map +1 -1
- package/dist/db/content-queries.d.ts.map +1 -1
- package/dist/db/content-queries.js +1 -2
- package/dist/db/content-queries.js.map +1 -1
- package/dist/db/extension-queries.d.ts +2 -2
- package/dist/db/feed-queries.d.ts +3 -3
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/layout-queries.d.ts +2 -1
- package/dist/db/layout-queries.d.ts.map +1 -1
- package/dist/db/layout-queries.js +3 -3
- package/dist/db/layout-queries.js.map +1 -1
- package/dist/db/menu-queries.d.ts +69 -5
- package/dist/db/menu-queries.d.ts.map +1 -1
- package/dist/db/menu-queries.js +120 -13
- package/dist/db/menu-queries.js.map +1 -1
- package/dist/db/section-template-queries.d.ts +62 -0
- package/dist/db/section-template-queries.d.ts.map +1 -0
- package/dist/db/section-template-queries.js +178 -0
- package/dist/db/section-template-queries.js.map +1 -0
- package/dist/db/site-plugin-queries.d.ts +2 -2
- package/dist/db/tree-queries.d.ts.map +1 -1
- package/dist/db/tree-queries.js +5 -0
- package/dist/db/tree-queries.js.map +1 -1
- package/dist/db/user-queries.d.ts +28 -1
- package/dist/db/user-queries.d.ts.map +1 -1
- package/dist/db/user-queries.js +49 -1
- package/dist/db/user-queries.js.map +1 -1
- package/dist/db/webhook-queries.d.ts +3 -3
- package/dist/db/workflow-queries.d.ts.map +1 -1
- package/dist/db/workflow-queries.js +5 -20
- package/dist/db/workflow-queries.js.map +1 -1
- package/dist/experiments/runtime.d.ts +21 -3
- package/dist/experiments/runtime.d.ts.map +1 -1
- package/dist/experiments/runtime.js +21 -3
- package/dist/experiments/runtime.js.map +1 -1
- package/dist/host/index.d.ts +1 -0
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +12 -0
- package/dist/host/index.js.map +1 -1
- package/dist/layout/component-refs.d.ts +90 -2
- package/dist/layout/component-refs.d.ts.map +1 -1
- package/dist/layout/component-refs.js +293 -16
- package/dist/layout/component-refs.js.map +1 -1
- package/dist/layout/index.d.ts +4 -3
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +3 -2
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/legacy-variant-container.d.ts +123 -0
- package/dist/layout/legacy-variant-container.d.ts.map +1 -0
- package/dist/layout/legacy-variant-container.js +397 -0
- package/dist/layout/legacy-variant-container.js.map +1 -0
- package/dist/layout/module-permissions.d.ts.map +1 -1
- package/dist/layout/module-permissions.js +25 -1
- package/dist/layout/module-permissions.js.map +1 -1
- package/dist/layout/modules-extended.d.ts +28 -1
- package/dist/layout/modules-extended.d.ts.map +1 -1
- package/dist/layout/modules-extended.js +73 -1
- package/dist/layout/modules-extended.js.map +1 -1
- package/dist/layout/modules.d.ts.map +1 -1
- package/dist/layout/modules.js +9 -1
- package/dist/layout/modules.js.map +1 -1
- package/dist/layout/personalization.d.ts +83 -0
- package/dist/layout/personalization.d.ts.map +1 -1
- package/dist/layout/personalization.js +250 -4
- package/dist/layout/personalization.js.map +1 -1
- package/dist/layout/registry.d.ts.map +1 -1
- package/dist/layout/registry.js +20 -0
- package/dist/layout/registry.js.map +1 -1
- package/dist/layout/renderer.d.ts +29 -2
- package/dist/layout/renderer.d.ts.map +1 -1
- package/dist/layout/renderer.js +23 -6
- package/dist/layout/renderer.js.map +1 -1
- package/dist/layout/types.d.ts +17 -0
- package/dist/layout/types.d.ts.map +1 -1
- package/dist/layout/types.js +7 -0
- package/dist/layout/types.js.map +1 -1
- package/dist/media/inline-risk.d.ts +26 -0
- package/dist/media/inline-risk.d.ts.map +1 -0
- package/dist/media/inline-risk.js +142 -0
- package/dist/media/inline-risk.js.map +1 -0
- package/dist/nav/builder.d.ts.map +1 -1
- package/dist/nav/builder.js +15 -3
- package/dist/nav/builder.js.map +1 -1
- package/dist/nav/index.d.ts +1 -1
- package/dist/nav/index.d.ts.map +1 -1
- package/dist/nav/index.js +1 -1
- package/dist/nav/index.js.map +1 -1
- package/dist/nav/menu-resolver.d.ts +11 -0
- package/dist/nav/menu-resolver.d.ts.map +1 -1
- package/dist/nav/menu-resolver.js +49 -9
- package/dist/nav/menu-resolver.js.map +1 -1
- package/dist/nav/paths.d.ts +37 -0
- package/dist/nav/paths.d.ts.map +1 -0
- package/dist/nav/paths.js +48 -0
- package/dist/nav/paths.js.map +1 -0
- package/dist/nav/types.d.ts +6 -0
- package/dist/nav/types.d.ts.map +1 -1
- package/dist/nav/url-resolver.d.ts +1 -5
- package/dist/nav/url-resolver.d.ts.map +1 -1
- package/dist/nav/url-resolver.js +6 -12
- package/dist/nav/url-resolver.js.map +1 -1
- package/dist/schema/base.d.ts +41 -4
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +23 -4
- package/dist/schema/base.js.map +1 -1
- package/dist/schema/components.d.ts +90 -9
- package/dist/schema/components.d.ts.map +1 -1
- package/dist/schema/components.js +113 -22
- package/dist/schema/components.js.map +1 -1
- package/dist/schema/mysql-tables.d.ts +5775 -48
- package/dist/schema/mysql-tables.d.ts.map +1 -1
- package/dist/schema/mysql-tables.js +621 -46
- package/dist/schema/mysql-tables.js.map +1 -1
- package/dist/scope/kywi-form.d.ts +11 -0
- package/dist/scope/kywi-form.d.ts.map +1 -1
- package/dist/scope/kywi-form.js +11 -1
- package/dist/scope/kywi-form.js.map +1 -1
- package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
- package/dist/scope/kywi-wizard-form.js +76 -2
- package/dist/scope/kywi-wizard-form.js.map +1 -1
- package/dist/scope/sticky-offset.d.ts +34 -13
- package/dist/scope/sticky-offset.d.ts.map +1 -1
- package/dist/scope/sticky-offset.js +236 -43
- package/dist/scope/sticky-offset.js.map +1 -1
- package/dist/site/styles.css +61 -15
- package/dist/versioning/scheduler.d.ts +28 -0
- package/dist/versioning/scheduler.d.ts.map +1 -1
- package/dist/versioning/scheduler.js +50 -3
- package/dist/versioning/scheduler.js.map +1 -1
- package/package.json +7 -2
|
@@ -2,6 +2,46 @@ import { isModuleVariantContainer } from '../../../layout/types.js';
|
|
|
2
2
|
import { validateComponentDefinition } from '../../../layout/component-refs.js';
|
|
3
3
|
/** The single region a definition canvas document has. */
|
|
4
4
|
export const DEFINITION_REGION = 'main';
|
|
5
|
+
/**
|
|
6
|
+
* The synthetic host a MODULE-level container definition is edited inside
|
|
7
|
+
* (kywi-cms#170).
|
|
8
|
+
*
|
|
9
|
+
* A module container is not a region node — it lives in a COLUMN — so unlike the
|
|
10
|
+
* other two region kinds it cannot be handed to the canvas as-is. It is wrapped
|
|
11
|
+
* in a one-section, one-column shell on the way in and unwrapped on the way out,
|
|
12
|
+
* and the shell's own ids are derived from the container's so two successive
|
|
13
|
+
* saves of an untouched component still produce identical rows.
|
|
14
|
+
*
|
|
15
|
+
* The wrapper is NOT stored: `extractDefinition` returns the container alone, so
|
|
16
|
+
* the row's `definition` stays exactly the shape `componentDetachSource` and the
|
|
17
|
+
* renderer read.
|
|
18
|
+
*/
|
|
19
|
+
const DEFINITION_WRAPPER_SUFFIX = '-definition-host';
|
|
20
|
+
function wrapModuleVariantContainer(container) {
|
|
21
|
+
return {
|
|
22
|
+
id: `${container.id}${DEFINITION_WRAPPER_SUFFIX}`,
|
|
23
|
+
type: 'section',
|
|
24
|
+
style: {},
|
|
25
|
+
columns: [
|
|
26
|
+
{ id: `${container.id}${DEFINITION_WRAPPER_SUFFIX}-column`, width: 12, nodes: [container] },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The stored definition of a `moduleVariantContainer` component, or null when it
|
|
32
|
+
* doesn't match the row's type.
|
|
33
|
+
*
|
|
34
|
+
* Structural, like {@link readRegionNode}: a module's `type` is a registry name a
|
|
35
|
+
* host pack chooses, so the discriminant alone is not proof of shape.
|
|
36
|
+
*/
|
|
37
|
+
export function readModuleVariantContainerDefinition(component) {
|
|
38
|
+
if (component.type !== 'moduleVariantContainer')
|
|
39
|
+
return null;
|
|
40
|
+
const def = component.definition;
|
|
41
|
+
if (typeof def !== 'object' || def === null || Array.isArray(def))
|
|
42
|
+
return null;
|
|
43
|
+
return isModuleVariantContainer(def) ? def : null;
|
|
44
|
+
}
|
|
5
45
|
/**
|
|
6
46
|
* Wrap a section/container definition as a one-node, one-region document.
|
|
7
47
|
*
|
|
@@ -12,11 +52,25 @@ export const DEFINITION_REGION = 'main';
|
|
|
12
52
|
* caller surfaces the mismatch separately.
|
|
13
53
|
*/
|
|
14
54
|
export function seedDefinitionDocument(component) {
|
|
55
|
+
const moduleContainer = readModuleVariantContainerDefinition(component);
|
|
56
|
+
if (moduleContainer) {
|
|
57
|
+
return { regions: { [DEFINITION_REGION]: [wrapModuleVariantContainer(moduleContainer)] } };
|
|
58
|
+
}
|
|
15
59
|
const node = readRegionNode(component);
|
|
16
|
-
|
|
60
|
+
// `readRegionNode` also answers for the module-container kind (see its note),
|
|
61
|
+
// but that branch returned above, so what is left here really is a region node.
|
|
62
|
+
const regionNode = node && node.type !== 'moduleVariantContainer' ? node : null;
|
|
63
|
+
return { regions: { [DEFINITION_REGION]: regionNode ? [regionNode] : [] } };
|
|
17
64
|
}
|
|
18
65
|
/** The definition as a region node, or null when it doesn't match the row's type. */
|
|
19
66
|
export function readRegionNode(component) {
|
|
67
|
+
// The fourth kind is not a region node, but "does the stored definition match
|
|
68
|
+
// the row's declared type" is the question every caller is really asking —
|
|
69
|
+
// `component-edit.tsx` gates its whole error state on it — so answer it here
|
|
70
|
+
// rather than making each caller learn a second function (kywi-cms#170).
|
|
71
|
+
const moduleContainer = readModuleVariantContainerDefinition(component);
|
|
72
|
+
if (moduleContainer)
|
|
73
|
+
return moduleContainer;
|
|
20
74
|
const def = component.definition;
|
|
21
75
|
if (typeof def !== 'object' || def === null || Array.isArray(def))
|
|
22
76
|
return null;
|
|
@@ -42,11 +96,11 @@ export function readRegionNode(component) {
|
|
|
42
96
|
* a module-level container inside a section-level one, because a stored row that
|
|
43
97
|
* predates that refusal reaches here without ever having been validated.
|
|
44
98
|
*/
|
|
45
|
-
function
|
|
99
|
+
function holdsAbTestedModule(node) {
|
|
46
100
|
const sections = node.type === 'section'
|
|
47
101
|
? [node]
|
|
48
102
|
: [...(node.defaultSections ?? []), ...(node.variants ?? []).flatMap(v => v.sections ?? [])];
|
|
49
|
-
return sections.some(section => (section.columns ?? []).some(column => (column.nodes ?? []).some(isModuleVariantContainer)));
|
|
103
|
+
return sections.some(section => (section.columns ?? []).some(column => (column.nodes ?? []).some(n => isModuleVariantContainer(n) && n.mode === 'ab_test')));
|
|
50
104
|
}
|
|
51
105
|
/**
|
|
52
106
|
* Read the edited document back as a definition for a component of `type`, or
|
|
@@ -100,19 +154,47 @@ export function extractDefinition(doc, component) {
|
|
|
100
154
|
'Personalize it again, or save it as a new component.',
|
|
101
155
|
};
|
|
102
156
|
}
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
157
|
+
// The fourth kind edits inside a synthetic one-section/one-column host
|
|
158
|
+
// (kywi-cms#170). Unwrap it here, so everything below — the binding pin and the
|
|
159
|
+
// real validator — sees the container the row actually stores.
|
|
160
|
+
if (component.type === 'moduleVariantContainer') {
|
|
161
|
+
const unwrapped = unwrapModuleVariantContainer(node);
|
|
162
|
+
if (!unwrapped.ok)
|
|
163
|
+
return unwrapped;
|
|
164
|
+
const pinned = pinDefinitionBinding(unwrapped.container, readModuleVariantContainerDefinition({
|
|
165
|
+
type: 'moduleVariantContainer',
|
|
166
|
+
definition: component.definition,
|
|
167
|
+
}), 'module');
|
|
168
|
+
if (!pinned.ok)
|
|
169
|
+
return pinned;
|
|
170
|
+
const check = validateComponentDefinition({
|
|
171
|
+
type: component.type,
|
|
172
|
+
moduleType: component.moduleType,
|
|
173
|
+
definition: pinned.container,
|
|
174
|
+
});
|
|
175
|
+
if (!check.success)
|
|
176
|
+
return { ok: false, error: check.error };
|
|
177
|
+
return { ok: true, definition: pinned.container };
|
|
178
|
+
}
|
|
179
|
+
// An A/B TESTED module is the same rule one level down (kywi-cms#161 final
|
|
180
|
+
// review, narrowed in #170): an `ab_test` `moduleVariantContainer` stored in a
|
|
181
|
+
// section/container definition holds ONE `experimentId` for every page that
|
|
182
|
+
// places the component, so two placements share a single experiment's buckets
|
|
183
|
+
// and exposures. Nothing scopes it — `rekeyResolvedSection` re-keys the
|
|
184
|
+
// container and its arms per placement, never the binding.
|
|
185
|
+
//
|
|
186
|
+
// A merely PERSONALIZED module is no longer refused: its arms are audiences,
|
|
187
|
+
// and audiences are content that travels with a component perfectly well. The
|
|
188
|
+
// editor withholds promote on this canvas (`canvasKind`); this is the
|
|
189
|
+
// fail-safe for a document that arrives holding an A/B one anyway (MCP, a
|
|
190
|
+
// direct API write, a row stored before this refusal).
|
|
191
|
+
if (holdsAbTestedModule(node)) {
|
|
112
192
|
return {
|
|
113
193
|
ok: false,
|
|
114
|
-
error: 'A component cannot hold
|
|
115
|
-
'
|
|
194
|
+
error: 'A component cannot hold an A/B tested module. Remove the test before saving — every page ' +
|
|
195
|
+
'placing this component would report into that one experiment, and a winner picked on any ' +
|
|
196
|
+
'of them would decide them all. Save the module itself as a component instead, or A/B test ' +
|
|
197
|
+
'the whole section.',
|
|
116
198
|
};
|
|
117
199
|
}
|
|
118
200
|
// An experiment binding is the PLACEMENT's, never the definition's own to mint
|
|
@@ -169,7 +251,9 @@ export function extractDefinition(doc, component) {
|
|
|
169
251
|
* made elsewhere, so the rule is flat — an A/B test is built on a page and saved
|
|
170
252
|
* from there, which is also the only route that gives each placement its own run.
|
|
171
253
|
*/
|
|
172
|
-
function pinDefinitionBinding(container, stored
|
|
254
|
+
function pinDefinitionBinding(container, stored,
|
|
255
|
+
/** What the refusal calls the thing, since the rule serves both kinds now. */
|
|
256
|
+
what = 'section') {
|
|
173
257
|
const { experimentId: _canvasRun, winnerId: _canvasWinner, ...rest } = container;
|
|
174
258
|
if (container.mode !== 'ab_test') {
|
|
175
259
|
if (container.experimentId === undefined && container.winnerId === undefined) {
|
|
@@ -182,10 +266,10 @@ function pinDefinitionBinding(container, stored) {
|
|
|
182
266
|
if (stored?.mode !== 'ab_test') {
|
|
183
267
|
return {
|
|
184
268
|
ok: false,
|
|
185
|
-
error:
|
|
269
|
+
error: `This component cannot be turned into an A/B tested ${what} here. An experiment belongs to ` +
|
|
186
270
|
'one placement — every page that places this component and has no experiment of its own ' +
|
|
187
271
|
'would be pulled into a single shared run. Build the A/B test on a page, then save that ' +
|
|
188
|
-
|
|
272
|
+
`${what} as a component: each placement gets its own experiment.`,
|
|
189
273
|
};
|
|
190
274
|
}
|
|
191
275
|
const experimentId = stored.experimentId;
|
|
@@ -210,6 +294,43 @@ function pinDefinitionBinding(container, stored) {
|
|
|
210
294
|
},
|
|
211
295
|
};
|
|
212
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Read the single module container back out of the synthetic host the canvas
|
|
299
|
+
* edits it in (kywi-cms#170), or explain what the author built instead.
|
|
300
|
+
*
|
|
301
|
+
* The messages are the same shape the region kinds' own mismatches use: say what
|
|
302
|
+
* the canvas is holding and what to do about it, rather than dropping the extra
|
|
303
|
+
* content silently.
|
|
304
|
+
*/
|
|
305
|
+
function unwrapModuleVariantContainer(node) {
|
|
306
|
+
if (node.type !== 'section') {
|
|
307
|
+
return {
|
|
308
|
+
ok: false,
|
|
309
|
+
error: 'This is a personalized module component, but the canvas holds a personalized section. ' +
|
|
310
|
+
'Remove the section-level personalization, or save it as a new component.',
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const nodes = (node.columns ?? []).flatMap(column => column.nodes ?? []);
|
|
314
|
+
if (nodes.length === 0) {
|
|
315
|
+
return { ok: false, error: 'This component is empty. Add a module before saving.' };
|
|
316
|
+
}
|
|
317
|
+
if (nodes.length > 1) {
|
|
318
|
+
return {
|
|
319
|
+
ok: false,
|
|
320
|
+
error: `A personalized module component is a single module, but the canvas holds ${nodes.length}. ` +
|
|
321
|
+
'Delete the extra modules, or save them as components of their own.',
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
const only = nodes[0];
|
|
325
|
+
if (!isModuleVariantContainer(only)) {
|
|
326
|
+
return {
|
|
327
|
+
ok: false,
|
|
328
|
+
error: 'This is a personalized module component, but the canvas holds a plain module. ' +
|
|
329
|
+
'Personalize it again, or save it as a new component.',
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
return { ok: true, container: only };
|
|
333
|
+
}
|
|
213
334
|
/**
|
|
214
335
|
* A module component's definition: exactly the `{ props, style }` pair the
|
|
215
336
|
* renderer reads (`componentDetachSource`). Nothing else is stored, so nothing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition-canvas.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/components/definition-canvas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"definition-canvas.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/components/definition-canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAsGrD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"dashboard-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAsGrD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,MAAM,EAAE,YAAY,2CAgGjE"}
|
|
@@ -21,6 +21,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
21
21
|
*/
|
|
22
22
|
import { useEffect, useState } from 'react';
|
|
23
23
|
import { useAdminContext } from '../../context.js';
|
|
24
|
+
import { runtimeContentTypes } from '../content/runtime-content-types.js';
|
|
24
25
|
// Rendered when the aggregate endpoint is unreachable — the "API unreachable"
|
|
25
26
|
// badge below signals the degraded state rather than blanking the whole page.
|
|
26
27
|
const OFFLINE = {
|
|
@@ -87,7 +88,6 @@ function Metric({ label, value }) {
|
|
|
87
88
|
}
|
|
88
89
|
export default function DashboardIndexSurface(_props) {
|
|
89
90
|
const { fetch: adminFetch, runtime } = useAdminContext();
|
|
90
|
-
const runtimeContentTypes = runtime?.contentTypes ?? [];
|
|
91
91
|
const [inventory, setInventory] = useState(null);
|
|
92
92
|
useEffect(() => {
|
|
93
93
|
let cancelled = false;
|
|
@@ -102,7 +102,7 @@ export default function DashboardIndexSurface(_props) {
|
|
|
102
102
|
.catch(() => { });
|
|
103
103
|
return () => { cancelled = true; };
|
|
104
104
|
}, [adminFetch]);
|
|
105
|
-
const contentTypes = inventory && inventory.length > 0 ? inventory : runtimeContentTypes;
|
|
105
|
+
const contentTypes = inventory && inventory.length > 0 ? inventory : runtimeContentTypes(runtime);
|
|
106
106
|
const typeLabel = (name) => contentTypes.find(ct => ct.name === name)?.label ?? name;
|
|
107
107
|
const [data, setData] = useState(null);
|
|
108
108
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"dashboard-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-editor-client.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5F,UAAU,uBAAuB;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"layout-editor-client.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5F,UAAU,uBAAuB;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,2CAmJrE"}
|
|
@@ -87,17 +87,18 @@ export function LayoutEditorClient({ layout }) {
|
|
|
87
87
|
}
|
|
88
88
|
}, [name, category, isEdit, layout, navigate, adminFetch]);
|
|
89
89
|
return (_jsxs("div", { className: "kywi-layout-editor-page", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: isEdit ? `Edit layout: ${layout.name}` : 'New layout' }), _jsxs("p", { className: "kywi-text-muted", children: ["Build a reusable layout, then click ", _jsx("strong", { children: "Save" }), " in the editor toolbar to persist it."] })] }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: () => navigate('/admin/layouts'), children: "Back to layouts" })] }), error && _jsx(ErrorState, { message: error }), saving && _jsx("p", { className: "kywi-text-muted", role: "status", children: "Saving\u2026" }), _jsxs("div", { className: "kywi-layout-editor-meta", children: [_jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "layout-name", className: "kywi-field-label", children: "Layout name" }), _jsx("input", { id: "layout-name", type: "text", className: "kywi-input", value: name, onChange: e => setName(e.target.value), placeholder: "Landing hero + features" })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "layout-category", className: "kywi-field-label", children: "Category" }), _jsx("input", { id: "layout-category", type: "text", className: "kywi-input", value: category, onChange: e => setCategory(e.target.value), placeholder: "general" })] })] }), _jsx("div", { className: "kywi-layout-editor-host", children: _jsx(LayoutEditor, { initialLayout: initialLayout, contentId: layout?.id ?? 'new', contentType: "layout", moduleRegistry: moduleRegistry, moduleComponents: layoutModuleComponents, audiences: audiences,
|
|
90
|
-
// A saved layout is a BLUEPRINT, not a page
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
90
|
+
// A saved layout is a BLUEPRINT, not a page — and since kywi-cms#156 it
|
|
91
|
+
// is a HOLDER in `kywi_component_instances` all the same. Minting a
|
|
92
|
+
// component here, linking one, and the save fork all work exactly as
|
|
93
|
+
// they do on a page: the placement is counted, it appears in the
|
|
94
|
+
// component's usage under "saved layouts", it blocks the component's
|
|
95
|
+
// delete, and detach-all rewrites it.
|
|
96
|
+
//
|
|
97
|
+
// This prop still matters. `layout-editor.tsx` reads it for the
|
|
98
|
+
// promote-in-place gate, which is a different question from the index:
|
|
99
|
+
// a variant container stored in a blueprint would carry one
|
|
100
|
+
// `experimentId` shared by every page stamped out of it
|
|
101
|
+
// (`extractDefinition` refuses the shape). That gate stays.
|
|
101
102
|
canvasKind: "blueprint", onSave: persist, onCancel: () => navigate('/admin/layouts'), ...(user?.role ? { userRole: user.role } : {}) }) })] }));
|
|
102
103
|
}
|
|
103
104
|
//# sourceMappingURL=layout-editor-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-editor-client.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"layout-editor-client.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"AAgCA,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,QAAQ,SAAW,GAAG,MAAM,CAWrF;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CAyG/D"}
|
|
@@ -26,6 +26,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
26
26
|
*/
|
|
27
27
|
import { useState } from 'react';
|
|
28
28
|
import { setAuth } from '../../host-client/index.js';
|
|
29
|
+
import { ACCOUNT_PASSWORD_PATH } from '../registry.js';
|
|
29
30
|
import { KywiLogoDark } from '../kywi-logo.js';
|
|
30
31
|
/**
|
|
31
32
|
* Validate a candidate post-login redirect target. Only an internal
|
|
@@ -62,6 +63,13 @@ export default function LoginSurface({ next }) {
|
|
|
62
63
|
});
|
|
63
64
|
const body = await res.json();
|
|
64
65
|
if (!res.ok) {
|
|
66
|
+
// A flagged user can still sign in (§2), but any follow-up call the host
|
|
67
|
+
// makes on the way in can come back through the hard gate. That is not an
|
|
68
|
+
// auth failure — it is an instruction, so follow it instead of showing it.
|
|
69
|
+
if (body.error?.code === 'PASSWORD_RESET_REQUIRED') {
|
|
70
|
+
window.location.href = ACCOUNT_PASSWORD_PATH;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
65
73
|
setError(body.error?.message ?? 'Login failed');
|
|
66
74
|
return;
|
|
67
75
|
}
|
|
@@ -73,7 +81,11 @@ export default function LoginSurface({ next }) {
|
|
|
73
81
|
// The access token is set by the server as an httpOnly cookie; we only
|
|
74
82
|
// keep the (non-sensitive) user descriptor for rendering the chrome.
|
|
75
83
|
setAuth(body.data.user);
|
|
76
|
-
|
|
84
|
+
// A forced-reset user lands on the set-password screen regardless of
|
|
85
|
+
// `next` — the API gate would refuse whatever `next` pointed at anyway.
|
|
86
|
+
window.location.href = body.data.user.passwordResetRequired === true
|
|
87
|
+
? ACCOUNT_PASSWORD_PATH
|
|
88
|
+
: safeNext(next);
|
|
77
89
|
}
|
|
78
90
|
catch {
|
|
79
91
|
setError('Network error — is the server running?');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAY9C;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,IAA+B,EAAE,QAAQ,GAAG,QAAQ;IAC3E,IACE,IAAI;QACJ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1B,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACtB,IAAI,KAAK,cAAc;QACvB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EACjC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,IAAI,EAAqB;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,KAAK,UAAU,YAAY,CAAC,CAAkB;QAC5C,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,QAAQ,CAAC,EAAE,CAAC,CAAA;QACZ,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE;gBAC5C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC1C,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAE7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,cAAc,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;gBAChD,wEAAwE;gBACxE,QAAQ,CAAC,kDAAkD,CAAC,CAAA;gBAC5D,OAAM;YACR,CAAC;YAED,uEAAuE;YACvE,qEAAqE;YACrE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-editor.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/menus/menu-editor.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"menu-editor.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/menus/menu-editor.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAuLrD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,2CAscjE"}
|
|
@@ -28,7 +28,8 @@ function MenuItemRow({ item, depth, selected, onSelect }) {
|
|
|
28
28
|
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
|
|
29
29
|
id: item.key,
|
|
30
30
|
});
|
|
31
|
-
const
|
|
31
|
+
const isLabel = item.kind === 'label';
|
|
32
|
+
const broken = !isLabel && (item.contentMissing || (!item.contentId && !item.externalUrl));
|
|
32
33
|
const unpublished = !broken && item.contentStatus !== null && item.contentStatus !== 'published';
|
|
33
34
|
const classes = [
|
|
34
35
|
'kywi-tree-node',
|
|
@@ -50,7 +51,7 @@ function MenuItemRow({ item, depth, selected, onSelect }) {
|
|
|
50
51
|
e.preventDefault();
|
|
51
52
|
onSelect(item.key);
|
|
52
53
|
}
|
|
53
|
-
}, children: [_jsx("button", { type: "button", className: "kywi-menu-item-handle", "aria-label": `Reorder ${item.label}`, onClick: e => e.stopPropagation(), ...attributes, ...listeners, children: '≡' }), _jsx("span", { className: "kywi-tree-title", children: item.label }), _jsx("span", { className: "kywi-menu-item-target", children: item.contentId ? item.href ?? '—' : item.externalUrl ?? '—' }), item.externalUrl && _jsx("span", { className: "kywi-chip", children: "External" }), item.openInNewWindow && _jsx("span", { className: "kywi-chip", children: "New window" }), unpublished && (_jsx("span", { className: `kywi-status-badge kywi-status-${item.contentStatus}`, children: statusLabel(item.contentStatus) })), broken && (_jsxs("span", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " Link broken"] }))] }));
|
|
54
|
+
}, children: [_jsx("button", { type: "button", className: "kywi-menu-item-handle", "aria-label": `Reorder ${item.label}`, onClick: e => e.stopPropagation(), ...attributes, ...listeners, children: '≡' }), _jsx("span", { className: "kywi-tree-title", children: item.label }), _jsx("span", { className: "kywi-menu-item-target", children: isLabel ? 'No link' : item.contentId ? item.href ?? '—' : item.externalUrl ?? '—' }), isLabel && _jsx("span", { className: "kywi-chip", children: "Heading" }), item.externalUrl && _jsx("span", { className: "kywi-chip", children: "External" }), item.openInNewWindow && _jsx("span", { className: "kywi-chip", children: "New window" }), unpublished && (_jsx("span", { className: `kywi-status-badge kywi-status-${item.contentStatus}`, children: statusLabel(item.contentStatus) })), broken && (_jsxs("span", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " Link broken"] }))] }));
|
|
54
55
|
}
|
|
55
56
|
// ── External-link dialog ──────────────────────────────────────────────────────
|
|
56
57
|
function ExternalLinkModal({ onAdd, onClose, }) {
|
|
@@ -201,6 +202,17 @@ export default function MenuEditorSurface({ params }) {
|
|
|
201
202
|
setSelectedKey(item.key);
|
|
202
203
|
setPicker(null);
|
|
203
204
|
}, []);
|
|
205
|
+
/**
|
|
206
|
+
* A structural heading — a mega-panel column title or a footer group title
|
|
207
|
+
* that names a group with no page of its own (kywi-cms#116). It links
|
|
208
|
+
* nowhere on purpose, so it is exempt from the save-time target check.
|
|
209
|
+
*/
|
|
210
|
+
const addHeadingItem = useCallback(() => {
|
|
211
|
+
const item = makeItem({ label: 'Heading', kind: 'label' });
|
|
212
|
+
setSaved(false);
|
|
213
|
+
setItems(prev => appendItem(prev, item));
|
|
214
|
+
setSelectedKey(item.key);
|
|
215
|
+
}, []);
|
|
204
216
|
const confirmRemove = useCallback(() => {
|
|
205
217
|
if (!pendingRemove)
|
|
206
218
|
return;
|
|
@@ -253,8 +265,9 @@ export default function MenuEditorSurface({ params }) {
|
|
|
253
265
|
flat.filter(f => f.parentKey === selectedEntry.parentKey)[0]?.key !== selectedEntry.key &&
|
|
254
266
|
selectedEntry.depth + 1 + subtreeHeight(selectedEntry.item) <= MAX_MENU_DEPTH - 1;
|
|
255
267
|
const canOutdent = selectedEntry !== undefined && selectedEntry.parentKey !== null;
|
|
256
|
-
return (_jsxs("div", { className: "kywi-menu-editor", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: menu ? `Edit menu: ${menu.name}` : 'Edit menu' }), _jsxs("p", { className: "kywi-text-muted", children: [countItems(items), " item", countItems(items) === 1 ? '' : 's', menu ? _jsxs(_Fragment, { children: [" \u00B7 slug ", _jsx("code", { children: menu.slug })] }) : null, " \u00B7 drag a row to reorder, drag it sideways to nest it under the row above (up to ", MAX_MENU_DEPTH, " levels)."] })] }), _jsxs("div", { className: "kywi-admin-button-row", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost", onClick: leave, children: "Back to menus" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: load, disabled: saving || !dirty, children: "Cancel" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: handleSave, disabled: saving || !dirty, children: saving ? 'Saving…' : 'Save menu' })] })] }), dirty && _jsx("p", { className: "kywi-menu-editor-dirty", role: "status", children: "Unsaved changes" }), saved && !dirty && (_jsx("p", { className: "kywi-menu-editor-saved", role: "status", children: "Menu saved." })), saveError && _jsx(ErrorState, { message: saveError }), _jsxs("div", { className: "kywi-menu-editor-grid", children: [_jsxs("section", { className: "kywi-menu-editor-tree", "aria-label": "Menu structure", children: [flat.length === 0 && (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "This menu has no items yet. Add a page or an external link below." }) })), _jsxs(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragStart: handleDragStart, onDragEnd: handleDragEnd, children: [_jsx(SortableContext, { items: flat.map(f => f.key), strategy: verticalListSortingStrategy, children: _jsx("div", { className: "kywi-menu-item-list", role: "tree", "aria-label": "Menu items", children: flat.map(entry => (_jsx(MenuItemRow, { item: entry.item, depth: entry.depth, selected: entry.key === selectedKey, onSelect: setSelectedKey }, entry.key))) }) }), _jsx(DragOverlay, { children: activeKey ? (_jsx("div", { className: "kywi-tree-drag-overlay", children: _jsx("span", { className: "kywi-tree-title", children: findItem(items, activeKey)?.label }) })) : null })] }), _jsxs("div", { className: "kywi-menu-editor-add", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: openPagePicker, children: "Add page link" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: () => setPicker('external'), children: "Add external link" })] })] }), _jsx("aside", { className: "kywi-menu-item-panel", "aria-label": "Item settings", children: !selected ? (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "Select an item to edit its label, description and link behaviour." }) })) : (_jsxs(_Fragment, { children: [_jsx("h2", { className: "kywi-section-heading", children:
|
|
268
|
+
return (_jsxs("div", { className: "kywi-menu-editor", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: menu ? `Edit menu: ${menu.name}` : 'Edit menu' }), _jsxs("p", { className: "kywi-text-muted", children: [countItems(items), " item", countItems(items) === 1 ? '' : 's', menu ? _jsxs(_Fragment, { children: [" \u00B7 slug ", _jsx("code", { children: menu.slug })] }) : null, " \u00B7 drag a row to reorder, drag it sideways to nest it under the row above (up to ", MAX_MENU_DEPTH, " levels). A heading groups items without linking anywhere."] })] }), _jsxs("div", { className: "kywi-admin-button-row", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost", onClick: leave, children: "Back to menus" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: load, disabled: saving || !dirty, children: "Cancel" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: handleSave, disabled: saving || !dirty, children: saving ? 'Saving…' : 'Save menu' })] })] }), dirty && _jsx("p", { className: "kywi-menu-editor-dirty", role: "status", children: "Unsaved changes" }), saved && !dirty && (_jsx("p", { className: "kywi-menu-editor-saved", role: "status", children: "Menu saved." })), saveError && _jsx(ErrorState, { message: saveError }), _jsxs("div", { className: "kywi-menu-editor-grid", children: [_jsxs("section", { className: "kywi-menu-editor-tree", "aria-label": "Menu structure", children: [flat.length === 0 && (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "This menu has no items yet. Add a page or an external link below." }) })), _jsxs(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragStart: handleDragStart, onDragEnd: handleDragEnd, children: [_jsx(SortableContext, { items: flat.map(f => f.key), strategy: verticalListSortingStrategy, children: _jsx("div", { className: "kywi-menu-item-list", role: "tree", "aria-label": "Menu items", children: flat.map(entry => (_jsx(MenuItemRow, { item: entry.item, depth: entry.depth, selected: entry.key === selectedKey, onSelect: setSelectedKey }, entry.key))) }) }), _jsx(DragOverlay, { children: activeKey ? (_jsx("div", { className: "kywi-tree-drag-overlay", children: _jsx("span", { className: "kywi-tree-title", children: findItem(items, activeKey)?.label }) })) : null })] }), _jsxs("div", { className: "kywi-menu-editor-add", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: openPagePicker, children: "Add page link" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: () => setPicker('external'), children: "Add external link" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: addHeadingItem, children: "Add heading" })] })] }), _jsx("aside", { className: "kywi-menu-item-panel", "aria-label": "Item settings", children: !selected ? (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "Select an item to edit its label, description and link behaviour." }) })) : (_jsxs(_Fragment, { children: [_jsx("h2", { className: "kywi-section-heading", children: selected.kind === 'label' ? 'Heading' : 'Item' }), selected.kind !== 'label' && selected.contentMissing && (_jsxs("p", { className: "kywi-menu-item-warning", role: "alert", children: ['⚠', " The page this item linked to has been deleted. Remove the item or turn it into an external link."] })), selected.kind !== 'label' &&
|
|
269
|
+
!selected.contentMissing &&
|
|
257
270
|
selected.contentStatus !== null &&
|
|
258
|
-
selected.contentStatus !== 'published' && (_jsxs("p", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " This page is ", statusLabel(selected.contentStatus).toLowerCase(), ", so the item is hidden from visitors until it is published."] })), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-label", className: "kywi-field-label", children: "Label" }), _jsx("input", { id: "kywi-menu-item-label", type: "text", className: "kywi-input", value: selected.label, onChange: e => patchSelected({ label: e.target.value }) })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("span", { className: "kywi-field-label", children: "Link" }), selected.contentId ? (_jsxs("p", { className: "kywi-field-hint", children: ["Page \u00B7 ", _jsx("code", { children: selected.href ?? 'unresolved' }), " \u2014 the link follows the page if it is renamed or moved."] })) : (_jsx("input", { type: "text", className: "kywi-input", "aria-label": "External URL", value: selected.externalUrl ?? '', onChange: e => patchSelected({ externalUrl: e.target.value, href: e.target.value }) }))] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-description", className: "kywi-field-label", children: "Description" }), _jsx("textarea", { id: "kywi-menu-item-description", className: "kywi-input kywi-textarea", rows: 3, value: selected.description, onChange: e => patchSelected({ description: e.target.value }) }), _jsx("span", { className: "kywi-field-hint", children: "Shown beside the label in mega-menu panels. Ignored by compact nav variants." })] }), _jsxs("label", { className: "kywi-checkbox-label", children: [_jsx("input", { type: "checkbox", checked: selected.openInNewWindow, onChange: e => patchSelected({ openInNewWindow: e.target.checked }) }), _jsx("span", { children: "Open in a new window" })] }), _jsxs("div", { className: "kywi-admin-form-actions kywi-menu-item-nesting", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canOutdent, onClick: () => { setSaved(false); setItems(prev => outdentItem(prev, selected.key)); }, children: "Move out one level" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canIndent, onClick: () => { setSaved(false); setItems(prev => indentItem(prev, selected.key)); }, children: "Nest under previous" })] }), _jsx("div", { className: "kywi-admin-form-actions", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-danger kywi-btn-sm", onClick: () => handleRemove(selected), children: "Remove item" }) })] })) })] }), picker === 'page' && (pickerError ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(ErrorState, { message: pickerError }) })) : contentTree === null ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(LoadingState, { label: "Loading content\u2026" }) })) : (_jsx(PagePicker, { nodes: contentTree, navLabels: navLabels, onSelect: addPageItem, onClose: () => setPicker(null) }))), picker === 'external' && (_jsx(ExternalLinkModal, { onAdd: addExternalItem, onClose: () => setPicker(null) })), pendingRemove && (_jsx(ConfirmDialog, { title: "Remove item", message: _jsxs(_Fragment, { children: ["Remove \u201C", pendingRemove.label, "\u201D and the ", countItems(pendingRemove.children), " item", countItems(pendingRemove.children) === 1 ? '' : 's', " nested under it? The change applies when you save the menu."] }), confirmLabel: "Remove", onCancel: () => setPendingRemove(null), onConfirm: confirmRemove }))] }));
|
|
271
|
+
selected.contentStatus !== 'published' && (_jsxs("p", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " This page is ", statusLabel(selected.contentStatus).toLowerCase(), ", so the item is hidden from visitors until it is published."] })), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-label", className: "kywi-field-label", children: "Label" }), _jsx("input", { id: "kywi-menu-item-label", type: "text", className: "kywi-input", value: selected.label, onChange: e => patchSelected({ label: e.target.value }) })] }), selected.kind === 'label' ? (_jsx("p", { className: "kywi-field-hint kywi-menu-item-heading-hint", children: "A heading \u2014 it renders as plain text, not a link, and the items nested under it still render. Use it for a mega-menu or footer column title." })) : (_jsxs("div", { className: "kywi-field", children: [_jsx("span", { className: "kywi-field-label", children: "Link" }), selected.contentId ? (_jsxs("p", { className: "kywi-field-hint", children: ["Page \u00B7 ", _jsx("code", { children: selected.href ?? 'unresolved' }), " \u2014 the link follows the page if it is renamed or moved."] })) : (_jsx("input", { type: "text", className: "kywi-input", "aria-label": "External URL", value: selected.externalUrl ?? '', onChange: e => patchSelected({ externalUrl: e.target.value, href: e.target.value }) }))] })), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-description", className: "kywi-field-label", children: "Description" }), _jsx("textarea", { id: "kywi-menu-item-description", className: "kywi-input kywi-textarea", rows: 3, value: selected.description, onChange: e => patchSelected({ description: e.target.value }) }), _jsx("span", { className: "kywi-field-hint", children: "Shown beside the label in mega-menu panels. Ignored by compact nav variants." })] }), selected.kind !== 'label' && (_jsxs("label", { className: "kywi-checkbox-label", children: [_jsx("input", { type: "checkbox", checked: selected.openInNewWindow, onChange: e => patchSelected({ openInNewWindow: e.target.checked }) }), _jsx("span", { children: "Open in a new window" })] })), _jsxs("div", { className: "kywi-admin-form-actions kywi-menu-item-nesting", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canOutdent, onClick: () => { setSaved(false); setItems(prev => outdentItem(prev, selected.key)); }, children: "Move out one level" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canIndent, onClick: () => { setSaved(false); setItems(prev => indentItem(prev, selected.key)); }, children: "Nest under previous" })] }), _jsx("div", { className: "kywi-admin-form-actions", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-danger kywi-btn-sm", onClick: () => handleRemove(selected), children: "Remove item" }) })] })) })] }), picker === 'page' && (pickerError ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(ErrorState, { message: pickerError }) })) : contentTree === null ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(LoadingState, { label: "Loading content\u2026" }) })) : (_jsx(PagePicker, { nodes: contentTree, navLabels: navLabels, onSelect: addPageItem, onClose: () => setPicker(null) }))), picker === 'external' && (_jsx(ExternalLinkModal, { onAdd: addExternalItem, onClose: () => setPicker(null) })), pendingRemove && (_jsx(ConfirmDialog, { title: "Remove item", message: _jsxs(_Fragment, { children: ["Remove \u201C", pendingRemove.label, "\u201D and the ", countItems(pendingRemove.children), " item", countItems(pendingRemove.children) === 1 ? '' : 's', " nested under it? The change applies when you save the menu."] }), confirmLabel: "Remove", onCancel: () => setPendingRemove(null), onConfirm: confirmRemove }))] }));
|
|
259
272
|
}
|
|
260
273
|
//# sourceMappingURL=menu-editor.js.map
|