@almadar/core 10.110.0 → 10.112.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 (102) hide show
  1. package/dist/builders.d.ts +5 -5
  2. package/dist/builders.js +78 -9
  3. package/dist/builders.js.map +1 -1
  4. package/dist/{bus-CuAsuaHW.d.ts → bus-BZ9ekDiD.d.ts} +4 -2
  5. package/dist/{domain-Bf6sf9NR.d.ts → domain-DV8lmH3r.d.ts} +1857 -39
  6. package/dist/{effect-2JoKc8Zj.d.ts → effect-B9nMpTKN.d.ts} +27 -3
  7. package/dist/{entityAccess-CuKaSX0N.d.ts → entityAccess-Ak_ZvGXZ.d.ts} +3 -3
  8. package/dist/{expression-DhTTuu2W.d.ts → expression-Dz84kipC.d.ts} +4 -2
  9. package/dist/factory/index.d.ts +81 -7
  10. package/dist/factory/index.js +560 -16
  11. package/dist/factory/index.js.map +1 -1
  12. package/dist/factory-runtime/index.d.ts +5 -5
  13. package/dist/factory-runtime/index.js +78 -9
  14. package/dist/factory-runtime/index.js.map +1 -1
  15. package/dist/fixtures.d.ts +3 -3
  16. package/dist/fixtures.js +1 -1
  17. package/dist/fixtures.js.map +1 -1
  18. package/dist/i18n/index.js +36 -4
  19. package/dist/i18n/index.js.map +1 -1
  20. package/dist/{index-bC0n_h8G.d.ts → index-DmkUMeXz.d.ts} +79 -10
  21. package/dist/index.d.ts +71 -20
  22. package/dist/index.js +17101 -5233
  23. package/dist/index.js.map +1 -1
  24. package/dist/mock/index.d.ts +20 -7
  25. package/dist/mock/index.js +38 -11
  26. package/dist/mock/index.js.map +1 -1
  27. package/dist/patterns/component-mapping.json +1 -1
  28. package/dist/patterns/event-contracts.json +1 -1
  29. package/dist/patterns/index.d.ts +1042 -228
  30. package/dist/patterns/index.js +392 -13
  31. package/dist/patterns/index.js.map +1 -1
  32. package/dist/patterns/patterns-registry.json +382 -10
  33. package/dist/patterns/registry.json +382 -10
  34. package/dist/{schema-DqBoP7Ab.d.ts → schema-C-HLTS_Q.d.ts} +2969 -44
  35. package/dist/state-machine/index.d.ts +1 -1
  36. package/dist/state-machine/index.js +32 -7
  37. package/dist/state-machine/index.js.map +1 -1
  38. package/dist/themes/index.d.ts +1 -1
  39. package/dist/themes/index.js +16303 -5151
  40. package/dist/themes/index.js.map +1 -1
  41. package/dist/{trait-S5uhI089.d.ts → trait-CRgDZSy_.d.ts} +10 -2
  42. package/dist/types/index.d.ts +8 -8
  43. package/dist/types/index.js +115 -10
  44. package/dist/types/index.js.map +1 -1
  45. package/dist/{types-2uS2WfIo.d.ts → types-C3nlpTDW.d.ts} +2 -2
  46. package/package.json +1 -1
  47. package/themes/almadar-website.json +7 -0
  48. package/themes/almadar.json +16 -4
  49. package/themes/aqua.json +420 -0
  50. package/themes/arabesque.json +512 -0
  51. package/themes/art-deco.json +340 -0
  52. package/themes/art-nouveau.json +340 -0
  53. package/themes/atelier.json +43 -187
  54. package/themes/bauhaus.json +330 -0
  55. package/themes/bloomberg-dense.json +69 -213
  56. package/themes/blueprint.json +330 -0
  57. package/themes/clay.json +53 -188
  58. package/themes/comic.json +107 -146
  59. package/themes/constructivist.json +340 -0
  60. package/themes/corporate.json +62 -197
  61. package/themes/cyberpunk.json +418 -0
  62. package/themes/frutiger-aero.json +422 -0
  63. package/themes/game-adventure.json +46 -21
  64. package/themes/game-rpg.json +48 -22
  65. package/themes/game-sci-fi.json +47 -21
  66. package/themes/game-ui-pack.json +39 -17
  67. package/themes/gazette.json +50 -194
  68. package/themes/glass.json +78 -201
  69. package/themes/gothic.json +329 -0
  70. package/themes/ink-wash.json +512 -0
  71. package/themes/kawaii.json +512 -0
  72. package/themes/kiosk.json +70 -200
  73. package/themes/linear-clean.json +67 -202
  74. package/themes/luxury.json +322 -0
  75. package/themes/mac-classic.json +330 -0
  76. package/themes/material.json +328 -0
  77. package/themes/memphis.json +337 -0
  78. package/themes/mid-century.json +338 -0
  79. package/themes/minimalist.json +60 -204
  80. package/themes/mudcloth.json +512 -0
  81. package/themes/neon.json +51 -212
  82. package/themes/neumorphic.json +322 -0
  83. package/themes/newsprint.json +330 -0
  84. package/themes/notion-editorial.json +51 -186
  85. package/themes/pixel.json +321 -0
  86. package/themes/prism.json +66 -69
  87. package/themes/retro.json +126 -165
  88. package/themes/risograph.json +325 -0
  89. package/themes/scandi.json +512 -0
  90. package/themes/sketch.json +330 -0
  91. package/themes/solarpunk.json +512 -0
  92. package/themes/steampunk.json +327 -0
  93. package/themes/swiss.json +338 -0
  94. package/themes/terminal.json +86 -156
  95. package/themes/trait-wars.json +143 -184
  96. package/themes/ukiyo-e.json +512 -0
  97. package/themes/vaporwave.json +420 -0
  98. package/themes/victorian.json +337 -0
  99. package/themes/wabi-sabi.json +512 -0
  100. package/themes/win95.json +324 -0
  101. package/themes/wireframe.json +44 -179
  102. package/themes/zine.json +330 -0
