@kywi-software/core 0.12.0 → 0.13.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.
Files changed (99) hide show
  1. package/AGENT-PATTERNS.md +54 -39
  2. package/dist/admin/layout-editor/component-actions.d.ts +21 -1
  3. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  4. package/dist/admin/layout-editor/component-actions.js +41 -1
  5. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  6. package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
  7. package/dist/admin/layout-editor/component-fork.js +23 -1
  8. package/dist/admin/layout-editor/component-fork.js.map +1 -1
  9. package/dist/admin/layout-editor/editor-canvas.d.ts +25 -4
  10. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  11. package/dist/admin/layout-editor/editor-canvas.js +186 -90
  12. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  13. package/dist/admin/layout-editor/editor-state.d.ts +62 -2
  14. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  15. package/dist/admin/layout-editor/editor-state.js +181 -11
  16. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  17. package/dist/admin/layout-editor/editor.css +59 -0
  18. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  19. package/dist/admin/layout-editor/layout-editor.js +74 -9
  20. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  21. package/dist/admin/layout-editor/linked-component.d.ts +11 -12
  22. package/dist/admin/layout-editor/linked-component.d.ts.map +1 -1
  23. package/dist/admin/layout-editor/linked-component.js.map +1 -1
  24. package/dist/admin/layout-editor/module-overlay.d.ts +21 -1
  25. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  26. package/dist/admin/layout-editor/module-overlay.js +4 -4
  27. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  28. package/dist/admin/layout-editor/module-palette.d.ts +1 -0
  29. package/dist/admin/layout-editor/module-palette.d.ts.map +1 -1
  30. package/dist/admin/layout-editor/module-palette.js +6 -3
  31. package/dist/admin/layout-editor/module-palette.js.map +1 -1
  32. package/dist/admin/layout-editor/module-variant-container-config.d.ts +51 -0
  33. package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -0
  34. package/dist/admin/layout-editor/module-variant-container-config.js +51 -0
  35. package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -0
  36. package/dist/admin/layout-editor/node-lookup.d.ts +40 -4
  37. package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
  38. package/dist/admin/layout-editor/node-lookup.js +64 -8
  39. package/dist/admin/layout-editor/node-lookup.js.map +1 -1
  40. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  41. package/dist/admin/layout-editor/overlay-shell.js +47 -4
  42. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  43. package/dist/admin/layout-editor/props-panel.d.ts +54 -6
  44. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  45. package/dist/admin/layout-editor/props-panel.js +93 -8
  46. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  47. package/dist/admin/layout-editor/section-overlay.d.ts +5 -0
  48. package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
  49. package/dist/admin/layout-editor/section-overlay.js +1 -1
  50. package/dist/admin/layout-editor/section-overlay.js.map +1 -1
  51. package/dist/admin/layout-editor/section-variant-container-config.d.ts +9 -0
  52. package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
  53. package/dist/admin/layout-editor/section-variant-container-config.js +9 -2
  54. package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
  55. package/dist/admin/layout-editor/use-component-connect.d.ts +5 -1
  56. package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
  57. package/dist/admin/layout-editor/use-component-connect.js +61 -5
  58. package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
  59. package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
  60. package/dist/admin/surfaces/components/definition-canvas.js +30 -0
  61. package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
  62. package/dist/audiences/deletion-guard.js +2 -2
  63. package/dist/audiences/deletion-guard.js.map +1 -1
  64. package/dist/config/types.d.ts +7 -0
  65. package/dist/config/types.d.ts.map +1 -1
  66. package/dist/config/types.js.map +1 -1
  67. package/dist/layout/component-refs.d.ts.map +1 -1
  68. package/dist/layout/component-refs.js +10 -18
  69. package/dist/layout/component-refs.js.map +1 -1
  70. package/dist/layout/feed-hydration.js +2 -3
  71. package/dist/layout/feed-hydration.js.map +1 -1
  72. package/dist/layout/index.d.ts +2 -1
  73. package/dist/layout/index.d.ts.map +1 -1
  74. package/dist/layout/index.js +4 -1
  75. package/dist/layout/index.js.map +1 -1
  76. package/dist/layout/module-permissions.js +2 -2
  77. package/dist/layout/module-permissions.js.map +1 -1
  78. package/dist/layout/nav-hydration.js +2 -3
  79. package/dist/layout/nav-hydration.js.map +1 -1
  80. package/dist/layout/personalization.d.ts +29 -0
  81. package/dist/layout/personalization.d.ts.map +1 -1
  82. package/dist/layout/personalization.js +78 -0
  83. package/dist/layout/personalization.js.map +1 -1
  84. package/dist/layout/registry.d.ts.map +1 -1
  85. package/dist/layout/registry.js +15 -1
  86. package/dist/layout/registry.js.map +1 -1
  87. package/dist/layout/renderer.d.ts +2 -12
  88. package/dist/layout/renderer.d.ts.map +1 -1
  89. package/dist/layout/renderer.js +29 -25
  90. package/dist/layout/renderer.js.map +1 -1
  91. package/dist/layout/types.d.ts +91 -1
  92. package/dist/layout/types.d.ts.map +1 -1
  93. package/dist/layout/types.js +160 -1
  94. package/dist/layout/types.js.map +1 -1
  95. package/dist/layout/variant-selection.d.ts +43 -0
  96. package/dist/layout/variant-selection.d.ts.map +1 -0
  97. package/dist/layout/variant-selection.js +41 -0
  98. package/dist/layout/variant-selection.js.map +1 -0
  99. package/package.json +1 -1
