@almadar/ui 3.5.2 → 3.5.4

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.
@@ -12098,6 +12098,20 @@ function bindTraitStateGetter(getter) {
12098
12098
  window.__orbitalVerification.getTraitState = getter;
12099
12099
  }
12100
12100
  }
12101
+ function registerTraitSnapshot(traitName, getter) {
12102
+ if (typeof window === "undefined") return () => {
12103
+ };
12104
+ getState().traitSnapshots.set(traitName, getter);
12105
+ exposeOnWindow();
12106
+ notifyListeners();
12107
+ return () => {
12108
+ const s = getState();
12109
+ if (s.traitSnapshots.get(traitName) === getter) {
12110
+ s.traitSnapshots.delete(traitName);
12111
+ notifyListeners();
12112
+ }
12113
+ };
12114
+ }
12101
12115
  function bindCanvasCapture(captureFn) {
12102
12116
  if (typeof window === "undefined") return;
12103
12117
  exposeOnWindow();
@@ -51190,10 +51204,30 @@ function useTraitStateMachine(traitBindings, slotsActions, options) {
51190
51204
  const state = newManager.getState(traitName);
51191
51205
  return typeof state === "string" ? state : void 0;
51192
51206
  });
51207
+ const snapshotUnregs = [];
51208
+ for (const binding of traitBindingsRef.current) {
51209
+ const traitName = binding.trait.name;
51210
+ const unreg = registerTraitSnapshot(traitName, () => {
51211
+ const managerState = managerRef.current.getState(traitName);
51212
+ const currentState = managerState?.currentState ?? binding.trait.states[0]?.name ?? "unknown";
51213
+ return {
51214
+ traitName,
51215
+ currentState,
51216
+ states: binding.trait.states.map((s) => s.name),
51217
+ events: binding.trait.events.map((e) => e.key),
51218
+ data: {},
51219
+ cascadeReceived: []
51220
+ };
51221
+ });
51222
+ snapshotUnregs.push(unreg);
51223
+ }
51193
51224
  console.log(
51194
51225
  "[TraitStateMachine] Reset states for page navigation:",
51195
51226
  Array.from(newManager.getAllStates().keys()).join(", ")
51196
51227
  );
51228
+ return () => {
51229
+ for (const unreg of snapshotUnregs) unreg();
51230
+ };
51197
51231
  }, [traitBindings]);
51198
51232
  const runTickEffects = React126.useCallback((tick, binding) => {
51199
51233
  const actions = slotsActionsRef.current;
@@ -51511,10 +51545,11 @@ function SlotsProvider({ children }) {
51511
51545
  }, []);
51512
51546
  const clearSlot = React126.useCallback((slot) => {
51513
51547
  setSlots((prev) => {
51514
- if (!(slot in prev)) return prev;
51515
- const next = { ...prev };
51516
- delete next[slot];
51517
- return next;
51548
+ const existing = prev[slot];
51549
+ if (existing && existing.patterns.length === 0 && !existing.source) {
51550
+ return prev;
51551
+ }
51552
+ return { ...prev, [slot]: { patterns: [] } };
51518
51553
  });
51519
51554
  }, []);
51520
51555
  const clearAllSlots = React126.useCallback(() => {
package/dist/avl/index.js CHANGED
@@ -12052,6 +12052,20 @@ function bindTraitStateGetter(getter) {
12052
12052
  window.__orbitalVerification.getTraitState = getter;
12053
12053
  }
12054
12054
  }
12055
+ function registerTraitSnapshot(traitName, getter) {
12056
+ if (typeof window === "undefined") return () => {
12057
+ };
12058
+ getState().traitSnapshots.set(traitName, getter);
12059
+ exposeOnWindow();
12060
+ notifyListeners();
12061
+ return () => {
12062
+ const s = getState();
12063
+ if (s.traitSnapshots.get(traitName) === getter) {
12064
+ s.traitSnapshots.delete(traitName);
12065
+ notifyListeners();
12066
+ }
12067
+ };
12068
+ }
12055
12069
  function bindCanvasCapture(captureFn) {
12056
12070
  if (typeof window === "undefined") return;
12057
12071
  exposeOnWindow();
@@ -51144,10 +51158,30 @@ function useTraitStateMachine(traitBindings, slotsActions, options) {
51144
51158
  const state = newManager.getState(traitName);
51145
51159
  return typeof state === "string" ? state : void 0;
51146
51160
  });
51161
+ const snapshotUnregs = [];
51162
+ for (const binding of traitBindingsRef.current) {
51163
+ const traitName = binding.trait.name;
51164
+ const unreg = registerTraitSnapshot(traitName, () => {
51165
+ const managerState = managerRef.current.getState(traitName);
51166
+ const currentState = managerState?.currentState ?? binding.trait.states[0]?.name ?? "unknown";
51167
+ return {
51168
+ traitName,
51169
+ currentState,
51170
+ states: binding.trait.states.map((s) => s.name),
51171
+ events: binding.trait.events.map((e) => e.key),
51172
+ data: {},
51173
+ cascadeReceived: []
51174
+ };
51175
+ });
51176
+ snapshotUnregs.push(unreg);
51177
+ }
51147
51178
  console.log(
51148
51179
  "[TraitStateMachine] Reset states for page navigation:",
51149
51180
  Array.from(newManager.getAllStates().keys()).join(", ")
51150
51181
  );
51182
+ return () => {
51183
+ for (const unreg of snapshotUnregs) unreg();
51184
+ };
51151
51185
  }, [traitBindings]);
