@almadar/ui 4.6.10 → 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,16 +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
51505
  const m = new runtime.StateMachineManager(traitDefs);
51505
51506
  for (const binding of traitBindings) {
51506
- if (binding.config !== void 0) {
51507
- m.setTraitConfig(binding.trait.name, binding.config);
51507
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
51508
+ if (cfg !== void 0) {
51509
+ m.setTraitConfig(binding.trait.name, cfg);
51508
51510
  }
51509
51511
  }
51510
51512
  return m;
51511
- }, [traitBindings]);
51513
+ }, [traitBindings, traitConfigsByName]);
51512
51514
  const [traitStates, setTraitStates] = React127.useState(() => {
51513
51515
  return manager.getAllStates();
51514
51516
  });
@@ -52338,7 +52340,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
52338
52340
  }
52339
52341
  }
52340
52342
  }
52341
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
52343
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
52342
52344
  const slotsActions = useSlotsActions();
52343
52345
  const bridge = useServerBridge();
52344
52346
  const uiSlots = useUISlots();
@@ -52350,7 +52352,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
52350
52352
  applyServerEffects(effects, uiSlots, onNavigate);
52351
52353
  }
52352
52354
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
52353
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
52355
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
52354
52356
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
52355
52357
  const initSentRef = React127.useRef(false);
52356
52358
  React127.useEffect(() => {
@@ -52421,6 +52423,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52421
52423
  if (!orbitals) return [];
52422
52424
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
52423
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]);
52424
52444
  const inner = /* @__PURE__ */ jsxRuntime.jsx(VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(SlotsProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(
52425
52445
  EntitySchemaProvider,
52426
52446
  {
@@ -52444,6 +52464,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52444
52464
  {
52445
52465
  traits: allPageTraits,
52446
52466
  orbitalNames: serverUrl ? orbitalNames : void 0,
52467
+ traitConfigsByName,
52447
52468
  onNavigate,
52448
52469
  onLocalFallback,
52449
52470
  persistence
package/dist/avl/index.js CHANGED
@@ -51453,16 +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
51459
  const m = new StateMachineManager(traitDefs);
51459
51460
  for (const binding of traitBindings) {
51460
- if (binding.config !== void 0) {
51461
- m.setTraitConfig(binding.trait.name, binding.config);
51461
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
51462
+ if (cfg !== void 0) {
51463
+ m.setTraitConfig(binding.trait.name, cfg);
51462
51464
  }
51463
51465
  }
51464
51466
  return m;
51465
- }, [traitBindings]);
51467
+ }, [traitBindings, traitConfigsByName]);
51466
51468
  const [traitStates, setTraitStates] = useState(() => {
51467
51469
  return manager.getAllStates();
51468
51470
  });
@@ -52292,7 +52294,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
52292
52294
  }
52293
52295
  }
52294
52296
  }
52295
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
52297
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
52296
52298
  const slotsActions = useSlotsActions();
52297
52299
  const bridge = useServerBridge();
52298
52300
  const uiSlots = useUISlots();
@@ -52304,7 +52306,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
52304
52306
  applyServerEffects(effects, uiSlots, onNavigate);
52305
52307
  }
52306
52308
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
52307
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
52309
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
52308
52310
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
52309
52311
  const initSentRef = useRef(false);
52310
52312
  useEffect(() => {
@@ -52375,6 +52377,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52375
52377
  if (!orbitals) return [];
52376
52378
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
52377
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]);
52378
52398
  const inner = /* @__PURE__ */ jsx(VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsx(SlotsProvider, { children: /* @__PURE__ */ jsxs(
52379
52399
  EntitySchemaProvider,
52380
52400
  {
@@ -52398,6 +52418,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
52398
52418
  {
52399
52419
  traits: allPageTraits,
52400
52420
  orbitalNames: serverUrl ? orbitalNames : void 0,
52421
+ traitConfigsByName,
52401
52422
  onNavigate,
52402
52423
  onLocalFallback,
52403
52424
  persistence
@@ -38178,16 +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
38184
  const m = new runtime.StateMachineManager(traitDefs);
38184
38185
  for (const binding of traitBindings) {
38185
- if (binding.config !== void 0) {
38186
- m.setTraitConfig(binding.trait.name, binding.config);
38186
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
38187
+ if (cfg !== void 0) {
38188
+ m.setTraitConfig(binding.trait.name, cfg);
38187
38189
  }
38188
38190
  }
38189
38191
  return m;
38190
- }, [traitBindings]);
38192
+ }, [traitBindings, traitConfigsByName]);
38191
38193
  const [traitStates, setTraitStates] = React115.useState(() => {
38192
38194
  return manager.getAllStates();
38193
38195
  });
@@ -39138,7 +39140,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
39138
39140
  }
39139
39141
  }
39140
39142
  }