@@ -1,4 +1,67 @@
1
1
  import { z } from 'zod';
2
+ /**
3
+ * Narrow a column node to a module-level variant container.
4
+ *
5
+ * Structural, not a bare `type ===`: a module's `type` is a registry name a host
6
+ * pack chooses, so a custom module registered as `moduleVariantContainer` would
7
+ * otherwise be misread (the same reasoning as `isRegionNodeShape` in
8
+ * `admin/layout-editor/component-actions.ts`).
9
+ */
10
+ export function isModuleVariantContainer(node) {
11
+ return (node.type === 'moduleVariantContainer' &&
12
+ Array.isArray(node.variants) &&
13
+ typeof node.defaultModule === 'object' &&
14
+ // `typeof null === 'object'`: without this a `defaultModule: null` node
15
+ // narrows to a container, and `columnModules` pushes that null into a
16
+ // `ModuleNode[]` every downstream walker then dereferences.
17
+ node.defaultModule !== null);
18
+ }
19
+ /** Narrow a column node to a plain module (the complement of the above). */
20
+ export function isModuleNode(node) {
21
+ return !isModuleVariantContainer(node);
22
+ }
23
+ /** Every module a container holds: the Default arm first, then each variant arm. */
24
+ export function moduleVariantModules(container) {
25
+ return [container.defaultModule, ...container.variants.map(v => v.module)];
26
+ }
27
+ /**
28
+ * Every ModuleNode in a column, arm modules included, in document order.
29
+ *
30
+ * THE seam. Every pass that used to read `column.nodes` as a flat module list —
31
+ * the admin-only gate, feed/nav hydration, the audience deletion guard, the
32
+ * linked-component index — reads this instead, so a module inside an arm is
33
+ * governed by exactly the rules a module beside it is.
34
+ *
35
+ * `nodes` is guarded because those passes run over STORED documents that never
36
+ * went through `validateLayoutDocument` — `api/layout-write-guard.ts` types its
37
+ * `stored` as `LayoutDocument | null | undefined` over raw DB JSON. A legacy row
38
+ * with a column missing `nodes` yielded nothing before this function existed;
39
+ * throwing here would 500 the save and leave that page permanently unsavable.
40
+ */
41
+ export function columnModules(column) {
42
+ const out = [];
43
+ for (const node of column.nodes ?? []) {
44
+ if (isModuleVariantContainer(node))
45
+ out.push(...moduleVariantModules(node));
46
+ else
47
+ out.push(node);
48
+ }
49
+ return out;
50
+ }
51
+ /**
52
+ * Rebuild a column node by applying `fn` to every ModuleNode it holds — itself
53
+ * for a plain module, each arm's module for a container. The container's own
54
+ * identity (`id`, `mode`, experiment binding, arm ids/labels) is untouched.
55
+ */
56
+ export function mapColumnNode(node, fn) {
57
+ if (!isModuleVariantContainer(node))
58
+ return fn(node);
59
+ return {
60
+ ...node,
61
+ defaultModule: fn(node.defaultModule),
62
+ variants: node.variants.map(v => ({ ...v, module: fn(v.module) })),
63
+ };
64
+ }
2
65
  /** Narrow a RegionNode to a LayoutSection (as opposed to a VariantContainer). */
