@kywi-software/core 0.10.0 → 0.12.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 +111 -23
- package/README.md +67 -0
- package/dist/admin/content-form.d.ts.map +1 -1
- package/dist/admin/content-form.js +97 -10
- package/dist/admin/content-form.js.map +1 -1
- package/dist/admin/layout-editor/component-actions.d.ts +219 -22
- package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-actions.js +356 -36
- package/dist/admin/layout-editor/component-actions.js.map +1 -1
- package/dist/admin/layout-editor/component-fork.d.ts +224 -0
- package/dist/admin/layout-editor/component-fork.d.ts.map +1 -0
- package/dist/admin/layout-editor/component-fork.js +342 -0
- package/dist/admin/layout-editor/component-fork.js.map +1 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts +28 -7
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +145 -32
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-dialog.d.ts +164 -0
- package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -0
- package/dist/admin/layout-editor/editor-dialog.js +195 -0
- package/dist/admin/layout-editor/editor-dialog.js.map +1 -0
- package/dist/admin/layout-editor/editor-state.d.ts +76 -0
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +47 -1
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +366 -4
- package/dist/admin/layout-editor/index.d.ts +10 -1
- package/dist/admin/layout-editor/index.d.ts.map +1 -1
- package/dist/admin/layout-editor/index.js +11 -1
- package/dist/admin/layout-editor/index.js.map +1 -1
- package/dist/admin/layout-editor/inline-text.d.ts +56 -4
- package/dist/admin/layout-editor/inline-text.d.ts.map +1 -1
- package/dist/admin/layout-editor/inline-text.js +134 -11
- package/dist/admin/layout-editor/inline-text.js.map +1 -1
- package/dist/admin/layout-editor/layout-editor.d.ts +58 -1
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +160 -190
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/linked-component.d.ts +39 -0
- package/dist/admin/layout-editor/linked-component.d.ts.map +1 -0
- package/dist/admin/layout-editor/linked-component.js +42 -0
- package/dist/admin/layout-editor/linked-component.js.map +1 -0
- package/dist/admin/layout-editor/module-overlay.d.ts +36 -14
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +233 -25
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/node-lookup.d.ts +35 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
- package/dist/admin/layout-editor/node-lookup.js +91 -0
- 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 +150 -32
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +54 -1
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +119 -10
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/section-overlay.d.ts +16 -1
- package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-overlay.js +21 -11
- package/dist/admin/layout-editor/section-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-template-picker.d.ts +27 -1
- package/dist/admin/layout-editor/section-template-picker.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-template-picker.js +71 -17
- package/dist/admin/layout-editor/section-template-picker.js.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.js +5 -5
- package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/use-chrome-flip.d.ts +111 -11
- package/dist/admin/layout-editor/use-chrome-flip.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-chrome-flip.js +233 -33
- package/dist/admin/layout-editor/use-chrome-flip.js.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.d.ts +61 -0
- package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-connect.js +292 -0
- package/dist/admin/layout-editor/use-component-connect.js.map +1 -0
- package/dist/admin/layout-editor/use-component-fork.d.ts +123 -0
- package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-fork.js +346 -0
- package/dist/admin/layout-editor/use-component-fork.js.map +1 -0
- package/dist/admin/layout-editor/use-component-library.d.ts +94 -0
- package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -0
- package/dist/admin/layout-editor/use-component-library.js +55 -0
- package/dist/admin/layout-editor/use-component-library.js.map +1 -0
- package/dist/admin/registry.d.ts +11 -2
- package/dist/admin/registry.d.ts.map +1 -1
- package/dist/admin/registry.js +40 -4
- package/dist/admin/registry.js.map +1 -1
- package/dist/admin/server.d.ts +1 -0
- package/dist/admin/server.d.ts.map +1 -1
- package/dist/admin/server.js +5 -0
- package/dist/admin/server.js.map +1 -1
- package/dist/admin/styles/admin.css +57 -1
- package/dist/admin/surfaces/components/component-edit.d.ts +3 -0
- package/dist/admin/surfaces/components/component-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/components/component-edit.js +235 -0
- package/dist/admin/surfaces/components/component-edit.js.map +1 -0
- package/dist/admin/surfaces/components/components-data.d.ts +153 -0
- package/dist/admin/surfaces/components/components-data.d.ts.map +1 -0
- package/dist/admin/surfaces/components/components-data.js +154 -0
- package/dist/admin/surfaces/components/components-data.js.map +1 -0
- package/dist/admin/surfaces/components/components-list.d.ts +3 -0
- package/dist/admin/surfaces/components/components-list.d.ts.map +1 -0
- package/dist/admin/surfaces/components/components-list.js +196 -0
- package/dist/admin/surfaces/components/components-list.js.map +1 -0
- package/dist/admin/surfaces/components/definition-canvas.d.ts +73 -0
- package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -0
- package/dist/admin/surfaces/components/definition-canvas.js +207 -0
- package/dist/admin/surfaces/components/definition-canvas.js.map +1 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.js +14 -2
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-data.d.ts +3 -14
- package/dist/admin/surfaces/layouts/layouts-data.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-data.js +4 -7
- package/dist/admin/surfaces/layouts/layouts-data.js.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-list.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layouts-list.js +16 -22
- package/dist/admin/surfaces/layouts/layouts-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 +1 -0
- package/dist/admin/surfaces/settings/admin-features.js.map +1 -1
- package/dist/api/bulk-routes.d.ts.map +1 -1
- package/dist/api/bulk-routes.js +25 -0
- package/dist/api/bulk-routes.js.map +1 -1
- package/dist/api/changeset-routes.d.ts.map +1 -1
- package/dist/api/changeset-routes.js +17 -3
- package/dist/api/changeset-routes.js.map +1 -1
- package/dist/api/component-routes.d.ts.map +1 -1
- package/dist/api/component-routes.js +228 -8
- package/dist/api/component-routes.js.map +1 -1
- package/dist/api/content-routes.d.ts.map +1 -1
- package/dist/api/content-routes.js +64 -0
- package/dist/api/content-routes.js.map +1 -1
- package/dist/api/feed-routes.d.ts +6 -6
- package/dist/api/graphql/resolvers.d.ts +4 -4
- package/dist/api/layout-routes.d.ts.map +1 -1
- package/dist/api/layout-routes.js +4 -17
- package/dist/api/layout-routes.js.map +1 -1
- package/dist/api/layout-write-guard.d.ts +80 -0
- package/dist/api/layout-write-guard.d.ts.map +1 -0
- package/dist/api/layout-write-guard.js +88 -0
- package/dist/api/layout-write-guard.js.map +1 -0
- package/dist/api/section-template-routes.d.ts.map +1 -1
- package/dist/api/section-template-routes.js +11 -0
- package/dist/api/section-template-routes.js.map +1 -1
- package/dist/api/translation-routes.d.ts.map +1 -1
- package/dist/api/translation-routes.js +8 -0
- package/dist/api/translation-routes.js.map +1 -1
- package/dist/api/version-routes.d.ts.map +1 -1
- package/dist/api/version-routes.js +20 -8
- package/dist/api/version-routes.js.map +1 -1
- package/dist/api/workflow-routes.d.ts.map +1 -1
- package/dist/api/workflow-routes.js +53 -8
- package/dist/api/workflow-routes.js.map +1 -1
- package/dist/db/analytics-queries.d.ts +3 -3
- package/dist/db/apply-snapshot.d.ts +75 -8
- package/dist/db/apply-snapshot.d.ts.map +1 -1
- package/dist/db/apply-snapshot.js +104 -8
- package/dist/db/apply-snapshot.js.map +1 -1
- package/dist/db/audit-queries.d.ts +12 -12
- package/dist/db/category-queries.d.ts +3 -3
- package/dist/db/changeset-audit-queries.d.ts +4 -4
- package/dist/db/changeset-queries.d.ts +7 -7
- package/dist/db/comment-queries.d.ts +8 -8
- package/dist/db/comment-subscription-queries.d.ts +2 -2
- package/dist/db/component-instance-queries.d.ts +197 -0
- package/dist/db/component-instance-queries.d.ts.map +1 -0
- package/dist/db/component-instance-queries.js +405 -0
- package/dist/db/component-instance-queries.js.map +1 -0
- package/dist/db/content-queries.d.ts.map +1 -1
- package/dist/db/content-queries.js +39 -2
- package/dist/db/content-queries.js.map +1 -1
- package/dist/db/extension-queries.d.ts +7 -7
- 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 +13 -1
- package/dist/db/layout-queries.d.ts.map +1 -1
- package/dist/db/layout-queries.js +52 -7
- package/dist/db/layout-queries.js.map +1 -1
- package/dist/db/locale-queries.d.ts.map +1 -1
- package/dist/db/locale-queries.js +0 -0
- package/dist/db/locale-queries.js.map +1 -1
- package/dist/db/media-queries.d.ts +12 -12
- package/dist/db/revision-queries.d.ts +3 -3
- package/dist/db/site-admin-queries.d.ts +2 -2
- package/dist/db/site-membership-queries.d.ts +3 -3
- package/dist/db/site-plugin-queries.d.ts +2 -2
- package/dist/db/site-queries.d.ts +6 -6
- package/dist/db/version-queries.d.ts +12 -12
- package/dist/db/webhook-queries.d.ts +11 -11
- package/dist/db/workflow-queries.d.ts +6 -6
- package/dist/db/workflow-queries.d.ts.map +1 -1
- package/dist/db/workflow-queries.js +11 -2
- package/dist/db/workflow-queries.js.map +1 -1
- package/dist/layout/comments-module.d.ts.map +1 -1
- package/dist/layout/comments-module.js +6 -2
- package/dist/layout/comments-module.js.map +1 -1
- package/dist/layout/component-refs.d.ts +465 -0
- package/dist/layout/component-refs.d.ts.map +1 -0
- package/dist/layout/component-refs.js +848 -0
- package/dist/layout/component-refs.js.map +1 -0
- package/dist/layout/index.d.ts +2 -1
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +1 -0
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/module-permissions.d.ts +49 -1
- package/dist/layout/module-permissions.d.ts.map +1 -1
- package/dist/layout/module-permissions.js +117 -6
- package/dist/layout/module-permissions.js.map +1 -1
- package/dist/layout/module-render-context.d.ts +32 -0
- package/dist/layout/module-render-context.d.ts.map +1 -1
- package/dist/layout/module-render-context.js +32 -1
- package/dist/layout/module-render-context.js.map +1 -1
- package/dist/layout/modules-extended.d.ts.map +1 -1
- package/dist/layout/modules-extended.js +21 -11
- package/dist/layout/modules-extended.js.map +1 -1
- package/dist/layout/modules.d.ts.map +1 -1
- package/dist/layout/modules.js +15 -10
- package/dist/layout/modules.js.map +1 -1
- package/dist/layout/renderer.d.ts +51 -4
- package/dist/layout/renderer.d.ts.map +1 -1
- package/dist/layout/renderer.js +36 -38
- package/dist/layout/renderer.js.map +1 -1
- package/dist/layout/types.d.ts +42 -0
- package/dist/layout/types.d.ts.map +1 -1
- package/dist/layout/types.js +54 -11
- package/dist/layout/types.js.map +1 -1
- package/dist/schema/base.d.ts +1 -1
- package/dist/schema/components.d.ts +150 -0
- package/dist/schema/components.d.ts.map +1 -1
- package/dist/schema/components.js +50 -4
- package/dist/schema/components.js.map +1 -1
- package/dist/scope/inline-editing.d.ts.map +1 -1
- package/dist/scope/inline-editing.js +10 -0
- package/dist/scope/inline-editing.js.map +1 -1
- package/dist/scope/sticky-offset.d.ts +185 -0
- package/dist/scope/sticky-offset.d.ts.map +1 -0
- package/dist/scope/sticky-offset.js +432 -0
- package/dist/scope/sticky-offset.js.map +1 -0
- package/dist/site/styles.css +41 -3
- package/dist/versioning/scheduler.d.ts +8 -0
- package/dist/versioning/scheduler.d.ts.map +1 -1
- package/dist/versioning/scheduler.js +21 -7
- package/dist/versioning/scheduler.js.map +1 -1
- package/package.json +1 -1
package/dist/layout/types.d.ts
CHANGED
|
@@ -41,6 +41,15 @@ export interface VariantContainer {
|
|
|
41
41
|
winnerId?: string;
|
|
42
42
|
defaultSections: LayoutSection[];
|
|
43
43
|
variants: VariantEntry[];
|
|
44
|
+
/**
|
|
45
|
+
* Links this container to a `kywi_components` row (`type:'variantContainer'`),
|
|
46
|
+
* mirroring `LayoutSection.componentId` (kywi-cms#147). Resolution is
|
|
47
|
+
* wholesale — the resolved container's default sections and variant arms
|
|
48
|
+
* render in place of this one's, which stay as the graceful-degradation
|
|
49
|
+
* fallback copy. Audience/experiment selection is unaffected: it runs on the
|
|
50
|
+
* resolved container exactly as on an inline one.
|
|
51
|
+
*/
|
|
52
|
+
componentId?: string;
|
|
44
53
|
}
|
|
45
54
|
export type RegionNode = LayoutSection | VariantContainer;
|
|
46
55
|
/** Narrow a RegionNode to a LayoutSection (as opposed to a VariantContainer). */
|
|
@@ -71,9 +80,42 @@ export type LayoutValidationResult = {
|
|
|
71
80
|
success: false;
|
|
72
81
|
error: string;
|
|
73
82
|
};
|
|
83
|
+
export type LayoutSectionValidationResult = {
|
|
84
|
+
success: true;
|
|
85
|
+
data: LayoutSection;
|
|
86
|
+
} | {
|
|
87
|
+
success: false;
|
|
88
|
+
error: string;
|
|
89
|
+
};
|
|
90
|
+
export type VariantContainerValidationResult = {
|
|
91
|
+
success: true;
|
|
92
|
+
data: VariantContainer;
|
|
93
|
+
} | {
|
|
94
|
+
success: false;
|
|
95
|
+
error: string;
|
|
96
|
+
};
|
|
74
97
|
/**
|
|
75
98
|
* Parse and validate a layout document.
|
|
76
99
|
* Checks that within every section, columns sum to exactly 12.
|
|
77
100
|
*/
|
|
78
101
|
export declare function validateLayoutDocument(input: unknown): LayoutValidationResult;
|
|
102
|
+
/**
|
|
103
|
+
* Validate ONE section on its own, by exactly the rules
|
|
104
|
+
* {@link validateLayoutDocument} would apply to it inside a region: the same
|
|
105
|
+
* schema, and the same columns-sum-to-12 check.
|
|
106
|
+
*
|
|
107
|
+
* This is what a stored `type:'section'` component definition must satisfy
|
|
108
|
+
* (kywi-cms#147). A definition that fails here would be materialised into every
|
|
109
|
+
* page that links it — by detach-all, or by an editor detaching one instance —
|
|
110
|
+
* and every later layout save of those pages would then be rejected, leaving
|
|
111
|
+
* them permanently un-editable. Rejecting it at the component write is the only
|
|
112
|
+
* place the damage is still contained to one request.
|
|
113
|
+
*/
|
|
114
|
+
export declare function validateLayoutSection(input: unknown): LayoutSectionValidationResult;
|
|
115
|
+
/**
|
|
116
|
+
* The variant-container counterpart of {@link validateLayoutSection}: schema,
|
|
117
|
+
* the ab_test/experimentId rule, and the columns-sum-to-12 check on every
|
|
118
|
+
* default and variant section.
|
|
119
|
+
*/
|
|
120
|
+
export declare function validateVariantContainer(input: unknown): VariantContainerValidationResult;
|
|
79
121
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,kBAAkB,CAAA;IACxB,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,QAAQ,EAAE,YAAY,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
|
package/dist/layout/types.js
CHANGED
|
@@ -39,7 +39,19 @@ const VariantEntrySchema = z.object({
|
|
|
39
39
|
weight: z.number().min(0).max(1),
|
|
40
40
|
sections: z.array(LayoutSectionSchema),
|
|
41
41
|
});
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* THE variant-container field list — one declaration, used everywhere.
|
|
44
|
+
*
|
|
45
|
+
* It is a bare `ZodObject` because `z.discriminatedUnion` (below) only accepts
|
|
46
|
+
* object members: a `.refine()` here would make it a `ZodEffects` and force the
|
|
47
|
+
* union to carry a hand-copied duplicate of every field. That duplicate is
|
|
48
|
+
* exactly how a field can be added to "the" schema and still be silently
|
|
49
|
+
* stripped from every container inside a region — so the refinement lives on
|
|
50
|
+
* the exported wrapper instead, and the ab_test/experimentId rule is enforced
|
|
51
|
+
* for documents by `validateVariantContainerSections`, which runs on every
|
|
52
|
+
* container `validateLayoutDocument` walks.
|
|
53
|
+
*/
|
|
54
|
+
const VariantContainerObjectSchema = z.object({
|
|
43
55
|
id: z.string(),
|
|
44
56
|
type: z.literal('variantContainer'),
|
|
45
57
|
mode: z.enum(['personalization', 'ab_test']),
|
|
@@ -47,18 +59,12 @@ const VariantContainerSchema = z.object({
|
|
|
47
59
|
winnerId: z.string().optional(),
|
|
48
60
|
defaultSections: z.array(LayoutSectionSchema),
|
|
49
61
|
variants: z.array(VariantEntrySchema),
|
|
50
|
-
|
|
62
|
+
componentId: z.string().optional(),
|
|
63
|
+
});
|
|
64
|
+
const VariantContainerSchema = VariantContainerObjectSchema.refine((val) => val.mode !== 'ab_test' || (val.experimentId != null && val.experimentId.length > 0), { message: 'experimentId is required when mode is ab_test' });
|
|
51
65
|
const RegionNodeSchema = z.discriminatedUnion('type', [
|
|
52
66
|
LayoutSectionSchema,
|
|
53
|
-
|
|
54
|
-
id: z.string(),
|
|
55
|
-
type: z.literal('variantContainer'),
|
|
56
|
-
mode: z.enum(['personalization', 'ab_test']),
|
|
57
|
-
experimentId: z.string().optional(),
|
|
58
|
-
winnerId: z.string().optional(),
|
|
59
|
-
defaultSections: z.array(LayoutSectionSchema),
|
|
60
|
-
variants: z.array(VariantEntrySchema),
|
|
61
|
-
}),
|
|
67
|
+
VariantContainerObjectSchema,
|
|
62
68
|
]);
|
|
63
69
|
const PageVariantSchema = z.object({
|
|
64
70
|
id: z.string(),
|
|
@@ -173,4 +179,41 @@ export function validateLayoutDocument(input) {
|
|
|
173
179
|
}
|
|
174
180
|
return { success: true, data: layout };
|
|
175
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Validate ONE section on its own, by exactly the rules
|
|
184
|
+
* {@link validateLayoutDocument} would apply to it inside a region: the same
|
|
185
|
+
* schema, and the same columns-sum-to-12 check.
|
|
186
|
+
*
|
|
187
|
+
* This is what a stored `type:'section'` component definition must satisfy
|
|
188
|
+
* (kywi-cms#147). A definition that fails here would be materialised into every
|
|
189
|
+
* page that links it — by detach-all, or by an editor detaching one instance —
|
|
190
|
+
* and every later layout save of those pages would then be rejected, leaving
|
|
191
|
+
* them permanently un-editable. Rejecting it at the component write is the only
|
|
192
|
+
* place the damage is still contained to one request.
|
|
193
|
+
*/
|
|
194
|
+
export function validateLayoutSection(input) {
|
|
195
|
+
const parsed = LayoutSectionSchema.safeParse(input);
|
|
196
|
+
if (!parsed.success) {
|
|
197
|
+
return { success: false, error: parsed.error.errors.map(e => e.message).join('; ') };
|
|
198
|
+
}
|
|
199
|
+
const columnsErr = validateSectionColumns(parsed.data, '');
|
|
200
|
+
if (columnsErr)
|
|
201
|
+
return { success: false, error: columnsErr.trim() };
|
|
202
|
+
return { success: true, data: parsed.data };
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The variant-container counterpart of {@link validateLayoutSection}: schema,
|
|
206
|
+
* the ab_test/experimentId rule, and the columns-sum-to-12 check on every
|
|
207
|
+
* default and variant section.
|
|
208
|
+
*/
|
|
209
|
+
export function validateVariantContainer(input) {
|
|
210
|
+
const parsed = VariantContainerSchema.safeParse(input);
|
|
211
|
+
if (!parsed.success) {
|
|
212
|
+
return { success: false, error: parsed.error.errors.map(e => e.message).join('; ') };
|
|
213
|
+
}
|
|
214
|
+
const err = validateVariantContainerSections(parsed.data, '');
|
|
215
|
+
if (err)
|
|
216
|
+
return { success: false, error: err.trim() };
|
|
217
|
+
return { success: true, data: parsed.data };
|
|
218
|
+
}
|
|
176
219
|
//# sourceMappingURL=types.js.map
|
package/dist/layout/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/base.d.ts
CHANGED
|
@@ -5727,7 +5727,7 @@ export declare const kywiAnalyticsEvents: import("drizzle-orm/pg-core").PgTableW
|
|
|
5727
5727
|
tableName: "kywi_analytics_events";
|
|
5728
5728
|
dataType: "string";
|
|
5729
5729
|
columnType: "PgText";
|
|
5730
|
-
data: "
|
|
5730
|
+
data: "click" | "matched" | "impression";
|
|
5731
5731
|
driverParam: string;
|
|
5732
5732
|
notNull: true;
|
|
5733
5733
|
hasDefault: false;
|
|
@@ -181,4 +181,154 @@ export declare const kywiComponents: import("drizzle-orm/pg-core").PgTableWithCo
|
|
|
181
181
|
}>;
|
|
182
182
|
export type KywiComponentRow = typeof kywiComponents.$inferSelect;
|
|
183
183
|
export type NewKywiComponent = typeof kywiComponents.$inferInsert;
|
|
184
|
+
/**
|
|
185
|
+
* Where every linked component instance is placed (kywi-cms#147).
|
|
186
|
+
*
|
|
187
|
+
* A `componentId` link lives only inside a layout's JSONB, so answering "how
|
|
188
|
+
* many instances does this component have, on how many pages?" — the blast
|
|
189
|
+
* radius the save-fork dialog must name, and the gate on deleting a component —
|
|
190
|
+
* would otherwise mean scanning and parsing every layout in the site. This is
|
|
191
|
+
* the normalised index of those links, maintained transactionally by
|
|
192
|
+
* `setContentLayout` (the one and only layout write path) and rebuilt from
|
|
193
|
+
* scratch by `reindexComponentInstances`, which `kywi migrate` runs as a
|
|
194
|
+
* post-step so existing installs are backfilled with no operator action.
|
|
195
|
+
*
|
|
196
|
+
* The index is a derived cache: it is authoritative for *counts*, never for
|
|
197
|
+
* rewrites. `detachComponentEverywhere` deliberately re-scans layouts instead of
|
|
198
|
+
* trusting it, so a page can never be left holding a dangling link.
|
|
199
|
+
*
|
|
200
|
+
* Rows are scoped by `siteId` (components are per-site in v1) and cascade away
|
|
201
|
+
* with either side of the link, so neither deleting a page nor deleting a
|
|
202
|
+
* component can leave a stale row inflating a count.
|
|
203
|
+
*/
|
|
204
|
+
export declare const kywiComponentInstances: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
205
|
+
name: "kywi_component_instances";
|
|
206
|
+
schema: undefined;
|
|
207
|
+
columns: {
|
|
208
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
209
|
+
name: "id";
|
|
210
|
+
tableName: "kywi_component_instances";
|
|
211
|
+
dataType: "string";
|
|
212
|
+
columnType: "PgUUID";
|
|
213
|
+
data: string;
|
|
214
|
+
driverParam: string;
|
|
215
|
+
notNull: true;
|
|
216
|
+
hasDefault: true;
|
|
217
|
+
isPrimaryKey: true;
|
|
218
|
+
isAutoincrement: false;
|
|
219
|
+
hasRuntimeDefault: false;
|
|
220
|
+
enumValues: undefined;
|
|
221
|
+
baseColumn: never;
|
|
222
|
+
identity: undefined;
|
|
223
|
+
generated: undefined;
|
|
224
|
+
}, {}, {}>;
|
|
225
|
+
componentId: import("drizzle-orm/pg-core").PgColumn<{
|
|
226
|
+
name: "component_id";
|
|
227
|
+
tableName: "kywi_component_instances";
|
|
228
|
+
dataType: "string";
|
|
229
|
+
columnType: "PgUUID";
|
|
230
|
+
data: string;
|
|
231
|
+
driverParam: string;
|
|
232
|
+
notNull: true;
|
|
233
|
+
hasDefault: false;
|
|
234
|
+
isPrimaryKey: false;
|
|
235
|
+
isAutoincrement: false;
|
|
236
|
+
hasRuntimeDefault: false;
|
|
237
|
+
enumValues: undefined;
|
|
238
|
+
baseColumn: never;
|
|
239
|
+
identity: undefined;
|
|
240
|
+
generated: undefined;
|
|
241
|
+
}, {}, {}>;
|
|
242
|
+
siteId: import("drizzle-orm/pg-core").PgColumn<{
|
|
243
|
+
name: "site_id";
|
|
244
|
+
tableName: "kywi_component_instances";
|
|
245
|
+
dataType: "string";
|
|
246
|
+
columnType: "PgUUID";
|
|
247
|
+
data: string;
|
|
248
|
+
driverParam: string;
|
|
249
|
+
notNull: true;
|
|
250
|
+
hasDefault: false;
|
|
251
|
+
isPrimaryKey: false;
|
|
252
|
+
isAutoincrement: false;
|
|
253
|
+
hasRuntimeDefault: false;
|
|
254
|
+
enumValues: undefined;
|
|
255
|
+
baseColumn: never;
|
|
256
|
+
identity: undefined;
|
|
257
|
+
generated: undefined;
|
|
258
|
+
}, {}, {}>;
|
|
259
|
+
contentId: import("drizzle-orm/pg-core").PgColumn<{
|
|
260
|
+
name: "content_id";
|
|
261
|
+
tableName: "kywi_component_instances";
|
|
262
|
+
dataType: "string";
|
|
263
|
+
columnType: "PgUUID";
|
|
264
|
+
data: string;
|
|
265
|
+
driverParam: string;
|
|
266
|
+
notNull: true;
|
|
267
|
+
hasDefault: false;
|
|
268
|
+
isPrimaryKey: false;
|
|
269
|
+
isAutoincrement: false;
|
|
270
|
+
hasRuntimeDefault: false;
|
|
271
|
+
enumValues: undefined;
|
|
272
|
+
baseColumn: never;
|
|
273
|
+
identity: undefined;
|
|
274
|
+
generated: undefined;
|
|
275
|
+
}, {}, {}>;
|
|
276
|
+
contentType: import("drizzle-orm/pg-core").PgColumn<{
|
|
277
|
+
name: "content_type";
|
|
278
|
+
tableName: "kywi_component_instances";
|
|
279
|
+
dataType: "string";
|
|
280
|
+
columnType: "PgVarchar";
|
|
281
|
+
data: string;
|
|
282
|
+
driverParam: string;
|
|
283
|
+
notNull: true;
|
|
284
|
+
hasDefault: false;
|
|
285
|
+
isPrimaryKey: false;
|
|
286
|
+
isAutoincrement: false;
|
|
287
|
+
hasRuntimeDefault: false;
|
|
288
|
+
enumValues: [string, ...string[]];
|
|
289
|
+
baseColumn: never;
|
|
290
|
+
identity: undefined;
|
|
291
|
+
generated: undefined;
|
|
292
|
+
}, {}, {
|
|
293
|
+
length: 100;
|
|
294
|
+
}>;
|
|
295
|
+
nodeId: import("drizzle-orm/pg-core").PgColumn<{
|
|
296
|
+
name: "node_id";
|
|
297
|
+
tableName: "kywi_component_instances";
|
|
298
|
+
dataType: "string";
|
|
299
|
+
columnType: "PgText";
|
|
300
|
+
data: string;
|
|
301
|
+
driverParam: string;
|
|
302
|
+
notNull: true;
|
|
303
|
+
hasDefault: false;
|
|
304
|
+
isPrimaryKey: false;
|
|
305
|
+
isAutoincrement: false;
|
|
306
|
+
hasRuntimeDefault: false;
|
|
307
|
+
enumValues: [string, ...string[]];
|
|
308
|
+
baseColumn: never;
|
|
309
|
+
identity: undefined;
|
|
310
|
+
generated: undefined;
|
|
311
|
+
}, {}, {}>;
|
|
312
|
+
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
313
|
+
name: "updated_at";
|
|
314
|
+
tableName: "kywi_component_instances";
|
|
315
|
+
dataType: "date";
|
|
316
|
+
columnType: "PgTimestamp";
|
|
317
|
+
data: Date;
|
|
318
|
+
driverParam: string;
|
|
319
|
+
notNull: true;
|
|
320
|
+
hasDefault: true;
|
|
321
|
+
isPrimaryKey: false;
|
|
322
|
+
isAutoincrement: false;
|
|
323
|
+
hasRuntimeDefault: false;
|
|
324
|
+
enumValues: undefined;
|
|
325
|
+
baseColumn: never;
|
|
326
|
+
identity: undefined;
|
|
327
|
+
generated: undefined;
|
|
328
|
+
}, {}, {}>;
|
|
329
|
+
};
|
|
330
|
+
dialect: "pg";
|
|
331
|
+
}>;
|
|
332
|
+
export type KywiComponentInstanceRow = typeof kywiComponentInstances.$inferSelect;
|
|
333
|
+
export type NewKywiComponentInstance = typeof kywiComponentInstances.$inferInsert;
|
|
184
334
|
//# sourceMappingURL=components.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/schema/components.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/schema/components.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBzB,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,cAAc,CAAC,YAAY,CAAA;AACjE,MAAM,MAAM,gBAAgB,GAAG,OAAO,cAAc,CAAC,YAAY,CAAA;AAEjE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBhC,CAAA;AAEH,MAAM,MAAM,wBAAwB,GAAG,OAAO,sBAAsB,CAAC,YAAY,CAAA;AACjF,MAAM,MAAM,wBAAwB,GAAG,OAAO,sBAAsB,CAAC,YAAY,CAAA"}
|
|
@@ -1,15 +1,61 @@
|
|
|
1
|
-
import { pgTable, uuid, text, varchar, jsonb, timestamp } from 'drizzle-orm/pg-core';
|
|
2
|
-
import { kywiSites } from './base.js';
|
|
1
|
+
import { pgTable, uuid, text, varchar, jsonb, timestamp, index, uniqueIndex } from 'drizzle-orm/pg-core';
|
|
2
|
+
import { kywiSites, kywiContent } from './base.js';
|
|
3
3
|
export const kywiComponents = pgTable('kywi_components', {
|
|
4
4
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
5
5
|
siteId: uuid('site_id').notNull().references(() => kywiSites.id),
|
|
6
6
|
name: text('name').notNull(),
|
|
7
7
|
description: text('description'),
|
|
8
|
-
|
|
8
|
+
// 'module' | 'section' | 'variantContainer'. A `variantContainer` component
|
|
9
|
+
// stores a whole VariantContainer (its default sections + every variant arm);
|
|
10
|
+
// audience/experiment resolution still happens at render time, exactly as for
|
|
11
|
+
// an inline one (kywi-cms#147).
|
|
12
|
+
type: varchar('type', { length: 20 }).notNull(),
|
|
9
13
|
moduleType: varchar('module_type', { length: 100 }), // for module components: the module name (e.g., 'hero')
|
|
10
|
-
|
|
14
|
+
// ModuleNode props+style for modules, full LayoutSection for sections,
|
|
15
|
+
// full VariantContainer for variantContainer components.
|
|
16
|
+
definition: jsonb('definition').notNull(),
|
|
11
17
|
createdBy: uuid('created_by'),
|
|
12
18
|
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
|
13
19
|
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
|
14
20
|
});
|
|
21
|
+
/**
|
|
22
|
+
* Where every linked component instance is placed (kywi-cms#147).
|
|
23
|
+
*
|
|
24
|
+
* A `componentId` link lives only inside a layout's JSONB, so answering "how
|
|
25
|
+
* many instances does this component have, on how many pages?" — the blast
|
|
26
|
+
* radius the save-fork dialog must name, and the gate on deleting a component —
|
|
27
|
+
* would otherwise mean scanning and parsing every layout in the site. This is
|
|
28
|
+
* the normalised index of those links, maintained transactionally by
|
|
29
|
+
* `setContentLayout` (the one and only layout write path) and rebuilt from
|
|
30
|
+
* scratch by `reindexComponentInstances`, which `kywi migrate` runs as a
|
|
31
|
+
* post-step so existing installs are backfilled with no operator action.
|
|
32
|
+
*
|
|
33
|
+
* The index is a derived cache: it is authoritative for *counts*, never for
|
|
34
|
+
* rewrites. `detachComponentEverywhere` deliberately re-scans layouts instead of
|
|
35
|
+
* trusting it, so a page can never be left holding a dangling link.
|
|
36
|
+
*
|
|
37
|
+
* Rows are scoped by `siteId` (components are per-site in v1) and cascade away
|
|
38
|
+
* with either side of the link, so neither deleting a page nor deleting a
|
|
39
|
+
* component can leave a stale row inflating a count.
|
|
40
|
+
*/
|
|
41
|
+
export const kywiComponentInstances = pgTable('kywi_component_instances', {
|
|
42
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
43
|
+
componentId: uuid('component_id').notNull().references(() => kywiComponents.id, { onDelete: 'cascade' }),
|
|
44
|
+
siteId: uuid('site_id').notNull().references(() => kywiSites.id),
|
|
45
|
+
contentId: uuid('content_id').notNull().references(() => kywiContent.id, { onDelete: 'cascade' }),
|
|
46
|
+
/** `kywi_content.content_type_name` of the placing document, denormalised for the usage payload. */
|
|
47
|
+
contentType: varchar('content_type', { length: 100 }).notNull(),
|
|
48
|
+
/** The layout node id carrying the link (section id, module id, or variantContainer id). */
|
|
49
|
+
nodeId: text('node_id').notNull(),
|
|
50
|
+
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
|
51
|
+
}, (t) => ({
|
|
52
|
+
// One row per placement. Also the count-by-component index: `component_id` is
|
|
53
|
+
// the leading column, so `WHERE component_id = $1` (the usage read and the
|
|
54
|
+
// delete gate) uses this index — a separate single-column index would be
|
|
55
|
+
// redundant.
|
|
56
|
+
placementUnique: uniqueIndex('kywi_component_instances_placement')
|
|
57
|
+
.on(t.componentId, t.contentId, t.nodeId),
|
|
58
|
+
// `setContentLayout` rewrites the rows for one document on every save.
|
|
59
|
+
byContent: index('kywi_component_instances_by_content').on(t.contentId),
|
|
60
|
+
}));
|
|
15
61
|
//# sourceMappingURL=components.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/schema/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/schema/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACxG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAElD,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,EAAE;IACvD,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IAC3C,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;IAChE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAC5B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;IAChC,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,gCAAgC;IAChC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IAC/C,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,wDAAwD;IAC7G,uEAAuE;IACvE,yDAAyD;IACzD,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACzC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACjF,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CAClF,CAAC,CAAA;AAKF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC,0BAA0B,EAAE;IACxE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IAC3C,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACxG,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;IAChE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjG,oGAAoG;IACpG,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAC/D,4FAA4F;IAC5F,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACjC,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CAClF,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,8EAA8E;IAC9E,2EAA2E;IAC3E,yEAAyE;IACzE,aAAa;IACb,eAAe,EAAE,WAAW,CAAC,oCAAoC,CAAC;SAC/D,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;IAC3C,uEAAuE;IACvE,SAAS,EAAE,KAAK,CAAC,qCAAqC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;CACxE,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-editing.d.ts","sourceRoot":"","sources":["../../src/scope/inline-editing.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"inline-editing.d.ts","sourceRoot":"","sources":["../../src/scope/inline-editing.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAMxC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAA;AAE5D,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAA;IACb,mCAAmC;IACnC,IAAI,EAAE,gBAAgB,CAAA;IACtB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,GACT,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CAYjD;AAID,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAO9C;AAID,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAA;IACnB,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAA;IAChB,0DAA0D;IAC1D,UAAU,EAAE,OAAO,CAAA;IACnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAYD,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,GACV,EAAE,oBAAoB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAuElD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect } from 'react';
|
|
4
|
+
import { applyStickyOffset, BROWSE_BAR_HEIGHT_VAR, BROWSE_BAR_HEIGHT_PX } from './sticky-offset.js';
|
|
4
5
|
/**
|
|
5
6
|
* Wraps a content field with `data-kywi-editable` attributes so the
|
|
6
7
|
* front-end inline editor can discover and activate it.
|
|
@@ -37,12 +38,21 @@ export function KywiEditToolbar({ isEditMode, canEdit, canPublish, onToggleEdit,
|
|
|
37
38
|
// document down by the bar's height for as long as it's mounted, and undo
|
|
38
39
|
// that on unmount/edit-mode-entry so the offset never leaks past the bar's
|
|
39
40
|
// actual lifetime.
|
|
41
|
+
//
|
|
42
|
+
// Document padding only moves elements in normal FLOW, though, so the site's
|
|
43
|
+
// own `position: sticky; top: 0` header still pins under this bar the moment
|
|
44
|
+
// the reader scrolls. The same patch the edit-mode bar applies fixes that
|
|
45
|
+
// here too, with this bar's height token (kywi-cms#146). The two never
|
|
46
|
+
// overlap: React tears down this effect before it runs the overlay shell's,
|
|
47
|
+
// so browse → edit SWAPS the offset rather than stacking it.
|
|
40
48
|
const isBrowsingBarVisible = canEdit && !isEditMode;
|
|
41
49
|
useEffect(() => {
|
|
42
50
|
if (!isBrowsingBarVisible)
|
|
43
51
|
return;
|
|
44
52
|
document.documentElement.classList.add(BROWSING_OFFSET_CLASS);
|
|
53
|
+
const stickyOffset = applyStickyOffset(BROWSE_BAR_HEIGHT_VAR, BROWSE_BAR_HEIGHT_PX);
|
|
45
54
|
return () => {
|
|
55
|
+
stickyOffset.revert();
|
|
46
56
|
document.documentElement.classList.remove(BROWSING_OFFSET_CLASS);
|
|
47
57
|
};
|
|
48
58
|
}, [isBrowsingBarVisible]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-editing.js","sourceRoot":"","sources":["../../src/scope/inline-editing.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"inline-editing.js","sourceRoot":"","sources":["../../src/scope/inline-editing.tsx"],"names":[],"mappings":"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"}
|