@almadar/ui 4.6.9 → 4.6.11

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.
@@ -51499,10 +51499,18 @@ function normalizeEventKey(eventKey) {
51499
51499
  function useTraitStateMachine(traitBindings, slotsActions, options) {
51500
51500
  const eventBus = useEventBus();
51501
51501
  const { entities } = useEntitySchema();
51502
+ const traitConfigsByName = options?.traitConfigsByName;
51502
51503
  const manager = React127.useMemo(() => {
51503
51504
  const traitDefs = traitBindings.map(toTraitDefinition);
51504
- return new runtime.StateMachineManager(traitDefs);
51505
- }, [traitBindings]);
51505
+ const m = new runtime.StateMachineManager(traitDefs);
51506
+ for (const binding of traitBindings) {
51507
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
51508
+ if (cfg !== void 0) {
51509
+ m.setTraitConfig(binding.trait.name, cfg);
51510
+ }
51511
+ }
51512
+ return m;
51513
+ }, [traitBindings, traitConfigsByName]);
51506
51514
  const [traitStates, setTraitStates] = React127.useState(() => {
51507
51515
  return manager.getAllStates();
51508
51516
  });
@@ -52332,7 +52340,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
52332
52340
  }
52333
52341
  }
52334
52342
  }
52335
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
52343
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
52336
52344
  const slotsActions = useSlotsActions();
52337
52345
  const bridge = useServerBridge();
52338
52346
  const uiSlots = useUISlots();
@@ -52344,7 +52352,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
52344
52352
  applyServerEffects(effects, uiSlots, onNavigate);
52345
52353
  }
52346
52354
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
52347
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
52355
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
52348
52356
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
52349
52357
  const initSentRef = React127.useRef(false);
52350
52358
  React127.useEffect(() => {
@@ -52415,6 +52423,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52415
52423
  if (!orbitals) return [];
52416
52424
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
52417
52425
  }, [schema]);
