@kywi-software/core 0.14.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 +6 -7
- 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/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 +12 -0
- package/dist/admin/registry.d.ts.map +1 -1
- package/dist/admin/registry.js +12 -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/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/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/users/users-data.d.ts +14 -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 +40 -4
- 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 +8 -5
- package/dist/admin/surfaces/users/users-new.js.map +1 -1
- package/dist/admin/user-form.d.ts +10 -1
- package/dist/admin/user-form.d.ts.map +1 -1
- package/dist/admin/user-form.js +2 -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 +10 -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 +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +39 -6
- 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/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.map +1 -1
- package/dist/api/user-routes.js +134 -19
- 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 +43 -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/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/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 +24 -4
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +17 -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 +5758 -48
- package/dist/schema/mysql-tables.d.ts.map +1 -1
- package/dist/schema/mysql-tables.js +620 -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
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* legacy-variant-container.ts — the pure conversion behind
|
|
3
|
+
* `kywi upgrade:variant-containers` (kywi-cms#172).
|
|
4
|
+
*
|
|
5
|
+
* The deprecated `variantContainer` MODULE (`registry.ts`, `deprecated: true`)
|
|
6
|
+
* ships every arm's HTML to the browser and swaps them client-side with
|
|
7
|
+
* `patchVariantContainers` from `@kywi-software/js`. Its successor, the
|
|
8
|
+
* `ModuleVariantContainer` COLUMN NODE (`types.ts`), resolves server-side and
|
|
9
|
+
* edits in place. This module turns the first into the second.
|
|
10
|
+
*
|
|
11
|
+
* It is pure and lives in core rather than in the CLI for two reasons: it is the
|
|
12
|
+
* only part of the migration worth unit-testing exhaustively, and the same
|
|
13
|
+
* conversion has to run over two different stores — `kywi_content.layout` and
|
|
14
|
+
* the blueprint `kywi_section_templates.definition` — which are both plain
|
|
15
|
+
* `LayoutDocument`s. The CLI is only the driver.
|
|
16
|
+
*
|
|
17
|
+
* NOTHING here touches the database, the filesystem, or the clock.
|
|
18
|
+
*/
|
|
19
|
+
import { type LayoutDocument, type ModuleNode, type ModuleVariantContainer } from './types.js';
|
|
20
|
+
/** The deprecated registry name. Not a `ModuleVariantContainer`'s `type`. */
|
|
21
|
+
export declare const LEGACY_VARIANT_CONTAINER_TYPE = "variantContainer";
|
|
22
|
+
/** The module type a migrated HTML arm becomes (owner decision D1(a)). */
|
|
23
|
+
export declare const LEGACY_ARM_MODULE_TYPE = "richText";
|
|
24
|
+
/** Where in a document a legacy placement sits. */
|
|
25
|
+
export type LegacyPlacementScope = 'regions' | 'pageVariant' | 'abExperiment';
|
|
26
|
+
/**
|
|
27
|
+
* One legacy `variantContainer` module found in a document, with everything the
|
|
28
|
+
* CLI report prints about it — and, when it cannot be migrated, why.
|
|
29
|
+
*/
|
|
30
|
+
export interface LegacyVariantContainerPlacement {
|
|
31
|
+
moduleId: string;
|
|
32
|
+
instanceId: string;
|
|
33
|
+
scope: LegacyPlacementScope;
|
|
34
|
+
/** The page-variant / experiment-variant id, or null for the main regions. */
|
|
35
|
+
scopeId: string | null;
|
|
36
|
+
region: string;
|
|
37
|
+
sectionId: string;
|
|
38
|
+
columnId: string;
|
|
39
|
+
/** Position within `column.nodes` — the slot the container replaces 1:1. */
|
|
40
|
+
index: number;
|
|
41
|
+
mode: 'personalization' | 'ab_test';
|
|
42
|
+
armCount: number;
|
|
43
|
+
/** Arms whose `audienceId` is empty: real content bound to no audience. */
|
|
44
|
+
unboundArms: number;
|
|
45
|
+
/** Default arm + every arm's HTML, in bytes. */
|
|
46
|
+
htmlBytes: number;
|
|
47
|
+
/** Non-null when the placement was reported but deliberately left alone. */
|
|
48
|
+
refusal: string | null;
|
|
49
|
+
}
|
|
50
|
+
export interface LegacyMigrationOptions {
|
|
51
|
+
/** Id minter; injected so tests can assert exact ids. */
|
|
52
|
+
newId?: () => string;
|
|
53
|
+
/**
|
|
54
|
+
* Restrict the migration to these legacy module ids — the CLI's `--node`,
|
|
55
|
+
* which exists because the issue asks for per-placement, owner-invoked
|
|
56
|
+
* migration. Placements outside the selection are neither converted nor
|
|
57
|
+
* reported. Omit to take every placement in the document.
|
|
58
|
+
*/
|
|
59
|
+
moduleIds?: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
export interface LegacyMigrationResult {
|
|
62
|
+
/** The migrated document. Structurally shared with the input where nothing changed. */
|
|
63
|
+
document: LayoutDocument;
|
|
64
|
+
/** Every placement considered, converted or refused, in document order. */
|
|
65
|
+
placements: LegacyVariantContainerPlacement[];
|
|
66
|
+
converted: number;
|
|
67
|
+
/** False when `document` is the input unchanged — nothing to write. */
|
|
68
|
+
changed: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* One legacy `variantContainer` module → one `ModuleVariantContainer`.
|
|
72
|
+
*
|
|
73
|
+
* The container takes a FRESH id: it is a different node kind, and reusing the
|
|
74
|
+
* module's id would collide with the Default arm, which keeps it. The Default
|
|
75
|
+
* arm inherits the legacy module's `id`, `instanceId` and `style` — that arm is
|
|
76
|
+
* the one that rendered by default, so `data-instance-id`, any pinned selector
|
|
77
|
+
* and any hand-written style targeting the block all survive one level.
|
|
78
|
+
*
|
|
79
|
+
* `props.skeleton` is dropped: the target resolves server-side, so there is no
|
|
80
|
+
* client swap left to hide behind a placeholder.
|
|
81
|
+
*
|
|
82
|
+
* Callers should refuse a node carrying a `componentId` before reaching here —
|
|
83
|
+
* see {@link migrateLegacyVariantContainers}.
|
|
84
|
+
*/
|
|
85
|
+
export declare function convertLegacyVariantContainer(node: ModuleNode, options?: {
|
|
86
|
+
newId?: () => string;
|
|
87
|
+
}): ModuleVariantContainer;
|
|
88
|
+
/**
|
|
89
|
+
* Convert every legacy `variantContainer` module in a document.
|
|
90
|
+
*
|
|
91
|
+
* Pure: the input is never mutated, and the returned document shares every
|
|
92
|
+
* untouched branch with it, so `result.document === input` (by identity of its
|
|
93
|
+
* parts) wherever nothing changed. `changed` says whether there is anything to
|
|
94
|
+
* write at all.
|
|
95
|
+
*
|
|
96
|
+
* IDEMPOTENT BY CONSTRUCTION: the output holds no node satisfying
|
|
97
|
+
* `isModuleNode(n) && n.type === 'variantContainer'`, so a second run finds
|
|
98
|
+
* nothing. Re-running after a changeset publishes re-introduces the shape is the
|
|
99
|
+
* documented remedy, and it costs nothing when there is nothing to do.
|
|
100
|
+
*
|
|
101
|
+
* The three region maps walked — `regions`, `pageVariants[].regions` and
|
|
102
|
+
* `abExperiments[].variants[].regions` — are exactly the three
|
|
103
|
+
* `collectComponentInstances` walks, for the same reason: content stored in any
|
|
104
|
+
* of them is content that can render.
|
|
105
|
+
*/
|
|
106
|
+
export declare function migrateLegacyVariantContainers(document: LayoutDocument | null | undefined, options?: LegacyMigrationOptions): LegacyMigrationResult;
|
|
107
|
+
/**
|
|
108
|
+
* Every legacy `variantContainer` module a document holds, with the refusal
|
|
109
|
+
* reason for any that cannot be migrated.
|
|
110
|
+
*
|
|
111
|
+
* A projection of {@link migrateLegacyVariantContainers} rather than a second
|
|
112
|
+
* walk, so "what would be migrated" and "what is migrated" can never drift.
|
|
113
|
+
*/
|
|
114
|
+
export declare function findLegacyVariantContainers(document: LayoutDocument | null | undefined): LegacyVariantContainerPlacement[];
|
|
115
|
+
/**
|
|
116
|
+
* Does this document hold a legacy placement at all?
|
|
117
|
+
*
|
|
118
|
+
* The cheap structural confirm behind the CLI's `layout::text like
|
|
119
|
+
* '%"variantContainer"%'` candidate query, which over-selects: the same string
|
|
120
|
+
* is the section-level `VariantContainer`'s `type`.
|
|
121
|
+
*/
|
|
122
|
+
export declare function hasLegacyVariantContainer(document: LayoutDocument | null | undefined): boolean;
|
|
123
|
+
//# sourceMappingURL=legacy-variant-container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-variant-container.d.ts","sourceRoot":"","sources":["../../src/layout/legacy-variant-container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAG5B,MAAM,YAAY,CAAA;AAOnB,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,qBAAqB,CAAA;AAE/D,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,aAAa,CAAA;AAEhD,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;AAE7E;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,QAAQ,EAAE,cAAc,CAAA;IACxB,2EAA2E;IAC3E,UAAU,EAAE,+BAA+B,EAAE,CAAA;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAA;CACjB;AAiHD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GACrC,sBAAsB,CA+BxB;AAuKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAsEvB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAC1C,+BAA+B,EAAE,CAEnC;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAET"}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* legacy-variant-container.ts — the pure conversion behind
|
|
3
|
+
* `kywi upgrade:variant-containers` (kywi-cms#172).
|
|
4
|
+
*
|
|
5
|
+
* The deprecated `variantContainer` MODULE (`registry.ts`, `deprecated: true`)
|
|
6
|
+
* ships every arm's HTML to the browser and swaps them client-side with
|
|
7
|
+
* `patchVariantContainers` from `@kywi-software/js`. Its successor, the
|
|
8
|
+
* `ModuleVariantContainer` COLUMN NODE (`types.ts`), resolves server-side and
|
|
9
|
+
* edits in place. This module turns the first into the second.
|
|
10
|
+
*
|
|
11
|
+
* It is pure and lives in core rather than in the CLI for two reasons: it is the
|
|
12
|
+
* only part of the migration worth unit-testing exhaustively, and the same
|
|
13
|
+
* conversion has to run over two different stores — `kywi_content.layout` and
|
|
14
|
+
* the blueprint `kywi_section_templates.definition` — which are both plain
|
|
15
|
+
* `LayoutDocument`s. The CLI is only the driver.
|
|
16
|
+
*
|
|
17
|
+
* NOTHING here touches the database, the filesystem, or the clock.
|
|
18
|
+
*/
|
|
19
|
+
import { isModuleNode, } from './types.js';
|
|
20
|
+
// The editor's id minter, imported rather than re-declared so a migrated node
|
|
21
|
+
// is keyed exactly as an author-created one. `generate-id.ts` is deliberately
|
|
22
|
+
// dependency-free (see its header), so reaching it from here pulls nothing
|
|
23
|
+
// client-only into the layout graph.
|
|
24
|
+
import { generateId } from '../admin/layout-editor/generate-id.js';
|
|
25
|
+
/** The deprecated registry name. Not a `ModuleVariantContainer`'s `type`. */
|
|
26
|
+
export const LEGACY_VARIANT_CONTAINER_TYPE = 'variantContainer';
|
|
27
|
+
/** The module type a migrated HTML arm becomes (owner decision D1(a)). */
|
|
28
|
+
export const LEGACY_ARM_MODULE_TYPE = 'richText';
|
|
29
|
+
// ── Refusals ─────────────────────────────────────────────────────────────────
|
|
30
|
+
//
|
|
31
|
+
// A refused placement is REPORTED and left exactly as it is. Both refusals below
|
|
32
|
+
// exist because converting would be worse than not converting.
|
|
33
|
+
/**
|
|
34
|
+
* `validateLayoutDocument` rejects a `moduleVariantContainer` inside a
|
|
35
|
+
* SECTION-level `VariantContainer` arm outright — containers never nest. So a
|
|
36
|
+
* conversion there does not produce a slightly-worse document, it produces one
|
|
37
|
+
* that fails validation, which skips (and so blocks) the whole page. Refusing
|
|
38
|
+
* the one placement keeps the rest of the document migratable.
|
|
39
|
+
*/
|
|
40
|
+
const REFUSAL_NESTED = 'sits inside a section-level variantContainer arm — module containers never nest; ' +
|
|
41
|
+
'move it out of the personalized band first';
|
|
42
|
+
/**
|
|
43
|
+
* A module carrying a `componentId` takes its props FROM the component
|
|
44
|
+
* definition, not from the node (`ModuleNode.componentId`). Converting from the
|
|
45
|
+
* node's own props would therefore silently produce a container with no arms,
|
|
46
|
+
* and dropping the link would detach an instance the author never asked to
|
|
47
|
+
* detach. Migrating the definition is a separate job.
|
|
48
|
+
*/
|
|
49
|
+
const REFUSAL_LINKED = 'is linked to a saved component — its arms live in the component definition; ' +
|
|
50
|
+
'detach the instance first';
|
|
51
|
+
/**
|
|
52
|
+
* `variants` as stored: an array, or a JSON string of one.
|
|
53
|
+
*
|
|
54
|
+
* Both spellings are real — `parseVariants` in `variant-container-config.tsx`
|
|
55
|
+
* accepts either, so both reached the database. A malformed string is no arms,
|
|
56
|
+
* never a throw: this runs over stored data that no schema ever guarded, and a
|
|
57
|
+
* parse error must not take a whole migration run down.
|
|
58
|
+
*/
|
|
59
|
+
function readArms(raw) {
|
|
60
|
+
let list = [];
|
|
61
|
+
if (Array.isArray(raw))
|
|
62
|
+
list = raw;
|
|
63
|
+
else if (typeof raw === 'string' && raw.trim()) {
|
|
64
|
+
try {
|
|
65
|
+
const parsed = JSON.parse(raw);
|
|
66
|
+
if (Array.isArray(parsed))
|
|
67
|
+
list = parsed;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
list = [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return list.map((entry) => {
|
|
74
|
+
const arm = (entry ?? {});
|
|
75
|
+
// The legacy weight is a PERCENT (0-100, "Weight %" in the props rail); the
|
|
76
|
+
// target's is a fraction of 1, the same units the section-level container
|
|
77
|
+
// and `validateArmWeights` use. Anything non-numeric is not a weight at all,
|
|
78
|
+
// so the field is omitted rather than coerced to a misleading 0.
|
|
79
|
+
const rawWeight = arm.weight;
|
|
80
|
+
const numeric = typeof rawWeight === 'number' ? rawWeight : Number(rawWeight);
|
|
81
|
+
return {
|
|
82
|
+
audienceId: String(arm.audienceId ?? ''),
|
|
83
|
+
label: String(arm.label ?? ''),
|
|
84
|
+
content: String(arm.content ?? ''),
|
|
85
|
+
weight: rawWeight === undefined || rawWeight === null || rawWeight === '' || !Number.isFinite(numeric)
|
|
86
|
+
? undefined
|
|
87
|
+
: numeric / 100,
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function readMode(raw) {
|
|
92
|
+
// Mirrors the renderer's own coercion: anything that is not exactly 'ab_test'
|
|
93
|
+
// rendered as personalization, so anything else migrates as personalization.
|
|
94
|
+
return raw === 'ab_test' ? 'ab_test' : 'personalization';
|
|
95
|
+
}
|
|
96
|
+
function byteLength(text) {
|
|
97
|
+
return new TextEncoder().encode(text).length;
|
|
98
|
+
}
|
|
99
|
+
// ── Conversion ───────────────────────────────────────────────────────────────
|
|
100
|
+
/**
|
|
101
|
+
* An HTML arm as a module.
|
|
102
|
+
*
|
|
103
|
+
* `richText` and not `html` (owner decision D1(a)): both run the same
|
|
104
|
+
* `sanitizeHtml` over their input, so the markup inside the arm is unchanged,
|
|
105
|
+
* but `richText` is not in `ADMIN_ONLY_MODULE_TYPES` — so the migration
|
|
106
|
+
* introduces nothing privileged and needs no role — and the arm stays
|
|
107
|
+
* inline-editable afterwards, which is most of the point of migrating.
|
|
108
|
+
*/
|
|
109
|
+
function armModule(html, newId, identity) {
|
|
110
|
+
return {
|
|
111
|
+
id: identity?.id ?? newId(),
|
|
112
|
+
type: LEGACY_ARM_MODULE_TYPE,
|
|
113
|
+
instanceId: identity?.instanceId ?? newId(),
|
|
114
|
+
props: { content: html },
|
|
115
|
+
style: { ...(identity?.style ?? {}) },
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* One legacy `variantContainer` module → one `ModuleVariantContainer`.
|
|
120
|
+
*
|
|
121
|
+
* The container takes a FRESH id: it is a different node kind, and reusing the
|
|
122
|
+
* module's id would collide with the Default arm, which keeps it. The Default
|
|
123
|
+
* arm inherits the legacy module's `id`, `instanceId` and `style` — that arm is
|
|
124
|
+
* the one that rendered by default, so `data-instance-id`, any pinned selector
|
|
125
|
+
* and any hand-written style targeting the block all survive one level.
|
|
126
|
+
*
|
|
127
|
+
* `props.skeleton` is dropped: the target resolves server-side, so there is no
|
|
128
|
+
* client swap left to hide behind a placeholder.
|
|
129
|
+
*
|
|
130
|
+
* Callers should refuse a node carrying a `componentId` before reaching here —
|
|
131
|
+
* see {@link migrateLegacyVariantContainers}.
|
|
132
|
+
*/
|
|
133
|
+
export function convertLegacyVariantContainer(node, options = {}) {
|
|
134
|
+
const newId = options.newId ?? generateId;
|
|
135
|
+
const props = node.props ?? {};
|
|
136
|
+
const mode = readMode(props.mode);
|
|
137
|
+
const variants = readArms(props.variants).map((arm) => ({
|
|
138
|
+
id: newId(),
|
|
139
|
+
label: arm.label,
|
|
140
|
+
// Kept even when empty. `''` is the single legal spelling of an unbound
|
|
141
|
+
// draft arm (`ModuleVariantEntry`); the legacy renderer filtered these out,
|
|
142
|
+
// so surfacing them is strictly additive — the content was always there,
|
|
143
|
+
// it just had nowhere to show.
|
|
144
|
+
audienceId: arm.audienceId,
|
|
145
|
+
...(arm.weight === undefined ? {} : { weight: arm.weight }),
|
|
146
|
+
module: armModule(arm.content, newId),
|
|
147
|
+
}));
|
|
148
|
+
return {
|
|
149
|
+
id: newId(),
|
|
150
|
+
type: 'moduleVariantContainer',
|
|
151
|
+
mode,
|
|
152
|
+
// Never inherited — the legacy module has no experiment binding at all, and
|
|
153
|
+
// `validateModuleVariantContainerNode` requires one in ab_test mode.
|
|
154
|
+
...(mode === 'ab_test' ? { experimentId: newId() } : {}),
|
|
155
|
+
defaultModule: armModule(String(props.defaultContent ?? ''), newId, {
|
|
156
|
+
id: node.id,
|
|
157
|
+
instanceId: node.instanceId,
|
|
158
|
+
style: node.style ?? {},
|
|
159
|
+
}),
|
|
160
|
+
variants,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// ── Walking ──────────────────────────────────────────────────────────────────
|
|
164
|
+
/** Is this column node a legacy `variantContainer` MODULE? */
|
|
165
|
+
function isLegacyNode(node) {
|
|
166
|
+
// Structural, via `isModuleNode`: the section-level `VariantContainer` shares
|
|
167
|
+
// the literal type string, and a bare `type ===` would catch it. A region node
|
|
168
|
+
// is never reached by a COLUMN walk, so this is belt and braces — but the two
|
|
169
|
+
// shapes having one name is exactly the trap worth guarding twice.
|
|
170
|
+
return isModuleNode(node) && node.type === LEGACY_VARIANT_CONTAINER_TYPE;
|
|
171
|
+
}
|
|
172
|
+
function describe(node, ctx, column, section, index, refusal) {
|
|
173
|
+
const props = node.props ?? {};
|
|
174
|
+
const arms = readArms(props.variants);
|
|
175
|
+
return {
|
|
176
|
+
moduleId: node.id,
|
|
177
|
+
instanceId: node.instanceId,
|
|
178
|
+
scope: ctx.scope,
|
|
179
|
+
scopeId: ctx.scopeId,
|
|
180
|
+
region: ctx.region,
|
|
181
|
+
sectionId: section.id,
|
|
182
|
+
columnId: column.id,
|
|
183
|
+
index,
|
|
184
|
+
mode: readMode(props.mode),
|
|
185
|
+
armCount: arms.length,
|
|
186
|
+
unboundArms: arms.filter((arm) => arm.audienceId === '').length,
|
|
187
|
+
htmlBytes: byteLength(String(props.defaultContent ?? '')) +
|
|
188
|
+
arms.reduce((sum, arm) => sum + byteLength(arm.content), 0),
|
|
189
|
+
refusal,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/** Returns the column unchanged when it holds nothing to migrate. */
|
|
193
|
+
function walkColumn(column, section, ctx, walker) {
|
|
194
|
+
// `nodes` is guarded because this runs over STORED documents that never went
|
|
195
|
+
// through `validateLayoutDocument` — the same reason `columnModules` guards it.
|
|
196
|
+
const nodes = column.nodes ?? [];
|
|
197
|
+
let next = null;
|
|
198
|
+
for (let index = 0; index < nodes.length; index++) {
|
|
199
|
+
const node = nodes[index];
|
|
200
|
+
if (!isLegacyNode(node))
|
|
201
|
+
continue;
|
|
202
|
+
if (walker.selected && !walker.selected.has(node.id))
|
|
203
|
+
continue;
|
|
204
|
+
const refusal = ctx.nested
|
|
205
|
+
? REFUSAL_NESTED
|
|
206
|
+
: node.componentId
|
|
207
|
+
? REFUSAL_LINKED
|
|
208
|
+
: null;
|
|
209
|
+
walker.placements.push(describe(node, ctx, column, section, index, refusal));
|
|
210
|
+
if (refusal)
|
|
211
|
+
continue;
|
|
212
|
+
next ??= [...nodes];
|
|
213
|
+
next[index] = convertLegacyVariantContainer(node, { newId: walker.newId });
|
|
214
|
+
walker.converted++;
|
|
215
|
+
}
|
|
216
|
+
return next ? { ...column, nodes: next } : column;
|
|
217
|
+
}
|
|
218
|
+
function walkSection(section, ctx, walker) {
|
|
219
|
+
const columns = section.columns ?? [];
|
|
220
|
+
let next = null;
|
|
221
|
+
for (let i = 0; i < columns.length; i++) {
|
|
222
|
+
const column = columns[i];
|
|
223
|
+
const migrated = walkColumn(column, section, ctx, walker);
|
|
224
|
+
if (migrated === column)
|
|
225
|
+
continue;
|
|
226
|
+
next ??= [...columns];
|
|
227
|
+
next[i] = migrated;
|
|
228
|
+
}
|
|
229
|
+
return next ? { ...section, columns: next } : section;
|
|
230
|
+
}
|
|
231
|
+
function walkSections(sections, ctx, walker) {
|
|
232
|
+
let next = null;
|
|
233
|
+
for (let i = 0; i < sections.length; i++) {
|
|
234
|
+
const section = sections[i];
|
|
235
|
+
const migrated = walkSection(section, ctx, walker);
|
|
236
|
+
if (migrated === section)
|
|
237
|
+
continue;
|
|
238
|
+
next ??= [...sections];
|
|
239
|
+
next[i] = migrated;
|
|
240
|
+
}
|
|
241
|
+
return next ?? sections;
|
|
242
|
+
}
|
|
243
|
+
function walkRegionNode(node, ctx, walker) {
|
|
244
|
+
if (node.type === 'section')
|
|
245
|
+
return walkSection(node, ctx, walker);
|
|
246
|
+
if (node.type !== 'variantContainer')
|
|
247
|
+
return node;
|
|
248
|
+
// A section-level container. Its arm sections are walked so a legacy module
|
|
249
|
+
// hiding in one is still REPORTED — but with `nested`, so it is refused rather
|
|
250
|
+
// than converted into a document that can no longer be saved.
|
|
251
|
+
const nestedCtx = { ...ctx, nested: true };
|
|
252
|
+
const defaultSections = walkSections(node.defaultSections ?? [], nestedCtx, walker);
|
|
253
|
+
let variants = node.variants ?? [];
|
|
254
|
+
let variantsNext = null;
|
|
255
|
+
for (let i = 0; i < variants.length; i++) {
|
|
256
|
+
const variant = variants[i];
|
|
257
|
+
const sections = walkSections(variant.sections ?? [], nestedCtx, walker);
|
|
258
|
+
if (sections === variant.sections)
|
|
259
|
+
continue;
|
|
260
|
+
variantsNext ??= [...variants];
|
|
261
|
+
variantsNext[i] = { ...variant, sections };
|
|
262
|
+
}
|
|
263
|
+
variants = variantsNext ?? variants;
|
|
264
|
+
if (defaultSections === node.defaultSections && variants === node.variants)
|
|
265
|
+
return node;
|
|
266
|
+
return { ...node, defaultSections, variants };
|
|
267
|
+
}
|
|
268
|
+
function walkRegions(regions, scope, scopeId, walker) {
|
|
269
|
+
if (!regions)
|
|
270
|
+
return regions;
|
|
271
|
+
let next = null;
|
|
272
|
+
for (const [region, nodes] of Object.entries(regions)) {
|
|
273
|
+
const ctx = { scope, scopeId, region, nested: false };
|
|
274
|
+
const list = nodes ?? [];
|
|
275
|
+
let listNext = null;
|
|
276
|
+
for (let i = 0; i < list.length; i++) {
|
|
277
|
+
const node = list[i];
|
|
278
|
+
const migrated = walkRegionNode(node, ctx, walker);
|
|
279
|
+
if (migrated === node)
|
|
280
|
+
continue;
|
|
281
|
+
listNext ??= [...list];
|
|
282
|
+
listNext[i] = migrated;
|
|
283
|
+
}
|
|
284
|
+
if (!listNext)
|
|
285
|
+
continue;
|
|
286
|
+
next ??= { ...regions };
|
|
287
|
+
next[region] = listNext;
|
|
288
|
+
}
|
|
289
|
+
return next ?? regions;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Convert every legacy `variantContainer` module in a document.
|
|
293
|
+
*
|
|
294
|
+
* Pure: the input is never mutated, and the returned document shares every
|
|
295
|
+
* untouched branch with it, so `result.document === input` (by identity of its
|
|
296
|
+
* parts) wherever nothing changed. `changed` says whether there is anything to
|
|
297
|
+
* write at all.
|
|
298
|
+
*
|
|
299
|
+
* IDEMPOTENT BY CONSTRUCTION: the output holds no node satisfying
|
|
300
|
+
* `isModuleNode(n) && n.type === 'variantContainer'`, so a second run finds
|
|
301
|
+
* nothing. Re-running after a changeset publishes re-introduces the shape is the
|
|
302
|
+
* documented remedy, and it costs nothing when there is nothing to do.
|
|
303
|
+
*
|
|
304
|
+
* The three region maps walked — `regions`, `pageVariants[].regions` and
|
|
305
|
+
* `abExperiments[].variants[].regions` — are exactly the three
|
|
306
|
+
* `collectComponentInstances` walks, for the same reason: content stored in any
|
|
307
|
+
* of them is content that can render.
|
|
308
|
+
*/
|
|
309
|
+
export function migrateLegacyVariantContainers(document, options = {}) {
|
|
310
|
+
const empty = {
|
|
311
|
+
document: document ?? { regions: {} },
|
|
312
|
+
placements: [],
|
|
313
|
+
converted: 0,
|
|
314
|
+
changed: false,
|
|
315
|
+
};
|
|
316
|
+
if (!document || typeof document !== 'object')
|
|
317
|
+
return empty;
|
|
318
|
+
const walker = {
|
|
319
|
+
newId: options.newId ?? generateId,
|
|
320
|
+
selected: options.moduleIds ? new Set(options.moduleIds) : null,
|
|
321
|
+
placements: [],
|
|
322
|
+
converted: 0,
|
|
323
|
+
};
|
|
324
|
+
const regions = walkRegions(document.regions, 'regions', null, walker) ?? {};
|
|
325
|
+
let pageVariants = document.pageVariants;
|
|
326
|
+
if (pageVariants) {
|
|
327
|
+
let next = null;
|
|
328
|
+
for (let i = 0; i < pageVariants.length; i++) {
|
|
329
|
+
const variant = pageVariants[i];
|
|
330
|
+
const migrated = walkRegions(variant.regions, 'pageVariant', variant.id, walker);
|
|
331
|
+
if (migrated === variant.regions)
|
|
332
|
+
continue;
|
|
333
|
+
next ??= [...pageVariants];
|
|
334
|
+
next[i] = { ...variant, regions: migrated ?? {} };
|
|
335
|
+
}
|
|
336
|
+
pageVariants = next ?? pageVariants;
|
|
337
|
+
}
|
|
338
|
+
let abExperiments = document.abExperiments;
|
|
339
|
+
if (abExperiments) {
|
|
340
|
+
let next = null;
|
|
341
|
+
for (let i = 0; i < abExperiments.length; i++) {
|
|
342
|
+
const experiment = abExperiments[i];
|
|
343
|
+
const armVariants = experiment.variants ?? [];
|
|
344
|
+
let armsNext = null;
|
|
345
|
+
for (let j = 0; j < armVariants.length; j++) {
|
|
346
|
+
const arm = armVariants[j];
|
|
347
|
+
const migrated = walkRegions(arm.regions, 'abExperiment', arm.id, walker);
|
|
348
|
+
if (migrated === arm.regions)
|
|
349
|
+
continue;
|
|
350
|
+
armsNext ??= [...armVariants];
|
|
351
|
+
armsNext[j] = { ...arm, regions: migrated ?? {} };
|
|
352
|
+
}
|
|
353
|
+
if (!armsNext)
|
|
354
|
+
continue;
|
|
355
|
+
next ??= [...abExperiments];
|
|
356
|
+
next[i] = { ...experiment, variants: armsNext };
|
|
357
|
+
}
|
|
358
|
+
abExperiments = next ?? abExperiments;
|
|
359
|
+
}
|
|
360
|
+
const changed = regions !== document.regions ||
|
|
361
|
+
pageVariants !== document.pageVariants ||
|
|
362
|
+
abExperiments !== document.abExperiments;
|
|
363
|
+
return {
|
|
364
|
+
document: changed
|
|
365
|
+
? {
|
|
366
|
+
...document,
|
|
367
|
+
regions,
|
|
368
|
+
...(pageVariants ? { pageVariants } : {}),
|
|
369
|
+
...(abExperiments ? { abExperiments } : {}),
|
|
370
|
+
}
|
|
371
|
+
: document,
|
|
372
|
+
placements: walker.placements,
|
|
373
|
+
converted: walker.converted,
|
|
374
|
+
changed,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Every legacy `variantContainer` module a document holds, with the refusal
|
|
379
|
+
* reason for any that cannot be migrated.
|
|
380
|
+
*
|
|
381
|
+
* A projection of {@link migrateLegacyVariantContainers} rather than a second
|
|
382
|
+
* walk, so "what would be migrated" and "what is migrated" can never drift.
|
|
383
|
+
*/
|
|
384
|
+
export function findLegacyVariantContainers(document) {
|
|
385
|
+
return migrateLegacyVariantContainers(document).placements;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Does this document hold a legacy placement at all?
|
|
389
|
+
*
|
|
390
|
+
* The cheap structural confirm behind the CLI's `layout::text like
|
|
391
|
+
* '%"variantContainer"%'` candidate query, which over-selects: the same string
|
|
392
|
+
* is the section-level `VariantContainer`'s `type`.
|
|
393
|
+
*/
|
|
394
|
+
export function hasLegacyVariantContainer(document) {
|
|
395
|
+
return findLegacyVariantContainers(document).length > 0;
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=legacy-variant-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-variant-container.js","sourceRoot":"","sources":["../../src/layout/legacy-variant-container.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-permissions.d.ts","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,YAAY,CAAA;AAIvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAA;AAoF7E,6DAA6D;AAC7D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,yEAAyE;AACzE,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,MAAM,KAChB,2BAA2B,GAAG,IAAI,GAAG,SAAS,CAAA;AAKnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACxD,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"module-permissions.d.ts","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,YAAY,CAAA;AAIvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAA;AAoF7E,6DAA6D;AAC7D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,yEAAyE;AACzE,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,MAAM,KAChB,2BAA2B,GAAG,IAAI,GAAG,SAAS,CAAA;AAKnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACxD,cAAc,GAAG,IAAI,CAoEvB;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACrD,MAAM,EAAE,CAIV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,gBAAgB,CAAC,EAAE,yBAAyB,GAC3C,MAAM,EAAE,CAkBV"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { columnModules, validateLayoutSection, validateVariantContainer } from './types.js';
|
|
1
|
+
import { columnModules, validateLayoutSection, validateModuleVariantContainer, validateVariantContainer } from './types.js';
|
|
2
2
|
import { diffComponentRefs } from './component-refs.js';
|
|
3
3
|
/**
|
|
4
4
|
* Module types that expose privileged capabilities (raw HTML injection) and must
|
|
@@ -145,6 +145,30 @@ export function componentDefinitionAsDocument(component) {
|
|
|
145
145
|
const parsed = validateVariantContainer(definition);
|
|
146
146
|
return parsed.success ? { regions: { [DEFINITION_REGION]: [parsed.data] } } : null;
|
|
147
147
|
}
|
|
148
|
+
if (component.type === 'moduleVariantContainer') {
|
|
149
|
+
// The fourth kind (kywi-cms#170). A module container is a COLUMN node, so it
|
|
150
|
+
// becomes a one-section, one-column document — the shape it really lives in
|
|
151
|
+
// — and `iterModuleNodes` then reaches every arm's module through
|
|
152
|
+
// `columnModules`, exactly as it reaches a plain module beside one on a page.
|
|
153
|
+
// Without this branch a promoted `html` block inside a component definition
|
|
154
|
+
// would be invisible to the gate, which is precisely the laundering the gate
|
|
155
|
+
// exists to stop.
|
|
156
|
+
const parsed = validateModuleVariantContainer(definition);
|
|
157
|
+
if (!parsed.success)
|
|
158
|
+
return null;
|
|
159
|
+
return {
|
|
160
|
+
regions: {
|
|
161
|
+
[DEFINITION_REGION]: [
|
|
162
|
+
{
|
|
163
|
+
id: 'definition:section',
|
|
164
|
+
type: 'section',
|
|
165
|
+
style: {},
|
|
166
|
+
columns: [{ id: 'definition:column', width: 12, nodes: [parsed.data] }],
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
148
172
|
return null;
|
|
149
173
|
}
|
|
150
174
|
/** Every admin-only module type contained in a definition, ignoring identity. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-permissions.js","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"module-permissions.js","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,34 @@ export declare function NavigationModule({ props }: ModuleProps): React.JSX.Elem
|
|
|
66
66
|
export declare function SearchModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
|
|
67
67
|
export declare function ComponentModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
|
|
68
68
|
export declare function FormModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
|
|
69
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The consent banner. Its three buttons write the `kywi_consent` cookie through
|
|
71
|
+
* `setConsent()`, which is what every gated cookie write then reads
|
|
72
|
+
* (`audiences/consent.ts` owns the category map and the gate) — before
|
|
73
|
+
* kywi-cms#91 they were inert and the banner solicited a decision it discarded.
|
|
74
|
+
*
|
|
75
|
+
* Accept All / Reject All decide immediately. Customize reveals the per-category
|
|
76
|
+
* checkboxes (collapsed by default so the banner stays a one-line ask) and adds
|
|
77
|
+
* a Save Preferences button that records exactly what is ticked. `Essential` is
|
|
78
|
+
* checked and disabled throughout: necessary cookies are never gated, and the
|
|
79
|
+
* control says so rather than accepting a choice it would ignore.
|
|
80
|
+
*
|
|
81
|
+
* Rendering is decided AFTER mount, never during SSR: the server does not know
|
|
82
|
+
* this visitor's decision at render time, so the banner is always in the HTML
|
|
83
|
+
* and an effect resolves it. That keeps hydration deterministic and keeps the
|
|
84
|
+
* module cacheable.
|
|
85
|
+
*
|
|
86
|
+
* Which is why the markup ships HIDDEN, as `kywi-consent-pending`, and the
|
|
87
|
+
* effect unhides it only for a visitor with no decision on file. Rendering it
|
|
88
|
+
* visible and then removing it would flash a consent banner at every returning
|
|
89
|
+
* visitor on every page — soliciting a decision they already made, for the
|
|
90
|
+
* length of a paint. Better to reveal late than to ask twice.
|
|
91
|
+
*
|
|
92
|
+
* Inside the admin layout-editor canvas the banner always renders and its
|
|
93
|
+
* buttons record nothing — an editor placing the module must be able to see and
|
|
94
|
+
* arrange it, and clicking it there is not a visitor's consent.
|
|
95
|
+
*/
|
|
96
|
+
export declare function CookieConsentModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element | null;
|
|
70
97
|
/**
|
|
71
98
|
* Module-level variantContainer. Renders every arm into the DOM — the Default
|
|
72
99
|
* arm visible, audience arms hidden — each tagged with `data-kywi-variant`. The
|