3
66
  export function isLayoutSection(node) {
4
67
  return node.type === 'section';
@@ -16,10 +79,44 @@ const ModuleNodeSchema = z.object({
16
79
  style: z.record(z.string()),
17
80
  componentId: z.string().optional(),
18
81
  });
82
+ const ModuleVariantEntrySchema = z.object({
83
+ id: z.string(),
84
+ label: z.string(),
85
+ // Required, not `.optional()` — see ModuleVariantEntry: `''` is the unbound
86
+ // draft arm, and an absent field is a second shape for that same state that
87
+ // the selector could never match.
88
+ audienceId: z.string(),
89
+ weight: z.number().optional(),
90
+ module: ModuleNodeSchema,
91
+ });
92
+ /**
93
+ * The module-variant-container field list. A bare `ZodObject` for the same
94
+ * reason `VariantContainerObjectSchema` is one: it has to compose into the
95
+ * column-node union below, so the ab_test/experimentId rule lives on the
96
+ * exported wrapper and in `validateModuleVariantContainerNode`, which runs on
97
+ * every container `validateLayoutDocument` walks.
98
+ */
99
+ const ModuleVariantContainerObjectSchema = z.object({
100
+ id: z.string(),
101
+ type: z.literal('moduleVariantContainer'),
102
+ mode: z.enum(['personalization', 'ab_test']),
103
+ experimentId: z.string().optional(),
104
+ winnerId: z.string().optional(),
105
+ defaultModule: ModuleNodeSchema,
106
+ variants: z.array(ModuleVariantEntrySchema),
107
+ });
108
+ // Container FIRST: a container object cannot satisfy ModuleNodeSchema (no
109
+ // instanceId/props/style), but matching on the literal `type` before the
110
+ // open-ended module shape is what makes the union's failure messages readable.
111
+ const ColumnNodeSchema = z.union([
112
+ ModuleVariantContainerObjectSchema,
113
+ ModuleNodeSchema,
114
+ ]);
115
+ const ModuleVariantContainerSchema = ModuleVariantContainerObjectSchema.refine((val) => val.mode !== 'ab_test' || (val.experimentId != null && val.experimentId.length > 0), { message: 'experimentId is required when mode is ab_test' });
19
116
  const LayoutColumnSchema = z.object({
20
117
  id: z.string(),
21
118
  width: z.number().int().min(1).max(12),
22
- nodes: z.array(ModuleNodeSchema),
119
+ nodes: z.array(ColumnNodeSchema),
23
120
  });
24
121
  // Cast as ZodType for the same exactOptionalPropertyTypes reason as
25
122
  // ModuleNodeSchema above: `.optional()` infers `componentId?: string | undefined`
@@ -101,6 +198,42 @@ function validateSectionColumns(section, context) {
101
198
  }
102
199
  return null;
103
200
  }
201
+ /** The module-level container's own rules: ab_test binding, unique arm ids. */
202
+ function validateModuleVariantContainerNode(container, context) {
203
+ if (container.mode === 'ab_test' && !container.experimentId) {
204
+ return `${context} moduleVariantContainer '${container.id}' with mode ab_test requires experimentId`;
205
+ }
206
+ const seen = new Set();
207
+ for (const variant of container.variants) {
208
+ if (seen.has(variant.id)) {
209
+ return `${context} moduleVariantContainer '${container.id}' has duplicate variant id '${variant.id}'`;
210
+ }
211
+ seen.add(variant.id);
212
+ }
213
+ return null;
214
+ }
215
+ /**
216
+ * Every module-level container a section's columns hold.
217
+ *
218
+ * `allowed` is false for the sections inside a SECTION-level variant container's
219
+ * arms: containers never nest, so a module container there is refused outright
220
+ * rather than validated.
221
+ */
222
+ function validateSectionColumnNodes(section, context, allowed) {
223
+ for (const column of section.columns) {
224
+ for (const node of column.nodes) {
225
+ if (!isModuleVariantContainer(node))
226
+ continue;
227
+ if (!allowed) {
228
+ return `${context} section '${section.id}' holds moduleVariantContainer '${node.id}' inside a variantContainer arm — containers never nest`;
229
+ }
230
+ const err = validateModuleVariantContainerNode(node, `${context} section '${section.id}'`);
231
+ if (err)
232
+ return err;
233
+ }
234
+ }
235
+ return null;
236
+ }
104
237
  /**
105
238
  * Validate all sections inside a variantContainer (default + all variants).
106
239
  */