51152
51186
  const runTickEffects = useCallback((tick, binding) => {
51153
51187
  const actions = slotsActionsRef.current;
@@ -51465,10 +51499,11 @@ function SlotsProvider({ children }) {
51465
51499
  }, []);
51466
51500
  const clearSlot = useCallback((slot) => {
51467
51501
  setSlots((prev) => {
51468
- if (!(slot in prev)) return prev;
51469
- const next = { ...prev };
51470
- delete next[slot];
51471
- return next;
51502
+ const existing = prev[slot];
51503
+ if (existing && existing.patterns.length === 0 && !existing.source) {
51504
+ return prev;
51505
+ }
51506
+ return { ...prev, [slot]: { patterns: [] } };
51472
51507
  });
51473
51508
  }, []);
51474
51509
  const clearAllSlots = useCallback(() => {
@@ -1048,6 +1048,20 @@ function bindTraitStateGetter(getter) {
1048
1048
  window.__orbitalVerification.getTraitState = getter;
1049
1049
  }
1050
1050
  }
1051
+ function registerTraitSnapshot(traitName, getter) {
1052
+ if (typeof window === "undefined") return () => {
1053
+ };
1054
+ getState().traitSnapshots.set(traitName, getter);
1055
+ exposeOnWindow();
1056
+ notifyListeners2();
1057
+ return () => {
1058
+ const s = getState();
1059
+ if (s.traitSnapshots.get(traitName) === getter) {
1060
+ s.traitSnapshots.delete(traitName);
1061
+ notifyListeners2();
1062
+ }
1063
+ };
1064
+ }
1051
1065
  function bindCanvasCapture(captureFn) {
1052
1066
  if (typeof window === "undefined") return;
1053
1067
  exposeOnWindow();
@@ -37986,10 +38000,30 @@ function useTraitStateMachine(traitBindings, slotsActions, options) {
37986
38000
  const state = newManager.getState(traitName);
37987
38001
  return typeof state === "string" ? state : void 0;
37988
38002
  });
38003
+ const snapshotUnregs = [];
38004
+ for (const binding of traitBindingsRef.current) {
38005
+ const traitName = binding.trait.name;
38006
+ const unreg = registerTraitSnapshot(traitName, () => {
38007
+ const managerState = managerRef.current.getState(traitName);
38008
+ const currentState = managerState?.currentState ?? binding.trait.states[0]?.name ?? "unknown";
38009
+ return {
38010
+ traitName,
38011
+ currentState,
38012
+ states: binding.trait.states.map((s) => s.name),
38013
+ events: binding.trait.events.map((e) => e.key),
38014
+ data: {},
38015
+ cascadeReceived: []
38016
+ };
38017
+ });
38018
+ snapshotUnregs.push(unreg);
38019
+ }
37989
38020
  console.log(
37990
38021
  "[TraitStateMachine] Reset states for page navigation:",
37991
38022
  Array.from(newManager.getAllStates().keys()).join(", ")
37992
38023
  );
38024
+ return () => {
38025
+ for (const unreg of snapshotUnregs) unreg();
38026
+ };
37993
38027
  }, [traitBindings]);