@@ -30,6 +30,181 @@ function rehydrateKnobDefs(catalog) {
30
30
  }
31
31
  return catalog;
32
32
  }
33
+ var JsonValueSchema = z.lazy(
34
+ () => z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(JsonValueSchema), z.record(JsonValueSchema)])
35
+ );
36
+ function isJsonObject(value) {
37
+ return value !== null && typeof value === "object" && !Array.isArray(value);
38
+ }
39
+
40
+ // src/factory/merge.ts
41
+ function canonical(v) {
42
+ if (Array.isArray(v)) return `[${v.map(canonical).join(",")}]`;
43
+ if (isJsonObject(v)) return `{${Object.keys(v).sort().map((k) => `${JSON.stringify(k)}:${canonical(v[k] ?? null)}`).join(",")}}`;
44
+ return JSON.stringify(v);
45
+ }
46
+ var same = (a, b) => a === void 0 || b === void 0 ? a === b : canonical(a) === canonical(b);
47
+ function isIdList(v) {
48
+ return Array.isArray(v) && v.length > 0 && v.every((i) => isJsonObject(i) && typeof i["id"] === "string");
49
+ }
50
+ var idList = (v) => v === void 0 || Array.isArray(v) && v.length === 0 || isIdList(v);
51
+ function mergeParams(base, ours, theirs) {
52
+ const conflicts = [];
53
+ const merged = mergeValue([], base, ours, theirs, conflicts);
54
+ return { merged: merged === void 0 ? null : merged, conflicts };
55
+ }
56
+ function mergeValue(path, base, ours, theirs, conflicts) {
57
+ if (same(ours, theirs)) return ours;
58
+ if (same(base, ours)) return theirs;
59
+ if (same(base, theirs)) return ours;
60
+ if (ours !== void 0 && theirs !== void 0 && isJsonObject(ours) && isJsonObject(theirs) && (base === void 0 || isJsonObject(base))) {
61
+ return mergeObject(path, base, ours, theirs, conflicts);
62
+ }
63
+ if (ours !== void 0 && theirs !== void 0 && (isIdList(ours) || isIdList(theirs)) && idList(ours) && idList(theirs) && idList(base)) {
64
+ return mergeIdList(path, base ?? [], ours, theirs, conflicts);
65
+ }
66
+ conflicts.push({
67
+ path,
68
+ kind: ours === void 0 || theirs === void 0 ? "delete-vs-edit" : "both-changed",
69
+ base: base ?? null,
70
+ ours: ours ?? null,
71
+ theirs: theirs ?? null
72
+ });
73
+ return ours;
74
+ }
75
+ function mergeObject(path, base, ours, theirs, conflicts) {
76
+ const out = {};
77
+ const keys = [.../* @__PURE__ */ new Set([...Object.keys(base ?? {}), ...Object.keys(ours), ...Object.keys(theirs)])];
78
+ for (const key of keys) {
79
+ const value = mergeValue([...path, key], base?.[key], ours[key], theirs[key], conflicts);
80
+ if (value !== void 0) out[key] = value;
81
+ }
82
+ return out;
83
+ }
84
+ var idsOf = (list) => list.map((i) => i.id);
85
+ function mergeIdList(path, base, ours, theirs, conflicts) {
86
+ const byId = (list) => new Map(list.map((i) => [i.id, i]));
87
+ const b = byId(base);
88
+ const o = byId(ours);
89
+ const t = byId(theirs);
90
+ const result = /* @__PURE__ */ new Map();
91
+ for (const id of /* @__PURE__ */ new Set([...b.keys(), ...o.keys(), ...t.keys()])) {
92
+ const value = mergeValue([...path, id], b.get(id), o.get(id), t.get(id), conflicts);
93
+ if (value !== void 0) result.set(id, value);
94
+ }
95
+ const common = (list) => idsOf(list).filter((id) => b.has(id));
96
+ const reordered = (list) => canonical(common(list).filter((id) => o.has(id) && t.has(id))) !== canonical(idsOf(base).filter((id) => o.has(id) && t.has(id)));
97
+ const [primary, secondary] = reordered(ours) || !reordered(theirs) ? [ours, theirs] : [theirs, ours];
98
+ const order = idsOf(primary).filter((id) => result.has(id));
99
+ const secondaryIds = idsOf(secondary);
100
+ secondaryIds.forEach((id, index) => {
101
+ if (!result.has(id) || order.includes(id)) return;
102
+ const before = secondaryIds.slice(0, index).reverse().find((prev) => order.includes(prev));
103
+ order.splice(before === void 0 ? 0 : order.indexOf(before) + 1, 0, id);
104
+ });
105
+ for (const id of result.keys()) if (!order.includes(id)) order.push(id);
106
+ return order.map((id) => result.get(id) ?? null);
107
+ }
108
+
109
+ // src/factory/lolo-behavior-contracts.ts
110
+ var JS_TO_LOLO_TYPE = {
111
+ string: "string",
112
+ number: "number",
113
+ integer: "number",
114
+ boolean: "boolean",
115
+ array: "array",
116
+ object: "object"
117
+ };
118
+ function jsToLolo(t) {
119
+ return JS_TO_LOLO_TYPE[t ?? ""] ?? (t || "string");
120
+ }
121
+ function inferConfigType(spec) {
122
+ if (spec === void 0 || !isJsonObject(spec)) return void 0;
123
+ const explicit = spec["type"];
124
+ if (typeof explicit === "string" && explicit.length > 0) return explicit;
125
+ const d = spec["default"];
126
+ if (Array.isArray(d)) return "array";
127
+ if (d === null || d === void 0) return void 0;
128
+ return typeof d;
129
+ }
130
+ function sortKeysDeep(v) {
131
+ if (Array.isArray(v)) return v.map(sortKeysDeep);
132
+ if (isJsonObject(v)) {
133
+ const out = {};
134
+ for (const k of Object.keys(v).sort()) out[k] = sortKeysDeep(v[k] ?? null);
135
+ return out;
136
+ }
137
+ return v;
138
+ }
139
+ var objectsOf = (v) => Array.isArray(v) ? v.filter(isJsonObject) : [];
140
+ var objectOf = (v) => v !== void 0 && isJsonObject(v) ? v : {};
141
+ var stringsOf = (v) => Array.isArray(v) ? v.filter((x) => typeof x === "string") : [];
142
+ function configTypes(config) {
143
+ const out = {};
144
+ for (const [key, spec] of Object.entries(objectOf(config))) out[key] = jsToLolo(inferConfigType(spec));
145
+ return out;
146
+ }
147
+ function buildLoloBehaviorContracts(catalogs, orbs) {
148
+ const behaviors = {};
149
+ const entryFor = (name) => behaviors[name] ?? (behaviors[name] = { traits: {}, pages: [], orbitals: {}, appConfig: {} });
150
+ for (const raw of catalogs) {
151
+ const catalog = rehydrateKnobDefs(raw);
152
+ for (const s of catalog.signatures) {
153
+ if (!s.organism) continue;
154
+ const entry = entryFor(s.organism);
155
+ for (const t of s.traits) {
156
+ if (t.name in entry.traits) continue;
157
+ const config = {};
158
+ for (const ck of t.overridableConfigKeys ?? []) {
159
+ if (ck?.key) config[ck.key] = jsToLolo(ck.type);
160
+ }
161
+ entry.traits[t.name] = { requires: [...t.entityContract?.requires ?? []], config };
162
+ }
163
+ for (const p of s.pages) {
164
+ if (p?.name && !entry.pages.includes(p.name)) entry.pages.push(p.name);
165
+ }
166
+ }
167
+ }
168
+ for (const entry of Object.values(behaviors)) entry.pages.sort();
169
+ for (const { name, orb } of orbs) {
170
+ if (behaviors[name]) continue;
171
+ const traits = {};
172
+ const pages = [];
173
+ for (const orbital of objectsOf(objectOf(orb)["orbitals"])) {
174
+ for (const t of objectsOf(orbital["traits"])) {
175
+ const traitName = t["name"];
176
+ if (typeof traitName !== "string") continue;
177
+ traits[traitName] = { requires: stringsOf(objectOf(t["entityContract"])["requires"]), config: configTypes(t["config"]) };
178
+ }
179
+ for (const p of objectsOf(orbital["pages"])) {
180
+ if (typeof p["name"] === "string" && p["name"]) pages.push(p["name"]);
181
+ }
182
+ }
183
+ behaviors[name] = { traits, pages, orbitals: {}, appConfig: {} };
184
+ }
185
+ for (const { name, orb } of orbs) {
186
+ const target = entryFor(name);
187
+ const doc = objectOf(orb);
188
+ Object.assign(target.appConfig, configTypes(doc["config"]));
189
+ for (const orbital of objectsOf(doc["orbitals"])) {
190
+ const orbitalName = orbital["name"];
191
+ if (typeof orbitalName !== "string" || !orbitalName) continue;
192
+ target.orbitals[orbitalName] = { config: configTypes(orbital["config"]) };
193
+ }
194
+ }
195
+ return behaviors;
196
+ }
197
+ function serializeLoloBehaviorContracts(behaviors) {
198
+ const doc = {};
199
+ for (const [name, b] of Object.entries(behaviors)) {
200
+ const traits = {};
201
+ for (const [t, c] of Object.entries(b.traits)) traits[t] = { requires: c.requires, config: c.config };
202
+ const orbitals = {};
203
+ for (const [o, c] of Object.entries(b.orbitals)) orbitals[o] = { config: c.config };
204
+ doc[name] = { traits, pages: b.pages, orbitals, appConfig: b.appConfig };
205
+ }
206
+ return JSON.stringify(sortKeysDeep({ behaviors: doc }));
207
+ }
33
208
 
