@almadar/core 10.28.0 → 10.30.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/dist/index.js CHANGED
@@ -1,6 +1,151 @@
1
1
  import { z } from 'zod';
2
2
 
3
3
  // src/types/orbital.ts
4
+ var ID_PREFIXES = {
5
+ orbital: "orb_",
6
+ entity: "ent_",
7
+ trait: "trt_",
8
+ event: "evt_",
9
+ page: "pag_",
10
+ service: "svc_",
11
+ theme: "thm_",
12
+ palette: "pal_"
13
+ };
14
+ function brand(value) {
15
+ return value;
16
+ }
17
+ function makeIdKind(kind) {
18
+ const prefix = ID_PREFIXES[kind];
19
+ const is = (value) => value.startsWith(prefix) && value.length > prefix.length;
20
+ const as = (value) => {
21
+ if (!is(value)) {
22
+ throw new Error(
23
+ `Expected ${kind} id (prefix "${prefix}"), got: ${JSON.stringify(value)}`
24
+ );
25
+ }
26
+ return brand(value);
27
+ };
28
+ return { prefix, is, as };
29
+ }
30
+ var orbitalKind = makeIdKind("orbital");
31
+ var entityKind = makeIdKind("entity");
32
+ var traitKind = makeIdKind("trait");
33
+ var eventKind = makeIdKind("event");
34
+ var pageKind = makeIdKind("page");
35
+ var serviceKind = makeIdKind("service");
36
+ var themeKind = makeIdKind("theme");
37
+ var paletteKind = makeIdKind("palette");
38
+ var isOrbitalId = orbitalKind.is;
39
+ var asOrbitalId = orbitalKind.as;
40
+ var isEntityId = entityKind.is;
41
+ var asEntityId = entityKind.as;
42
+ var isTraitId = traitKind.is;
43
+ var asTraitId = traitKind.as;
44
+ var isEventId = eventKind.is;
45
+ var asEventId = eventKind.as;
46
+ var isPageId = pageKind.is;
47
+ var asPageId = pageKind.as;
48
+ var isServiceId = serviceKind.is;
49
+ var asServiceId = serviceKind.as;
50
+ var isThemeId = themeKind.is;
51
+ var asThemeId = themeKind.as;
52
+ var isPaletteEntryId = paletteKind.is;
53
+ var asPaletteEntryId = paletteKind.as;
54
+ function idPrefix(kind) {
55
+ return ID_PREFIXES[kind];
56
+ }
57
+ function idKindOf(id) {
58
+ for (const kind of Object.keys(ID_PREFIXES)) {
59
+ const prefix = ID_PREFIXES[kind];
60
+ if (id.startsWith(prefix) && id.length > prefix.length) return kind;
61
+ }
62
+ return null;
63
+ }
64
+ var CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
65
+ var TIME_LEN = 10;
66
+ var RANDOM_LEN = 16;
67
+ function randomBytes(len) {
68
+ const g = globalThis;
69
+ if (g.crypto?.getRandomValues) {
70
+ return g.crypto.getRandomValues(new Uint8Array(len));
71
+ }
72
+ throw new Error("mintId: no crypto.getRandomValues available in this runtime");
73
+ }
74
+ function encodeTime(now) {
75
+ let value = now;
76
+ let out = "";
77
+ for (let i = 0; i < TIME_LEN; i++) {
78
+ const mod = value % 32;
79
+ out = CROCKFORD[mod] + out;
80
+ value = (value - mod) / 32;
81
+ }
82
+ return out;
83
+ }
84
+ function encodeRandom() {
85
+ const bytes = randomBytes(RANDOM_LEN);
86
+ let out = "";
87
+ for (let i = 0; i < RANDOM_LEN; i++) {
88
+ out += CROCKFORD[bytes[i] & 31];
89
+ }
90
+ return out;
91
+ }
92
+ function ulid() {
93
+ return encodeTime(Date.now()) + encodeRandom();
94
+ }
95
+ function mintId(kind) {
96
+ return brand(ID_PREFIXES[kind] + ulid());
97
+ }
98
+ function ledgerResolveName(ledger, kind, name) {
99
+ for (const [id, entry] of Object.entries(ledger.entries)) {
100
+ if (entry.kind === kind && entry.curName === name) return id;
101
+ }
102
+ return null;
103
+ }
104
+ function ledgerRename(ledger, id, to, at) {
105
+ const entry = ledger.entries[id];
106
+ if (entry === void 0) return ledger;
107
+ const updated = {
108
+ ...entry,
109
+ curName: to,
110
+ renames: [...entry.renames, { from: entry.curName, to, at }]
111
+ };
112
+ return { ...ledger, entries: { ...ledger.entries, [id]: updated } };
113
+ }
114
+ function ledgerCurName(ledger, id) {
115
+ return ledger.entries[id]?.curName ?? null;
116
+ }
117
+ var OrbitalIdSchema = z.string().refine(isOrbitalId, { message: `Expected an orbital id (prefix "${ID_PREFIXES.orbital}")` });
118
+ var EntityIdSchema = z.string().refine(isEntityId, { message: `Expected an entity id (prefix "${ID_PREFIXES.entity}")` });
119
+ var TraitIdSchema = z.string().refine(isTraitId, { message: `Expected a trait id (prefix "${ID_PREFIXES.trait}")` });
120
+ var EventIdSchema = z.string().refine(isEventId, { message: `Expected an event id (prefix "${ID_PREFIXES.event}")` });
121
+ var PageIdSchema = z.string().refine(isPageId, { message: `Expected a page id (prefix "${ID_PREFIXES.page}")` });
122
+ var ServiceIdSchema = z.string().refine(isServiceId, { message: `Expected a service id (prefix "${ID_PREFIXES.service}")` });
123
+ var ThemeIdSchema = z.string().refine(isThemeId, { message: `Expected a theme id (prefix "${ID_PREFIXES.theme}")` });
124
+ var PaletteEntryIdSchema = z.string().refine(isPaletteEntryId, { message: `Expected a palette-entry id (prefix "${ID_PREFIXES.palette}")` });
125
+ var LedgerKindSchema = z.enum([
126
+ "orbital",
127
+ "entity",
128
+ "trait",
129
+ "event",
130
+ "page",
131
+ "service",
132
+ "theme"
133
+ ]);
134
+ var LedgerEntrySchema = z.object({
135
+ id: z.string(),
136
+ kind: LedgerKindSchema,
137
+ bakedName: z.string(),
138
+ curName: z.string(),
139
+ renames: z.array(
140
+ z.object({ from: z.string(), to: z.string(), at: z.string() })
141
+ ),
142
+ owner: z.enum(["std", "io", "workspace"]),
143
+ parent: TraitIdSchema.optional()
144
+ });
145
+ var IdentityLedgerSchema = z.object({
146
+ schemaVersion: z.literal(1),
147
+ entries: z.record(LedgerEntrySchema)
148
+ });
4
149
  var FieldTypeSchema = z.enum([
5
150
  "string",
6
151
  "number",
@@ -25,6 +170,7 @@ var RelationCardinalitySchema = z.enum([
25
170
  ]);
26
171
  var RelationConfigSchema = z.object({
27
172
  entity: z.string().min(1, "Target entity is required"),
173
+ entityId: EntityIdSchema.optional(),
28
174
  field: z.string().optional(),
29
175
  cardinality: RelationCardinalitySchema.optional(),
30
176
  onDelete: z.enum(["cascade", "nullify", "restrict"]).optional(),
@@ -35,6 +181,7 @@ var RelationConfigSchema = z.object({
35
181
  }).transform((data) => {
36
182
  const normalized = {
37
183
  entity: data.entity || data.target || "",
184
+ entityId: data.entityId,
38
185
  cardinality: data.cardinality || data.type,
39
186
  field: data.field,
40
187
  onDelete: data.onDelete
@@ -437,7 +584,7 @@ function isBinding(value) {
437
584
  function isSExprCall(value) {
438
585
  return isSExpr(value);
439
586
  }
440
- var CORE_BINDINGS = ["entity", "payload", "state", "now", "config", "computed", "trait", "user"];
587
+ var CORE_BINDINGS = ["entity", "payload", "state", "now", "config", "computed", "trait", "user", "callsitePayload"];
441
588
  function parseBinding(binding) {
442
589
  if (!binding.startsWith("@")) {
443
590
  return null;
@@ -521,10 +668,12 @@ var StateSchema = z.object({
521
668
  var PayloadFieldSchema = z.object({
522
669
  name: z.string().min(1),
523
670
  type: z.string().min(1),
524
- required: z.boolean().optional()
671
+ required: z.boolean().optional(),
672
+ properties: z.lazy(() => z.array(PayloadFieldSchema)).optional()
525
673
  });
526
674
  var EventSchema = z.object({
527
675
  key: z.string().min(1, "Event key is required"),
676
+ id: EventIdSchema.optional(),
528
677
  name: z.string().min(1, "Event name is required"),
529
678
  description: z.string().optional(),
530
679
  synonyms: z.string().optional(),
@@ -542,6 +691,7 @@ var TransitionSchema = z.object({
542
691
  from: z.string().min(1, "Transition source state is required"),
543
692
  to: z.string().min(1, "Transition target state is required"),
544
693
  event: z.string().min(1, "Transition event is required"),
694
+ eventId: EventIdSchema.optional(),
545
695
  guard: ExpressionSchema.nullish(),
546
696
  effects: z.array(EffectSchema).optional(),
547
697
  description: z.string().nullish()
@@ -571,14 +721,50 @@ var TraitConfigSchema = z.record(TraitConfigValueSchema);
571
721
  function isCallSiteConfigDeclaration(entry) {
572
722
  return typeof entry === "object" && entry !== null && !Array.isArray(entry) && "type" in entry && typeof entry.type === "string" && "default" in entry;
573
723
  }
724
+ var CONFIG_DECLARATION_META_KEYS = ["label", "description", "tier", "synonyms", "values"];
725
+ function isConfigFieldSchema(entry) {
726
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) return false;
727
+ if (!("type" in entry) || typeof entry.type !== "string") return false;
728
+ return "default" in entry || CONFIG_DECLARATION_META_KEYS.some((k) => k in entry);
729
+ }
730
+ function normalizeCallSiteConfigToValues(config) {
731
+ if (config === void 0) {
732
+ return void 0;
733
+ }
734
+ const out = {};
735
+ let hasAny = false;
736
+ for (const [key, entry] of Object.entries(config)) {
737
+ const value = isConfigFieldSchema(entry) ? entry.default : entry;
738
+ if (value !== void 0) {
739
+ out[key] = value;
740
+ hasAny = true;
741
+ }
742
+ }
743
+ return hasAny ? out : void 0;
744
+ }
745
+ var REFERENCE_CONFIG_TYPES = ["entity", "trait", "event"];
746
+ function isReferenceConfigType(type) {
747
+ return REFERENCE_CONFIG_TYPES.includes(type);
748
+ }
749
+ var ConfigFieldItemsDeclarationSchema = z.lazy(
750
+ () => z.object({
751
+ type: z.string().optional(),
752
+ properties: z.record(TraitEntityFieldSchema).optional(),
753
+ items: ConfigFieldItemsDeclarationSchema.optional()
754
+ })
755
+ );
574
756
  var ConfigFieldDeclarationSchema = z.object({
575
757
  type: z.string(),
576
758
  default: TraitConfigValueSchema.optional(),
759
+ refId: z.string().optional(),
760
+ required: z.boolean().optional(),
577
761
  label: z.string().optional(),
578
762
  description: z.string().optional(),
579
763
  tier: z.string().optional(),
580
764
  values: z.array(z.string()).optional(),
581
- synonyms: z.string().optional()
765
+ synonyms: z.string().optional(),
766
+ items: ConfigFieldItemsDeclarationSchema.optional(),
767
+ properties: z.lazy(() => z.record(TraitEntityFieldSchema)).optional()
582
768
  });
583
769
  var DeclaredTraitConfigSchema = z.record(
584
770
  ConfigFieldDeclarationSchema
@@ -615,7 +801,9 @@ var TraitEntityFieldSchema = z.object({
615
801
  ]),
616
802
  required: z.boolean().optional(),
617
803
  default: z.unknown().optional(),
618
- values: z.array(z.string()).optional()
804
+ values: z.array(z.string()).optional(),
805
+ items: ConfigFieldItemsDeclarationSchema.optional(),
806
+ properties: z.lazy(() => z.record(TraitEntityFieldSchema)).optional()
619
807
  });
620
808
  var TraitDataEntitySchema = z.object({
621
809
  name: z.string().min(1),
@@ -634,9 +822,11 @@ var TraitTickSchema = z.object({
634
822
  interval: z.union([z.literal("frame"), z.number().positive()]),
635
823
  appliesTo: z.array(z.string()).optional(),
636
824
  pages: z.array(z.string()).optional(),
825
+ pageIds: z.array(PageIdSchema).optional(),
637
826
  guard: ExpressionSchema.optional(),
638
827
  effects: z.array(EffectSchema).min(1),
639
- emits: z.array(z.string()).optional()
828
+ emits: z.array(z.string()).optional(),
829
+ emitIds: z.array(EventIdSchema).optional()
640
830
  });
641
831
  var EventScopeSchema = z.enum(["internal", "external"]);
642
832
  var EventPayloadFieldSchema = z.object({
@@ -654,20 +844,39 @@ var EventPayloadFieldSchema = z.object({
654
844
  type: z.string().min(1),
655
845
  required: z.boolean().optional(),
656
846
  description: z.string().optional(),
657
- entityType: z.string().optional()
847
+ entityType: z.string().optional(),
848
+ properties: z.lazy(() => z.array(EventPayloadFieldSchema)).optional()
658
849
  });
850
+ var CONFIG_REF_EVENT_PATTERN = /^@config\.[A-Za-z_][A-Za-z0-9_]*$/;
851
+ function configRefEventKnob(event) {
852
+ return CONFIG_REF_EVENT_PATTERN.test(event) ? event.slice("@config.".length) : void 0;
853
+ }
854
+ function resolveConfigRefEventName(event, declaredConfig, effectiveConfig) {
855
+ const knob = configRefEventKnob(event);
856
+ if (knob === void 0) return { ok: false, error: "unknown-knob" };
857
+ const field = declaredConfig?.[knob];
858
+ if (field === void 0) return { ok: false, error: "unknown-knob" };
859
+ if (field.type !== "string") return { ok: false, error: "not-string" };
860
+ if (field.default === void 0) return { ok: false, error: "no-default" };
861
+ const value = effectiveConfig[knob];
862
+ if (typeof value !== "string") return { ok: false, error: "not-string" };
863
+ return { ok: true, value };
864
+ }
659
865
  var TraitEventContractSchema = z.object({
660
866
  /**
661
867
  * Event name. Mirrors the Rust validator's `is_valid_event_identifier`:
662
868
  * starts with a letter, then any letters / digits / underscores. Both
663
869
  * UPPER_SNAKE_CASE and PascalCase shapes are valid identifiers in the
664
870
  * post-Phase 2.5 nominal-event type system (events declared via
665
- * `type X = Event<T>`).
871
+ * `type X = Event<T>`). A pre-resolution `@config.<knob>` reference
872
+ * (Option B) is also legal — inline/resolve substitutes it with the
873
+ * knob's effective literal before codegen/runtime consume it.
666
874
  */
667
875
  event: z.string().min(1).regex(
668
- /^[A-Za-z][A-Za-z0-9_]*$/,
669
- "Event name must start with a letter and contain only letters, digits, and underscores"
876
+ /^([A-Za-z][A-Za-z0-9_]*|@config\.[A-Za-z_][A-Za-z0-9_]*)$/,
877
+ "Event name must start with a letter and contain only letters, digits, and underscores, or be a `@config.<knob>` reference"
670
878
  ),
879
+ eventId: EventIdSchema.optional(),
671
880
  description: z.string().optional(),
672
881
  synonyms: z.string().optional(),
673
882
  tier: z.string().optional(),
@@ -676,16 +885,24 @@ var TraitEventContractSchema = z.object({
676
885
  });
677
886
  var ListenSourceSchema = z.union([
678
887
  z.object({ kind: z.literal("any") }),
679
- z.object({ kind: z.literal("trait"), trait: z.string().min(1) }),
888
+ z.object({
889
+ kind: z.literal("trait"),
890
+ trait: z.string().min(1),
891
+ traitId: TraitIdSchema.optional()
892
+ }),
680
893
  z.object({
681
894
  kind: z.literal("orbital"),
682
895
  orbital: z.string().min(1),
683
- trait: z.string().min(1)
896
+ trait: z.string().min(1),
897
+ orbitalId: OrbitalIdSchema.optional(),
898
+ traitId: TraitIdSchema.optional()
684
899
  })
685
900
  ]);
686
901
  var TraitEventListenerSchema = z.object({
687
902
  event: z.string().min(1),
903
+ eventId: EventIdSchema.optional(),
688
904
  triggers: z.string().min(1),
905
+ triggersId: EventIdSchema.optional(),
689
906
  description: z.string().optional(),
690
907
  synonyms: z.string().optional(),
691
908
  tier: z.string().optional(),
@@ -701,14 +918,20 @@ var RequiredFieldSchema = z.object({
701
918
  });
702
919
  var TraitReferenceSchema = z.object({
703
920
  ref: z.string().min(1),
921
+ refId: TraitIdSchema.optional(),
922
+ // V4 local declaration id (see the interface doc) — declared so the
923
+ // strip-mode zod gate carries it through instead of dropping it.
924
+ id: TraitIdSchema.optional(),
704
925
  // Phase 1.2: optional registry path disambiguator, pairs with `ref`.
705
926
  from: z.string().optional(),
706
927
  linkedEntity: z.string().optional(),
928
+ linkedEntityId: EntityIdSchema.optional(),
707
929
  name: z.string().optional(),
708
930
  events: z.record(
709
931
  z.string().min(1, "events key (atom event name) must be non-empty"),
710
932
  z.string().min(1, "events value (caller event name) must be non-empty")
711
933
  ).optional(),
934
+ eventIds: z.record(z.string().min(1), EventIdSchema).optional(),
712
935
  fields: z.record(
713
936
  z.string().min(1, "fields key (canonical field name) must be non-empty"),
714
937
  z.string().min(1, "fields value (consumer field name) must be non-empty")
@@ -758,6 +981,7 @@ var SourceBehaviorMetadataSchema = z.object({
758
981
  originalName: z.string().min(1)
759
982
  });
760
983
  var TraitSchema = z.object({
984
+ id: TraitIdSchema.optional(),
761
985
  name: z.string().min(1),
762
986
  description: z.string().optional(),
763
987
  description_visual_prompt: z.string().optional(),
@@ -769,6 +993,9 @@ var TraitSchema = z.object({
769
993
  capabilities: z.array(z.string()).optional(),
770
994
  scope: TraitScopeSchema,
771
995
  linkedEntity: z.string().optional(),
996
+ linkedEntityId: EntityIdSchema.optional(),
997
+ entityRefIds: z.record(z.string().min(1), EntityIdSchema).optional(),
998
+ traitEmbedIds: z.record(z.string().min(1), TraitIdSchema).optional(),
772
999
  requiredFields: z.array(RequiredFieldSchema).optional(),
773
1000
  dataEntities: z.array(TraitDataEntitySchema).optional(),
774
1001
  stateMachine: StateMachineSchema.optional(),
@@ -842,10 +1069,13 @@ var ViewTypeSchema = z.enum([
842
1069
  ]);
843
1070
  var PageTraitRefSchema = z.object({
844
1071
  ref: z.string().min(1, "Trait ref is required"),
1072
+ refId: TraitIdSchema.optional(),
845
1073
  linkedEntity: z.string().optional(),
1074
+ linkedEntityId: EntityIdSchema.optional(),
846
1075
  config: TraitConfigSchema.optional()
847
1076
  });
848
1077
  var OrbitalPageStrictSchema = z.object({
1078
+ id: PageIdSchema.optional(),
849
1079
  name: z.string().min(1, "Page name is required"),
850
1080
  path: z.string().min(1, "Page path is required").startsWith("/", "Path must start with /"),
851
1081
  primaryEntity: z.string().min(1, "Primary entity is required"),
@@ -853,6 +1083,7 @@ var OrbitalPageStrictSchema = z.object({
853
1083
  title: z.string().optional()
854
1084
  }).strict();
855
1085
  var OrbitalPageSchema = z.object({
1086
+ id: PageIdSchema.optional(),
856
1087
  name: z.string().min(1, "Page name is required"),
857
1088
  path: z.string().min(1, "Page path is required").startsWith("/", "Path must start with /"),
858
1089
  viewType: ViewTypeSchema.optional(),
@@ -1429,11 +1660,14 @@ var PageRefStringSchema = z.string().regex(
1429
1660
  );
1430
1661
  var PageRefObjectSchema = z.object({
1431
1662
  ref: PageRefStringSchema,
1663
+ refId: PageIdSchema.optional(),
1432
1664
  // Phase 1.2: optional registry path disambiguator, pairs with `ref`.
1433
1665
  from: z.string().optional(),
1434
1666
  path: z.string().startsWith("/").optional(),
1435
1667
  linkedEntity: z.string().optional(),
1436
- traits: z.array(TraitRefSchema).optional()
1668
+ linkedEntityId: EntityIdSchema.optional(),
1669
+ traits: z.array(TraitRefSchema).optional(),
1670
+ traitRefIds: z.array(TraitIdSchema).optional()
1437
1671
  });
1438
1672
  var PageRefSchema = z.union([
1439
1673
  PageSchema,
@@ -1487,6 +1721,7 @@ var ComputedEventListenerSchema = z.object({
1487
1721
  payloadMapping: z.record(z.string()).optional()
1488
1722
  });
1489
1723
  var OrbitalDefinitionSchema = z.object({
1724
+ id: OrbitalIdSchema.optional(),
1490
1725
  name: z.string().min(1, "Orbital name is required"),
1491
1726
  description: z.string().optional(),
1492
1727
  visual_prompt: z.string().optional(),
@@ -1551,7 +1786,12 @@ var OrbitalSchemaSchema = z.object({
1551
1786
  orbitals: z.array(OrbitalSchema).min(1, "At least one orbital is required"),
1552
1787
  services: z.array(ServiceDefinitionSchema).optional(),
1553
1788
  config: OrbitalConfigSchema.optional(),
1554
- _metadata: SchemaMetadataSchema.optional()
1789
+ _metadata: SchemaMetadataSchema.optional(),
1790
+ // V4 identity — optional/dual-carry until the Phase-7 flip. Present on
1791
+ // id-carrying `.orb` files so `parseOrbitalSchema` preserves them instead
1792
+ // of stripping unknown keys.
1793
+ schemaVersion: z.number().optional(),
1794
+ ledger: IdentityLedgerSchema.optional()
1555
1795
  });
1556
1796
  function parseOrbitalSchema(data) {
1557
1797
  return OrbitalSchemaSchema.parse(data);
@@ -1608,6 +1848,11 @@ var BINDING_DOCS = {
1608
1848
  description: "Authenticated user / agent context for ownership and role-based gating",
1609
1849
  examples: ["@user.id", "@user.role"],
1610
1850
  requiresPath: true
1851
+ },
1852
+ callsitePayload: {
1853
+ description: "Call-site-captured event payload \u2014 emitted by the compiler's inline-trait hoisting when an extracted render block captured @payload; resolved at the composing effect by the runtime BindingResolver",
1854
+ examples: ["@callsitePayload.error", "@callsitePayload.row"],
1855
+ requiresPath: true
1611
1856
  }
1612
1857
  };
1613
1858
  var BINDING_CONTEXT_RULES = {
@@ -1616,8 +1861,8 @@ var BINDING_CONTEXT_RULES = {
1616
1861
  description: `Guards can access entity fields, event payload, current state, time, the call-site trait config (@config.X), and the authenticated user context (@user.id, @user.role) for ownership / role gates. Config access lets atoms write mode-aware guards \u2014 e.g. std-modal's OPEN can require @payload.row only when @config.mode equals "edit", letting create-mode legitimately fire OPEN with no row. Like effects, @config.X is substituted at molecule/organism inline time with the literal call-site value; at atom-scope validate, @config is allowed-but-unresolved.`
1617
1862
  },
1618
1863
  effect: {
1619
- allowed: ["entity", "payload", "state", "now", "trait", "config", "user"],
1620
- description: "Effects can access and modify entity fields, use payload data, embed another trait's live frame via @trait.X inside render-ui children, read trait config values (@config.X) for atoms parameterized by their call-site, and read the authenticated user context (@user.id, @user.role). At molecule/organism inline time, @config.X is substituted with the literal value from the call-site config block; at atom-scope validate, @config is allowed-but-unresolved."
1864
+ allowed: ["entity", "payload", "state", "now", "trait", "config", "user", "callsitePayload"],
1865
+ description: "Effects can access and modify entity fields, use payload data, embed another trait's live frame via @trait.X inside render-ui children, read trait config values (@config.X) for atoms parameterized by their call-site, and read the authenticated user context (@user.id, @user.role). At molecule/organism inline time, @config.X is substituted with the literal value from the call-site config block; at atom-scope validate, @config is allowed-but-unresolved. @callsitePayload.X is the call-site-captured event payload emitted by the compiler's inline-trait hoisting (a hoisted render block that captured @payload); it is resolved at the composing effect by the runtime BindingResolver."
1621
1866
  },
1622
1867
  tick: {
1623
1868
  allowed: ["entity", "state", "now", "config", "user"],
@@ -1730,7 +1975,7 @@ function getInteractionModelForDomain(domain) {
1730
1975
  // src/patterns/patterns-registry.json
1731
1976
  var patterns_registry_default = {
1732
1977
  version: "1.0.0",
1733
- exportedAt: "2026-07-09T14:00:32.936Z",
1978
+ exportedAt: "2026-07-16T19:33:37.203Z",
1734
1979
  patterns: {
1735
1980
  "entity-table": {
1736
1981
  type: "entity-table",
@@ -2435,7 +2680,7 @@ var patterns_registry_default = {
2435
2680
  types: [
2436
2681
  "function"
2437
2682
  ],
2438
- description: "renderItem prop",
2683
+ description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
2439
2684
  kind: "callback",
2440
2685
  callbackArgs: [
2441
2686
  {
@@ -2605,15 +2850,6 @@ var patterns_registry_default = {
2605
2850
  ],
2606
2851
  typicalSize: "medium",
2607
2852
  propsSchema: {
2608
- entity: {
2609
- types: [
2610
- "object",
2611
- "array"
2612
- ],
2613
- description: "Entity record or array of records \u2014 pre-resolved by the trait via render-ui after a fetch emit",
2614
- kind: "entity",
2615
- cardinality: "collection"
2616
- },
2617
2853
  className: {
2618
2854
  types: [
2619
2855
  "string"
@@ -2717,6 +2953,15 @@ var patterns_registry_default = {
2717
2953
  ]
2718
2954
  }
2719
2955
  },
2956
+ entity: {
2957
+ types: [
2958
+ "object",
2959
+ "array"
2960
+ ],
2961
+ description: "Entity data (single record or collection).",
2962
+ kind: "entity",
2963
+ cardinality: "collection"
2964
+ },
2720
2965
  minCardWidth: {
2721
2966
  types: [
2722
2967
  "number"
@@ -5952,7 +6197,7 @@ var patterns_registry_default = {
5952
6197
  types: [
5953
6198
  "string"
5954
6199
  ],
5955
- description: "Declarative step click event \u2014 emits UI:{stepClickEvent} with { stepIndex }",
6200
+ description: "Declarative step click event \u2014 emits UI:{stepClickEvent} with { stepIndex }. Setting it requires declaring that event (with a `{ stepIndex }` payload) and a transition handling it in the same trait; omit this prop for non-clickable progress indicators.",
5956
6201
  kind: "event-ref",
5957
6202
  emitPayloadSchema: [
5958
6203
  {
@@ -9401,7 +9646,7 @@ var patterns_registry_default = {
9401
9646
  types: [
9402
9647
  "string"
9403
9648
  ],
9404
- description: "Input type - supports 'select' and 'textarea' in addition to standard types",
9649
+ description: "Input type \u2014 selects the field's data mode. Use 'password' for masked credentials / secret / passphrase entry (there is no separate password pattern); 'email', 'tel', 'url', 'number', 'search', 'date', and 'time' for their respective values; and 'select' / 'textarea' for choice and multi-line entry in addition to the standard single-line types.",
9405
9650
  enumValues: [
9406
9651
  "text",
9407
9652
  "email",
@@ -10679,7 +10924,7 @@ var patterns_registry_default = {
10679
10924
  types: [
10680
10925
  "function"
10681
10926
  ],
10682
- description: "Render function for each item",
10927
+ description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
10683
10928
  required: true,
10684
10929
  kind: "callback",
10685
10930
  callbackArgs: [
@@ -12079,6 +12324,144 @@ var patterns_registry_default = {
12079
12324
  ],
12080
12325
  typicalSize: "medium",
12081
12326
  propsSchema: {
12327
+ className: {
12328
+ types: [
12329
+ "string"
12330
+ ],
12331
+ description: "Additional CSS classes"
12332
+ },
12333
+ placeholder: {
12334
+ types: [
12335
+ "string"
12336
+ ],
12337
+ description: "Placeholder text"
12338
+ },
12339
+ value: {
12340
+ types: [
12341
+ "string",
12342
+ "number"
12343
+ ],
12344
+ description: "Current value"
12345
+ },
12346
+ disabled: {
12347
+ types: [
12348
+ "boolean"
12349
+ ],
12350
+ description: "Whether input is disabled"
12351
+ },
12352
+ action: {
12353
+ types: [
12354
+ "string"
12355
+ ],
12356
+ description: "Declarative event name for trait dispatch",
12357
+ kind: "event"
12358
+ },
12359
+ inputType: {
12360
+ types: [
12361
+ "string"
12362
+ ],
12363
+ description: "Input type \u2014 selects the field's data mode. Use 'password' for masked credentials / secret / passphrase entry (there is no separate password pattern); 'email', 'tel', 'url', 'number', 'search', 'date', and 'time' for their respective values; and 'select' / 'textarea' for choice and multi-line entry in addition to the standard single-line types.",
12364
+ enumValues: [
12365
+ "text",
12366
+ "email",
12367
+ "password",
12368
+ "number",
12369
+ "tel",
12370
+ "url",
12371
+ "search",
12372
+ "date",
12373
+ "datetime-local",
12374
+ "time",
12375
+ "checkbox",
12376
+ "select",
12377
+ "textarea"
12378
+ ]
12379
+ },
12380
+ label: {
12381
+ types: [
12382
+ "string"
12383
+ ],
12384
+ description: "label prop"
12385
+ },
12386
+ helperText: {
12387
+ types: [
12388
+ "string"
12389
+ ],
12390
+ description: "helperText prop"
12391
+ },
12392
+ error: {
12393
+ types: [
12394
+ "string"
12395
+ ],
12396
+ description: "error prop"
12397
+ },
12398
+ leftIcon: {
12399
+ types: [
12400
+ "icon",
12401
+ "string"
12402
+ ],
12403
+ description: "leftIcon prop"
12404
+ },
12405
+ rightIcon: {
12406
+ types: [
12407
+ "icon",
12408
+ "string"
12409
+ ],
12410
+ description: "rightIcon prop"
12411
+ },
12412
+ clearable: {
12413
+ types: [
12414
+ "boolean"
12415
+ ],
12416
+ description: "Show clear button when input has value"
12417
+ },
12418
+ onClear: {
12419
+ types: [
12420
+ "function",
12421
+ "string"
12422
+ ],
12423
+ description: "Callback or declarative event key when clear button is clicked"
12424
+ },
12425
+ options: {
12426
+ types: [
12427
+ "array"
12428
+ ],
12429
+ description: "Options for select type",
12430
+ items: {
12431
+ types: [
12432
+ "object"
12433
+ ],
12434
+ properties: {
12435
+ value: {
12436
+ types: [
12437
+ "string"
12438
+ ]
12439
+ },
12440
+ label: {
12441
+ types: [
12442
+ "string"
12443
+ ]
12444
+ }
12445
+ },
12446
+ required: [
12447
+ "value",
12448
+ "label"
12449
+ ]
12450
+ }
12451
+ },
12452
+ rows: {
12453
+ types: [
12454
+ "number"
12455
+ ],
12456
+ description: "Rows for textarea type"
12457
+ },
12458
+ onChange: {
12459
+ types: [
12460
+ "function",
12461
+ "string"
12462
+ ],
12463
+ description: "onChange handler or declarative event key for trait dispatch"
12464
+ },
12082
12465
  leftAddon: {
12083
12466
  types: [
12084
12467
  "node",
@@ -12092,12 +12475,6 @@ var patterns_registry_default = {
12092
12475
  "icon"
12093
12476
  ],
12094
12477
  description: "Right addon (icon, button, or text)"
12095
- },
12096
- className: {
12097
- types: [
12098
- "string"
12099
- ],
12100
- description: "Additional CSS classes"
12101
12478
  }
12102
12479
  }
12103
12480
  },
@@ -16086,6 +16463,11 @@ var patterns_registry_default = {
16086
16463
  "number"
16087
16464
  ]
16088
16465
  },
16466
+ badge: {
16467
+ types: [
16468
+ "number"
16469
+ ]
16470
+ },
16089
16471
  x: {
16090
16472
  types: [
16091
16473
  "number"
@@ -16106,7 +16488,7 @@ var patterns_registry_default = {
16106
16488
  types: [
16107
16489
  "array"
16108
16490
  ],
16109
- description: "Graph edges",
16491
+ description: "Graph edges (the only rendered links)",
16110
16492
  items: {
16111
16493
  types: [
16112
16494
  "object"
@@ -16144,6 +16526,39 @@ var patterns_registry_default = {
16144
16526
  ]
16145
16527
  }
16146
16528
  },
16529
+ similarity: {
16530
+ types: [
16531
+ "array"
16532
+ ],
16533
+ description: "All-pairs similarity (cosine 0\u20131) used ONLY for layout, never drawn. It is the secondary macro-layout: non-connected pairs get a weak spring (higher cosine \u21D2 closer) so clusters arrange relative to each other; drawn `edges` stay the primary tight structure. When omitted, edges alone drive the layout.",
16534
+ items: {
16535
+ types: [
16536
+ "object"
16537
+ ],
16538
+ properties: {
16539
+ source: {
16540
+ types: [
16541
+ "string"
16542
+ ]
16543
+ },
16544
+ target: {
16545
+ types: [
16546
+ "string"
16547
+ ]
16548
+ },
16549
+ weight: {
16550
+ types: [
16551
+ "number"
16552
+ ]
16553
+ }
16554
+ },
16555
+ required: [
16556
+ "source",
16557
+ "target",
16558
+ "weight"
16559
+ ]
16560
+ }
16561
+ },
16147
16562
  height: {
16148
16563
  types: [
16149
16564
  "number"
@@ -16253,6 +16668,11 @@ var patterns_registry_default = {
16253
16668
  "number"
16254
16669
  ]
16255
16670
  },
16671
+ badge: {
16672
+ types: [
16673
+ "number"
16674
+ ]
16675
+ },
16256
16676
  x: {
16257
16677
  types: [
16258
16678
  "number"
@@ -16311,6 +16731,74 @@ var patterns_registry_default = {
16311
16731
  "number"
16312
16732
  ]
16313
16733
  },
16734
+ badge: {
16735
+ types: [
16736
+ "number"
16737
+ ]
16738
+ },
16739
+ x: {
16740
+ types: [
16741
+ "number"
16742
+ ]
16743
+ },
16744
+ y: {
16745
+ types: [
16746
+ "number"
16747
+ ]
16748
+ }
16749
+ },
16750
+ required: [
16751
+ "id"
16752
+ ]
16753
+ }
16754
+ }
16755
+ ]
16756
+ },
16757
+ onBadgeClick: {
16758
+ types: [
16759
+ "function"
16760
+ ],
16761
+ description: "On node badge click (e.g. to expand a merged cluster).",
16762
+ kind: "callback",
16763
+ callbackArgs: [
16764
+ {
16765
+ name: "node",
16766
+ type: "object",
16767
+ schema: {
16768
+ types: [
16769
+ "object"
16770
+ ],
16771
+ properties: {
16772
+ id: {
16773
+ types: [
16774
+ "string"
16775
+ ]
16776
+ },
16777
+ label: {
16778
+ types: [
16779
+ "string"
16780
+ ]
16781
+ },
16782
+ group: {
16783
+ types: [
16784
+ "string"
16785
+ ]
16786
+ },
16787
+ color: {
16788
+ types: [
16789
+ "string"
16790
+ ]
16791
+ },
16792
+ size: {
16793
+ types: [
16794
+ "number"
16795
+ ]
16796
+ },
16797
+ badge: {
16798
+ types: [
16799
+ "number"
16800
+ ]
16801
+ },
16314
16802
  x: {
16315
16803
  types: [
16316
16804
  "number"
@@ -18326,7 +18814,7 @@ var patterns_registry_default = {
18326
18814
  types: [
18327
18815
  "array"
18328
18816
  ],
18329
- description: "Field definitions for rendering each card. The pattern contract in `@almadar/patterns` documents `columns` as the wire-format alias the compiler emits \u2014 both names resolve to the same shape here. Pass either.",
18817
+ description: "Field definitions for rendering each card. The pattern contract in `@almadar/core/patterns` documents `columns` as the wire-format alias the compiler emits \u2014 both names resolve to the same shape here. Pass either.",
18330
18818
  items: {
18331
18819
  types: [
18332
18820
  "object"
@@ -18658,7 +19146,7 @@ var patterns_registry_default = {
18658
19146
  types: [
18659
19147
  "function"
18660
19148
  ],
18661
- description: 'Per-item render function (schema-level alias for children render prop). In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }] The compiler converts this to the children render prop.',
19149
+ description: 'Per-item render function (schema-level alias for children render prop). In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }] The compiler converts this to the children render prop. In .lolo, author the per-item renderer as renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.',
18662
19150
  kind: "callback",
18663
19151
  callbackArgs: [
18664
19152
  {
@@ -18771,7 +19259,7 @@ var patterns_registry_default = {
18771
19259
  types: [
18772
19260
  "array"
18773
19261
  ],
18774
- description: "Field definitions for rendering each row. The pattern contract in `@almadar/patterns` documents `columns` as the wire-format alias the compiler emits \u2014 both names resolve to the same shape here. Pass either.",
19262
+ description: "Field definitions for rendering each row. The pattern contract in `@almadar/core/patterns` documents `columns` as the wire-format alias the compiler emits \u2014 both names resolve to the same shape here. Pass either.",
18775
19263
  items: {
18776
19264
  types: [
18777
19265
  "object"
@@ -19175,7 +19663,7 @@ var patterns_registry_default = {
19175
19663
  types: [
19176
19664
  "function"
19177
19665
  ],
19178
- description: 'Per-item render function (schema-level alias for children render prop). In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }] The compiler converts this to the children render prop.',
19666
+ description: 'Per-item render function (schema-level alias for children render prop). In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }] The compiler converts this to the children render prop. In .lolo, author the per-item renderer as renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.',
19179
19667
  kind: "callback",
19180
19668
  callbackArgs: [
19181
19669
  {
@@ -20205,6 +20693,12 @@ var patterns_registry_default = {
20205
20693
  ],
20206
20694
  description: "Text to display after the number"
20207
20695
  },
20696
+ format: {
20697
+ types: [
20698
+ "string"
20699
+ ],
20700
+ description: `Display format: "number" (locale grouping), "currency" ($x.xx), "percent" (rounded %). Unset preserves the value's own decimals.`
20701
+ },
20208
20702
  className: {
20209
20703
  types: [
20210
20704
  "string"
@@ -20391,7 +20885,7 @@ var patterns_registry_default = {
20391
20885
  types: [
20392
20886
  "function"
20393
20887
  ],
20394
- description: "Render function for each slide",
20888
+ description: "Render function for each slide. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
20395
20889
  kind: "callback",
20396
20890
  callbackArgs: [
20397
20891
  {
@@ -20564,7 +21058,7 @@ var patterns_registry_default = {
20564
21058
  types: [
20565
21059
  "function"
20566
21060
  ],
20567
- description: "renderItem prop",
21061
+ description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
20568
21062
  required: true,
20569
21063
  kind: "callback",
20570
21064
  callbackArgs: [
@@ -34586,7 +35080,7 @@ var patterns_registry_default = {
34586
35080
  types: [
34587
35081
  "function"
34588
35082
  ],
34589
- description: 'Per-row render function (schema alias). In .orb: ["fn","item",{...}]. The compiler converts this to the children render prop.',
35083
+ description: 'Per-row render function (schema alias). In .orb: ["fn","item",{...}]. The compiler converts this to the children render prop. In .lolo, author the per-row renderer as renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.',
34590
35084
  kind: "callback",
34591
35085
  callbackArgs: [
34592
35086
  {
@@ -36622,7 +37116,159 @@ var patterns_registry_default = {
36622
37116
  "v stack"
36623
37117
  ],
36624
37118
  typicalSize: "small",
36625
- propsSchema: {}
37119
+ propsSchema: {
37120
+ gap: {
37121
+ types: [
37122
+ "string"
37123
+ ],
37124
+ description: "Gap between children",
37125
+ enumValues: [
37126
+ "none",
37127
+ "xs",
37128
+ "sm",
37129
+ "md",
37130
+ "lg",
37131
+ "xl",
37132
+ "2xl"
37133
+ ],
37134
+ default: "md"
37135
+ },
37136
+ align: {
37137
+ types: [
37138
+ "string"
37139
+ ],
37140
+ description: "Align items on the cross axis",
37141
+ enumValues: [
37142
+ "start",
37143
+ "center",
37144
+ "end",
37145
+ "stretch",
37146
+ "baseline"
37147
+ ],
37148
+ default: "stretch"
37149
+ },
37150
+ justify: {
37151
+ types: [
37152
+ "string"
37153
+ ],
37154
+ description: "Justify items on the main axis",
37155
+ enumValues: [
37156
+ "start",
37157
+ "center",
37158
+ "end",
37159
+ "between",
37160
+ "around",
37161
+ "evenly"
37162
+ ],
37163
+ default: "start"
37164
+ },
37165
+ wrap: {
37166
+ types: [
37167
+ "boolean"
37168
+ ],
37169
+ description: "Allow items to wrap",
37170
+ default: false
37171
+ },
37172
+ reverse: {
37173
+ types: [
37174
+ "boolean"
37175
+ ],
37176
+ description: "Reverse the order of children",
37177
+ default: false
37178
+ },
37179
+ flex: {
37180
+ types: [
37181
+ "boolean"
37182
+ ],
37183
+ description: "Fill available space (flex: 1)",
37184
+ default: false
37185
+ },
37186
+ className: {
37187
+ types: [
37188
+ "string"
37189
+ ],
37190
+ description: "Custom class name"
37191
+ },
37192
+ style: {
37193
+ types: [
37194
+ "object"
37195
+ ],
37196
+ description: "Inline styles"
37197
+ },
37198
+ children: {
37199
+ types: [
37200
+ "node"
37201
+ ],
37202
+ description: "Children elements"
37203
+ },
37204
+ as: {
37205
+ types: [
37206
+ "component"
37207
+ ],
37208
+ description: "HTML element to render as"
37209
+ },
37210
+ onClick: {
37211
+ types: [
37212
+ "function"
37213
+ ],
37214
+ description: "Click handler",
37215
+ kind: "callback",
37216
+ callbackArgs: [
37217
+ {
37218
+ name: "e",
37219
+ type: "object"
37220
+ }
37221
+ ],
37222
+ nonEmittable: true
37223
+ },
37224
+ onKeyDown: {
37225
+ types: [
37226
+ "function"
37227
+ ],
37228
+ description: "Keyboard handler",
37229
+ kind: "callback",
37230
+ callbackArgs: [
37231
+ {
37232
+ name: "e",
37233
+ type: "object"
37234
+ }
37235
+ ],
37236
+ nonEmittable: true
37237
+ },
37238
+ role: {
37239
+ types: [
37240
+ "string"
37241
+ ],
37242
+ description: "Role for accessibility"
37243
+ },
37244
+ tabIndex: {
37245
+ types: [
37246
+ "number"
37247
+ ],
37248
+ description: "Tab index for focus management"
37249
+ },
37250
+ action: {
37251
+ types: [
37252
+ "string"
37253
+ ],
37254
+ description: "Declarative event name \u2014 emits UI:{action} via eventBus on click",
37255
+ kind: "event"
37256
+ },
37257
+ actionPayload: {
37258
+ types: [
37259
+ "object"
37260
+ ],
37261
+ description: "Payload to include with the action event",
37262
+ freeform: true
37263
+ },
37264
+ responsive: {
37265
+ types: [
37266
+ "boolean"
37267
+ ],
37268
+ description: "When true, horizontal stacks flip to vertical below the md breakpoint (768px)",
37269
+ default: false
37270
+ }
37271
+ }
36626
37272
  },
36627
37273
  hstack: {
36628
37274
  type: "hstack",
@@ -36635,7 +37281,159 @@ var patterns_registry_default = {
36635
37281
  "h stack"
36636
37282
  ],
36637
37283
  typicalSize: "small",
36638
- propsSchema: {}
37284
+ propsSchema: {
37285
+ gap: {
37286
+ types: [
37287
+ "string"
37288
+ ],
37289
+ description: "Gap between children",
37290
+ enumValues: [
37291
+ "none",
37292
+ "xs",
37293
+ "sm",
37294
+ "md",
37295
+ "lg",
37296
+ "xl",
37297
+ "2xl"
37298
+ ],
37299
+ default: "md"
37300
+ },
37301
+ align: {
37302
+ types: [
37303
+ "string"
37304
+ ],
37305
+ description: "Align items on the cross axis",
37306
+ enumValues: [
37307
+ "start",
37308
+ "center",
37309
+ "end",
37310
+ "stretch",
37311
+ "baseline"
37312
+ ],
37313
+ default: "stretch"
37314
+ },
37315
+ justify: {
37316
+ types: [
37317
+ "string"
37318
+ ],
37319
+ description: "Justify items on the main axis",
37320
+ enumValues: [
37321
+ "start",
37322
+ "center",
37323
+ "end",
37324
+ "between",
37325
+ "around",
37326
+ "evenly"
37327
+ ],
37328
+ default: "start"
37329
+ },
37330
+ wrap: {
37331
+ types: [
37332
+ "boolean"
37333
+ ],
37334
+ description: "Allow items to wrap",
37335
+ default: false
37336
+ },
37337
+ reverse: {
37338
+ types: [
37339
+ "boolean"
37340
+ ],
37341
+ description: "Reverse the order of children",
37342
+ default: false
37343
+ },
37344
+ flex: {
37345
+ types: [
37346
+ "boolean"
37347
+ ],
37348
+ description: "Fill available space (flex: 1)",
37349
+ default: false
37350
+ },
37351
+ className: {
37352
+ types: [
37353
+ "string"
37354
+ ],
37355
+ description: "Custom class name"
37356
+ },
37357
+ style: {
37358
+ types: [
37359
+ "object"
37360
+ ],
37361
+ description: "Inline styles"
37362
+ },
37363
+ children: {
37364
+ types: [
37365
+ "node"
37366
+ ],
37367
+ description: "Children elements"
37368
+ },
37369
+ as: {
37370
+ types: [
37371
+ "component"
37372
+ ],
37373
+ description: "HTML element to render as"
37374
+ },
37375
+ onClick: {
37376
+ types: [
37377
+ "function"
37378
+ ],
37379
+ description: "Click handler",
37380
+ kind: "callback",
37381
+ callbackArgs: [
37382
+ {
37383
+ name: "e",
37384
+ type: "object"
37385
+ }
37386
+ ],
37387
+ nonEmittable: true
37388
+ },
37389
+ onKeyDown: {
37390
+ types: [
37391
+ "function"
37392
+ ],
37393
+ description: "Keyboard handler",
37394
+ kind: "callback",
37395
+ callbackArgs: [
37396
+ {
37397
+ name: "e",
37398
+ type: "object"
37399
+ }
37400
+ ],
37401
+ nonEmittable: true
37402
+ },
37403
+ role: {
37404
+ types: [
37405
+ "string"
37406
+ ],
37407
+ description: "Role for accessibility"
37408
+ },
37409
+ tabIndex: {
37410
+ types: [
37411
+ "number"
37412
+ ],
37413
+ description: "Tab index for focus management"
37414
+ },
37415
+ action: {
37416
+ types: [
37417
+ "string"
37418
+ ],
37419
+ description: "Declarative event name \u2014 emits UI:{action} via eventBus on click",
37420
+ kind: "event"
37421
+ },
37422
+ actionPayload: {
37423
+ types: [
37424
+ "object"
37425
+ ],
37426
+ description: "Payload to include with the action event",
37427
+ freeform: true
37428
+ },
37429
+ responsive: {
37430
+ types: [
37431
+ "boolean"
37432
+ ],
37433
+ description: "When true, horizontal stacks flip to vertical below the md breakpoint (768px)",
37434
+ default: false
37435
+ }
37436
+ }
36639
37437
  },
36640
37438
  "form-layout": {
36641
37439
  type: "form-layout",
@@ -39888,31 +40686,31 @@ var patterns_registry_default = {
39888
40686
  types: [
39889
40687
  "number"
39890
40688
  ],
39891
- description: "Rect width in px."
40689
+ description: "Rect width in world units (fractions of `projector.tileWidth`)."
39892
40690
  },
39893
40691
  height: {
39894
40692
  types: [
39895
40693
  "number"
39896
40694
  ],
39897
- description: "Rect height in px."
40695
+ description: "Rect height in world units (fractions of `projector.tileWidth`)."
39898
40696
  },
39899
40697
  radiusX: {
39900
40698
  types: [
39901
40699
  "number"
39902
40700
  ],
39903
- description: "Ellipse horizontal radius in px."
40701
+ description: "Ellipse horizontal radius in world units (fractions of `projector.tileWidth`)."
39904
40702
  },
39905
40703
  radiusY: {
39906
40704
  types: [
39907
40705
  "number"
39908
40706
  ],
39909
- description: "Ellipse vertical radius in px; omitted \u2192 `radiusX` (a circle)."
40707
+ description: "Ellipse vertical radius in world units; omitted \u2192 `radiusX` (a circle)."
39910
40708
  },
39911
40709
  offsetX: {
39912
40710
  types: [
39913
40711
  "number"
39914
40712
  ],
39915
- description: "Fine px nudge from the anchor point (e.g. a disc drawn at `groundY - 8*scale`)."
40713
+ description: "Fine nudge from the anchor point in world units."
39916
40714
  },
39917
40715
  offsetY: {
39918
40716
  types: [
@@ -39924,7 +40722,7 @@ var patterns_registry_default = {
39924
40722
  types: [
39925
40723
  "array"
39926
40724
  ],
39927
- description: "Poly vertices as px offsets relative to the cell's projected top-left.",
40725
+ description: "Poly vertices as world-unit offsets relative to the cell's projected top-left.",
39928
40726
  items: {
39929
40727
  types: [
39930
40728
  "object"
@@ -40114,13 +40912,13 @@ var patterns_registry_default = {
40114
40912
  types: [
40115
40913
  "number"
40116
40914
  ],
40117
- description: "Draw width in px (2D) / world units (3D); omitted \u2192 resolved source width."
40915
+ description: "Draw width in world units (fractions of `projector.tileWidth`); omitted \u2192 resolved source width in px."
40118
40916
  },
40119
40917
  height: {
40120
40918
  types: [
40121
40919
  "number"
40122
40920
  ],
40123
- description: "Draw height in px (2D) / world units (3D); omitted \u2192 resolved source height."
40921
+ description: "Draw height in world units (fractions of `projector.tileWidth`); omitted \u2192 resolved source height in px."
40124
40922
  },
40125
40923
  frame: {
40126
40924
  types: [
@@ -40128,6 +40926,12 @@ var patterns_registry_default = {
40128
40926
  ],
40129
40927
  description: "Explicit atlas sub-rect override (px); omitted \u2192 resolved from `asset.atlas`/`asset.sprite`."
40130
40928
  },
40929
+ animation: {
40930
+ types: [
40931
+ "string"
40932
+ ],
40933
+ description: "Named GLB animation clip to play (3D backend only; the 2D painter animates via `frame`). Matched case-insensitively against the model's clips."
40934
+ },
40131
40935
  flipX: {
40132
40936
  types: [
40133
40937
  "boolean"
@@ -40605,6 +41409,11 @@ var patterns_registry_default = {
40605
41409
  "object"
40606
41410
  ]
40607
41411
  },
41412
+ animation: {
41413
+ types: [
41414
+ "string"
41415
+ ]
41416
+ },
40608
41417
  flipX: {
40609
41418
  types: [
40610
41419
  "boolean"
@@ -41731,7 +42540,7 @@ var integrators_registry_default = {
41731
42540
  // src/patterns/component-mapping.json
41732
42541
  var component_mapping_default = {
41733
42542
  version: "1.0.0",
41734
- exportedAt: "2026-07-09T14:00:32.936Z",
42543
+ exportedAt: "2026-07-16T19:33:37.203Z",
41735
42544
  mappings: {
41736
42545
  "page-header": {
41737
42546
  component: "PageHeader",
@@ -43086,7 +43895,7 @@ var component_mapping_default = {
43086
43895
  // src/patterns/event-contracts.json
43087
43896
  var event_contracts_default = {
43088
43897
  version: "1.0.0",
43089
- exportedAt: "2026-07-09T14:00:32.936Z",
43898
+ exportedAt: "2026-07-16T19:33:37.203Z",
43090
43899
  contracts: {
43091
43900
  form: {
43092
43901
  emits: [
@@ -44573,10 +45382,13 @@ var ORB_ALLOWED_ENTITY_PATTERNS = /* @__PURE__ */ new Set([
44573
45382
  "data-grid",
44574
45383
  "search-input",
44575
45384
  "form-section",
44576
- "meter"
45385
+ "meter",
45386
+ "table-view",
45387
+ "filter-group",
45388
+ "timeline",
45389
+ "media-gallery"
44577
45390
  ]);
44578
45391
  var ORB_EXCLUDED_CATEGORIES = /* @__PURE__ */ new Set([
44579
- "game",
44580
45392
  "debug",
44581
45393
  "template"
44582
45394
  ]);
@@ -44657,6 +45469,43 @@ function getOrbAllowedPatternsFiltered(patternNames) {
44657
45469
  return lines.join("\n");
44658
45470
  }
44659
45471
 
45472
+ // src/types/json.ts
45473
+ function isJsonPrimitive(value) {
45474
+ return value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean";
45475
+ }
45476
+ function isJsonObject(value) {
45477
+ return value !== null && typeof value === "object" && !Array.isArray(value);
45478
+ }
45479
+ function isJsonArray(value) {
45480
+ return Array.isArray(value);
45481
+ }
45482
+
45483
+ // src/patterns/helpers/render-ui-pattern-types.ts
45484
+ function collectPatternTypeTokens(node, out) {
45485
+ if (!isJsonObject(node)) return;
45486
+ const type = node["type"];
45487
+ if (typeof type === "string" && !type.startsWith("@")) out.add(type);
45488
+ const children = node["children"];
45489
+ if (isJsonArray(children)) {
45490
+ for (const child of children) collectPatternTypeTokens(child, out);
45491
+ }
45492
+ }
45493
+ function collectRenderUiPatternTypes(ir, out) {
45494
+ if (isJsonArray(ir)) {
45495
+ if (ir.length >= 3 && ir[0] === "render-ui" && typeof ir[1] === "string") {
45496
+ collectPatternTypeTokens(ir[2], out);
45497
+ }
45498
+ for (const item of ir) collectRenderUiPatternTypes(item, out);
45499
+ } else if (isJsonObject(ir)) {
45500
+ for (const value of Object.values(ir)) collectRenderUiPatternTypes(value, out);
45501
+ }
45502
+ }
45503
+ function renderUiPatternTypesOf(ir) {
45504
+ const out = /* @__PURE__ */ new Set();
45505
+ collectRenderUiPatternTypes(ir, out);
45506
+ return out;
45507
+ }
45508
+
44660
45509
  // src/patterns/helpers/pattern-recommender.ts
44661
45510
  var DOMAIN_KEYWORDS = {
44662
45511
  business: ["admin panels", "data-dense views", "list pages", "data entry", "comparisons"],
@@ -45010,17 +45859,6 @@ function isResolvedIR(ir) {
45010
45859
  return typeof r.appName === "string" && r.traits instanceof Map && r.pages instanceof Map;
45011
45860
  }
45012
45861
 
45013
- // src/types/json.ts
45014
- function isJsonPrimitive(value) {
45015
- return value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean";
45016
- }
45017
- function isJsonObject(value) {
45018
- return value !== null && typeof value === "object" && !Array.isArray(value);
45019
- }
45020
- function isJsonArray(value) {
45021
- return Array.isArray(value);
45022
- }
45023
-
45024
45862
  // src/types/validation.ts
45025
45863
  var KNOWN_VALIDATION_ERROR_CODES = {
45026
45864
  // Binding (`@entity.X`, `@payload.Y`, `@state.Z`, `@now`, ...)
@@ -45185,7 +46023,13 @@ var KNOWN_VALIDATION_ERROR_CODES = {
45185
46023
  ORB_X_PAYLOAD_MISMATCH: "ORB_X_PAYLOAD_MISMATCH",
45186
46024
  ORB_X_RENDER_UI_EVENT_LITERAL_STALE: "ORB_X_RENDER_UI_EVENT_LITERAL_STALE",
45187
46025
  ORB_X_UNRESOLVED_PATTERN_FIELD_REF: "ORB_X_UNRESOLVED_PATTERN_FIELD_REF",
45188
- ORB_X_UNUSED_EMISSION: "ORB_X_UNUSED_EMISSION"
46026
+ ORB_X_UNUSED_EMISSION: "ORB_X_UNUSED_EMISSION",
46027
+ // Identity — V4 dual-carry id integrity (`ORB_ID_*`). Mirrors
46028
+ // `orbital-compiler/src/phases/validation/id_integrity.rs`.
46029
+ ORB_ID_UNKNOWN_REF: "ORB_ID_UNKNOWN_REF",
46030
+ ORB_ID_NAME_MISMATCH: "ORB_ID_NAME_MISMATCH",
46031
+ ORB_ID_KIND_MISMATCH: "ORB_ID_KIND_MISMATCH",
46032
+ ORB_ID_LEDGER_ORPHAN: "ORB_ID_LEDGER_ORPHAN"
45189
46033
  };
45190
46034
  function isKnownValidationErrorCode(code) {
45191
46035
  return code in KNOWN_VALIDATION_ERROR_CODES;
@@ -45587,6 +46431,109 @@ function getTrait(ir, traitName) {
45587
46431
  return ir.traits.get(traitName);
45588
46432
  }
45589
46433
 
46434
+ // src/embedded-trait-config.ts
46435
+ var TRAIT_BINDING_PREFIX = "@trait.";
46436
+ var CONFIG_FORWARD_RE = /^@config\.([A-Za-z_][A-Za-z0-9_]*)$/;
46437
+ function collectTraitRefsFromValue(value, into) {
46438
+ if (value === null || value === void 0) return;
46439
+ if (typeof value === "string") {
46440
+ if (value.startsWith(TRAIT_BINDING_PREFIX)) {
46441
+ const rest = value.slice(TRAIT_BINDING_PREFIX.length);
46442
+ const dot = rest.indexOf(".");
46443
+ const traitName = dot === -1 ? rest : rest.slice(0, dot);
46444
+ if (traitName.length > 0) into.add(traitName);
46445
+ }
46446
+ return;
46447
+ }
46448
+ if (Array.isArray(value)) {
46449
+ for (const item of value) collectTraitRefsFromValue(item, into);
46450
+ return;
46451
+ }
46452
+ if (typeof value === "object") {
46453
+ for (const v of Object.values(value)) {
46454
+ collectTraitRefsFromValue(v, into);
46455
+ }
46456
+ }
46457
+ }
46458
+ function targetTraitOf(traitRef) {
46459
+ if (!traitRef || typeof traitRef !== "object") return void 0;
46460
+ const resolved = traitRef._resolved;
46461
+ return resolved && typeof resolved === "object" ? resolved : traitRef;
46462
+ }
46463
+ function collectEmbeddedTraitReferrers(schema) {
46464
+ const out = /* @__PURE__ */ new Map();
46465
+ if (!schema?.orbitals) return out;
46466
+ for (const orbital of schema.orbitals) {
46467
+ const traits = orbital.traits;
46468
+ if (!Array.isArray(traits)) continue;
46469
+ for (const traitRef of traits) {
46470
+ const target = targetTraitOf(traitRef);
46471
+ if (!target) continue;
46472
+ const referrerName = target.name;
46473
+ if (typeof referrerName !== "string" || referrerName.length === 0) continue;
46474
+ const refs = /* @__PURE__ */ new Set();
46475
+ if (target.config) collectTraitRefsFromValue(target.config, refs);
46476
+ const stateMachine = target.stateMachine;
46477
+ if (stateMachine) collectTraitRefsFromValue(stateMachine, refs);
46478
+ if (refs.size === 0) continue;
46479
+ for (const child of refs) {
46480
+ if (child === referrerName) continue;
46481
+ if (!out.has(child)) out.set(child, referrerName);
46482
+ }
46483
+ }
46484
+ }
46485
+ return out;
46486
+ }
46487
+ function buildResolvedTraitConfigs(schema) {
46488
+ const rawByName = {};
46489
+ if (!schema?.orbitals) return {};
46490
+ for (const orbital of schema.orbitals) {
46491
+ const traitRefs = orbital.traits;
46492
+ if (!traitRefs) continue;
46493
+ for (const t of traitRefs) {
46494
+ if (typeof t === "string") continue;
46495
+ const name = t.name ?? t.ref;
46496
+ const config = t.config;
46497
+ if (typeof name === "string" && config !== void 0) {
46498
+ rawByName[name] = { ...t, config };
46499
+ }
46500
+ }
46501
+ }
46502
+ const referrerByChild = collectEmbeddedTraitReferrers(schema);
46503
+ const resolved = /* @__PURE__ */ new Map();
46504
+ const resolving = /* @__PURE__ */ new Set();
46505
+ function resolveConfig(name) {
46506
+ const cached = resolved.get(name);
46507
+ if (cached) return cached;
46508
+ const raw = rawByName[name]?.config;
46509
+ const base = normalizeCallSiteConfigToValues(raw);
46510
+ if (!base) return void 0;
46511
+ if (resolving.has(name)) return base;
46512
+ resolving.add(name);
46513
+ const out = { ...base };
46514
+ const referrer = referrerByChild.get(name);
46515
+ if (referrer && referrer !== name) {
46516
+ const referrerConfig = resolveConfig(referrer);
46517
+ for (const [key, value] of Object.entries(out)) {
46518
+ if (typeof value !== "string") continue;
46519
+ const match = CONFIG_FORWARD_RE.exec(value);
46520
+ if (!match) continue;
46521
+ const forwarded = referrerConfig?.[match[1]];
46522
+ if (forwarded !== void 0) out[key] = forwarded;
46523
+ }
46524
+ }
46525
+ resolving.delete(name);
46526
+ resolved.set(name, out);
46527
+ return out;
46528
+ }
46529
+ const map = {};
46530
+ for (const name of Object.keys(rawByName)) {
46531
+ const cfg = resolveConfig(name);
46532
+ if (cfg !== void 0) map[name] = cfg;
46533
+ }
46534
+ return map;
46535
+ }
46536
+
45590
46537
  // src/diff.ts
45591
46538
  function diffSchemas(before, after) {
45592
46539
  const changes = [];
@@ -47207,13 +48154,40 @@ function applyEventWiring(orbitals, wiring) {
47207
48154
  }
47208
48155
 
47209
48156
  // src/builders/compose-behaviors.ts
48157
+ function isSchema(input) {
48158
+ return "orbitals" in input && Array.isArray(input.orbitals);
48159
+ }
47210
48160
  function asDefinitions(inputs) {
47211
- return inputs.flatMap((input) => {
47212
- if ("orbitals" in input && Array.isArray(input.orbitals)) {
47213
- return input.orbitals;
48161
+ return inputs.flatMap(
48162
+ (input) => isSchema(input) ? input.orbitals : [input]
48163
+ );
48164
+ }
48165
+ function mergeLedgers(inputs) {
48166
+ const merged = /* @__PURE__ */ new Map();
48167
+ let sawLedger = false;
48168
+ for (const input of inputs) {
48169
+ if (!isSchema(input) || input.ledger === void 0) continue;
48170
+ sawLedger = true;
48171
+ for (const [id, entry] of Object.entries(input.ledger.entries)) {
48172
+ if (!merged.has(id)) merged.set(id, entry);
47214
48173
  }
47215
- return [input];
47216
- });
48174
+ }
48175
+ if (!sawLedger) return void 0;
48176
+ const entries = {};
48177
+ for (const [id, entry] of [...merged.entries()].sort(
48178
+ ([a], [b]) => a < b ? -1 : a > b ? 1 : 0
48179
+ )) {
48180
+ entries[id] = entry;
48181
+ }
48182
+ return { schemaVersion: 1, entries };
48183
+ }
48184
+ function mergeSchemaVersions(inputs) {
48185
+ let max;
48186
+ for (const input of inputs) {
48187
+ if (!isSchema(input) || input.schemaVersion === void 0) continue;
48188
+ max = max === void 0 ? input.schemaVersion : Math.max(max, input.schemaVersion);
48189
+ }
48190
+ return max;
47217
48191
  }
47218
48192
  function toKebabCase(name) {
47219
48193
  return name.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
@@ -47283,10 +48257,14 @@ function composeBehaviors(input) {
47283
48257
  pages: page ? [page] : []
47284
48258
  };
47285
48259
  });
48260
+ const ledger = mergeLedgers(rawInputs);
48261
+ const schemaVersion = mergeSchemaVersions(rawInputs);
47286
48262
  const schema = {
47287
48263
  name: appName,
47288
48264
  version: "1.0.0",
47289
- orbitals: orbitalsWithPages
48265
+ orbitals: orbitalsWithPages,
48266
+ ...schemaVersion !== void 0 ? { schemaVersion } : {},
48267
+ ...ledger !== void 0 ? { ledger } : {}
47290
48268
  };
47291
48269
  return {
47292
48270
  schema,
@@ -47697,6 +48675,6 @@ function mergeEntityFrame(current, orderedWrites) {
47697
48675
  return next;
47698
48676
  }
47699
48677
 
47700
- export { AGENT_DOMAIN_CATEGORIES, ALLOWED_CUSTOM_COMPONENTS, ANIMATION_NAMES, ASSET_ASPECTS, ASSET_DIMENSIONS, AgentDomainCategorySchema, AnimationDefSchema, AnimationNameSchema, AssetAspectSchema, AssetCatalogEntrySchema, AssetCatalogSchema, AssetDimensionSchema, AssetSchema, BINDING_CONTEXT_RULES, BINDING_DOCS, BINDING_ROOTS, BindingSchema, CAMERA_MODES, COMPONENT_MAPPING, CORE_BINDINGS, CameraModeSchema, CameraSchema, ColorSliceSchema, ColorTokensSchema, ComputedEventContractSchema, ComputedEventListenerSchema, ConfigFieldDeclarationSchema, ConfigProvenanceRecordSchema, CustomPatternDefinitionSchema, CustomPatternMapSchema, DEFAULT_INTERACTION_MODELS, DeclaredTraitConfigSchema, DensitySliceSchema, DensityTokensSchema, DesignPreferencesSchema, DesignTokensSchema, DomainCategorySchema, DomainContextSchema, DomainVocabularySchema, ENTITY_ROLES, EVENT_CONTRACTS, EffectSchema, ElevationSliceSchema, ElevationTokensSchema, EntityCallSchema, EntityFieldContractSchema, EntityFieldSchema, EntityPersistenceSchema, EntityRefSchema, EntityRefStringSchema, EntityRoleSchema, EntitySchema, EntitySemanticRoleSchema, EventListenerSchema, EventPayloadFieldSchema, EventSchema, EventScopeSchema, EventSemanticRoleSchema, EventSourceSchema, ExpressionSchema, FieldFormatSchema, FieldSchema, FieldTypeSchema, GameSubCategorySchema, GeometrySliceSchema, GeometryTokensSchema, GuardSchema, INTEGRATORS_REGISTRY, IconFamilySchema, IconographySliceSchema, IconographyTokensSchema, IllustrationSliceSchema, IllustrationStyleSchema, IllustrationTokensSchema, InteractionModelSchema, KNOWN_VALIDATION_ERROR_CODES, ListenSourceSchema, McpServiceDefSchema, MotionDurationKeySchema, MotionDurationPaletteSchema, MotionEasingKeySchema, MotionEasingPaletteSchema, MotionIntentMapSchema, MotionIntentSchema, MotionSliceSchema, MotionTokensSchema, NodeClassificationSchema, OrbitalConfigSchema, OrbitalDefinitionSchema, OrbitalEntitySchema, OrbitalPageSchema, OrbitalPageStrictSchema, OrbitalSchemaSchema, OrbitalTraitRefSchema, OrbitalUnitSchema, OrbitalSchema as OrbitalZodSchema, PATTERN_REGISTRY, PATTERN_TYPES, PageRefObjectSchema, PageRefSchema, PageRefStringSchema, PageSchema, PageTraitRefSchema, PatternTypeSchema, PayloadFieldSchema, RelatedLinkSchema, RelationConfigSchema, RequiredFieldSchema, RestAuthConfigSchema, RestServiceDefSchema, SERVICE_TYPES, SExprAtomSchema, SExprSchema, SPRITE_DIRECTIONS, ScenePosSchema, SchemaMetadataSchema, SemanticAssetRefSchema, ServiceDefinitionSchema, ServiceRefObjectSchema, ServiceRefSchema, ServiceRefStringSchema, ServiceTypeSchema, SkinSpecSchema, SocketEventsSchema, SocketServiceDefSchema, SpacingScaleSchema, SpriteDirectionSchema, SpriteSheetAtlasSchema, StateMachineSchema, StateSchema, StateSemanticRoleSchema, SubTextureSchema, SuggestedGuardSchema, TextureAtlasSchema, ThemeDefinitionSchema, ThemeRefSchema, ThemeRefStringSchema, ThemeTokensSchema, ThemeVariantSchema, TilesheetSchema, TraitCategorySchema, TraitConfigSchema, TraitConfigValueSchema, TraitDataEntitySchema, TraitEntityFieldSchema, TraitEventContractSchema, TraitEventListenerSchema, TraitFieldRefSchema, TraitRefSchema, TraitReferenceSchema, TraitSchema, TraitTickSchema, TransitionSchema, TypeIntentMapSchema, TypeIntentSchema, TypeScaleEntrySchema, TypeScaleSchema, TypeScaleTokensSchema, TypeSizeKeySchema, TypeSliceSchema, TypeSlotSchema, TypeWeightSchema, UISlotSchema, UI_SLOTS, UXHintsSchema, UseDeclarationSchema, UserPersonaSchema, VISUAL_STYLES, ViewTypeSchema, VisualStyleSchema, answerToMutations, answersToMutations, applyEventWiring, applyFactoryCallPlanMutation, applyRenderOverlay, atomic, buildEdgeCoveringWalk, buildGuardPayloads, buildRecommendationContext, buildReplayPaths, buildStateGraph, callService, categorizeRemovals, classifyWorkflow, clearSchemaCache, collectBindings, collectReachableStates, component_mapping_default as componentMapping, composeBehaviors, constTruth, createAssetKey, createEmptyResolvedPage, createEmptyResolvedTrait, createLazyService, createResolvedField, createTypedEventBus, deref, deriveCollection, deriveInputType, despawn, detectLayoutStrategy, detectPageContentReduction, diffFactoryCalls, diffOrbitalSchemas, diffSchemaSemantics, diffSchemas, doEffects, emit, event_contracts_default as eventContracts, extractPayloadFieldRef, findCompatiblePatterns, findService, fingerprintNode, formatRecommendationsForPrompt, generatePatternDescription, generateQuestions, getAllPatternTypes, getArgs, getBindingExamples, getComponentForPattern, getDefaultAnimationsForRole, getEmittedEvents, getEntity, getEntityCardinality, getInteractionModelForDomain, getOperator, getOrbAllowedPatterns, getOrbAllowedPatternsCompact, getOrbAllowedPatternsFiltered, getOrbAllowedPatternsSlim, getPage, getPages, getPatternActionsRef, getPatternDefinition, getPatternMetadata, getPatternPropsCompact, getPatternsGroupedByCategory, getRemovals, getSchemaCacheStats, getServiceNames, getTrait, getTraitConfig, getTraitName, hasService, hasSignificantPageReduction, inferTsType, insertChildAtPath, integrators_registry_default as integratorsRegistry, isBinding, isCallSiteConfigDeclaration, isCircuitEvent, isDestructiveChange, isDrawHostPattern, isDrawablePattern, isEffect, isEntityAwarePattern, isEntityCall, isEntityReference, isEntityReferenceAny, isEventPayloadValue, isFieldValue, isImportedTraitRef, isInlineTrait, isJsonArray, isJsonObject, isJsonPrimitive, isKnownValidationErrorCode, isMcpService, isOrbitalDefinition, isPageReference, isPageReferenceObject, isPageReferenceString, isPlanSnapshot, isResolvedIR, isRestService, isRuntimeEntity, isSExpr, isSExprAtom, isSExprCall, isSExprEffect, isServiceReference, isServiceReferenceObject, isSessionHistoryEntry, isSocketService, isThemeReference, isTraitFieldRef, isValidBinding, isValidPatternType, mergeEntityFrame, navigate, navigatePatternPath, normalizeTraitRef, notify, parseAssetKey, parseBinding, parseEntityRef, parseImportedTraitRef, parseOrbitalSchema, parsePageRef, parseServiceRef, patterns_registry_default as patternsRegistry, persist, persistenceModeAllowsOverrides, recommendPatterns, ref, registry, removeChildAtPath, renderUI, replaceChildAtPath, requiresConfirmation, safeParseOrbitalSchema, schemaToIR, set, setPropAtPath, sexpr, spawn, summarizeOrbital, summarizeSchema, swap, toBindingRoot, translateOverlaysToParams, validateAssetAnimations, validateBindingInContext, walkSExpr, walkStatePairs, watch, widenTier };
48678
+ export { AGENT_DOMAIN_CATEGORIES, ALLOWED_CUSTOM_COMPONENTS, ANIMATION_NAMES, ASSET_ASPECTS, ASSET_DIMENSIONS, AgentDomainCategorySchema, AnimationDefSchema, AnimationNameSchema, AssetAspectSchema, AssetCatalogEntrySchema, AssetCatalogSchema, AssetDimensionSchema, AssetSchema, BINDING_CONTEXT_RULES, BINDING_DOCS, BINDING_ROOTS, BindingSchema, CAMERA_MODES, COMPONENT_MAPPING, CONFIG_REF_EVENT_PATTERN, CORE_BINDINGS, CameraModeSchema, CameraSchema, ColorSliceSchema, ColorTokensSchema, ComputedEventContractSchema, ComputedEventListenerSchema, ConfigFieldDeclarationSchema, ConfigProvenanceRecordSchema, CustomPatternDefinitionSchema, CustomPatternMapSchema, DEFAULT_INTERACTION_MODELS, DeclaredTraitConfigSchema, DensitySliceSchema, DensityTokensSchema, DesignPreferencesSchema, DesignTokensSchema, DomainCategorySchema, DomainContextSchema, DomainVocabularySchema, ENTITY_ROLES, EVENT_CONTRACTS, EffectSchema, ElevationSliceSchema, ElevationTokensSchema, EntityCallSchema, EntityFieldContractSchema, EntityFieldSchema, EntityIdSchema, EntityPersistenceSchema, EntityRefSchema, EntityRefStringSchema, EntityRoleSchema, EntitySchema, EntitySemanticRoleSchema, EventIdSchema, EventListenerSchema, EventPayloadFieldSchema, EventSchema, EventScopeSchema, EventSemanticRoleSchema, EventSourceSchema, ExpressionSchema, FieldFormatSchema, FieldSchema, FieldTypeSchema, GameSubCategorySchema, GeometrySliceSchema, GeometryTokensSchema, GuardSchema, INTEGRATORS_REGISTRY, IconFamilySchema, IconographySliceSchema, IconographyTokensSchema, IdentityLedgerSchema, IllustrationSliceSchema, IllustrationStyleSchema, IllustrationTokensSchema, InteractionModelSchema, KNOWN_VALIDATION_ERROR_CODES, LedgerEntrySchema, LedgerKindSchema, ListenSourceSchema, McpServiceDefSchema, MotionDurationKeySchema, MotionDurationPaletteSchema, MotionEasingKeySchema, MotionEasingPaletteSchema, MotionIntentMapSchema, MotionIntentSchema, MotionSliceSchema, MotionTokensSchema, NodeClassificationSchema, OrbitalConfigSchema, OrbitalDefinitionSchema, OrbitalEntitySchema, OrbitalIdSchema, OrbitalPageSchema, OrbitalPageStrictSchema, OrbitalSchemaSchema, OrbitalTraitRefSchema, OrbitalUnitSchema, OrbitalSchema as OrbitalZodSchema, PATTERN_REGISTRY, PATTERN_TYPES, PageIdSchema, PageRefObjectSchema, PageRefSchema, PageRefStringSchema, PageSchema, PageTraitRefSchema, PaletteEntryIdSchema, PatternTypeSchema, PayloadFieldSchema, REFERENCE_CONFIG_TYPES, RelatedLinkSchema, RelationConfigSchema, RequiredFieldSchema, RestAuthConfigSchema, RestServiceDefSchema, SERVICE_TYPES, SExprAtomSchema, SExprSchema, SPRITE_DIRECTIONS, ScenePosSchema, SchemaMetadataSchema, SemanticAssetRefSchema, ServiceDefinitionSchema, ServiceIdSchema, ServiceRefObjectSchema, ServiceRefSchema, ServiceRefStringSchema, ServiceTypeSchema, SkinSpecSchema, SocketEventsSchema, SocketServiceDefSchema, SpacingScaleSchema, SpriteDirectionSchema, SpriteSheetAtlasSchema, StateMachineSchema, StateSchema, StateSemanticRoleSchema, SubTextureSchema, SuggestedGuardSchema, TextureAtlasSchema, ThemeDefinitionSchema, ThemeIdSchema, ThemeRefSchema, ThemeRefStringSchema, ThemeTokensSchema, ThemeVariantSchema, TilesheetSchema, TraitCategorySchema, TraitConfigSchema, TraitConfigValueSchema, TraitDataEntitySchema, TraitEntityFieldSchema, TraitEventContractSchema, TraitEventListenerSchema, TraitFieldRefSchema, TraitIdSchema, TraitRefSchema, TraitReferenceSchema, TraitSchema, TraitTickSchema, TransitionSchema, TypeIntentMapSchema, TypeIntentSchema, TypeScaleEntrySchema, TypeScaleSchema, TypeScaleTokensSchema, TypeSizeKeySchema, TypeSliceSchema, TypeSlotSchema, TypeWeightSchema, UISlotSchema, UI_SLOTS, UXHintsSchema, UseDeclarationSchema, UserPersonaSchema, VISUAL_STYLES, ViewTypeSchema, VisualStyleSchema, answerToMutations, answersToMutations, applyEventWiring, applyFactoryCallPlanMutation, applyRenderOverlay, asEntityId, asEventId, asOrbitalId, asPageId, asPaletteEntryId, asServiceId, asThemeId, asTraitId, atomic, buildEdgeCoveringWalk, buildGuardPayloads, buildRecommendationContext, buildReplayPaths, buildResolvedTraitConfigs, buildStateGraph, callService, categorizeRemovals, classifyWorkflow, clearSchemaCache, collectBindings, collectEmbeddedTraitReferrers, collectReachableStates, collectRenderUiPatternTypes, component_mapping_default as componentMapping, composeBehaviors, configRefEventKnob, constTruth, createAssetKey, createEmptyResolvedPage, createEmptyResolvedTrait, createLazyService, createResolvedField, createTypedEventBus, deref, deriveCollection, deriveInputType, despawn, detectLayoutStrategy, detectPageContentReduction, diffFactoryCalls, diffOrbitalSchemas, diffSchemaSemantics, diffSchemas, doEffects, emit, event_contracts_default as eventContracts, extractPayloadFieldRef, findCompatiblePatterns, findService, fingerprintNode, formatRecommendationsForPrompt, generatePatternDescription, generateQuestions, getAllPatternTypes, getArgs, getBindingExamples, getComponentForPattern, getDefaultAnimationsForRole, getEmittedEvents, getEntity, getEntityCardinality, getInteractionModelForDomain, getOperator, getOrbAllowedPatterns, getOrbAllowedPatternsCompact, getOrbAllowedPatternsFiltered, getOrbAllowedPatternsSlim, getPage, getPages, getPatternActionsRef, getPatternDefinition, getPatternMetadata, getPatternPropsCompact, getPatternsGroupedByCategory, getRemovals, getSchemaCacheStats, getServiceNames, getTrait, getTraitConfig, getTraitName, hasService, hasSignificantPageReduction, idKindOf, idPrefix, inferTsType, insertChildAtPath, integrators_registry_default as integratorsRegistry, isBinding, isCallSiteConfigDeclaration, isCircuitEvent, isDestructiveChange, isDrawHostPattern, isDrawablePattern, isEffect, isEntityAwarePattern, isEntityCall, isEntityId, isEntityReference, isEntityReferenceAny, isEventId, isEventPayloadValue, isFieldValue, isImportedTraitRef, isInlineTrait, isJsonArray, isJsonObject, isJsonPrimitive, isKnownValidationErrorCode, isMcpService, isOrbitalDefinition, isOrbitalId, isPageId, isPageReference, isPageReferenceObject, isPageReferenceString, isPaletteEntryId, isPlanSnapshot, isReferenceConfigType, isResolvedIR, isRestService, isRuntimeEntity, isSExpr, isSExprAtom, isSExprCall, isSExprEffect, isServiceId, isServiceReference, isServiceReferenceObject, isSessionHistoryEntry, isSocketService, isThemeId, isThemeReference, isTraitFieldRef, isTraitId, isValidBinding, isValidPatternType, ledgerCurName, ledgerRename, ledgerResolveName, mergeEntityFrame, mintId, navigate, navigatePatternPath, normalizeCallSiteConfigToValues, normalizeTraitRef, notify, parseAssetKey, parseBinding, parseEntityRef, parseImportedTraitRef, parseOrbitalSchema, parsePageRef, parseServiceRef, patterns_registry_default as patternsRegistry, persist, persistenceModeAllowsOverrides, recommendPatterns, ref, registry, removeChildAtPath, renderUI, renderUiPatternTypesOf, replaceChildAtPath, requiresConfirmation, resolveConfigRefEventName, safeParseOrbitalSchema, schemaToIR, set, setPropAtPath, sexpr, spawn, summarizeOrbital, summarizeSchema, swap, toBindingRoot, translateOverlaysToParams, validateAssetAnimations, validateBindingInContext, walkSExpr, walkStatePairs, watch, widenTier };
47701
48679
  //# sourceMappingURL=index.js.map
47702
48680
  //# sourceMappingURL=index.js.map