@@ -109,12 +242,18 @@ function validateVariantContainerSections(vc, context) {
109
242
  const err = validateSectionColumns(section, `${context} variantContainer '${vc.id}' default`);
110
243
  if (err)
111
244
  return err;
245
+ const nested = validateSectionColumnNodes(section, `${context} variantContainer '${vc.id}'`, false);
246
+ if (nested)
247
+ return nested;
112
248
  }
113
249
  for (const variant of vc.variants) {
114
250
  for (const section of variant.sections) {
115
251
  const err = validateSectionColumns(section, `${context} variantContainer '${vc.id}' variant '${variant.id}'`);
116
252
  if (err)
117
253
  return err;
254
+ const nested = validateSectionColumnNodes(section, `${context} variantContainer '${vc.id}'`, false);
255
+ if (nested)
256
+ return nested;
118
257
  }
119
258
  }
120
259
  // ab_test mode requires experimentId (belt-and-suspenders: schema refine already checks)
@@ -134,6 +273,9 @@ function validateRegionNodes(regions, contextPrefix) {
134
273
  const err = validateSectionColumns(node, `${contextPrefix} region '${regionName}'`);
135
274
  if (err)
136
275
  return err;
276
+ const nodeErr = validateSectionColumnNodes(node, `${contextPrefix} region '${regionName}'`, true);
277
+ if (nodeErr)
278
+ return nodeErr;
137
279
  }