34
209
  // src/factory/questions/generate.ts
35
210
  function generateQuestions(plan, catalog, ruleOverlay, _userPrompt) {
@@ -500,10 +675,10 @@ function applyEntityFields(binding, signature, params) {
500
675
  params.entityFields = [...binding.entityFields];
501
676
  return;
502
677
  }
503
- const canonical = new Set(signature.entities[0].fields.map((f) => f.name));
678
+ const canonical2 = new Set(signature.entities[0].fields.map((f) => f.name));
504
679
  const extras = [];
505
680
  for (const f of binding.entityFields) {
506
- if (f.name && canonical.has(f.name)) continue;
681
+ if (f.name && canonical2.has(f.name)) continue;
507
682
  extras.push(f);
508
683
  }
509
684
  if (extras.length > 0) params.entityFields = extras;
@@ -1201,6 +1376,12 @@ var patterns_registry_default = {
1201
1376
  types: [
1202
1377
  "function"
1203
1378
  ]
1379
+ },
1380
+ when: {
1381
+ types: [
1382
+ "sexpr",
1383
+ "function"
1384
+ ]
1204
1385
  }
1205
1386
  },
1206
1387
  required: [
@@ -1316,6 +1497,12 @@ var patterns_registry_default = {
1316
1497
  "string"
1317
1498
  ],
1318
1499
  kind: "event"
1500
+ },
1501
+ when: {
1502
+ types: [
1503
+ "sexpr",
1504
+ "function"
1505
+ ]
1319
1506
  }