52426
+ const traitConfigsByName = React127.useMemo(() => {
52427
+ const map = {};
52428
+ const parsed = schema;
52429
+ const orbitals = parsed?.orbitals;
52430
+ if (!orbitals) return map;
52431
+ for (const orb of orbitals) {
52432
+ const traits3 = orb.traits;
52433
+ if (!traits3) continue;
52434
+ for (const t of traits3) {
52435
+ const name = t.name ?? t.ref;
52436
+ const config = t.config;
52437
+ if (typeof name === "string" && config !== void 0) {
52438
+ map[name] = config;
52439
+ }
52440
+ }
52441
+ }
52442
+ return map;
52443
+ }, [schema]);
52418
52444
  const inner = /* @__PURE__ */ jsxRuntime.jsx(VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(SlotsProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(
52419
52445
  EntitySchemaProvider,
52420
52446
  {
@@ -52438,6 +52464,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52438
52464
  {
52439
52465
  traits: allPageTraits,
52440
52466
  orbitalNames: serverUrl ? orbitalNames : void 0,
52467
+ traitConfigsByName,
52441
52468
  onNavigate,
52442
52469
  onLocalFallback,
52443
52470
  persistence
package/dist/avl/index.js CHANGED
@@ -51453,10 +51453,18 @@ function normalizeEventKey(eventKey) {
51453
51453
  function useTraitStateMachine(traitBindings, slotsActions, options) {
51454
51454
  const eventBus = useEventBus();
51455
51455
  const { entities } = useEntitySchema();
51456
+ const traitConfigsByName = options?.traitConfigsByName;
51456
51457
  const manager = useMemo(() => {
51457
51458
  const traitDefs = traitBindings.map(toTraitDefinition);
51458
- return new StateMachineManager(traitDefs);
51459
- }, [traitBindings]);
51459
+ const m = new StateMachineManager(traitDefs);
51460
+ for (const binding of traitBindings) {
51461
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
51462
+ if (cfg !== void 0) {
51463
+ m.setTraitConfig(binding.trait.name, cfg);
51464
+ }
51465
+ }
51466
+ return m;
51467
+ }, [traitBindings, traitConfigsByName]);
51460
51468
  const [traitStates, setTraitStates] = useState(() => {
51461
51469
  return manager.getAllStates();
51462
51470
  });
@@ -52286,7 +52294,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
52286
52294
  }
52287
52295
  }
52288
52296
  }
52289
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
52297
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
52290
52298
  const slotsActions = useSlotsActions();
52291
52299
  const bridge = useServerBridge();
52292
52300
  const uiSlots = useUISlots();
@@ -52298,7 +52306,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
52298
52306
  applyServerEffects(effects, uiSlots, onNavigate);
52299
52307
  }
52300
52308
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
52301
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
52309
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
52302
52310
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
52303
52311
  const initSentRef = useRef(false);
52304
52312
  useEffect(() => {
@@ -52369,6 +52377,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52369
52377
  if (!orbitals) return [];
52370
52378
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
52371
52379
  }, [schema]);
52380
+ const traitConfigsByName = useMemo(() => {
52381
+ const map = {};
52382
+ const parsed = schema;
52383
+ const orbitals = parsed?.orbitals;
52384
+ if (!orbitals) return map;
52385
+ for (const orb of orbitals) {
52386
+ const traits3 = orb.traits;
52387
+ if (!traits3) continue;
52388
+ for (const t of traits3) {
52389
+ const name = t.name ?? t.ref;
52390
+ const config = t.config;
52391
+ if (typeof name === "string" && config !== void 0) {
52392
+ map[name] = config;
52393
+ }
52394
+ }
52395
+ }
52396
+ return map;
52397
+ }, [schema]);
52372
52398
  const inner = /* @__PURE__ */ jsx(VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsx(SlotsProvider, { children: /* @__PURE__ */ jsxs(
52373
52399
  EntitySchemaProvider,
52374
52400
  {
@@ -52392,6 +52418,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52392
52418
  {
52393
52419
  traits: allPageTraits,
52394
52420
  orbitalNames: serverUrl ? orbitalNames : void 0,
52421
+ traitConfigsByName,
52395
52422
  onNavigate,
52396
52423
  onLocalFallback,
52397
52424
  persistence
@@ -38178,10 +38178,18 @@ function normalizeEventKey(eventKey) {
38178
38178
  function useTraitStateMachine(traitBindings, slotsActions, options) {
38179
38179
  const eventBus = useEventBus();
38180
38180
  const { entities } = useEntitySchema();
38181
+ const traitConfigsByName = options?.traitConfigsByName;
38181
38182
  const manager = React115.useMemo(() => {
38182
38183
  const traitDefs = traitBindings.map(toTraitDefinition);
38183
- return new runtime.StateMachineManager(traitDefs);
38184
- }, [traitBindings]);
38184
+ const m = new runtime.StateMachineManager(traitDefs);
38185
+ for (const binding of traitBindings) {
38186
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
38187
+ if (cfg !== void 0) {
38188
+ m.setTraitConfig(binding.trait.name, cfg);
38189
+ }
38190
+ }
38191
+ return m;
38192
+ }, [traitBindings, traitConfigsByName]);
38185
38193
  const [traitStates, setTraitStates] = React115.useState(() => {
38186
38194
  return manager.getAllStates();
38187
38195
  });
@@ -39132,7 +39140,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
39132
39140
  }
39133
39141
  }
39134
39142
  }
39135
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
39143
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
39136
39144
  const slotsActions = useSlotsActions();
39137
39145
  const bridge = useServerBridge();
39138
39146
  const uiSlots = context.useUISlots();
@@ -39144,7 +39152,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
39144
39152
  applyServerEffects(effects, uiSlots, onNavigate);
39145
39153
  }
39146
39154
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
39147
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
39155
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
39148
39156
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
39149
39157
  const initSentRef = React115.useRef(false);
39150
39158
  React115.useEffect(() => {
@@ -39215,6 +39223,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39215
39223
  if (!orbitals) return [];
39216
39224
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
39217
39225
  }, [schema]);
39226
+ const traitConfigsByName = React115.useMemo(() => {
39227
+ const map = {};
39228
+ const parsed = schema;
39229
+ const orbitals = parsed?.orbitals;
39230
+ if (!orbitals) return map;
39231
+ for (const orb of orbitals) {
39232
+ const traits3 = orb.traits;
39233
+ if (!traits3) continue;
39234
+ for (const t of traits3) {
39235
+ const name = t.name ?? t.ref;
39236
+ const config = t.config;
39237
+ if (typeof name === "string" && config !== void 0) {
39238
+ map[name] = config;
39239
+ }
39240
+ }
39241
+ }
39242
+ return map;
39243
+ }, [schema]);
39218
39244
  const inner = /* @__PURE__ */ jsxRuntime.jsx(providers.VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(SlotsProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(
39219
39245
  EntitySchemaProvider,
39220
39246
  {
@@ -39238,6 +39264,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39238
39264
  {
39239
39265
  traits: allPageTraits,
39240
39266
  orbitalNames: serverUrl ? orbitalNames : void 0,
39267
+ traitConfigsByName,
39241
39268
  onNavigate,
39242
39269
  onLocalFallback,
39243
39270
  persistence
@@ -38133,10 +38133,18 @@ function normalizeEventKey(eventKey) {
38133
38133
  function useTraitStateMachine(traitBindings, slotsActions, options) {
38134
38134
  const eventBus = useEventBus();
38135
38135
  const { entities } = useEntitySchema();
38136
+ const traitConfigsByName = options?.traitConfigsByName;
38136
38137
  const manager = useMemo(() => {
38137
38138
  const traitDefs = traitBindings.map(toTraitDefinition);
38138
- return new StateMachineManager(traitDefs);
38139
- }, [traitBindings]);
38139
+ const m = new StateMachineManager(traitDefs);
38140
+ for (const binding of traitBindings) {
38141
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
38142
+ if (cfg !== void 0) {
38143
+ m.setTraitConfig(binding.trait.name, cfg);
38144
+ }
38145
+ }
38146
+ return m;
38147
+ }, [traitBindings, traitConfigsByName]);
38140
38148
  const [traitStates, setTraitStates] = useState(() => {
38141
38149
  return manager.getAllStates();
38142
38150
  });
@@ -39087,7 +39095,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
39087
39095
  }
39088
39096
  }
39089
39097
  }
39090
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
39098
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
39091
39099
  const slotsActions = useSlotsActions();
39092
39100
  const bridge = useServerBridge();
39093
39101
  const uiSlots = useUISlots();
@@ -39099,7 +39107,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
39099
39107
  applyServerEffects(effects, uiSlots, onNavigate);
39100
39108
  }
39101
39109
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
39102
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
39110
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
39103
39111
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
39104
39112
  const initSentRef = useRef(false);
39105
39113
  useEffect(() => {
@@ -39170,6 +39178,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39170
39178
  if (!orbitals) return [];
39171
39179
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
39172
39180
  }, [schema]);
39181
+ const traitConfigsByName = useMemo(() => {
39182
+ const map = {};
39183
+ const parsed = schema;
39184
+ const orbitals = parsed?.orbitals;
39185
+ if (!orbitals) return map;
39186
+ for (const orb of orbitals) {
39187
+ const traits3 = orb.traits;
39188
+ if (!traits3) continue;
39189
+ for (const t of traits3) {
39190
+ const name = t.name ?? t.ref;
39191
+ const config = t.config;
39192
+ if (typeof name === "string" && config !== void 0) {
39193
+ map[name] = config;
39194
+ }
39195
+ }
39196
+ }
39197
+ return map;
39198
+ }, [schema]);
39173
39199
  const inner = /* @__PURE__ */ jsx(VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsx(SlotsProvider, { children: /* @__PURE__ */ jsxs(
39174
39200
  EntitySchemaProvider,
39175
39201
  {
@@ -39193,6 +39219,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39193
39219
  {
39194
39220
  traits: allPageTraits,
39195
39221
  orbitalNames: serverUrl ? orbitalNames : void 0,
39222
+ traitConfigsByName,
39196
39223
  onNavigate,
39197
39224
  onLocalFallback,
39198
39225
  persistence
@@ -49,6 +49,14 @@ export interface UseTraitStateMachineOptions {
49
49
  persistence?: import('@almadar/runtime').PersistenceAdapter;
50
50
  /** Optional consumer `call-service` hook forwarded to the mock server handlers. */
51
51
  callService?: (service: string, action: string, params: unknown) => Promise<unknown>;
52
+ /**
53
+ * Trait configs keyed by trait name. Threaded into setTraitConfig so
54
+ * `@config.X` resolves inside guard expressions on the client. Page-level
55
+ * `ResolvedTraitBinding`s often arrive without a config (the orbital-level
56
+ * config doesn't propagate through `@almadar/core`'s page resolver), so the
57
+ * caller assembles this map from the orbital schema directly.
58
+ */
59
+ traitConfigsByName?: Record<string, import('@almadar/core').TraitConfig>;
52
60
  }
53
61
  /**
54
62
  * useTraitStateMachine - Manages state machines for multiple traits
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "4.6.9",
3
+ "version": "4.6.11",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",
@@ -121,7 +121,7 @@
121
121
  "@almadar/core": "^7.0.0",
122
122
  "@almadar/evaluator": ">=2.9.2",
123
123
  "@almadar/patterns": ">=2.17.1",
124
- "@almadar/runtime": "^4.11.1",
124
+ "@almadar/runtime": "^5.3.0",
125
125
  "@almadar/std": ">=6.4.1",
126
126
  "@almadar/syntax": ">=1.3.1",
127
127
  "@xyflow/react": "12.10.1",