39141
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
39143
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
39142
39144
  const slotsActions = useSlotsActions();
39143
39145
  const bridge = useServerBridge();
39144
39146
  const uiSlots = context.useUISlots();
@@ -39150,7 +39152,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
39150
39152
  applyServerEffects(effects, uiSlots, onNavigate);
39151
39153
  }
39152
39154
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
39153
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
39155
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
39154
39156
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
39155
39157
  const initSentRef = React115.useRef(false);
39156
39158
  React115.useEffect(() => {
@@ -39221,6 +39223,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39221
39223
  if (!orbitals) return [];
39222
39224
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
39223
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]);
39224
39244
  const inner = /* @__PURE__ */ jsxRuntime.jsx(providers.VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(SlotsProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(
39225
39245
  EntitySchemaProvider,
39226
39246
  {
@@ -39244,6 +39264,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39244
39264
  {
39245
39265
  traits: allPageTraits,
39246
39266
  orbitalNames: serverUrl ? orbitalNames : void 0,
39267
+ traitConfigsByName,
39247
39268
  onNavigate,
39248
39269
  onLocalFallback,
39249
39270
  persistence
@@ -38133,16 +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
38139
  const m = new StateMachineManager(traitDefs);
38139
38140
  for (const binding of traitBindings) {
38140
- if (binding.config !== void 0) {
38141
- m.setTraitConfig(binding.trait.name, binding.config);
38141
+ const cfg = binding.config ?? traitConfigsByName?.[binding.trait.name];
38142
+ if (cfg !== void 0) {
38143
+ m.setTraitConfig(binding.trait.name, cfg);
38142
38144
  }
38143
38145
  }
38144
38146
  return m;
38145
- }, [traitBindings]);
38147
+ }, [traitBindings, traitConfigsByName]);
38146
38148
  const [traitStates, setTraitStates] = useState(() => {
38147
38149
  return manager.getAllStates();
38148
38150
  });
@@ -39093,7 +39095,7 @@ function applyServerEffects(effects, uiSlots, onNavigate) {
39093
39095
  }
39094
39096
  }
39095
39097
  }
39096
- function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence }) {
39098
+ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFallback, persistence, traitConfigsByName }) {
39097
39099
  const slotsActions = useSlotsActions();
39098
39100
  const bridge = useServerBridge();
39099
39101
  const uiSlots = useUISlots();
@@ -39105,7 +39107,7 @@ function TraitInitializer({ traits: traits2, orbitalNames, onNavigate, onLocalFa
39105
39107
  applyServerEffects(effects, uiSlots, onNavigate);
39106
39108
  }
39107
39109
  }, [bridge.connected, bridge.sendEvent, orbitalNames, uiSlots, onNavigate]);
39108
- const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate } : { navigate: onNavigate, persistence };
39110
+ const opts = orbitalNames ? { onEventProcessed, navigate: onNavigate, traitConfigsByName } : { navigate: onNavigate, persistence, traitConfigsByName };
39109
39111
  const { sendEvent } = useTraitStateMachine(traits2, slotsActions, opts);
39110
39112
  const initSentRef = useRef(false);
39111
39113
  useEffect(() => {
@@ -39176,6 +39178,24 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39176
39178
  if (!orbitals) return [];
39177
39179
  return orbitals.filter((o) => typeof o.name === "string").map((o) => o.name);
39178
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]);
39179
39199
  const inner = /* @__PURE__ */ jsx(VerificationProvider, { enabled: true, children: /* @__PURE__ */ jsx(SlotsProvider, { children: /* @__PURE__ */ jsxs(
39180
39200
  EntitySchemaProvider,
39181
39201
  {
@@ -39199,6 +39219,7 @@ function SchemaRunner({ schema, serverUrl, mockData, pageName, onNavigate, onLoc
39199
39219
  {
39200
39220
  traits: allPageTraits,
39201
39221
  orbitalNames: serverUrl ? orbitalNames : void 0,
39222
+ traitConfigsByName,
39202
39223
  onNavigate,
39203
39224
  onLocalFallback,
39204
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.10",
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",