1320
1507
  },
1321
1508
  required: [
@@ -1636,6 +1823,12 @@ var patterns_registry_default = {
1636
1823
  types: [
1637
1824
  "function"
1638
1825
  ]
1826
+ },
1827
+ when: {
1828
+ types: [
1829
+ "sexpr",
1830
+ "function"
1831
+ ]
1639
1832
  }
1640
1833
  },
1641
1834
  required: [
@@ -2133,6 +2326,12 @@ var patterns_registry_default = {
2133
2326
  types: [
2134
2327
  "string"
2135
2328
  ]
2329
+ },
2330
+ when: {
2331
+ types: [
2332
+ "sexpr",
2333
+ "function"
2334
+ ]
2136
2335
  }
2137
2336
  },
2138
2337
  required: [
@@ -2470,6 +2669,12 @@ var patterns_registry_default = {
2470
2669
  "ghost",
2471
2670
  "danger"
2472
2671
  ]
2672
+ },
2673
+ when: {
2674
+ types: [
2675
+ "sexpr",
2676
+ "function"
2677
+ ]
2473
2678
  }
2474
2679
  },
2475
2680
  required: [
@@ -2527,6 +2732,12 @@ var patterns_registry_default = {
2527
2732
  "ghost",
2528
2733
  "danger"
2529
2734
  ]
2735
+ },
2736
+ when: {
2737
+ types: [
2738
+ "sexpr",
2739
+ "function"
2740
+ ]
2530
2741
  }
2531
2742
  },
2532
2743
  propertyRequired: [
@@ -2740,6 +2951,13 @@ var patterns_registry_default = {
2740
2951
  ],
2741
2952
  description: "Page title - accepts string or number from generated code accessing dynamic entity data"
2742
2953
  },