37994
38028
  const runTickEffects = React116.useCallback((tick, binding) => {
37995
38029
  const actions = slotsActionsRef.current;
@@ -38421,10 +38455,11 @@ function SlotsProvider({ children }) {
38421
38455
  }, []);
38422
38456
  const clearSlot = React116.useCallback((slot) => {
38423
38457
  setSlots((prev) => {
38424
- if (!(slot in prev)) return prev;
38425
- const next = { ...prev };
38426
- delete next[slot];
38427
- return next;
38458
+ const existing = prev[slot];
38459
+ if (existing && existing.patterns.length === 0 && !existing.source) {
38460
+ return prev;
38461
+ }
38462
+ return { ...prev, [slot]: { patterns: [] } };
38428
38463
  });
38429
38464
  }, []);
38430
38465
  const clearAllSlots = React116.useCallback(() => {
@@ -1003,6 +1003,20 @@ function bindTraitStateGetter(getter) {
1003
1003
  window.__orbitalVerification.getTraitState = getter;
1004
1004
  }
1005
1005
  }
1006
+ function registerTraitSnapshot(traitName, getter) {
1007
+ if (typeof window === "undefined") return () => {
1008
+ };
1009
+ getState().traitSnapshots.set(traitName, getter);
1010
+ exposeOnWindow();
1011
+ notifyListeners2();
1012
+ return () => {
1013
+ const s = getState();
1014
+ if (s.traitSnapshots.get(traitName) === getter) {
1015
+ s.traitSnapshots.delete(traitName);
1016
+ notifyListeners2();
1017
+ }
1018
+ };
1019
+ }
1006
1020
  function bindCanvasCapture(captureFn) {
1007
1021
  if (typeof window === "undefined") return;
1008
1022
  exposeOnWindow();
@@ -37941,10 +37955,30 @@ function useTraitStateMachine(traitBindings, slotsActions, options) {
37941
37955
  const state = newManager.getState(traitName);
37942
37956
  return typeof state === "string" ? state : void 0;
37943
37957
  });
37958
+ const snapshotUnregs = [];
37959
+ for (const binding of traitBindingsRef.current) {
37960
+ const traitName = binding.trait.name;
37961
+ const unreg = registerTraitSnapshot(traitName, () => {
37962
+ const managerState = managerRef.current.getState(traitName);
37963
+ const currentState = managerState?.currentState ?? binding.trait.states[0]?.name ?? "unknown";
37964
+ return {
37965
+ traitName,
37966
+ currentState,
37967
+ states: binding.trait.states.map((s) => s.name),
37968
+ events: binding.trait.events.map((e) => e.key),
37969
+ data: {},
37970
+ cascadeReceived: []
37971
+ };
37972
+ });
37973
+ snapshotUnregs.push(unreg);
37974
+ }
37944
37975
  console.log(
37945
37976
  "[TraitStateMachine] Reset states for page navigation:",
37946
37977
  Array.from(newManager.getAllStates().keys()).join(", ")
37947
37978
  );
37979
+ return () => {
37980
+ for (const unreg of snapshotUnregs) unreg();
37981
+ };
37948
37982
  }, [traitBindings]);
37949
37983
  const runTickEffects = useCallback((tick, binding) => {
37950
37984
  const actions = slotsActionsRef.current;
@@ -38376,10 +38410,11 @@ function SlotsProvider({ children }) {
38376
38410
  }, []);
38377
38411
  const clearSlot = useCallback((slot) => {
38378
38412
  setSlots((prev) => {
38379
- if (!(slot in prev)) return prev;
38380
- const next = { ...prev };
38381
- delete next[slot];
38382
- return next;
38413
+ const existing = prev[slot];
38414
+ if (existing && existing.patterns.length === 0 && !existing.source) {
38415
+ return prev;
38416
+ }
38417
+ return { ...prev, [slot]: { patterns: [] } };
38383
38418
  });
38384
38419
  }, []);
38385
38420
  const clearAllSlots = useCallback(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "3.5.2",
3
+ "version": "3.5.4",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",