@almadar/ui 6.14.0 → 6.15.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.
@@ -140,6 +140,13 @@ interface ServerClientEffect {
140
140
  /** Metadata about what the server returned, for debugger logging */
141
141
  interface ServerResponseMeta {
142
142
  success: boolean;
143
+ /** `OrbitalEventResponse.transitioned` — whether any arm accepted the event. */
144
+ transitioned: boolean;
145
+ /** Server-side emits with their evaluated payloads (`ServerResponseTrace.emitted`). */
146
+ emitted?: ReadonlyArray<{
147
+ event: string;
148
+ payload?: EventPayload;
149
+ }>;
143
150
  clientEffects: number;
144
151
  dataEntities: Record<string, number>;
145
152
  /** Raw entity data from server response (for EntityStore advancement) */
@@ -140,6 +140,13 @@ interface ServerClientEffect {
140
140
  /** Metadata about what the server returned, for debugger logging */
141
141
  interface ServerResponseMeta {
142
142
  success: boolean;
143
+ /** `OrbitalEventResponse.transitioned` — whether any arm accepted the event. */
144
+ transitioned: boolean;
145
+ /** Server-side emits with their evaluated payloads (`ServerResponseTrace.emitted`). */
146
+ emitted?: ReadonlyArray<{
147
+ event: string;
148
+ payload?: EventPayload;
149
+ }>;
143
150
  clientEffects: number;
144
151
  dataEntities: Record<string, number>;
145
152
  /** Raw entity data from server response (for EntityStore advancement) */
@@ -59936,6 +59936,11 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59936
59936
  const _perfT0 = ui.perfStart("processEvent:total");
59937
59937
  const bindings = traitBindingsRef.current;
59938
59938
  const currentManager = managerRef.current;
59939
+ if (sourceTrait === void 0 && tick === void 0) {
59940
+ for (const snap of traitSnapshotDataRef.current.values()) {
59941
+ snap.cascadeReceived = [];
59942
+ }
59943
+ }
59939
59944
  crossTraitLog.debug("processEvent:enter", () => ({
59940
59945
  event: normalizedEvent,
59941
59946
  payload: JSON.stringify(payload ?? null),
@@ -60111,6 +60116,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
60111
60116
  // the verifier reads emittedEvents only.
60112
60117
  orbitalName: "",
60113
60118
  success: true,
60119
+ transitioned: true,
60114
60120
  clientEffects: effectTraces.length,
60115
60121
  dataEntities: {},
60116
60122
  emittedEvents,
package/dist/avl/index.js CHANGED
@@ -59860,6 +59860,11 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
59860
59860
  const _perfT0 = perfStart("processEvent:total");
59861
59861
  const bindings = traitBindingsRef.current;
59862
59862
  const currentManager = managerRef.current;
59863
+ if (sourceTrait === void 0 && tick === void 0) {
59864
+ for (const snap of traitSnapshotDataRef.current.values()) {
59865
+ snap.cascadeReceived = [];
59866
+ }
59867
+ }
59863
59868
  crossTraitLog.debug("processEvent:enter", () => ({
59864
59869
  event: normalizedEvent,
59865
59870
  payload: JSON.stringify(payload ?? null),
@@ -60035,6 +60040,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
60035
60040
  // the verifier reads emittedEvents only.
60036
60041
  orbitalName: "",
60037
60042
  success: true,
60043
+ transitioned: true,
60038
60044
  clientEffects: effectTraces.length,
60039
60045
  dataEntities: {},
60040
60046
  emittedEvents,
@@ -53620,6 +53620,11 @@ function VerificationProvider({
53620
53620
  }
53621
53621
  const emittedEventsRaw = Array.isArray(payload["emittedEvents"]) ? payload["emittedEvents"] : [];
53622
53622
  const emittedEvents = emittedEventsRaw.map((e) => typeof e.event === "string" ? e.event : null).filter((e) => e !== null);
53623
+ const emitted = emittedEventsRaw.flatMap((e) => {
53624
+ if (typeof e.event !== "string") return [];
53625
+ const p = e["payload"];
53626
+ return [{ event: e.event, ...p !== null && typeof p === "object" && !Array.isArray(p) && { payload: p } }];
53627
+ });
53623
53628
  recordTransition({
53624
53629
  traitName: parsed.traitName,
53625
53630
  from: pending?.from ?? payload["currentState"] ?? newState,
@@ -53629,9 +53634,11 @@ function VerificationProvider({
53629
53634
  serverResponse: {
53630
53635
  orbitalName: parsed.traitName,
53631
53636
  success: true,
53637
+ ...typeof payload["transitioned"] === "boolean" && { transitioned: payload["transitioned"] },
53632
53638
  clientEffects: clientEffectsArr.length,
53633
53639
  dataEntities,
53634
53640
  emittedEvents,
53641
+ emitted,
53635
53642
  timestamp: Date.now()
53636
53643
  },
53637
53644
  timestamp: Date.now()
@@ -53658,6 +53665,7 @@ function VerificationProvider({
53658
53665
  serverResponse: {
53659
53666
  orbitalName: parsed.traitName,
53660
53667
  success: false,
53668
+ transitioned: false,
53661
53669
  clientEffects: 0,
53662
53670
  dataEntities: {},
53663
53671
  emittedEvents: [],
@@ -54542,7 +54550,7 @@ var ServerBridgeContext = React89.createContext(null);
54542
54550
  function useServerBridge() {
54543
54551
  const ctx = React89.useContext(ServerBridgeContext);
54544
54552
  if (!ctx) {
54545
- const emptyMeta = { success: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54553
+ const emptyMeta = { success: false, transitioned: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54546
54554
  return { connected: false, sendEvent: async () => ({ effects: [], meta: emptyMeta }) };
54547
54555
  }
54548
54556
  return ctx;
@@ -54590,7 +54598,7 @@ function ServerBridgeProvider({
54590
54598
  };
54591
54599
  }, []);
54592
54600
  const sendEvent = React89.useCallback(async (orbitalName, event, payload, tick, sourceTrait) => {
54593
- const emptyMeta = { success: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54601
+ const emptyMeta = { success: false, transitioned: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54594
54602
  if (!connected) return { effects: [], meta: emptyMeta };
54595
54603
  if (tick !== void 0) {
54596
54604
  tickRelay.send(`${orbitalName}:${event}`, { orbitalName, event, payload, tick, sourceTrait });
@@ -54608,10 +54616,12 @@ function ServerBridgeProvider({
54608
54616
  }
54609
54617
  const meta = {
54610
54618
  success: !!result.success,
54619
+ transitioned: result.transitioned === true,
54611
54620
  clientEffects: result.clientEffects?.length ?? 0,
54612
54621
  dataEntities,
54613
54622
  data: responseData,
54614
54623
  emittedEvents: result.emittedEvents?.map((e) => e.event) ?? [],
54624
+ emitted: result.emittedEvents?.map((e) => ({ event: e.event, ...e.payload !== void 0 && { payload: e.payload } })) ?? [],
54615
54625
  effectResults: result.effectResults,
54616
54626
  error: result.error
54617
54627
  };
@@ -6,7 +6,7 @@ export { a as CurrentPagePathContext, b as CurrentPagePathProvider, c as Current
6
6
  import { b as UserData } from '../UserContext-D566nfWA.cjs';
7
7
  export { U as UserContext, a as UserContextValue, c as UserProvider, d as UserProviderProps, u as useHasPermission, e as useHasRole, f as useUser, g as useUserForEvaluation } from '../UserContext-D566nfWA.cjs';
8
8
  import { E as EventBusContextType } from '../event-bus-types-Bl78kokd.cjs';
9
- export { A as AccessTokenProvider, E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-BMz9xiBa.cjs';
9
+ export { A as AccessTokenProvider, E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-EJoTtuTR.cjs';
10
10
  import { i as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-DdV2o0Zu.cjs';
11
11
  export { N as NavigationContextValue, c as NavigationProvider, d as NavigationProviderProps, e as NavigationState, j as comparePathSpecificity, l as extractRouteParams, m as findPageByName, n as findPageByPath, o as getAllPages, p as getDefaultPage, q as matchPath, r as matchPathAmong, s as pathMatches, u as useActivePage, t as useInitPayload, v as useNavigateTo, w as useNavigation, x as useNavigationId, y as useNavigationState } from '../offline-executor-DdV2o0Zu.cjs';
12
12
  import '../verificationRegistry-DTrKDRoa.cjs';
@@ -6,7 +6,7 @@ export { a as CurrentPagePathContext, b as CurrentPagePathProvider, c as Current
6
6
  import { b as UserData } from '../UserContext-D566nfWA.js';
7
7
  export { U as UserContext, a as UserContextValue, c as UserProvider, d as UserProviderProps, u as useHasPermission, e as useHasRole, f as useUser, g as useUserForEvaluation } from '../UserContext-D566nfWA.js';
8
8
  import { E as EventBusContextType } from '../event-bus-types-Bl78kokd.js';
9
- export { A as AccessTokenProvider, E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-BMz9xiBa.js';
9
+ export { A as AccessTokenProvider, E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-EJoTtuTR.js';
10
10
  import { i as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-DdV2o0Zu.js';
11
11
  export { N as NavigationContextValue, c as NavigationProvider, d as NavigationProviderProps, e as NavigationState, j as comparePathSpecificity, l as extractRouteParams, m as findPageByName, n as findPageByPath, o as getAllPages, p as getDefaultPage, q as matchPath, r as matchPathAmong, s as pathMatches, u as useActivePage, t as useInitPayload, v as useNavigateTo, w as useNavigation, x as useNavigationId, y as useNavigationState } from '../offline-executor-DdV2o0Zu.js';
12
12
  import '../verificationRegistry-Cwa52VyK.js';
@@ -53546,6 +53546,11 @@ function VerificationProvider({
53546
53546
  }
53547
53547
  const emittedEventsRaw = Array.isArray(payload["emittedEvents"]) ? payload["emittedEvents"] : [];
53548
53548
  const emittedEvents = emittedEventsRaw.map((e) => typeof e.event === "string" ? e.event : null).filter((e) => e !== null);
53549
+ const emitted = emittedEventsRaw.flatMap((e) => {
53550
+ if (typeof e.event !== "string") return [];
53551
+ const p = e["payload"];
53552
+ return [{ event: e.event, ...p !== null && typeof p === "object" && !Array.isArray(p) && { payload: p } }];
53553
+ });
53549
53554
  recordTransition({
53550
53555
  traitName: parsed.traitName,
53551
53556
  from: pending?.from ?? payload["currentState"] ?? newState,
@@ -53555,9 +53560,11 @@ function VerificationProvider({
53555
53560
  serverResponse: {
53556
53561
  orbitalName: parsed.traitName,
53557
53562
  success: true,
53563
+ ...typeof payload["transitioned"] === "boolean" && { transitioned: payload["transitioned"] },
53558
53564
  clientEffects: clientEffectsArr.length,
53559
53565
  dataEntities,
53560
53566
  emittedEvents,
53567
+ emitted,
53561
53568
  timestamp: Date.now()
53562
53569
  },
53563
53570
  timestamp: Date.now()
@@ -53584,6 +53591,7 @@ function VerificationProvider({
53584
53591
  serverResponse: {
53585
53592
  orbitalName: parsed.traitName,
53586
53593
  success: false,
53594
+ transitioned: false,
53587
53595
  clientEffects: 0,
53588
53596
  dataEntities: {},
53589
53597
  emittedEvents: [],
@@ -54468,7 +54476,7 @@ var ServerBridgeContext = createContext(null);
54468
54476
  function useServerBridge() {
54469
54477
  const ctx = useContext(ServerBridgeContext);
54470
54478
  if (!ctx) {
54471
- const emptyMeta = { success: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54479
+ const emptyMeta = { success: false, transitioned: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54472
54480
  return { connected: false, sendEvent: async () => ({ effects: [], meta: emptyMeta }) };
54473
54481
  }
54474
54482
  return ctx;
@@ -54516,7 +54524,7 @@ function ServerBridgeProvider({
54516
54524
  };
54517
54525
  }, []);
54518
54526
  const sendEvent = useCallback(async (orbitalName, event, payload, tick, sourceTrait) => {
54519
- const emptyMeta = { success: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54527
+ const emptyMeta = { success: false, transitioned: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
54520
54528
  if (!connected) return { effects: [], meta: emptyMeta };
54521
54529
  if (tick !== void 0) {
54522
54530
  tickRelay.send(`${orbitalName}:${event}`, { orbitalName, event, payload, tick, sourceTrait });
@@ -54534,10 +54542,12 @@ function ServerBridgeProvider({
54534
54542
  }
54535
54543
  const meta = {
54536
54544
  success: !!result.success,
54545
+ transitioned: result.transitioned === true,
54537
54546
  clientEffects: result.clientEffects?.length ?? 0,
54538
54547
  dataEntities,
54539
54548
  data: responseData,
54540
54549
  emittedEvents: result.emittedEvents?.map((e) => e.event) ?? [],
54550
+ emitted: result.emittedEvents?.map((e) => ({ event: e.event, ...e.payload !== void 0 && { payload: e.payload } })) ?? [],
54541
54551
  effectResults: result.effectResults,
54542
54552
  error: result.error
54543
54553
  };
@@ -54060,6 +54060,11 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
54060
54060
  const _perfT0 = ui.perfStart("processEvent:total");
54061
54061
  const bindings = traitBindingsRef.current;
54062
54062
  const currentManager = managerRef.current;
54063
+ if (sourceTrait === void 0 && tick === void 0) {
54064
+ for (const snap of traitSnapshotDataRef.current.values()) {
54065
+ snap.cascadeReceived = [];
54066
+ }
54067
+ }
54063
54068
  crossTraitLog.debug("processEvent:enter", () => ({
54064
54069
  event: normalizedEvent,
54065
54070
  payload: JSON.stringify(payload ?? null),
@@ -54235,6 +54240,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
54235
54240
  // the verifier reads emittedEvents only.
54236
54241
  orbitalName: "",
54237
54242
  success: true,
54243
+ transitioned: true,
54238
54244
  clientEffects: effectTraces.length,
54239
54245
  dataEntities: {},
54240
54246
  emittedEvents,
@@ -5,8 +5,8 @@ import * as _almadar_runtime from '@almadar/runtime';
5
5
  import { TraitState, EffectHandlers } from '@almadar/runtime';
6
6
  import { K as KeyCaptureTable } from '../useKeyboardRouter-CVn8lfiX.cjs';
7
7
  import { c as useUISlots } from '../UISlotContext-BlRDbHDy.cjs';
8
- import { a as EntityBindingSource, h as ServerBridgeTransport, A as AccessTokenProvider } from '../EntityBindingContext-BMz9xiBa.cjs';
9
- export { b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, e as ServerBridgeContextValue, f as ServerBridgeProvider, i as ServerClientEffect, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-BMz9xiBa.cjs';
8
+ import { a as EntityBindingSource, h as ServerBridgeTransport, A as AccessTokenProvider } from '../EntityBindingContext-EJoTtuTR.cjs';
9
+ export { b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, e as ServerBridgeContextValue, f as ServerBridgeProvider, i as ServerClientEffect, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-EJoTtuTR.cjs';
10
10
  import '../verificationRegistry-DTrKDRoa.cjs';
11
11
  export { PERF_NAMESPACE, PerfEntry, PreparedPreviewSchema, adjustSchemaForMockData, buildMockData, clearPerf, perfEnd, perfStart, perfTime, prepareSchemaForPreview, wrapCallbackForEvent } from '@almadar/runtime/ui';
12
12
  import React__default, { ReactNode } from 'react';
@@ -5,8 +5,8 @@ import * as _almadar_runtime from '@almadar/runtime';
5
5
  import { TraitState, EffectHandlers } from '@almadar/runtime';
6
6
  import { K as KeyCaptureTable } from '../useKeyboardRouter-B1pIi9jo.js';
7
7
  import { c as useUISlots } from '../UISlotContext-CB89mv7N.js';
8
- import { a as EntityBindingSource, h as ServerBridgeTransport, A as AccessTokenProvider } from '../EntityBindingContext-BMz9xiBa.js';
9
- export { b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, e as ServerBridgeContextValue, f as ServerBridgeProvider, i as ServerClientEffect, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-BMz9xiBa.js';
8
+ import { a as EntityBindingSource, h as ServerBridgeTransport, A as AccessTokenProvider } from '../EntityBindingContext-EJoTtuTR.js';
9
+ export { b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, e as ServerBridgeContextValue, f as ServerBridgeProvider, i as ServerClientEffect, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-EJoTtuTR.js';
10
10
  import '../verificationRegistry-Cwa52VyK.js';
11
11
  export { PERF_NAMESPACE, PerfEntry, PreparedPreviewSchema, adjustSchemaForMockData, buildMockData, clearPerf, perfEnd, perfStart, perfTime, prepareSchemaForPreview, wrapCallbackForEvent } from '@almadar/runtime/ui';
12
12
  import React__default, { ReactNode } from 'react';
@@ -53986,6 +53986,11 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
53986
53986
  const _perfT0 = perfStart("processEvent:total");
53987
53987
  const bindings = traitBindingsRef.current;
53988
53988
  const currentManager = managerRef.current;
53989
+ if (sourceTrait === void 0 && tick === void 0) {
53990
+ for (const snap of traitSnapshotDataRef.current.values()) {
53991
+ snap.cascadeReceived = [];
53992
+ }
53993
+ }
53989
53994
  crossTraitLog.debug("processEvent:enter", () => ({
53990
53995
  event: normalizedEvent,
53991
53996
  payload: JSON.stringify(payload ?? null),
@@ -54161,6 +54166,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
54161
54166
  // the verifier reads emittedEvents only.
54162
54167
  orbitalName: "",
54163
54168
  success: true,
54169
+ transitioned: true,
54164
54170
  clientEffects: effectTraces.length,
54165
54171
  dataEntities: {},
54166
54172
  emittedEvents,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "6.14.0",
3
+ "version": "6.15.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -118,11 +118,11 @@
118
118
  "access": "public"
119
119
  },
120
120
  "dependencies": {
121
- "@almadar/core": "^10.90.0",
121
+ "@almadar/core": "^10.91.0",
122
122
  "@almadar/evaluator": "^2.45.0",
123
123
  "@almadar/logger": "^1.12.0",
124
- "@almadar/runtime": "^6.75.0",
125
- "@almadar/std": "^16.211.0",
124
+ "@almadar/runtime": "^6.76.0",
125
+ "@almadar/std": "^16.212.0",
126
126
  "@almadar/syntax": "^1.17.0",
127
127
  "@dnd-kit/core": "^6.3.1",
128
128
  "@dnd-kit/sortable": "^10.0.0",