2954
+ icon: {
2955
+ types: [
2956
+ "icon",
2957
+ "string"
2958
+ ],
2959
+ description: "Icon shown before the title."
2960
+ },
2743
2961
  subtitle: {
2744
2962
  types: [
2745
2963
  "string",
@@ -4827,6 +5045,7 @@ var patterns_registry_default = {
4827
5045
  tier: "molecules",
4828
5046
  family: "core",
4829
5047
  description: "Search input with events",
5048
+ minUsableWidth: 160,
4830
5049
  suggestedFor: [
4831
5050
  "search functionality",
4832
5051
  "quick filters"
@@ -7338,6 +7557,13 @@ var patterns_registry_default = {
7338
7557
  "full-screen"
7339
7558
  ],
7340
7559
  default: "centered-card"
7560
+ },
7561
+ contained: {
7562
+ types: [
7563
+ "boolean"
7564
+ ],
7565
+ description: "Render inside the nearest positioned ancestor (a preview frame) instead of portaling over the whole window; page scroll is left alone.",
7566
+ default: false
7341
7567
  }
7342
7568
  }
7343
7569
  },
@@ -7362,6 +7588,21 @@ var patterns_registry_default = {
7362
7588
  description: "Whether the drawer is open (defaults to true when rendered by slot wrapper)",
7363
7589
  default: true
7364
7590
  },
7591
+ onExited: {
7592
+ types: [
7593
+ "function"
7594
+ ],
7595
+ description: "Fires after the exit animation completes (the drawer is about to unmount).",
7596
+ kind: "callback",
7597
+ callbackArgs: []
7598
+ },
7599
+ contained: {
7600
+ types: [
7601
+ "boolean"
7602
+ ],
7603
+ description: "Render inside the nearest positioned ancestor (a preview frame) instead of over the window.",
7604
+ default: false
7605
+ },
7365
7606
  onClose: {
7366
7607
  types: [
7367
7608
  "function"
@@ -7471,6 +7712,14 @@ var patterns_registry_default = {
7471
7712
  kind: "callback",
7472
7713
  callbackArgs: []
7473
7714
  },
7715
+ onExited: {
7716
+ types: [
7717
+ "function"
7718
+ ],
7719
+ description: "Fires after the exit animation completes (the dialog is about to unmount).",
7720
+ kind: "callback",
7721
+ callbackArgs: []
7722
+ },
7474
7723
  onConfirm: {
7475
7724
  types: [
7476
7725
  "function"
@@ -15417,6 +15666,19 @@ var patterns_registry_default = {
15417
15666
  description: 'Format X-axis labels as time (ISO date in \u2192 "Mar 2026"-style label out)',
15418
15667
  default: false
15419
15668
  },
15669
+ period: {
15670
+ types: [
15671
+ "string"
15672
+ ],
15673
+ description: 'Bucket granularity of a time axis \u2014 labels read "Oct 2", "Week of Sep 28", "Oct 2026", "Q4 2026" or "2026"',
15674
+ enumValues: [
15675
+ "day",
15676
+ "week",
15677
+ "month",
15678
+ "quarter",
15679
+ "year"
15680
+ ]
15681
+ },
15420
15682
  drillEvent: {
15421
15683
  types: [
15422
15684
  "string"
@@ -18744,6 +19006,52 @@ var patterns_registry_default = {
18744
19006
  }
18745
19007
  ]
18746
19008
  },
19009
+ onTransitionClick: {
19010
+ types: [
19011
+ "function"
19012
+ ],
19013
+ description: "Direct transition-click callback, for React hosts (e.g. a canvas node).",
19014
+ kind: "callback",
19015
+ callbackArgs: [
19016
+ {
19017
+ name: "transition",
19018
+ type: "object",
19019
+ schema: {
19020
+ types: [
19021
+ "object"
19022
+ ],
19023
+ properties: {
19024
+ index: {
19025
+ types: [
19026
+ "number"
19027
+ ]
19028
+ },
19029
+ event: {
19030
+ types: [
19031
+ "string"
19032
+ ]
19033
+ },
19034
+ from: {
19035
+ types: [
19036
+ "string"
19037
+ ]
19038
+ },
19039
+ to: {
19040
+ types: [
19041
+ "string"
19042
+ ]
19043
+ }
19044
+ },
19045
+ required: [
19046
+ "index",
19047
+ "event",
19048
+ "from",
19049
+ "to"
19050
+ ]
19051
+ }
19052
+ }
19053
+ ]
19054
+ },
18747
19055
  selectedState: {
18748
19056
  types: [
18749
19057
  "string"
@@ -20024,6 +20332,7 @@ var patterns_registry_default = {
20024
20332
  description: "DataGrid \u2014 structured records grid rendering rows over configurable columns, with sort, select, and drag-reorder.",
20025
20333
  capabilities: "admin table, records grid, user list, CRUD list, manage-records view, spreadsheet-style data grid, sortable columns",
20026
20334
  fieldsContract: "display",
20335
+ minUsableWidth: 200,
20027
20336
  suggestedFor: [
20028
20337
  "data",
20029
20338
  "grid",
@@ -20079,6 +20388,47 @@ var patterns_registry_default = {
20079
20388
  ],
20080
20389
  description: "Mark this container as the DnD root for its subtree \u2014 descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
20081
20390
  },
20391
+ emptyIcon: {
20392
+ types: [
20393
+ "icon",
20394
+ "string"
20395
+ ],
20396
+ description: "Domain icon for the empty state."
20397
+ },
20398
+ emptyTitle: {
20399
+ types: [
20400
+ "string"
20401
+ ],
20402
+ description: 'Specific title ("No orders yet").'
20403
+ },
20404
+ emptyDescription: {
20405
+ types: [
20406
+ "string"
20407
+ ],
20408
+ description: "What will appear here once rows exist."
20409
+ },
20410
+ emptyAction: {
20411
+ types: [
20412
+ "object"
20413
+ ],
20414
+ description: "Create-the-first-item action.",
20415
+ properties: {
20416
+ label: {
20417
+ types: [
20418
+ "string"
20419
+ ]
20420
+ },
20421
+ event: {
20422
+ types: [
20423
+ "string"
20424
+ ],
20425
+ kind: "event"
20426
+ }
20427
+ },
20428
+ propertyRequired: [
20429
+ "label"
20430
+ ]
20431
+ },
20082
20432
  entity: {
20083
20433
  types: [
20084
20434
  "object",
@@ -20269,6 +20619,12 @@ var patterns_registry_default = {
20269
20619
  "ghost",
20270
20620
  "danger"
20271
20621
  ]
20622
+ },
20623
+ when: {
20624
+ types: [
20625
+ "sexpr",
20626
+ "function"
20627
+ ]
20272
20628
  }
20273
20629
  },
20274
20630
  required: [
@@ -20532,6 +20888,7 @@ var patterns_registry_default = {
20532
20888
  family: "core",
20533
20889
  description: "DataList component",
20534
20890
  fieldsContract: "display",
20891
+ minUsableWidth: 200,
20535
20892
  suggestedFor: [
20536
20893
  "data",
20537
20894
  "list",
@@ -20588,6 +20945,47 @@ var patterns_registry_default = {
20588
20945
  ],
20589
20946
  description: "Mark this container as the DnD root for its subtree \u2014 descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
20590
20947
  },
20948
+ emptyIcon: {
20949
+ types: [
20950
+ "icon",
20951
+ "string"
20952
+ ],
20953
+ description: "Domain icon for the empty state."
20954
+ },
20955
+ emptyTitle: {
20956
+ types: [
20957
+ "string"
20958
+ ],
20959
+ description: 'Specific title ("No orders yet").'
20960
+ },
20961
+ emptyDescription: {
20962
+ types: [
20963
+ "string"
20964
+ ],
20965
+ description: "What will appear here once rows exist."
20966
+ },
20967
+ emptyAction: {
20968
+ types: [
20969
+ "object"
20970
+ ],
20971
+ description: "Create-the-first-item action.",
20972
+ properties: {
20973
+ label: {
20974
+ types: [
20975
+ "string"
20976
+ ]
20977
+ },
20978
+ event: {
20979
+ types: [
20980
+ "string"
20981
+ ],
20982
+ kind: "event"
20983
+ }
20984
+ },
20985
+ propertyRequired: [
20986
+ "label"
20987
+ ]
20988
+ },
20591
20989
  entity: {
20592
20990
  types: [
20593
20991
  "object",
@@ -20753,6 +21151,12 @@ var patterns_registry_default = {
20753
21151
  "ghost",
20754
21152
  "danger"
20755
21153
  ]
21154
+ },
21155
+ when: {
21156
+ types: [
21157
+ "sexpr",
21158
+ "function"
21159
+ ]
20756
21160
  }
20757
21161
  },
20758
21162
  required: [
@@ -22777,14 +23181,19 @@ var patterns_registry_default = {
22777
23181
  ],
22778
23182
  eventPayloadBrand: true,
22779
23183
  payloadFor: "event"
23184
+ },
23185
+ when: {
23186
+ types: [
23187
+ "sexpr",
23188
+ "function"
23189
+ ]
22780
23190
  }
22781
23191
  },
22782
23192
  required: [
22783
23193
  "label",
22784
23194
  "event"
22785
23195
  ]
22786
- },
22787
- default: []
23196
+ }
22788
23197
  },
22789
23198
  rightActions: {
22790
23199
  types: [
@@ -22832,14 +23241,19 @@ var patterns_registry_default = {
22832
23241
  ],
22833
23242
  eventPayloadBrand: true,
22834
23243
  payloadFor: "event"
23244
+ },
23245
+ when: {
23246
+ types: [
23247
+ "sexpr",
23248
+ "function"
23249
+ ]
22835
23250
  }
22836
23251
  },
22837
23252
  required: [
22838
23253
  "label",
22839
23254
  "event"
22840
23255
  ]
22841
- },
22842
- default: []
23256
+ }
22843
23257
  },
22844
23258
  threshold: {
22845
23259
  types: [
@@ -23876,6 +24290,12 @@ var patterns_registry_default = {
23876
24290
  propertyRequired: [
23877
24291
  "enabled"
23878
24292
  ]
24293
+ },
24294
+ pageKey: {
24295
+ types: [
24296
+ "string"
24297
+ ],
24298
+ description: "The current page (path or name). When set, the main slot's content animates in on every page change (`PageTransition`); a layout's own content region claims the transition so its chrome stays still."
23879
24299
  }
23880
24300
  }
23881
24301
  },
@@ -34387,6 +34807,7 @@ var patterns_registry_default = {
34387
34807
  description: "TableView \u2014 sortable, selectable data table rendering rows over configurable columns, with inline row actions and grouping.",
34388
34808
  capabilities: "admin console table, records list, CRUD data table, user list, manage-users grid, sortable columns, row selection with bulk actions, grouped list view",
34389
34809
  fieldsContract: "display",
34810
+ minUsableWidth: 240,
34390
34811
  suggestedFor: [
34391
34812
  "table",
34392
34813
  "view",
@@ -34442,6 +34863,47 @@ var patterns_registry_default = {
34442
34863
  ],
34443
34864
  description: "Mark this container as the DnD root for its subtree \u2014 descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
34444
34865
  },
34866
+ emptyIcon: {
34867
+ types: [
34868
+ "icon",
34869
+ "string"
34870
+ ],
34871
+ description: "Domain icon for the empty state."
34872
+ },
34873
+ emptyTitle: {
34874
+ types: [
34875
+ "string"
34876
+ ],
34877
+ description: 'Specific title ("No orders yet").'
34878
+ },
34879
+ emptyDescription: {
34880
+ types: [
34881
+ "string"
34882
+ ],
34883
+ description: "What will appear here once rows exist."
34884
+ },
34885
+ emptyAction: {
34886
+ types: [
34887
+ "object"
34888
+ ],
34889
+ description: "Create-the-first-item action.",
34890
+ properties: {
34891
+ label: {
34892
+ types: [
34893
+ "string"
34894
+ ]
34895
+ },
34896
+ event: {
34897
+ types: [
34898
+ "string"
34899
+ ],
34900
+ kind: "event"
34901
+ }
34902
+ },
34903
+ propertyRequired: [
34904
+ "label"
34905
+ ]
34906
+ },
34445
34907
  entity: {
34446
34908
  types: [
34447
34909
  "object",
@@ -34671,6 +35133,12 @@ var patterns_registry_default = {
34671
35133
  "ghost",
34672
35134
  "danger"
34673
35135
  ]
35136
+ },
35137
+ when: {
35138
+ types: [
35139
+ "sexpr",
35140
+ "function"
35141
+ ]
34674
35142
  }
34675
35143
  },
34676
35144
  required: [
@@ -47754,6 +48222,37 @@ var patterns_registry_default = {
47754
48222
  ],
47755
48223
  typicalSize: "small",
47756
48224
  propsSchema: {
48225
+ animation: {
48226
+ types: [
48227
+ "string"
48228
+ ],
48229
+ description: "Which motion preset to use (maps to `animate-<name>-in/out`).",
48230
+ required: true,
48231
+ enumValues: [
48232
+ "modal",
48233
+ "overlay",
48234
+ "slide-up",
48235
+ "drawer",
48236
+ "popover",
48237
+ "toast",
48238
+ "fade",
48239
+ "page"
48240
+ ]
48241
+ },
48242
+ animate: {
48243
+ types: [
48244
+ "boolean"
48245
+ ],
48246
+ description: "Per-instance opt-out. Global opt-out is `--motion-enable` / reduced-motion. @default true"
48247
+ },
48248
+ onExited: {
48249
+ types: [
48250
+ "function"
48251
+ ],
48252
+ description: "Fired after the exit animation completes (before unmount).",
48253
+ kind: "callback",
48254
+ callbackArgs: []
48255
+ },
47757
48256
  show: {
47758
48257
  types: [
47759
48258
  "boolean"
@@ -47794,7 +48293,7 @@ var patterns_registry_default = {
47794
48293
  types: [
47795
48294
  "string"
47796
48295
  ],
47797
- description: "Value that changes on navigation (e.g. `location.pathname`).",
48296
+ description: "Value that changes on navigation (a page path).",
47798
48297
  required: true
47799
48298
  },
47800
48299
  children: {
@@ -51331,9 +51830,10 @@ var patterns_registry_default = {
51331
51830
  },
51332
51831
  children: {
51333
51832
  types: [
51334
- "node"
51833
+ "node",
51834
+ "function"
51335
51835
  ],
51336
- description: "Compiled mode: render children directly instead of resolving from context"
51836
+ description: "Compiled mode: render children directly instead of resolving from context. A function receives the slot's presence \u2014 compiled self-overlaying content (Modal / ConfirmDialog) takes it as `isOpen`/`onExited` to play its exit."
51337
51837
  },
51338
51838
  pattern: {
51339
51839
  types: [
@@ -52583,14 +53083,15 @@ var patterns_registry_default = {
52583
53083
  types: [
52584
53084
  "string"
52585
53085
  ],
52586
- description: "What made this version (a user save, an agent turn, a restore, an undo/redo, a snapshot).",
53086
+ description: "What made this version (a user save, an agent turn, a restore, an undo/redo, a snapshot, a merge of a teammate's work).",
52587
53087
  enumValues: [
52588
53088
  "user",
52589
53089
  "agent",
52590
53090
  "restore",
52591
53091
  "undo",
52592
53092
  "redo",
52593
- "snapshot"
53093
+ "snapshot",
53094
+ "merge"
52594
53095
  ]
52595
53096
  },
52596
53097
  additions: {
@@ -53014,6 +53515,52 @@ var patterns_registry_default = {
53014
53515
  }
53015
53516
  ]
53016
53517
  },
53518
+ onTransitionClick: {
53519
+ types: [
53520
+ "function"
53521
+ ],
53522
+ description: "Direct transition-click callback, for React hosts (e.g. a canvas node).",
53523
+ kind: "callback",
53524
+ callbackArgs: [
53525
+ {
53526
+ name: "transition",
53527
+ type: "object",
53528
+ schema: {
53529
+ types: [
53530
+ "object"
53531
+ ],
53532
+ properties: {
53533
+ index: {
53534
+ types: [
53535
+ "number"
53536
+ ]
53537
+ },
53538
+ event: {
53539
+ types: [
53540
+ "string"
53541
+ ]
53542
+ },
53543
+ from: {
53544
+ types: [
53545
+ "string"
53546
+ ]
53547
+ },
53548
+ to: {
53549
+ types: [
53550
+ "string"
53551
+ ]
53552
+ }
53553
+ },
53554
+ required: [
53555
+ "index",
53556
+ "event",
53557
+ "from",
53558
+ "to"
53559
+ ]
53560
+ }
53561
+ }
53562
+ ]
53563
+ },
53017
53564
  selectedState: {
53018
53565
  types: [
53019
53566
  "string"
@@ -53174,9 +53721,6 @@ var patterns_registry_default = {
53174
53721
  }
53175
53722
  }
53176
53723
  }};
53177
- var JsonValueSchema = z.lazy(
53178
- () => z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(JsonValueSchema), z.record(JsonValueSchema)])
53179
- );
53180
53724
 
53181
53725
  // src/patterns/helpers/prompt-helpers.ts
53182
53726
  function getAllPatternTypes() {
@@ -53585,7 +54129,7 @@ var SExprAtomSchema = z.union([
53585
54129
  var SExprSchema = z.lazy(
53586
54130
  () => z.union([
53587
54131
  SExprAtomSchema,
53588
- z.array(z.lazy(() => SExprSchema)).min(1).refine(
54132
+ z.array(SExprDataSchema).min(1).refine(
53589
54133
  (arr) => typeof arr[0] === "string",
53590
54134
  { message: "S-expression array must have a string operator as first element" }
53591
54135
  )
@@ -54165,6 +54709,6 @@ var PAGE_OVERRIDE_SCHEMA = {
54165
54709
  }
54166
54710
  };
54167
54711
 
54168
- export { answerToMutations, answersToMutations, applyFactoryCallPlanMutation, assertNoUnsatisfiableEnum, deriveInputType, diffFactoryCalls, generateQuestions, rehydrateKnobDefs, signatureToParamsSchema, translateOverlaysToParams };
54712
+ export { answerToMutations, answersToMutations, applyFactoryCallPlanMutation, assertNoUnsatisfiableEnum, buildLoloBehaviorContracts, deriveInputType, diffFactoryCalls, generateQuestions, inferConfigType, mergeParams, rehydrateKnobDefs, serializeLoloBehaviorContracts, signatureToParamsSchema, sortKeysDeep, translateOverlaysToParams };
54169
54713
  //# sourceMappingURL=index.js.map
54170
54714
  //# sourceMappingURL=index.js.map