138
280
  else if (node.type === 'variantContainer') {
139
281
  const err = validateVariantContainerSections(node, `${contextPrefix} region '${regionName}'`);
@@ -199,6 +341,9 @@ export function validateLayoutSection(input) {
199
341
  const columnsErr = validateSectionColumns(parsed.data, '');
200
342
  if (columnsErr)
201
343
  return { success: false, error: columnsErr.trim() };
344
+ const nodeErr = validateSectionColumnNodes(parsed.data, '', true);
345
+ if (nodeErr)
346
+ return { success: false, error: nodeErr.trim() };
202
347
  return { success: true, data: parsed.data };
203
348
  }
204
349
  /**
@@ -216,4 +361,18 @@ export function validateVariantContainer(input) {
216
361
  return { success: false, error: err.trim() };
217
362
  return { success: true, data: parsed.data };
218
363
  }
364
+ /**
365
+ * The module-level counterpart of {@link validateVariantContainer}: schema, the
366
+ * ab_test/experimentId rule, and unique arm ids.
367
+ */
368
+ export function validateModuleVariantContainer(input) {
369
+ const parsed = ModuleVariantContainerSchema.safeParse(input);
370
+ if (!parsed.success) {
371
+ return { success: false, error: parsed.error.errors.map(e => e.message).join('; ') };
372
+ }
373
+ const err = validateModuleVariantContainerNode(parsed.data, '');
374
+ if (err)
375
+ return { success: false, error: err.trim() };
376
+ return { success: true, data: parsed.data };
377
+ }
219
378
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * variant-selection.ts
3
+ * ONE answer to "which arm does this visitor get", shared by the section-level
4
+ * `VariantContainer` and the module-level `ModuleVariantContainer`.
5
+ *
6
+ * Two containers with two copies of this precedence is how a personalized band
7
+ * and a personalized module inside it end up disagreeing about the same visitor.
8
+ * Dependency-free (no React, no ./types.js) so both the client renderer and any
9
+ * server-side pass can import it.
10
+ */
11
+ /**
12
+ * Server-resolved personalization state threaded into the renderer. Both fields
13
+ * are plain serializable values so they can cross the server→client boundary as
14
+ * props.
15
+ */
16
+ export interface PersonalizationState {
17
+ /** Winning audience id for this visitor, or null when unpersonalized. */
18
+ resolvedAudienceId: string | null;
19
+ /** experimentId → chosen variant key; null = Default. */
20
+ experimentAssignments: Record<string, string | null>;
21
+ }
22
+ /** The container fields selection reads — everything else about it is irrelevant here. */
23
+ export interface VariantSelectionBinding {
24
+ mode: 'personalization' | 'ab_test';
25
+ experimentId?: string | undefined;
26
+ winnerId?: string | undefined;
27
+ }
28
+ /**
29
+ * Choose which arm renders for the current visitor. Returns null for "the
30
+ * Default arm".
31
+ *
32
+ * Precedence, in order:
33
+ * 1. a matched AUDIENCE arm always wins (coexistence with A/B — see
34
+ * `experiments/engine.ts`'s `resolveVariant`, which reaches the same answer
35
+ * from the experiment side);
36
+ * 2. in ab_test mode, a locked `winnerId` routes all traffic to that arm;
37
+ * 3. otherwise the visitor's server-resolved assignment for `experimentId`;
38
+ * 4. Default.
39
+ */
40
+ export declare function selectVariantArm<T extends {
41
+ audienceId?: string | undefined;
42
+ }>(arms: readonly T[], binding: VariantSelectionBinding, state: PersonalizationState | null): T | null;
43
+ //# sourceMappingURL=variant-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant-selection.d.ts","sourceRoot":"","sources":["../../src/layout/variant-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,yDAAyD;IACzD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;CACrD;AAED,0FAA0F;AAC1F,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC5E,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,oBAAoB,GAAG,IAAI,GACjC,CAAC,GAAG,IAAI,CAiBV"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * variant-selection.ts
3
+ * ONE answer to "which arm does this visitor get", shared by the section-level
4
+ * `VariantContainer` and the module-level `ModuleVariantContainer`.
5
+ *
6
+ * Two containers with two copies of this precedence is how a personalized band
7
+ * and a personalized module inside it end up disagreeing about the same visitor.
8
+ * Dependency-free (no React, no ./types.js) so both the client renderer and any
9
+ * server-side pass can import it.
10
+ */
11
+ /**
12
+ * Choose which arm renders for the current visitor. Returns null for "the
13
+ * Default arm".
14
+ *
15
+ * Precedence, in order:
16
+ * 1. a matched AUDIENCE arm always wins (coexistence with A/B — see
17
+ * `experiments/engine.ts`'s `resolveVariant`, which reaches the same answer
18
+ * from the experiment side);
19
+ * 2. in ab_test mode, a locked `winnerId` routes all traffic to that arm;
20
+ * 3. otherwise the visitor's server-resolved assignment for `experimentId`;
21
+ * 4. Default.
22
+ */
23
+ export function selectVariantArm(arms, binding, state) {
24
+ if (state?.resolvedAudienceId) {
25
+ const byAudience = arms.find(a => a.audienceId === state.resolvedAudienceId);
26
+ if (byAudience)
27
+ return byAudience;
28
+ }
29
+ if (binding.mode === 'ab_test') {
30
+ if (binding.winnerId) {
31
+ return arms.find(a => a.audienceId === binding.winnerId) ?? null;
32
+ }
33
+ if (binding.experimentId && state) {
34
+ const key = state.experimentAssignments[binding.experimentId];
35
+ if (key)
36
+ return arms.find(a => a.audienceId === key) ?? null;
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ //# sourceMappingURL=variant-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variant-selection.js","sourceRoot":"","sources":["../../src/layout/variant-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAkB,EAClB,OAAgC,EAChC,KAAkC;IAElC,IAAI,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC5E,IAAI,UAAU;YAAE,OAAO,UAAU,CAAA;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;QAClE,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAC7D,IAAI,GAAG;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,IAAI,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kywi-software/core",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Kywi CMS core — schema generator, REST API, and admin UI for Next.js.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",