atom.io 0.6.6 → 0.6.8

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.
Files changed (76) hide show
  1. package/dist/index.d.mts +34 -25
  2. package/dist/index.d.ts +34 -25
  3. package/dist/index.js +94 -115
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +94 -105
  6. package/dist/index.mjs.map +1 -1
  7. package/introspection/dist/index.d.mts +272 -0
  8. package/introspection/dist/index.d.ts +272 -0
  9. package/introspection/dist/index.js +41 -3
  10. package/introspection/dist/index.js.map +1 -1
  11. package/introspection/dist/index.mjs +41 -3
  12. package/introspection/dist/index.mjs.map +1 -1
  13. package/json/dist/index.d.mts +5 -7
  14. package/json/dist/index.d.ts +5 -7
  15. package/json/dist/index.js.map +1 -1
  16. package/json/dist/index.mjs.map +1 -1
  17. package/package.json +22 -14
  18. package/react-devtools/dist/index.css +9 -1
  19. package/react-devtools/dist/index.css.map +1 -1
  20. package/react-devtools/dist/index.d.mts +22 -25
  21. package/react-devtools/dist/index.d.ts +22 -25
  22. package/react-devtools/dist/index.js +845 -326
  23. package/react-devtools/dist/index.js.map +1 -1
  24. package/react-devtools/dist/index.mjs +830 -306
  25. package/react-devtools/dist/index.mjs.map +1 -1
  26. package/realtime/dist/index.d.mts +6 -8
  27. package/realtime/dist/index.d.ts +6 -8
  28. package/realtime/dist/index.js +0 -1
  29. package/realtime/dist/index.js.map +1 -1
  30. package/realtime/dist/index.mjs +0 -1
  31. package/realtime/dist/index.mjs.map +1 -1
  32. package/realtime-react/dist/index.d.mts +11 -13
  33. package/realtime-react/dist/index.d.ts +11 -13
  34. package/realtime-react/dist/index.js.map +1 -1
  35. package/realtime-react/dist/index.mjs.map +1 -1
  36. package/src/atom.ts +4 -4
  37. package/src/index.ts +1 -1
  38. package/src/internal/atom-internal.ts +5 -6
  39. package/src/internal/families-internal.ts +23 -20
  40. package/src/internal/get.ts +7 -9
  41. package/src/internal/index.ts +1 -1
  42. package/src/internal/operation.ts +14 -21
  43. package/src/internal/selector/create-read-write-selector.ts +11 -5
  44. package/src/internal/selector/create-readonly-selector.ts +4 -8
  45. package/src/internal/selector-internal.ts +1 -3
  46. package/src/internal/set.ts +1 -4
  47. package/src/internal/store.ts +19 -22
  48. package/src/internal/subscribe-internal.ts +7 -1
  49. package/src/internal/time-travel-internal.ts +4 -4
  50. package/src/internal/timeline/add-atom-to-timeline.ts +2 -2
  51. package/src/internal/timeline-internal.ts +3 -5
  52. package/src/internal/transaction/apply-transaction.ts +9 -6
  53. package/src/internal/transaction/build-transaction.ts +6 -6
  54. package/src/internal/transaction-internal.ts +1 -7
  55. package/src/introspection/attach-timeline-family.ts +14 -4
  56. package/src/introspection/attach-transaction-logs.ts +1 -1
  57. package/src/json/select-json.ts +1 -1
  58. package/src/react-devtools/AtomIODevtools.tsx +1 -2
  59. package/src/react-devtools/StateEditor.tsx +5 -1
  60. package/src/react-devtools/StateIndex.tsx +4 -1
  61. package/src/react-devtools/devtools.scss +0 -1
  62. package/src/react-explorer/AtomIOExplorer.tsx +3 -3
  63. package/src/realtime/hook-composition/expose-family.ts +2 -2
  64. package/src/realtime/hook-composition/expose-single.ts +1 -1
  65. package/src/realtime/hook-composition/receive-state.ts +1 -1
  66. package/src/realtime-react/realtime-hooks.ts +4 -4
  67. package/src/realtime-react/use-pull-family-member.ts +2 -2
  68. package/src/realtime-react/use-pull-family.ts +2 -2
  69. package/src/realtime-react/use-pull.ts +3 -1
  70. package/src/realtime-react/use-push.ts +3 -1
  71. package/src/selector.ts +14 -12
  72. package/src/subscribe.ts +1 -1
  73. package/src/tracker/index.ts +3 -0
  74. package/src/tracker/tracker.ts +61 -0
  75. package/src/web-effects/storage.ts +1 -1
  76. package/src/internal/subject.ts +0 -24
@@ -82,6 +82,18 @@ var doNothing = () => void 0;
82
82
  var become = (nextVersionOfThing) => (originalThing) => nextVersionOfThing instanceof Function ? nextVersionOfThing(
83
83
  originalThing instanceof Function ? originalThing() : originalThing
84
84
  ) : nextVersionOfThing;
85
+ var isModifier = (validate) => (sample) => {
86
+ const sampleIsValid = validate(sample);
87
+ if (!sampleIsValid) {
88
+ throw new Error(`Invalid test case: JSON.stringify(${sample})`);
89
+ }
90
+ return (input) => {
91
+ if (typeof input !== `function`)
92
+ return false;
93
+ const testResult = input(sample);
94
+ return validate(testResult);
95
+ };
96
+ };
85
97
  var pass = (...params) => (fn) => fn(...params);
86
98
  var raiseError = (message) => {
87
99
  throw new Error(message);
@@ -343,21 +355,17 @@ var Differ = class {
343
355
  // ../../anvl/src/string/capitalize.ts
344
356
  var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
345
357
 
346
- // ../src/internal/atom-internal.ts
347
- import HAMT5 from "hamt_plus";
348
-
349
358
  // ../src/internal/get.ts
350
- import HAMT from "hamt_plus";
351
359
  var computeSelectorState = (selector) => selector.get();
352
360
  function lookup(key, store) {
353
361
  const core = target(store);
354
- const type = HAMT.has(key, core.atoms) ? `atom` : HAMT.has(key, core.selectors) ? `selector` : `readonly_selector`;
362
+ const type = core.atoms.has(key) ? `atom` : core.selectors.has(key) ? `selector` : `readonly_selector`;
355
363
  return { key, type };
356
364
  }
357
365
  function withdraw(token, store) {
358
366
  var _a2, _b, _c, _d, _e;
359
367
  const core = target(store);
360
- return (_e = (_d = (_c = (_b = (_a2 = HAMT.get(token.key, core.atoms)) != null ? _a2 : HAMT.get(token.key, core.selectors)) != null ? _b : HAMT.get(token.key, core.readonlySelectors)) != null ? _c : HAMT.get(token.key, core.transactions)) != null ? _d : HAMT.get(token.key, core.timelines)) != null ? _e : null;
368
+ return (_e = (_d = (_c = (_b = (_a2 = core.atoms.get(token.key)) != null ? _a2 : core.selectors.get(token.key)) != null ? _b : core.readonlySelectors.get(token.key)) != null ? _c : core.transactions.get(token.key)) != null ? _d : core.timelines.get(token.key)) != null ? _e : null;
361
369
  }
362
370
  function deposit(state) {
363
371
  return __spreadValues({
@@ -396,12 +404,6 @@ var markAtomAsNotDefault = (key, store = IMPLICIT.STORE) => {
396
404
  core.atomsThatAreDefault.delete(key);
397
405
  };
398
406
 
399
- // ../src/internal/operation.ts
400
- import HAMT3 from "hamt_plus";
401
-
402
- // ../src/internal/store.ts
403
- import HAMT2 from "hamt_plus";
404
-
405
407
  // ../../anvl/src/join/core-relation-data.ts
406
408
  import { isString } from "fp-ts/string";
407
409
 
@@ -757,17 +759,17 @@ var Join = class _Join {
757
759
  // ../src/internal/store.ts
758
760
  var createStore = (name, store = null) => {
759
761
  var _a2;
760
- const copiedStore = __spreadProps(__spreadValues({}, store != null ? store : (() => ({
762
+ const created = __spreadProps(__spreadValues({}, store != null ? store : (() => ({
761
763
  atomsThatAreDefault: /* @__PURE__ */ new Set(),
762
764
  selectorAtoms: new Join({ relationType: `n:n` }).from(`selectorKey`).to(`atomKey`),
763
- selectorGraph: new Join({ relationType: `n:n` }),
764
- valueMap: HAMT2.make()
765
+ selectorGraph: new Join({ relationType: `n:n` })
765
766
  }))()), {
766
- atoms: HAMT2.make(),
767
- readonlySelectors: HAMT2.make(),
768
- selectors: HAMT2.make(),
769
- transactions: HAMT2.make(),
770
- timelines: HAMT2.make(),
767
+ valueMap: new Map(store == null ? void 0 : store.valueMap),
768
+ atoms: /* @__PURE__ */ new Map(),
769
+ readonlySelectors: /* @__PURE__ */ new Map(),
770
+ selectors: /* @__PURE__ */ new Map(),
771
+ transactions: /* @__PURE__ */ new Map(),
772
+ timelines: /* @__PURE__ */ new Map(),
771
773
  timelineAtoms: new Join({ relationType: `1:n` }).from(`timelineKey`).to(`atomKey`),
772
774
  subject: {
773
775
  atomCreation: new Subject(),
@@ -793,21 +795,21 @@ var createStore = (name, store = null) => {
793
795
  });
794
796
  store == null ? void 0 : store.atoms.forEach((atom2) => {
795
797
  const copiedAtom = __spreadProps(__spreadValues({}, atom2), { subject: new Subject() });
796
- copiedStore.atoms = HAMT2.set(atom2.key, copiedAtom, copiedStore.atoms);
798
+ created.atoms.set(atom2.key, copiedAtom);
797
799
  });
798
800
  store == null ? void 0 : store.readonlySelectors.forEach((selector) => {
799
- selector.install(copiedStore);
801
+ selector.install(created);
800
802
  });
801
803
  store == null ? void 0 : store.selectors.forEach((selector) => {
802
- selector.install(copiedStore);
804
+ selector.install(created);
803
805
  });
804
806
  store == null ? void 0 : store.transactions.forEach((tx) => {
805
- tx.install(copiedStore);
807
+ tx.install(created);
806
808
  });
807
- store == null ? void 0 : store.timelines.forEach((timeline) => {
808
- timeline.install(copiedStore);
809
+ store == null ? void 0 : store.timelines.forEach((timeline2) => {
810
+ timeline2.install(created);
809
811
  });
810
- return copiedStore;
812
+ return created;
811
813
  };
812
814
  var IMPLICIT = {
813
815
  STORE_INTERNAL: void 0,
@@ -830,7 +832,7 @@ var openOperation = (token, store) => {
830
832
  core.operation = {
831
833
  open: true,
832
834
  done: /* @__PURE__ */ new Set(),
833
- prev: store.valueMap,
835
+ prev: new Map(store.valueMap),
834
836
  time: Date.now(),
835
837
  token
836
838
  };
@@ -874,39 +876,35 @@ var recallState = (state, store = IMPLICIT.STORE) => {
874
876
  (_a2 = store.config.logger) == null ? void 0 : _a2.warn(
875
877
  `recall called outside of an operation. This is probably a bug.`
876
878
  );
877
- return HAMT3.get(state.key, core.valueMap);
879
+ return core.valueMap.get(state.key);
878
880
  }
879
- return HAMT3.get(state.key, core.operation.prev);
881
+ return core.operation.prev.get(state.key);
880
882
  };
881
883
  var cacheValue = (key, value, store = IMPLICIT.STORE) => {
882
884
  const core = target(store);
883
- core.valueMap = HAMT3.set(key, value, core.valueMap);
885
+ core.valueMap.set(key, value);
884
886
  };
885
887
  var evictCachedValue = (key, store = IMPLICIT.STORE) => {
886
888
  const core = target(store);
887
- core.valueMap = HAMT3.remove(key, core.valueMap);
888
- };
889
- var readCachedValue = (key, store = IMPLICIT.STORE) => HAMT3.get(key, target(store).valueMap);
890
- var isValueCached = (key, store = IMPLICIT.STORE) => HAMT3.has(key, target(store).valueMap);
891
- var hasKeyBeenUsed = (key, store = IMPLICIT.STORE) => {
892
- const core = target(store);
893
- return HAMT3.has(key, core.atoms) || HAMT3.has(key, core.selectors) || HAMT3.has(key, core.readonlySelectors);
889
+ core.valueMap.delete(key);
894
890
  };
891
+ var readCachedValue = (key, store = IMPLICIT.STORE) => target(store).valueMap.get(key);
892
+ var isValueCached = (key, store = IMPLICIT.STORE) => target(store).valueMap.has(key);
895
893
 
896
894
  // ../src/internal/transaction-internal.ts
897
- import HAMT4 from "hamt_plus";
898
895
  var target = (store = IMPLICIT.STORE) => store.transactionStatus.phase === `building` ? store.transactionStatus.core : store;
899
896
 
900
897
  // ../src/internal/atom-internal.ts
901
898
  function atom__INTERNAL(options, family, store = IMPLICIT.STORE) {
902
899
  var _a2, _b, _c;
903
900
  const core = target(store);
904
- if (hasKeyBeenUsed(options.key, store)) {
901
+ const existing = core.atoms.get(options.key);
902
+ if (existing) {
905
903
  (_b = (_a2 = store.config.logger) == null ? void 0 : _a2.error) == null ? void 0 : _b.call(
906
904
  _a2,
907
905
  `Key "${options.key}" already exists in the store.`
908
906
  );
909
- return deposit(core.atoms.get(options.key));
907
+ return deposit(existing);
910
908
  }
911
909
  const subject = new Subject();
912
910
  const newAtom = __spreadValues(__spreadProps(__spreadValues({}, options), {
@@ -914,7 +912,7 @@ function atom__INTERNAL(options, family, store = IMPLICIT.STORE) {
914
912
  type: `atom`
915
913
  }), family && { family });
916
914
  const initialValue = options.default instanceof Function ? options.default() : options.default;
917
- core.atoms = HAMT5.set(newAtom.key, newAtom, core.atoms);
915
+ core.atoms.set(newAtom.key, newAtom);
918
916
  markAtomAsDefault(options.key, store);
919
917
  cacheValue(options.key, initialValue, store);
920
918
  const token = deposit(newAtom);
@@ -928,34 +926,6 @@ function atom__INTERNAL(options, family, store = IMPLICIT.STORE) {
928
926
  return token;
929
927
  }
930
928
 
931
- // ../../anvl/src/json/index.ts
932
- import { pipe as pipe6 } from "fp-ts/function";
933
-
934
- // ../../anvl/src/json/refine.ts
935
- import { isBoolean } from "fp-ts/boolean";
936
- import { isNumber } from "fp-ts/number";
937
- import { isString as isString3 } from "fp-ts/string";
938
- var JSON_PROTOTYPES = [
939
- `Array`,
940
- `Boolean`,
941
- `Number`,
942
- `Object`,
943
- `String`
944
- ];
945
- var refineJsonType = (data) => data === null ? { type: `null`, data: null } : isBoolean(data) ? { type: `boolean`, data } : isNumber(data) ? { type: `number`, data } : isString3(data) ? { type: `string`, data } : Array.isArray(data) ? { type: `array`, data } : isPlainObject(data) ? { type: `object`, data } : raiseError(
946
- data === void 0 ? `undefined passed to refineJsonType. This is not valid JSON.` : `${stringifyJson(data)} with prototype "${Object.getPrototypeOf(data).constructor.name}" passed to refineJsonType. This is not valid JSON.`
947
- );
948
- var isJson = (input) => {
949
- var _a2;
950
- if (input === null)
951
- return true;
952
- if (input === void 0)
953
- return false;
954
- const prototype = (_a2 = Object.getPrototypeOf(input)) == null ? void 0 : _a2.constructor.name;
955
- const isJson2 = JSON_PROTOTYPES.includes(prototype);
956
- return isJson2;
957
- };
958
-
959
929
  // ../../anvl/src/json/index.ts
960
930
  var stringifyJson = (json) => JSON.stringify(json);
961
931
  var JSON_TYPE_NAMES = [
@@ -980,20 +950,23 @@ function atomFamily__INTERNAL(options, store = IMPLICIT.STORE) {
980
950
  const subject = new Subject();
981
951
  return Object.assign(
982
952
  (key) => {
983
- var _a2;
984
953
  const subKey = stringifyJson(key);
985
954
  const family = { key: options.key, subKey };
986
955
  const fullKey = `${options.key}(${subKey})`;
987
956
  const existing = withdraw({ key: fullKey, type: `atom` }, store);
988
- const token = existing ? deposit(existing) : atom__INTERNAL(
989
- {
957
+ let token;
958
+ if (existing) {
959
+ token = deposit(existing);
960
+ } else {
961
+ const individualOptions = {
990
962
  key: fullKey,
991
- default: options.default instanceof Function ? options.default(key) : options.default,
992
- effects: (_a2 = options.effects) == null ? void 0 : _a2.call(options, key)
993
- },
994
- family,
995
- store
996
- );
963
+ default: options.default instanceof Function ? options.default(key) : options.default
964
+ };
965
+ if (options.effects) {
966
+ individualOptions.effects = options.effects(key);
967
+ }
968
+ token = atom__INTERNAL(individualOptions, family, store);
969
+ }
997
970
  subject.next(token);
998
971
  return token;
999
972
  },
@@ -1037,7 +1010,6 @@ var traceAllSelectorAtoms = (selectorKey, store) => {
1037
1010
  };
1038
1011
 
1039
1012
  // ../src/internal/set.ts
1040
- import HAMT6 from "hamt_plus";
1041
1013
  var evictDownStream = (state, store = IMPLICIT.STORE) => {
1042
1014
  var _a2, _b;
1043
1015
  const core = target(store);
@@ -1056,7 +1028,7 @@ var evictDownStream = (state, store = IMPLICIT.STORE) => {
1056
1028
  (_a3 = store.config.logger) == null ? void 0 : _a3.info(` || ${stateKey} already done`);
1057
1029
  return;
1058
1030
  }
1059
- const state2 = (_b2 = HAMT6.get(stateKey, core.selectors)) != null ? _b2 : HAMT6.get(stateKey, core.readonlySelectors);
1031
+ const state2 = (_b2 = core.selectors.get(stateKey)) != null ? _b2 : core.readonlySelectors.get(stateKey);
1060
1032
  if (!state2) {
1061
1033
  (_c = store.config.logger) == null ? void 0 : _c.info(
1062
1034
  ` || ${stateKey} is an atom, and can't be downstream`
@@ -1105,7 +1077,7 @@ var setState__INTERNAL = (state, value, store = IMPLICIT.STORE) => {
1105
1077
  }
1106
1078
  };
1107
1079
 
1108
- // ../src/internal/subject.ts
1080
+ // ../../anvl/reactivity/subject.ts
1109
1081
  var Subject = class {
1110
1082
  constructor() {
1111
1083
  this.subscribers = [];
@@ -1173,7 +1145,13 @@ var subscribeToRootAtoms = (state, store) => {
1173
1145
  );
1174
1146
  const oldValue = recallState(state, store);
1175
1147
  const newValue = getState__INTERNAL(state, store);
1176
- (_b = store.config.logger) == null ? void 0 : _b.info(` <- ${state.key} became`, newValue);
1148
+ (_b = store.config.logger) == null ? void 0 : _b.info(
1149
+ ` <- "${state.key}" went (`,
1150
+ oldValue,
1151
+ `->`,
1152
+ newValue,
1153
+ `)`
1154
+ );
1177
1155
  state.subject.next({ newValue, oldValue });
1178
1156
  });
1179
1157
  });
@@ -1366,11 +1344,24 @@ var attachTimelineFamily = (store = __INTERNAL__3.IMPLICIT.STORE) => {
1366
1344
  const findTimelineLogState__INTERNAL = __INTERNAL__3.atomFamily__INTERNAL(
1367
1345
  {
1368
1346
  key: `\u{1F441}\u200D\u{1F5E8} Timeline Update Log (Internal)`,
1369
- default: (key) => store.timelines.get(key),
1347
+ default: (key) => {
1348
+ var _a2;
1349
+ return (_a2 = store.timelines.get(key)) != null ? _a2 : {
1350
+ key: ``,
1351
+ at: 0,
1352
+ timeTraveling: null,
1353
+ history: [],
1354
+ selectorTime: null,
1355
+ transactionKey: null,
1356
+ install: () => {
1357
+ },
1358
+ subject: new Subject()
1359
+ };
1360
+ },
1370
1361
  effects: (key) => [
1371
1362
  ({ setSelf }) => {
1372
1363
  const tl = store.timelines.get(key);
1373
- tl.subject.subscribe((_) => {
1364
+ tl == null ? void 0 : tl.subject.subscribe((_) => {
1374
1365
  if (store.operation.open === true) {
1375
1366
  const subscription = store.subject.operationStatus.subscribe(
1376
1367
  (operationStatus) => {
@@ -1471,7 +1462,7 @@ var attachTransactionLogs = (store = __INTERNAL__6.IMPLICIT.STORE) => {
1471
1462
  effects: (key) => [
1472
1463
  ({ setSelf }) => {
1473
1464
  const tx = store.transactions.get(key);
1474
- tx.subject.subscribe((transactionUpdate) => {
1465
+ tx == null ? void 0 : tx.subject.subscribe((transactionUpdate) => {
1475
1466
  if (transactionUpdate.key === key) {
1476
1467
  setSelf((state) => [...state, transactionUpdate]);
1477
1468
  }
@@ -1527,6 +1518,31 @@ import { useRef as useRef4 } from "react";
1527
1518
  import { getState, selectorFamily } from "atom.io";
1528
1519
  import { useO as useO2, useIO as useIO2 } from "atom.io/react";
1529
1520
 
1521
+ // ../../anvl/src/refinement/refine-json.ts
1522
+ import { isBoolean } from "fp-ts/boolean";
1523
+ import { isNumber } from "fp-ts/number";
1524
+ import { isString as isString3 } from "fp-ts/string";
1525
+ var JSON_PROTOTYPES = [
1526
+ `Array`,
1527
+ `Boolean`,
1528
+ `Number`,
1529
+ `Object`,
1530
+ `String`
1531
+ ];
1532
+ var refineJsonType = (data) => data === null ? { type: `null`, data: null } : isBoolean(data) ? { type: `boolean`, data } : isNumber(data) ? { type: `number`, data } : isString3(data) ? { type: `string`, data } : Array.isArray(data) ? { type: `array`, data } : isPlainObject(data) ? { type: `object`, data } : raiseError(
1533
+ data === void 0 ? `undefined passed to refineJsonType. This is not valid JSON.` : `${stringifyJson(data)} with prototype "${Object.getPrototypeOf(data).constructor.name}" passed to refineJsonType. This is not valid JSON.`
1534
+ );
1535
+ var isJson = (input) => {
1536
+ var _a2;
1537
+ if (input === null)
1538
+ return true;
1539
+ if (input === void 0)
1540
+ return false;
1541
+ const prototype = (_a2 = Object.getPrototypeOf(input)) == null ? void 0 : _a2.constructor.name;
1542
+ const isJson2 = JSON_PROTOTYPES.includes(prototype);
1543
+ return isJson2;
1544
+ };
1545
+
1530
1546
  // ../src/react-devtools/Button.tsx
1531
1547
  import { jsxDEV } from "react/jsx-dev-runtime";
1532
1548
  var OpenClose = ({ isOpen, setIsOpen, disabled }) => {
@@ -1556,6 +1572,15 @@ var button = {
1556
1572
  // ../src/react-devtools/StateEditor.tsx
1557
1573
  import { useO, useIO } from "atom.io/react";
1558
1574
 
1575
+ // ../../hamr/src/react-json-editor/editors-by-type/utilities/array-elements.ts
1576
+ var makeElementSetters = (data, set) => data.map(
1577
+ (value, index) => (newValue) => set(() => {
1578
+ const newData = [...data];
1579
+ newData[index] = become(newValue)(value);
1580
+ return newData;
1581
+ })
1582
+ );
1583
+
1559
1584
  // ../../hamr/src/react-elastic-input/ElasticInput.tsx
1560
1585
  import {
1561
1586
  useLayoutEffect,
@@ -1643,18 +1668,21 @@ var ElasticInput = forwardRef(function ElasticInputFC(props, ref) {
1643
1668
  });
1644
1669
 
1645
1670
  // ../../hamr/src/react-elastic-input/NumberInput.tsx
1646
- import { pipe as pipe7 } from "fp-ts/function";
1671
+ import { pipe as pipe6 } from "fp-ts/function";
1647
1672
  import { useState as useState2, useId, useRef as useRef2 } from "react";
1648
1673
 
1649
1674
  // ../../anvl/src/number/clamp.ts
1650
1675
  var clampInto = (min, max) => (value) => value < min ? min : value > max ? max : value;
1651
1676
 
1677
+ // ../../anvl/src/number/wrap.ts
1678
+ var wrapInto = (min, max) => (value) => value < min ? max - (min - value) % (max - min) : min + (value - min) % (max - min);
1679
+
1652
1680
  // ../../hamr/src/react-elastic-input/NumberInput.tsx
1653
1681
  import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
1654
1682
  function round(value, decimalPlaces) {
1655
1683
  if (decimalPlaces === void 0)
1656
1684
  return value;
1657
- const factor = Math.pow(10, decimalPlaces);
1685
+ const factor = 10 ** decimalPlaces;
1658
1686
  return Math.round(value * factor) / factor;
1659
1687
  }
1660
1688
  var VALID_NON_NUMBERS = [``, `-`, `.`, `-.`];
@@ -1682,7 +1710,7 @@ var initRefinery = (constraints) => (input) => {
1682
1710
  return null;
1683
1711
  }
1684
1712
  const { max, min, decimalPlaces } = __spreadValues(__spreadValues({}, DEFAULT_NUMBER_CONSTRAINTS), constraints);
1685
- const constrained = pipe7(
1713
+ const constrained = pipe6(
1686
1714
  input != null ? input : 0,
1687
1715
  clampInto(min, max),
1688
1716
  (n) => decimalPlaces ? round(n, decimalPlaces) : n
@@ -1749,7 +1777,7 @@ var NumberInput = ({
1749
1777
  return /* @__PURE__ */ jsxDEV3("span", { css: customCss, children: [
1750
1778
  label && /* @__PURE__ */ jsxDEV3("label", { htmlFor: id, children: label }, void 0, false, {
1751
1779
  fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
1752
- lineNumber: 166,
1780
+ lineNumber: 168,
1753
1781
  columnNumber: 14
1754
1782
  }, this),
1755
1783
  autoSize ? /* @__PURE__ */ jsxDEV3(
@@ -1770,7 +1798,7 @@ var NumberInput = ({
1770
1798
  false,
1771
1799
  {
1772
1800
  fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
1773
- lineNumber: 168,
1801
+ lineNumber: 170,
1774
1802
  columnNumber: 5
1775
1803
  },
1776
1804
  this
@@ -1792,14 +1820,14 @@ var NumberInput = ({
1792
1820
  false,
1793
1821
  {
1794
1822
  fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
1795
- lineNumber: 181,
1823
+ lineNumber: 183,
1796
1824
  columnNumber: 5
1797
1825
  },
1798
1826
  this
1799
1827
  )
1800
1828
  ] }, void 0, true, {
1801
1829
  fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
1802
- lineNumber: 165,
1830
+ lineNumber: 167,
1803
1831
  columnNumber: 3
1804
1832
  }, this);
1805
1833
  };
@@ -1862,15 +1890,6 @@ var TextInput = ({
1862
1890
  }, this);
1863
1891
  };
1864
1892
 
1865
- // ../../hamr/src/react-json-editor/editors-by-type/utilities/array-elements.ts
1866
- var makeElementSetters = (data, set) => data.map(
1867
- (value, index) => (newValue) => set(() => {
1868
- const newData = [...data];
1869
- newData[index] = become(newValue)(value);
1870
- return newData;
1871
- })
1872
- );
1873
-
1874
1893
  // ../../hamr/src/react-json-editor/editors-by-type/non-json.tsx
1875
1894
  import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
1876
1895
  var NonJsonEditor = ({ data }) => {
@@ -1925,7 +1944,7 @@ var JsonEditor_INTERNAL = ({
1925
1944
  disabled,
1926
1945
  children: /* @__PURE__ */ jsxDEV6(Components.DeleteIcon, {}, void 0, false, {
1927
1946
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1928
- lineNumber: 63,
1947
+ lineNumber: 65,
1929
1948
  columnNumber: 7
1930
1949
  }, this)
1931
1950
  },
@@ -1933,14 +1952,14 @@ var JsonEditor_INTERNAL = ({
1933
1952
  false,
1934
1953
  {
1935
1954
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1936
- lineNumber: 59,
1955
+ lineNumber: 61,
1937
1956
  columnNumber: 6
1938
1957
  },
1939
1958
  this
1940
1959
  ),
1941
1960
  HeaderDisplay && /* @__PURE__ */ jsxDEV6(HeaderDisplay, { data, schema }, void 0, false, {
1942
1961
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1943
- lineNumber: 66,
1962
+ lineNumber: 68,
1944
1963
  columnNumber: 23
1945
1964
  }, this),
1946
1965
  rename && /* @__PURE__ */ jsxDEV6(Components.KeyWrapper, { children: /* @__PURE__ */ jsxDEV6(
@@ -1954,13 +1973,13 @@ var JsonEditor_INTERNAL = ({
1954
1973
  false,
1955
1974
  {
1956
1975
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1957
- lineNumber: 69,
1976
+ lineNumber: 71,
1958
1977
  columnNumber: 7
1959
1978
  },
1960
1979
  this
1961
1980
  ) }, void 0, false, {
1962
1981
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1963
- lineNumber: 68,
1982
+ lineNumber: 70,
1964
1983
  columnNumber: 6
1965
1984
  }, this),
1966
1985
  /* @__PURE__ */ jsxDEV6(
@@ -1980,7 +1999,7 @@ var JsonEditor_INTERNAL = ({
1980
1999
  false,
1981
2000
  {
1982
2001
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1983
- lineNumber: 76,
2002
+ lineNumber: 78,
1984
2003
  columnNumber: 5
1985
2004
  },
1986
2005
  this
@@ -1993,7 +2012,7 @@ var JsonEditor_INTERNAL = ({
1993
2012
  disabled,
1994
2013
  children: Object.keys(SubEditors).map((type) => /* @__PURE__ */ jsxDEV6("option", { value: type, children: type }, type, false, {
1995
2014
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
1996
- lineNumber: 98,
2015
+ lineNumber: 100,
1997
2016
  columnNumber: 8
1998
2017
  }, this))
1999
2018
  },
@@ -2001,18 +2020,18 @@ var JsonEditor_INTERNAL = ({
2001
2020
  false,
2002
2021
  {
2003
2022
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
2004
- lineNumber: 88,
2023
+ lineNumber: 90,
2005
2024
  columnNumber: 6
2006
2025
  },
2007
2026
  this
2008
2027
  ) : null
2009
2028
  ] }, void 0, true, {
2010
2029
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
2011
- lineNumber: 57,
2030
+ lineNumber: 59,
2012
2031
  columnNumber: 4
2013
2032
  }, this) }, void 0, false, {
2014
2033
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
2015
- lineNumber: 56,
2034
+ lineNumber: 58,
2016
2035
  columnNumber: 3
2017
2036
  }, this);
2018
2037
  };
@@ -2065,7 +2084,7 @@ import { isNumber as isNumber2 } from "fp-ts/number";
2065
2084
  import { isString as isString6 } from "fp-ts/string";
2066
2085
 
2067
2086
  // ../../anvl/src/json-schema/integer.ts
2068
- import { pipe as pipe8 } from "fp-ts/function";
2087
+ import { pipe as pipe7 } from "fp-ts/function";
2069
2088
  var isInteger = (input) => Number.isInteger(input);
2070
2089
  var parseInteger = (input) => {
2071
2090
  if (isInteger(input))
@@ -2091,7 +2110,7 @@ var IntegerParseError = class extends Error {
2091
2110
  }
2092
2111
  };
2093
2112
  var Int = Object.assign((input) => parseInteger(input), {
2094
- from: (input) => pipe8(
2113
+ from: (input) => pipe7(
2095
2114
  input,
2096
2115
  String,
2097
2116
  parseFloat,
@@ -2392,7 +2411,7 @@ var findSubSchema = (schema) => {
2392
2411
  };
2393
2412
  };
2394
2413
 
2395
- // ../../anvl/src/json/cast.ts
2414
+ // ../../anvl/src/json/cast-json.ts
2396
2415
  var stringToBoolean = (str) => str === `true`;
2397
2416
  var stringToNumber = (str) => Number(str);
2398
2417
  var stringToArray = (str) => str.split(`,`);
@@ -2434,7 +2453,9 @@ var nullToNumber = () => 0;
2434
2453
  var nullToBoolean = () => false;
2435
2454
  var nullToArray = () => [];
2436
2455
  var nullToObject = () => ({});
2437
- var cast = (input) => {
2456
+
2457
+ // ../../anvl/src/refinement/smart-cast-json.ts
2458
+ var castToJson = (input) => {
2438
2459
  const json = refineJsonType(input);
2439
2460
  return {
2440
2461
  to: {
@@ -2551,7 +2572,7 @@ var makePropertyRemovers = (data, set) => mapObject(
2551
2572
  var makePropertyRecasters = (data, set) => mapObject(
2552
2573
  data,
2553
2574
  (value, key) => (newType) => set(() => __spreadProps(__spreadValues({}, data), {
2554
- [key]: cast(value).to[newType]()
2575
+ [key]: castToJson(value).to[newType]()
2555
2576
  }))
2556
2577
  );
2557
2578
  var makePropertyCreationInterface = (data, set) => (key, type) => (value) => set(__spreadProps(__spreadValues({}, data), { [key]: value != null ? value : JSON_DEFAULTS[type] }));
@@ -2713,7 +2734,7 @@ var ObjectEditor = ({
2713
2734
  };
2714
2735
 
2715
2736
  // ../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx
2716
- import { Fragment as Fragment3, jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
2737
+ import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
2717
2738
  var BooleanEditor = ({
2718
2739
  data,
2719
2740
  set,
@@ -2740,11 +2761,7 @@ var BooleanEditor = ({
2740
2761
  }, this);
2741
2762
  var NullEditor = ({
2742
2763
  Components
2743
- }) => /* @__PURE__ */ jsxDEV9(Components.NullWrapper, { children: /* @__PURE__ */ jsxDEV9(Fragment3, {}, void 0, false, {
2744
- fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2745
- lineNumber: 24,
2746
- columnNumber: 3
2747
- }, this) }, void 0, false, {
2764
+ }) => /* @__PURE__ */ jsxDEV9(Components.NullWrapper, { children: '" "' }, void 0, false, {
2748
2765
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2749
2766
  lineNumber: 23,
2750
2767
  columnNumber: 2
@@ -2766,13 +2783,13 @@ var NumberEditor = ({
2766
2783
  false,
2767
2784
  {
2768
2785
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2769
- lineNumber: 36,
2786
+ lineNumber: 34,
2770
2787
  columnNumber: 3
2771
2788
  },
2772
2789
  this
2773
2790
  ) }, void 0, false, {
2774
2791
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2775
- lineNumber: 35,
2792
+ lineNumber: 33,
2776
2793
  columnNumber: 2
2777
2794
  }, this);
2778
2795
  var StringEditor = ({
@@ -2793,20 +2810,19 @@ var StringEditor = ({
2793
2810
  false,
2794
2811
  {
2795
2812
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2796
- lineNumber: 53,
2813
+ lineNumber: 51,
2797
2814
  columnNumber: 4
2798
2815
  },
2799
2816
  this
2800
2817
  ) }, void 0, false, {
2801
2818
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2802
- lineNumber: 52,
2819
+ lineNumber: 50,
2803
2820
  columnNumber: 3
2804
2821
  }, this);
2805
2822
  };
2806
2823
 
2807
- // ../../hamr/src/react-error-boundary/ErrorBoundary.tsx
2808
- import { useId as useId2, Component } from "react";
2809
- import { atomFamily as atomFamily2, useRecoilState, useResetRecoilState } from "recoil";
2824
+ // ../../hamr/src/react-error-boundary/ReactErrorBoundary.tsx
2825
+ import { Component, useState as useState3 } from "react";
2810
2826
 
2811
2827
  // ../../hamr/src/react-error-boundary/DefaultFallback.tsx
2812
2828
  import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
@@ -2886,12 +2902,12 @@ var DefaultFallback = ({ error, errorInfo }) => {
2886
2902
  );
2887
2903
  };
2888
2904
 
2889
- // ../../hamr/src/react-error-boundary/ErrorBoundary.tsx
2905
+ // ../../hamr/src/react-error-boundary/ReactErrorBoundary.tsx
2890
2906
  import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
2891
2907
  var ErrorBoundary = class extends Component {
2892
2908
  constructor(props) {
2893
2909
  super(props);
2894
- this.state = { error: void 0, errorInfo: void 0 };
2910
+ this.state = {};
2895
2911
  }
2896
2912
  componentDidCatch(error, errorInfo) {
2897
2913
  var _a2, _b;
@@ -2905,23 +2921,19 @@ var ErrorBoundary = class extends Component {
2905
2921
  const { error, errorInfo } = this.state;
2906
2922
  const { children, Fallback = DefaultFallback } = this.props;
2907
2923
  return errorInfo ? /* @__PURE__ */ jsxDEV11(Fallback, { error, errorInfo }, void 0, false, {
2908
- fileName: "../../hamr/src/react-error-boundary/ErrorBoundary.tsx",
2909
- lineNumber: 43,
2924
+ fileName: "../../hamr/src/react-error-boundary/ReactErrorBoundary.tsx",
2925
+ lineNumber: 51,
2910
2926
  columnNumber: 4
2911
2927
  }, this) : children;
2912
2928
  }
2913
2929
  };
2914
- var findErrorBoundaryState = atomFamily2({
2915
- key: `errorBoundary`,
2916
- default: { error: void 0, errorInfo: void 0 }
2917
- });
2918
2930
 
2919
2931
  // ../../hamr/src/react-json-editor/default-components.tsx
2920
2932
  import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
2921
2933
  var DEFAULT_JSON_EDITOR_COMPONENTS = {
2922
2934
  ErrorBoundary: ({ children }) => /* @__PURE__ */ jsxDEV12(ErrorBoundary, { children }, void 0, false, {
2923
2935
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2924
- lineNumber: 47,
2936
+ lineNumber: 49,
2925
2937
  columnNumber: 35
2926
2938
  }, this),
2927
2939
  Button: ({ onClick, children, disabled }) => /* @__PURE__ */ jsxDEV12(
@@ -2937,14 +2949,14 @@ var DEFAULT_JSON_EDITOR_COMPONENTS = {
2937
2949
  false,
2938
2950
  {
2939
2951
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2940
- lineNumber: 49,
2952
+ lineNumber: 51,
2941
2953
  columnNumber: 3
2942
2954
  },
2943
2955
  this
2944
2956
  ),
2945
2957
  EditorWrapper: ({ children, customCss, className }) => /* @__PURE__ */ jsxDEV12("div", { className: `json_editor ` + className, css: customCss, children }, void 0, false, {
2946
2958
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2947
- lineNumber: 59,
2959
+ lineNumber: 61,
2948
2960
  columnNumber: 3
2949
2961
  }, this),
2950
2962
  EditorLayout: ({
@@ -2958,98 +2970,98 @@ var DEFAULT_JSON_EDITOR_COMPONENTS = {
2958
2970
  return /* @__PURE__ */ jsxDEV12(Wrapper, { children: [
2959
2971
  DeleteButton && /* @__PURE__ */ jsxDEV12(DeleteButton, {}, void 0, false, {
2960
2972
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2961
- lineNumber: 73,
2973
+ lineNumber: 75,
2962
2974
  columnNumber: 22
2963
2975
  }, this),
2964
2976
  Header && /* @__PURE__ */ jsxDEV12(Header, {}, void 0, false, {
2965
2977
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2966
- lineNumber: 74,
2978
+ lineNumber: 76,
2967
2979
  columnNumber: 16
2968
2980
  }, this),
2969
2981
  KeyInput && /* @__PURE__ */ jsxDEV12(KeyInput, {}, void 0, false, {
2970
2982
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2971
- lineNumber: 75,
2983
+ lineNumber: 77,
2972
2984
  columnNumber: 18
2973
2985
  }, this),
2974
2986
  TypeSelect && /* @__PURE__ */ jsxDEV12(TypeSelect, {}, void 0, false, {
2975
2987
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2976
- lineNumber: 76,
2988
+ lineNumber: 78,
2977
2989
  columnNumber: 20
2978
2990
  }, this),
2979
2991
  /* @__PURE__ */ jsxDEV12(ValueEditor, {}, void 0, false, {
2980
2992
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2981
- lineNumber: 77,
2993
+ lineNumber: 79,
2982
2994
  columnNumber: 5
2983
2995
  }, this)
2984
2996
  ] }, void 0, true, {
2985
2997
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2986
- lineNumber: 72,
2998
+ lineNumber: 74,
2987
2999
  columnNumber: 4
2988
3000
  }, this);
2989
3001
  },
2990
3002
  ArrayWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_array", children }, void 0, false, {
2991
3003
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2992
- lineNumber: 82,
3004
+ lineNumber: 84,
2993
3005
  columnNumber: 3
2994
3006
  }, this),
2995
3007
  ObjectWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_object", children }, void 0, false, {
2996
3008
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
2997
- lineNumber: 85,
3009
+ lineNumber: 87,
2998
3010
  columnNumber: 3
2999
3011
  }, this),
3000
3012
  StringWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_string", children }, void 0, false, {
3001
3013
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3002
- lineNumber: 88,
3014
+ lineNumber: 90,
3003
3015
  columnNumber: 3
3004
3016
  }, this),
3005
3017
  NumberWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_number", children }, void 0, false, {
3006
3018
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3007
- lineNumber: 91,
3019
+ lineNumber: 93,
3008
3020
  columnNumber: 3
3009
3021
  }, this),
3010
3022
  BooleanWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_boolean", children }, void 0, false, {
3011
3023
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3012
- lineNumber: 94,
3024
+ lineNumber: 96,
3013
3025
  columnNumber: 3
3014
3026
  }, this),
3015
3027
  NullWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_null", children }, void 0, false, {
3016
3028
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3017
- lineNumber: 97,
3029
+ lineNumber: 99,
3018
3030
  columnNumber: 3
3019
3031
  }, this),
3020
3032
  MissingPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_property json_editor_missing", children }, void 0, false, {
3021
3033
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3022
- lineNumber: 100,
3034
+ lineNumber: 102,
3023
3035
  columnNumber: 3
3024
3036
  }, this),
3025
3037
  MiscastPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_property json_editor_miscast", children }, void 0, false, {
3026
3038
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3027
- lineNumber: 103,
3039
+ lineNumber: 105,
3028
3040
  columnNumber: 3
3029
3041
  }, this),
3030
3042
  IllegalPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_property json_editor_illegal", children }, void 0, false, {
3031
3043
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3032
- lineNumber: 106,
3044
+ lineNumber: 108,
3033
3045
  columnNumber: 3
3034
3046
  }, this),
3035
3047
  OfficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_property json_editor_official", children }, void 0, false, {
3036
3048
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3037
- lineNumber: 109,
3049
+ lineNumber: 111,
3038
3050
  columnNumber: 3
3039
3051
  }, this),
3040
3052
  UnofficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_property json_editor_unofficial", children }, void 0, false, {
3041
3053
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3042
- lineNumber: 112,
3054
+ lineNumber: 114,
3043
3055
  columnNumber: 3
3044
3056
  }, this),
3045
3057
  DeleteIcon: () => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_icon json_editor_delete", children: "x" }, void 0, false, {
3046
3058
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3047
- lineNumber: 117,
3059
+ lineNumber: 119,
3048
3060
  columnNumber: 3
3049
3061
  }, this),
3050
3062
  KeyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_key", children }, void 0, false, {
3051
3063
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
3052
- lineNumber: 120,
3064
+ lineNumber: 122,
3053
3065
  columnNumber: 3
3054
3066
  }, this)
3055
3067
  };
@@ -3100,7 +3112,7 @@ var JsonEditor = ({
3100
3112
  false,
3101
3113
  {
3102
3114
  fileName: "../../hamr/src/react-json-editor/developer-interface.tsx",
3103
- lineNumber: 79,
3115
+ lineNumber: 77,
3104
3116
  columnNumber: 3
3105
3117
  },
3106
3118
  this
@@ -3117,15 +3129,527 @@ var SubEditors = {
3117
3129
  string: StringEditor
3118
3130
  };
3119
3131
 
3132
+ // ../../hamr/src/react-data-designer/RelationEditor.module.scss
3133
+ var RelationEditor_module_default = {};
3134
+
3135
+ // ../../hamr/src/react-id/Id.tsx
3136
+ import {
3137
+ FloatingPortal,
3138
+ useClick,
3139
+ useFloating,
3140
+ useInteractions
3141
+ } from "@floating-ui/react";
3142
+ import { pipe as pipe12 } from "fp-ts/function";
3143
+ import * as React from "react";
3144
+
3145
+ // ../../anvl/src/string/string-to-color.ts
3146
+ function stringToColor(input) {
3147
+ let hash = 0;
3148
+ for (let i = 0; i < input.length; i++) {
3149
+ const char = input.charCodeAt(i);
3150
+ hash = (hash << 5) - hash + char;
3151
+ hash |= 0;
3152
+ }
3153
+ let hexColor = (hash & 16777215).toString(16);
3154
+ while (hexColor.length < 6) {
3155
+ hexColor = `0` + hexColor;
3156
+ }
3157
+ return `#${hexColor}`;
3158
+ }
3159
+
3160
+ // ../../luum/src/constants/index.ts
3161
+ var CHANNEL_SPECIFIC_LUM = {
3162
+ R: 0.3,
3163
+ G: 0.5,
3164
+ B: 0.2
3165
+ };
3166
+
3167
+ // ../../luum/src/constants/filters.ts
3168
+ var unfiltered = [
3169
+ { sat: 255, hue: 0 },
3170
+ { sat: 255, hue: 360 }
3171
+ ];
3172
+
3173
+ // ../../luum/src/export/channelsToHex.ts
3174
+ var channelsToHex = (channels) => `#${Object.values(channels).map((channel) => {
3175
+ let channelHex = channel.toString(16);
3176
+ if (channelHex.length === 1)
3177
+ channelHex = 0 + channelHex;
3178
+ return channelHex;
3179
+ }).join(``)}`;
3180
+ var channelsToHex_default = channelsToHex;
3181
+
3182
+ // ../../luum/src/import/hueToRelativeChannels.ts
3183
+ var hueToRelativeChannels_default = (hue) => {
3184
+ const hueWrapped = wrapInto(0, 360)(hue);
3185
+ const hueReduced = hueWrapped / 60;
3186
+ const hueInteger = Math.floor(hueReduced);
3187
+ const hueDecimal = hueReduced - hueInteger;
3188
+ const x = hueDecimal;
3189
+ const y = 1 - hueDecimal;
3190
+ switch (hueInteger) {
3191
+ case 0:
3192
+ return [1, x, 0];
3193
+ case 1:
3194
+ return [y, 1, 0];
3195
+ case 2:
3196
+ return [0, 1, x];
3197
+ case 3:
3198
+ return [0, y, 1];
3199
+ case 4:
3200
+ return [x, 0, 1];
3201
+ case 5:
3202
+ return [1, 0, y];
3203
+ default:
3204
+ throw new Error(`invalid hue served: ${hue}`);
3205
+ }
3206
+ };
3207
+
3208
+ // ../../luum/src/solveFor/hueFromChannels.ts
3209
+ var hueFromChannels = ({ R, G, B }) => {
3210
+ let hue = 0;
3211
+ if (R > G && G >= B)
3212
+ hue = 60 * (0 + (G - B) / (R - B));
3213
+ if (G >= R && R > B)
3214
+ hue = 60 * (2 - (R - B) / (G - B));
3215
+ if (G > B && B >= R)
3216
+ hue = 60 * (2 + (B - R) / (G - R));
3217
+ if (B >= G && G > R)
3218
+ hue = 60 * (4 - (G - R) / (B - R));
3219
+ if (B > R && R >= G)
3220
+ hue = 60 * (4 + (R - G) / (B - G));
3221
+ if (R >= B && B > G)
3222
+ hue = 60 * (6 - (B - G) / (R - G));
3223
+ return hue;
3224
+ };
3225
+ var hueFromChannels_default = hueFromChannels;
3226
+
3227
+ // ../../luum/src/solveFor/lumFromChannels.ts
3228
+ var lumFromChannels = ({ R, G, B }) => {
3229
+ const lum = CHANNEL_SPECIFIC_LUM.R * R / 255 + CHANNEL_SPECIFIC_LUM.G * G / 255 + CHANNEL_SPECIFIC_LUM.B * B / 255;
3230
+ return lum;
3231
+ };
3232
+ var lumFromChannels_default = lumFromChannels;
3233
+
3234
+ // ../../luum/src/solveFor/maxSatForHueInFilter.ts
3235
+ var maxSatForHueInFilter_default = (hue, filter) => {
3236
+ let maxSat = 255;
3237
+ const hueWrapped = wrapInto(0, 360)(hue);
3238
+ for (let a2 = -1, b2 = 0; b2 < filter.length; a2++, b2++) {
3239
+ a2 = wrapInto(0, filter.length)(a2);
3240
+ const hueDoubleWrapped = a2 > b2 ? wrapInto(-180, 180)(hueWrapped) : void 0;
3241
+ const tuningPointA = filter[a2];
3242
+ const tuningPointB = filter[b2];
3243
+ const hueA = a2 > b2 ? wrapInto(-180, 180)(tuningPointA.hue) : tuningPointA.hue;
3244
+ const hueB = tuningPointB.hue;
3245
+ if ((hueDoubleWrapped || hueWrapped) >= hueA && (hueDoubleWrapped || hueWrapped) < hueB) {
3246
+ let $ = hueDoubleWrapped || hueWrapped;
3247
+ $ -= hueA;
3248
+ $ /= hueB - hueA;
3249
+ $ *= tuningPointB.sat - tuningPointA.sat;
3250
+ $ += tuningPointA.sat;
3251
+ Math.round($);
3252
+ maxSat = $;
3253
+ }
3254
+ }
3255
+ return maxSat;
3256
+ };
3257
+
3258
+ // ../../luum/src/solveFor/satFromChannels.ts
3259
+ var satFromChannels = ({ R, G, B }) => {
3260
+ const sat = Math.max(R, G, B) - Math.min(R, G, B);
3261
+ return sat;
3262
+ };
3263
+ var satFromChannels_default = satFromChannels;
3264
+
3265
+ // ../../luum/src/solveFor/specificLumFromHue.ts
3266
+ var specificLumFromHue_default = (hue) => {
3267
+ const [factorR, factorG, factorB] = hueToRelativeChannels_default(hue);
3268
+ const lumR = CHANNEL_SPECIFIC_LUM.R * factorR;
3269
+ const lumG = CHANNEL_SPECIFIC_LUM.G * factorG;
3270
+ const lumB = CHANNEL_SPECIFIC_LUM.B * factorB;
3271
+ const specificLum = lumR + lumG + lumB;
3272
+ return specificLum;
3273
+ };
3274
+
3275
+ // ../../luum/src/export/specToChannelsFixLimit.ts
3276
+ var minChannelsForSaturationFromHue = (hue) => {
3277
+ const relativeChannels = hueToRelativeChannels_default(hue);
3278
+ const channelSpreader = (trueSaturation) => {
3279
+ const makeMinChannel = (idx) => Math.round(relativeChannels[idx] * trueSaturation);
3280
+ return {
3281
+ R: makeMinChannel(0),
3282
+ G: makeMinChannel(1),
3283
+ B: makeMinChannel(2)
3284
+ };
3285
+ };
3286
+ return channelSpreader;
3287
+ };
3288
+ var channelsFromIlluminationObj = ({
3289
+ minChannels,
3290
+ trueLuminosity,
3291
+ minLum
3292
+ }) => {
3293
+ const { max, round: round2 } = Math;
3294
+ const maxWhite = 255 - max(...Object.values(minChannels));
3295
+ const white = clampInto(0, maxWhite)(round2((trueLuminosity - minLum) * 255));
3296
+ const channels = {
3297
+ R: minChannels.R + white,
3298
+ G: minChannels.G + white,
3299
+ B: minChannels.B + white
3300
+ };
3301
+ return channels;
3302
+ };
3303
+ var specToChannelsFixLimit = ({ hue, sat, lum, prefer = `lum` }, filter = unfiltered) => {
3304
+ const minChannelsForSaturation = minChannelsForSaturationFromHue(hue);
3305
+ let trueSaturation;
3306
+ let trueLuminosity;
3307
+ let minChannels;
3308
+ let maxChannels;
3309
+ let specificLum;
3310
+ let minLum = 0;
3311
+ let maxLum = 1;
3312
+ let maxSat = maxSatForHueInFilter_default(hue, filter);
3313
+ switch (prefer) {
3314
+ case `sat`:
3315
+ trueSaturation = clampInto(0, 255)(Math.min(sat, maxSat));
3316
+ minChannels = minChannelsForSaturation(trueSaturation);
3317
+ maxChannels = {
3318
+ R: minChannels.R + 255 - trueSaturation,
3319
+ G: minChannels.G + 255 - trueSaturation,
3320
+ B: minChannels.B + 255 - trueSaturation
3321
+ };
3322
+ minLum = lumFromChannels_default(minChannels);
3323
+ maxLum = lumFromChannels_default(maxChannels);
3324
+ trueLuminosity = clampInto(minLum, maxLum)(lum);
3325
+ break;
3326
+ case `lum`:
3327
+ trueLuminosity = clampInto(0, 1)(lum);
3328
+ specificLum = specificLumFromHue_default(hue);
3329
+ maxSat = Math.min(
3330
+ maxSat,
3331
+ Math.round(
3332
+ trueLuminosity <= specificLum ? 255 * (trueLuminosity / specificLum) : 255 * (1 - trueLuminosity) / (1 - specificLum)
3333
+ )
3334
+ );
3335
+ trueSaturation = Math.min(sat, maxSat);
3336
+ minChannels = minChannelsForSaturation(trueSaturation);
3337
+ minLum = lumFromChannels_default(minChannels);
3338
+ break;
3339
+ }
3340
+ const channels = channelsFromIlluminationObj({
3341
+ minChannels,
3342
+ trueLuminosity,
3343
+ minLum
3344
+ });
3345
+ return {
3346
+ channels,
3347
+ fix: {
3348
+ sat: trueSaturation,
3349
+ lum: trueLuminosity
3350
+ },
3351
+ limit: {
3352
+ sat: [0, maxSat],
3353
+ lum: [prefer === `lum` ? 0 : minLum, maxLum]
3354
+ }
3355
+ };
3356
+ };
3357
+ var specToChannelsFixLimit_default = specToChannelsFixLimit;
3358
+
3359
+ // ../../luum/src/export/specToHexFixLimit.ts
3360
+ var specToHexFixLimit = ({ hue, sat, lum, prefer }, filter) => {
3361
+ const { channels, fix, limit } = specToChannelsFixLimit_default(
3362
+ {
3363
+ hue,
3364
+ sat,
3365
+ lum,
3366
+ prefer
3367
+ },
3368
+ filter
3369
+ );
3370
+ const { R, G, B } = channels;
3371
+ const hex = channelsToHex_default({ R, G, B });
3372
+ return { hex, fix, limit };
3373
+ };
3374
+ var specToHexFixLimit_default = specToHexFixLimit;
3375
+
3376
+ // ../../luum/src/export/specToHex.ts
3377
+ var specToHex = ({ hue, sat, lum, prefer }, filter) => {
3378
+ const { hex } = specToHexFixLimit_default({ hue, sat, lum, prefer }, filter);
3379
+ return hex;
3380
+ };
3381
+ var specToHex_default = specToHex;
3382
+
3383
+ // ../../luum/src/import/channelsToSpec.ts
3384
+ var channelsToSpec = ({ R, G, B }) => {
3385
+ const hue = hueFromChannels_default({ R, G, B });
3386
+ const sat = satFromChannels_default({ R, G, B });
3387
+ const lum = lumFromChannels_default({ R, G, B });
3388
+ return { hue, sat, lum };
3389
+ };
3390
+ var channelsToSpec_default = channelsToSpec;
3391
+
3392
+ // ../../luum/src/import/normalizeHex.ts
3393
+ var BASE_16_CHAR_SET = `[a-fA-F0-9]+`;
3394
+ var miniHexToHex = (miniHex) => {
3395
+ const miniHexArray = miniHex.split(``);
3396
+ const hexTemplate = [0, 0, 1, 1, 2, 2];
3397
+ return hexTemplate.map((idx) => miniHexArray[idx]).join(``);
3398
+ };
3399
+ var normalizeHex = (maybeHex) => {
3400
+ const hex = maybeHex.replace(/^#/, ``);
3401
+ const hexIsCorrectLength = hex.length === 6 || hex.length === 3;
3402
+ const hexIsCorrectCharSet = hex.match(new RegExp(`^${BASE_16_CHAR_SET}$`)) !== null;
3403
+ const hexIsValid = hexIsCorrectLength && hexIsCorrectCharSet;
3404
+ if (!hexIsValid) {
3405
+ throw new Error(`${maybeHex} is not a valid hex code`);
3406
+ }
3407
+ if (hex.length === 3) {
3408
+ return miniHexToHex(hex);
3409
+ }
3410
+ return hex;
3411
+ };
3412
+ var normalizeHex_default = normalizeHex;
3413
+
3414
+ // ../../luum/src/import/hexToChannels.ts
3415
+ var hexToChannels_default = (maybeHex) => {
3416
+ const hex = normalizeHex_default(maybeHex);
3417
+ return {
3418
+ R: parseInt(hex.slice(0, 2), 16),
3419
+ G: parseInt(hex.slice(2, 4), 16),
3420
+ B: parseInt(hex.slice(4, 6), 16)
3421
+ };
3422
+ };
3423
+
3424
+ // ../../luum/src/import/hexToSpec.ts
3425
+ var hexToSpec = (hex) => {
3426
+ const { R, G, B } = hexToChannels_default(hex);
3427
+ const { hue, sat, lum } = channelsToSpec_default({ R, G, B });
3428
+ return { hue, sat, lum };
3429
+ };
3430
+ var hexToSpec_default = hexToSpec;
3431
+
3432
+ // ../../luum/src/mixers/lum.ts
3433
+ import { pipe as pipe8 } from "fp-ts/function";
3434
+ var resetColor = (color) => pipe8(color, specToHex_default, hexToSpec_default, (hsl) => __spreadProps(__spreadValues({}, hsl), {
3435
+ prefer: color.prefer
3436
+ }));
3437
+ var setLum = (newLum) => (currentColor) => {
3438
+ const newColor = __spreadProps(__spreadValues({}, currentColor), {
3439
+ lum: pipe8(currentColor.lum, become(newLum), clampInto(0, 1))
3440
+ });
3441
+ return newColor;
3442
+ };
3443
+ var shadeBy = (shadeAmount) => (color) => setLum((lum) => (lum * 100 - shadeAmount) / 100)(resetColor(color));
3444
+
3445
+ // ../../luum/src/mixers/sat.ts
3446
+ import { pipe as pipe9 } from "fp-ts/function";
3447
+
3448
+ // ../../luum/src/mixers/hue.ts
3449
+ import { pipe as pipe10 } from "fp-ts/function";
3450
+
3451
+ // ../../luum/src/mixers/contrast.ts
3452
+ var contrastMax = (color) => __spreadProps(__spreadValues({}, color), {
3453
+ lum: color.lum > 0.666 ? 0 : 1
3454
+ });
3455
+ var offset = (offsetAmount) => (color) => __spreadProps(__spreadValues({}, color), {
3456
+ lum: color.lum > 0.666 ? color.lum - offsetAmount : color.lum + offsetAmount
3457
+ });
3458
+
3459
+ // ../../luum/src/scheme/index.ts
3460
+ import { pipe as pipe11 } from "fp-ts/function";
3461
+ import { isString as isString7 } from "fp-ts/string";
3462
+
3463
+ // ../../luum/src/constants/luum-spec.ts
3464
+ var defaultSpec = {
3465
+ hue: 0,
3466
+ lum: 0,
3467
+ sat: 0,
3468
+ prefer: `lum`
3469
+ };
3470
+
3471
+ // ../../luum/src/scheme/index.ts
3472
+ var isLuumSpec = (input) => typeof input === `object` && input !== null && typeof input.hue === `number` && typeof input.sat === `number` && typeof input.lum === `number` && [`sat`, `lum`].includes(input.prefer);
3473
+ var isLuumSpecModifier = isModifier(isLuumSpec)(defaultSpec);
3474
+ var RED = {
3475
+ hue: 0,
3476
+ sat: 255,
3477
+ lum: 0.5,
3478
+ prefer: `sat`
3479
+ };
3480
+ var WAYFORGE_CORE_COLOR_NAMES = [
3481
+ `Red`,
3482
+ `Orange`,
3483
+ `Yellow`,
3484
+ `Lime`,
3485
+ `Green`,
3486
+ `Teal`,
3487
+ `Cyan`,
3488
+ `Blue`,
3489
+ `Indigo`,
3490
+ `Violet`,
3491
+ `Magenta`,
3492
+ `Pink`
3493
+ ];
3494
+ var WAYFORGE_CORE_COLORS = WAYFORGE_CORE_COLOR_NAMES.reduce((acc, name, idx) => {
3495
+ acc[name] = {
3496
+ hue: idx * 30,
3497
+ sat: 255,
3498
+ lum: 0.5,
3499
+ prefer: `sat`
3500
+ };
3501
+ return acc;
3502
+ }, {});
3503
+ var PAINT_MY_WAGON_RED = {
3504
+ rootSelectors: [`.wagon`],
3505
+ root: RED,
3506
+ attributes: [`background-color`, shadeBy(5)],
3507
+ states: [
3508
+ [
3509
+ [`:hover`, `:focus`],
3510
+ [`background-color`, shadeBy(10)]
3511
+ ],
3512
+ [`:active`, [`background-color`, shadeBy(15)]]
3513
+ ]
3514
+ };
3515
+
3516
+ // ../../hamr/src/react-id/Id.tsx
3517
+ import { Fragment as Fragment3, jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
3518
+ var Id = ({ id }) => {
3519
+ const [isOpen, setIsOpen] = React.useState(false);
3520
+ const { refs, floatingStyles, context } = useFloating({
3521
+ open: isOpen,
3522
+ onOpenChange: setIsOpen,
3523
+ placement: `bottom-start`
3524
+ });
3525
+ const click = useClick(context);
3526
+ const { getReferenceProps, getFloatingProps } = useInteractions([click]);
3527
+ const bgColor = stringToColor(id);
3528
+ const contrastColor = pipe12(bgColor, hexToSpec_default, contrastMax, specToHex_default);
3529
+ const offsetColor = pipe12(bgColor, hexToSpec_default, offset(0.25), specToHex_default);
3530
+ const contrastOffsetColor = pipe12(
3531
+ offsetColor,
3532
+ hexToSpec_default,
3533
+ contrastMax,
3534
+ specToHex_default
3535
+ );
3536
+ return /* @__PURE__ */ jsxDEV14(Fragment3, { children: [
3537
+ /* @__PURE__ */ jsxDEV14(
3538
+ "span",
3539
+ __spreadProps(__spreadValues({
3540
+ role: "content",
3541
+ ref: refs.setReference
3542
+ }, getReferenceProps()), {
3543
+ style: {
3544
+ background: bgColor,
3545
+ cursor: `pointer`,
3546
+ padding: `0px 4px`,
3547
+ color: contrastColor,
3548
+ userSelect: `none`,
3549
+ whiteSpace: `nowrap`
3550
+ },
3551
+ children: id.substring(0, 3)
3552
+ }),
3553
+ void 0,
3554
+ false,
3555
+ {
3556
+ fileName: "../../hamr/src/react-id/Id.tsx",
3557
+ lineNumber: 36,
3558
+ columnNumber: 4
3559
+ },
3560
+ this
3561
+ ),
3562
+ isOpen && /* @__PURE__ */ jsxDEV14(FloatingPortal, { children: /* @__PURE__ */ jsxDEV14(
3563
+ "span",
3564
+ __spreadProps(__spreadValues({
3565
+ role: "popup",
3566
+ ref: refs.setFloating
3567
+ }, getFloatingProps()), {
3568
+ style: __spreadProps(__spreadValues({}, floatingStyles), {
3569
+ color: contrastOffsetColor,
3570
+ background: offsetColor,
3571
+ padding: `0px 4px`,
3572
+ boxShadow: `0px 2px 10px rgba(0, 0, 0, 0.1)`
3573
+ }),
3574
+ children: id
3575
+ }),
3576
+ void 0,
3577
+ false,
3578
+ {
3579
+ fileName: "../../hamr/src/react-id/Id.tsx",
3580
+ lineNumber: 53,
3581
+ columnNumber: 6
3582
+ },
3583
+ this
3584
+ ) }, void 0, false, {
3585
+ fileName: "../../hamr/src/react-id/Id.tsx",
3586
+ lineNumber: 52,
3587
+ columnNumber: 5
3588
+ }, this)
3589
+ ] }, void 0, true, {
3590
+ fileName: "../../hamr/src/react-id/Id.tsx",
3591
+ lineNumber: 35,
3592
+ columnNumber: 3
3593
+ }, this);
3594
+ };
3595
+
3596
+ // ../../hamr/src/react-data-designer/RelationEditor.tsx
3597
+ import { jsxDEV as jsxDEV15 } from "react/jsx-dev-runtime";
3598
+ var RelationEditor = (props) => {
3599
+ const seen = /* @__PURE__ */ new Set();
3600
+ const data = Object.entries(props.data.relations).sort(([_, a2], [__, b2]) => b2.length - a2.length).filter(([head, tail]) => {
3601
+ if (seen.has(head))
3602
+ return false;
3603
+ seen.add(head);
3604
+ for (const tailElement of tail) {
3605
+ seen.add(tailElement);
3606
+ }
3607
+ return true;
3608
+ });
3609
+ return /* @__PURE__ */ jsxDEV15("article", { className: RelationEditor_module_default.class, children: data.map(([head, tail]) => /* @__PURE__ */ jsxDEV15("section", { children: [
3610
+ /* @__PURE__ */ jsxDEV15("span", { children: /* @__PURE__ */ jsxDEV15(Id, { id: head }, void 0, false, {
3611
+ fileName: "../../hamr/src/react-data-designer/RelationEditor.tsx",
3612
+ lineNumber: 26,
3613
+ columnNumber: 7
3614
+ }, this) }, void 0, false, {
3615
+ fileName: "../../hamr/src/react-data-designer/RelationEditor.tsx",
3616
+ lineNumber: 25,
3617
+ columnNumber: 6
3618
+ }, this),
3619
+ ":",
3620
+ /* @__PURE__ */ jsxDEV15("span", { children: tail.map((child) => /* @__PURE__ */ jsxDEV15(Id, { id: child }, void 0, false, {
3621
+ fileName: "../../hamr/src/react-data-designer/RelationEditor.tsx",
3622
+ lineNumber: 31,
3623
+ columnNumber: 8
3624
+ }, this)) }, void 0, false, {
3625
+ fileName: "../../hamr/src/react-data-designer/RelationEditor.tsx",
3626
+ lineNumber: 29,
3627
+ columnNumber: 6
3628
+ }, this)
3629
+ ] }, void 0, true, {
3630
+ fileName: "../../hamr/src/react-data-designer/RelationEditor.tsx",
3631
+ lineNumber: 24,
3632
+ columnNumber: 5
3633
+ }, this)) }, void 0, false, {
3634
+ fileName: "../../hamr/src/react-data-designer/RelationEditor.tsx",
3635
+ lineNumber: 21,
3636
+ columnNumber: 3
3637
+ }, this);
3638
+ };
3639
+
3120
3640
  // ../src/react-devtools/StateEditor.tsx
3121
- import { jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
3641
+ import { jsxDEV as jsxDEV16 } from "react/jsx-dev-runtime";
3122
3642
  var StateEditor = ({ token }) => {
3123
3643
  const [data, set] = useIO(token);
3124
- return isJson(data) ? /* @__PURE__ */ jsxDEV14(JsonEditor, { data, set, schema: true }, void 0, false, {
3644
+ return isJson(data) ? /* @__PURE__ */ jsxDEV16(JsonEditor, { data, set, schema: true }, void 0, false, {
3645
+ fileName: "../src/react-devtools/StateEditor.tsx",
3646
+ lineNumber: 17,
3647
+ columnNumber: 3
3648
+ }, this) : data instanceof Join ? /* @__PURE__ */ jsxDEV16(RelationEditor, { data, set }, void 0, false, {
3125
3649
  fileName: "../src/react-devtools/StateEditor.tsx",
3126
- lineNumber: 15,
3650
+ lineNumber: 19,
3127
3651
  columnNumber: 3
3128
- }, this) : /* @__PURE__ */ jsxDEV14("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV14(
3652
+ }, this) : /* @__PURE__ */ jsxDEV16("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV16(
3129
3653
  ElasticInput,
3130
3654
  {
3131
3655
  value: data instanceof Set ? `Set { ${JSON.stringify([...data]).slice(1, -1)} }` : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + fallback(() => JSON.stringify(data), `?`),
@@ -3135,19 +3659,19 @@ var StateEditor = ({ token }) => {
3135
3659
  false,
3136
3660
  {
3137
3661
  fileName: "../src/react-devtools/StateEditor.tsx",
3138
- lineNumber: 18,
3662
+ lineNumber: 22,
3139
3663
  columnNumber: 4
3140
3664
  },
3141
3665
  this
3142
3666
  ) }, void 0, false, {
3143
3667
  fileName: "../src/react-devtools/StateEditor.tsx",
3144
- lineNumber: 17,
3668
+ lineNumber: 21,
3145
3669
  columnNumber: 3
3146
3670
  }, this);
3147
3671
  };
3148
3672
  var ReadonlySelectorViewer = ({ token }) => {
3149
3673
  const data = useO(token);
3150
- return isJson(data) ? /* @__PURE__ */ jsxDEV14(
3674
+ return isJson(data) ? /* @__PURE__ */ jsxDEV16(
3151
3675
  JsonEditor,
3152
3676
  {
3153
3677
  data,
@@ -3159,11 +3683,11 @@ var ReadonlySelectorViewer = ({ token }) => {
3159
3683
  false,
3160
3684
  {
3161
3685
  fileName: "../src/react-devtools/StateEditor.tsx",
3162
- lineNumber: 39,
3686
+ lineNumber: 43,
3163
3687
  columnNumber: 3
3164
3688
  },
3165
3689
  this
3166
- ) : /* @__PURE__ */ jsxDEV14("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV14(
3690
+ ) : /* @__PURE__ */ jsxDEV16("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV16(
3167
3691
  ElasticInput,
3168
3692
  {
3169
3693
  value: data instanceof Set ? `Set ` + JSON.stringify([...data]) : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
@@ -3173,33 +3697,33 @@ var ReadonlySelectorViewer = ({ token }) => {
3173
3697
  false,
3174
3698
  {
3175
3699
  fileName: "../src/react-devtools/StateEditor.tsx",
3176
- lineNumber: 47,
3700
+ lineNumber: 51,
3177
3701
  columnNumber: 4
3178
3702
  },
3179
3703
  this
3180
3704
  ) }, void 0, false, {
3181
3705
  fileName: "../src/react-devtools/StateEditor.tsx",
3182
- lineNumber: 46,
3706
+ lineNumber: 50,
3183
3707
  columnNumber: 3
3184
3708
  }, this);
3185
3709
  };
3186
3710
  var StoreEditor = ({ token }) => {
3187
3711
  if (token.type === `readonly_selector`) {
3188
- return /* @__PURE__ */ jsxDEV14(ReadonlySelectorViewer, { token }, void 0, false, {
3712
+ return /* @__PURE__ */ jsxDEV16(ReadonlySelectorViewer, { token }, void 0, false, {
3189
3713
  fileName: "../src/react-devtools/StateEditor.tsx",
3190
- lineNumber: 67,
3714
+ lineNumber: 71,
3191
3715
  columnNumber: 10
3192
3716
  }, this);
3193
3717
  }
3194
- return /* @__PURE__ */ jsxDEV14(StateEditor, { token }, void 0, false, {
3718
+ return /* @__PURE__ */ jsxDEV16(StateEditor, { token }, void 0, false, {
3195
3719
  fileName: "../src/react-devtools/StateEditor.tsx",
3196
- lineNumber: 69,
3720
+ lineNumber: 73,
3197
3721
  columnNumber: 9
3198
3722
  }, this);
3199
3723
  };
3200
3724
 
3201
3725
  // ../src/react-devtools/StateIndex.tsx
3202
- import { Fragment as Fragment4, jsxDEV as jsxDEV15 } from "react/jsx-dev-runtime";
3726
+ import { Fragment as Fragment4, jsxDEV as jsxDEV17 } from "react/jsx-dev-runtime";
3203
3727
  var findStateTypeState = selectorFamily({
3204
3728
  key: `\u{1F441}\u200D\u{1F5E8} State Type`,
3205
3729
  get: (token) => ({ get }) => {
@@ -3222,9 +3746,9 @@ var StateIndexLeafNode = ({ node, isOpenState, typeState }) => {
3222
3746
  const state = useO2(node);
3223
3747
  const stateType = useO2(typeState);
3224
3748
  const isPrimitive = Boolean(primitiveRefinery.refine(state));
3225
- return /* @__PURE__ */ jsxDEV15(Fragment4, { children: [
3226
- /* @__PURE__ */ jsxDEV15("header", { children: [
3227
- /* @__PURE__ */ jsxDEV15(
3749
+ return /* @__PURE__ */ jsxDEV17(Fragment4, { children: [
3750
+ /* @__PURE__ */ jsxDEV17("header", { children: [
3751
+ /* @__PURE__ */ jsxDEV17(
3228
3752
  button.OpenClose,
3229
3753
  {
3230
3754
  isOpen: isOpen && !isPrimitive,
@@ -3235,29 +3759,29 @@ var StateIndexLeafNode = ({ node, isOpenState, typeState }) => {
3235
3759
  false,
3236
3760
  {
3237
3761
  fileName: "../src/react-devtools/StateIndex.tsx",
3238
- lineNumber: 45,
3762
+ lineNumber: 48,
3239
3763
  columnNumber: 5
3240
3764
  },
3241
3765
  this
3242
3766
  ),
3243
- /* @__PURE__ */ jsxDEV15(
3767
+ /* @__PURE__ */ jsxDEV17(
3244
3768
  "label",
3245
3769
  {
3246
3770
  onClick: () => console.log(node, getState(node)),
3247
3771
  onKeyUp: () => console.log(node, getState(node)),
3248
3772
  children: [
3249
- /* @__PURE__ */ jsxDEV15("h2", { children: (_b = (_a2 = node.family) == null ? void 0 : _a2.subKey) != null ? _b : node.key }, void 0, false, {
3773
+ /* @__PURE__ */ jsxDEV17("h2", { children: (_b = (_a2 = node.family) == null ? void 0 : _a2.subKey) != null ? _b : node.key }, void 0, false, {
3250
3774
  fileName: "../src/react-devtools/StateIndex.tsx",
3251
- lineNumber: 54,
3775
+ lineNumber: 57,
3252
3776
  columnNumber: 6
3253
3777
  }, this),
3254
- /* @__PURE__ */ jsxDEV15("span", { className: "type detail", children: [
3778
+ /* @__PURE__ */ jsxDEV17("span", { className: "type detail", children: [
3255
3779
  "(",
3256
3780
  stateType,
3257
3781
  ")"
3258
3782
  ] }, void 0, true, {
3259
3783
  fileName: "../src/react-devtools/StateIndex.tsx",
3260
- lineNumber: 55,
3784
+ lineNumber: 58,
3261
3785
  columnNumber: 6
3262
3786
  }, this)
3263
3787
  ]
@@ -3266,33 +3790,33 @@ var StateIndexLeafNode = ({ node, isOpenState, typeState }) => {
3266
3790
  true,
3267
3791
  {
3268
3792
  fileName: "../src/react-devtools/StateIndex.tsx",
3269
- lineNumber: 50,
3793
+ lineNumber: 53,
3270
3794
  columnNumber: 5
3271
3795
  },
3272
3796
  this
3273
3797
  ),
3274
- isPrimitive ? /* @__PURE__ */ jsxDEV15(StoreEditor, { token: node }, void 0, false, {
3798
+ isPrimitive ? /* @__PURE__ */ jsxDEV17(StoreEditor, { token: node }, void 0, false, {
3275
3799
  fileName: "../src/react-devtools/StateIndex.tsx",
3276
- lineNumber: 57,
3800
+ lineNumber: 60,
3277
3801
  columnNumber: 20
3278
3802
  }, this) : null
3279
3803
  ] }, void 0, true, {
3280
3804
  fileName: "../src/react-devtools/StateIndex.tsx",
3281
- lineNumber: 44,
3805
+ lineNumber: 47,
3282
3806
  columnNumber: 4
3283
3807
  }, this),
3284
- isOpen && !isPrimitive ? /* @__PURE__ */ jsxDEV15("main", { children: /* @__PURE__ */ jsxDEV15(StoreEditor, { token: node }, void 0, false, {
3808
+ isOpen && !isPrimitive ? /* @__PURE__ */ jsxDEV17("main", { children: /* @__PURE__ */ jsxDEV17(StoreEditor, { token: node }, void 0, false, {
3285
3809
  fileName: "../src/react-devtools/StateIndex.tsx",
3286
- lineNumber: 61,
3810
+ lineNumber: 64,
3287
3811
  columnNumber: 6
3288
3812
  }, this) }, void 0, false, {
3289
3813
  fileName: "../src/react-devtools/StateIndex.tsx",
3290
- lineNumber: 60,
3814
+ lineNumber: 63,
3291
3815
  columnNumber: 5
3292
3816
  }, this) : null
3293
3817
  ] }, void 0, true, {
3294
3818
  fileName: "../src/react-devtools/StateIndex.tsx",
3295
- lineNumber: 43,
3819
+ lineNumber: 46,
3296
3820
  columnNumber: 3
3297
3821
  }, this);
3298
3822
  };
@@ -3302,35 +3826,35 @@ var StateIndexTreeNode = ({ node, isOpenState }) => {
3302
3826
  findViewIsOpenState(key);
3303
3827
  findStateTypeState(childNode);
3304
3828
  });
3305
- return /* @__PURE__ */ jsxDEV15(Fragment4, { children: [
3306
- /* @__PURE__ */ jsxDEV15("header", { children: [
3307
- /* @__PURE__ */ jsxDEV15(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3829
+ return /* @__PURE__ */ jsxDEV17(Fragment4, { children: [
3830
+ /* @__PURE__ */ jsxDEV17("header", { children: [
3831
+ /* @__PURE__ */ jsxDEV17(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3308
3832
  fileName: "../src/react-devtools/StateIndex.tsx",
3309
- lineNumber: 81,
3833
+ lineNumber: 84,
3310
3834
  columnNumber: 5
3311
3835
  }, this),
3312
- /* @__PURE__ */ jsxDEV15("label", { children: [
3313
- /* @__PURE__ */ jsxDEV15("h2", { children: node.key }, void 0, false, {
3836
+ /* @__PURE__ */ jsxDEV17("label", { children: [
3837
+ /* @__PURE__ */ jsxDEV17("h2", { children: node.key }, void 0, false, {
3314
3838
  fileName: "../src/react-devtools/StateIndex.tsx",
3315
- lineNumber: 83,
3839
+ lineNumber: 86,
3316
3840
  columnNumber: 6
3317
3841
  }, this),
3318
- /* @__PURE__ */ jsxDEV15("span", { className: "type detail", children: " (family)" }, void 0, false, {
3842
+ /* @__PURE__ */ jsxDEV17("span", { className: "type detail", children: " (family)" }, void 0, false, {
3319
3843
  fileName: "../src/react-devtools/StateIndex.tsx",
3320
- lineNumber: 84,
3844
+ lineNumber: 87,
3321
3845
  columnNumber: 6
3322
3846
  }, this)
3323
3847
  ] }, void 0, true, {
3324
3848
  fileName: "../src/react-devtools/StateIndex.tsx",
3325
- lineNumber: 82,
3849
+ lineNumber: 85,
3326
3850
  columnNumber: 5
3327
3851
  }, this)
3328
3852
  ] }, void 0, true, {
3329
3853
  fileName: "../src/react-devtools/StateIndex.tsx",
3330
- lineNumber: 80,
3854
+ lineNumber: 83,
3331
3855
  columnNumber: 4
3332
3856
  }, this),
3333
- isOpen ? Object.entries(node.familyMembers).map(([key, childNode]) => /* @__PURE__ */ jsxDEV15(
3857
+ isOpen ? Object.entries(node.familyMembers).map(([key, childNode]) => /* @__PURE__ */ jsxDEV17(
3334
3858
  StateIndexNode,
3335
3859
  {
3336
3860
  node: childNode,
@@ -3341,14 +3865,14 @@ var StateIndexTreeNode = ({ node, isOpenState }) => {
3341
3865
  false,
3342
3866
  {
3343
3867
  fileName: "../src/react-devtools/StateIndex.tsx",
3344
- lineNumber: 89,
3868
+ lineNumber: 92,
3345
3869
  columnNumber: 7
3346
3870
  },
3347
3871
  this
3348
3872
  )) : null
3349
3873
  ] }, void 0, true, {
3350
3874
  fileName: "../src/react-devtools/StateIndex.tsx",
3351
- lineNumber: 79,
3875
+ lineNumber: 82,
3352
3876
  columnNumber: 3
3353
3877
  }, this);
3354
3878
  };
@@ -3356,7 +3880,7 @@ var StateIndexNode = ({ node, isOpenState, typeState }) => {
3356
3880
  if (node.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)) {
3357
3881
  return null;
3358
3882
  }
3359
- return /* @__PURE__ */ jsxDEV15("section", { className: "node state", children: `type` in node ? /* @__PURE__ */ jsxDEV15(
3883
+ return /* @__PURE__ */ jsxDEV17("section", { className: "node state", children: `type` in node ? /* @__PURE__ */ jsxDEV17(
3360
3884
  StateIndexLeafNode,
3361
3885
  {
3362
3886
  node,
@@ -3367,24 +3891,24 @@ var StateIndexNode = ({ node, isOpenState, typeState }) => {
3367
3891
  false,
3368
3892
  {
3369
3893
  fileName: "../src/react-devtools/StateIndex.tsx",
3370
- lineNumber: 114,
3894
+ lineNumber: 117,
3371
3895
  columnNumber: 5
3372
3896
  },
3373
3897
  this
3374
- ) : /* @__PURE__ */ jsxDEV15(StateIndexTreeNode, { node, isOpenState }, void 0, false, {
3898
+ ) : /* @__PURE__ */ jsxDEV17(StateIndexTreeNode, { node, isOpenState }, void 0, false, {
3375
3899
  fileName: "../src/react-devtools/StateIndex.tsx",
3376
- lineNumber: 120,
3900
+ lineNumber: 123,
3377
3901
  columnNumber: 5
3378
3902
  }, this) }, void 0, false, {
3379
3903
  fileName: "../src/react-devtools/StateIndex.tsx",
3380
- lineNumber: 112,
3904
+ lineNumber: 115,
3381
3905
  columnNumber: 3
3382
3906
  }, this);
3383
3907
  };
3384
3908
  var StateIndex = ({ tokenIndex }) => {
3385
3909
  const tokenIds = useO2(tokenIndex);
3386
- return /* @__PURE__ */ jsxDEV15("article", { className: "index state_index", children: Object.entries(tokenIds).filter(([key]) => !key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).sort().map(([key, node]) => {
3387
- return /* @__PURE__ */ jsxDEV15(
3910
+ return /* @__PURE__ */ jsxDEV17("article", { className: "index state_index", children: Object.entries(tokenIds).filter(([key]) => !key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).sort().map(([key, node]) => {
3911
+ return /* @__PURE__ */ jsxDEV17(
3388
3912
  StateIndexNode,
3389
3913
  {
3390
3914
  node,
@@ -3395,14 +3919,14 @@ var StateIndex = ({ tokenIndex }) => {
3395
3919
  false,
3396
3920
  {
3397
3921
  fileName: "../src/react-devtools/StateIndex.tsx",
3398
- lineNumber: 143,
3922
+ lineNumber: 146,
3399
3923
  columnNumber: 7
3400
3924
  },
3401
3925
  this
3402
3926
  );
3403
3927
  }) }, void 0, false, {
3404
3928
  fileName: "../src/react-devtools/StateIndex.tsx",
3405
- lineNumber: 137,
3929
+ lineNumber: 140,
3406
3930
  columnNumber: 3
3407
3931
  }, this);
3408
3932
  };
@@ -3416,16 +3940,16 @@ import { useIO as useIO3, useO as useO3 } from "atom.io/react";
3416
3940
  import { Fragment as Fragment6 } from "react";
3417
3941
 
3418
3942
  // ../src/react-devtools/Updates.tsx
3419
- import { Fragment as Fragment5, jsxDEV as jsxDEV16 } from "react/jsx-dev-runtime";
3943
+ import { Fragment as Fragment5, jsxDEV as jsxDEV18 } from "react/jsx-dev-runtime";
3420
3944
  var AtomUpdateFC = ({ atomUpdate }) => {
3421
- return /* @__PURE__ */ jsxDEV16(
3945
+ return /* @__PURE__ */ jsxDEV18(
3422
3946
  "article",
3423
3947
  {
3424
3948
  className: "node atom_update",
3425
3949
  onClick: () => console.log(atomUpdate),
3426
3950
  onKeyUp: () => console.log(atomUpdate),
3427
3951
  children: [
3428
- /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: [
3952
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail", children: [
3429
3953
  atomUpdate.key,
3430
3954
  ": "
3431
3955
  ] }, void 0, true, {
@@ -3433,7 +3957,7 @@ var AtomUpdateFC = ({ atomUpdate }) => {
3433
3957
  lineNumber: 20,
3434
3958
  columnNumber: 4
3435
3959
  }, this),
3436
- /* @__PURE__ */ jsxDEV16("span", { children: /* @__PURE__ */ jsxDEV16("span", { className: "summary", children: prettyJson.diff(atomUpdate.oldValue, atomUpdate.newValue).summary }, void 0, false, {
3960
+ /* @__PURE__ */ jsxDEV18("span", { children: /* @__PURE__ */ jsxDEV18("span", { className: "summary", children: prettyJson.diff(atomUpdate.oldValue, atomUpdate.newValue).summary }, void 0, false, {
3437
3961
  fileName: "../src/react-devtools/Updates.tsx",
3438
3962
  lineNumber: 22,
3439
3963
  columnNumber: 5
@@ -3455,8 +3979,8 @@ var AtomUpdateFC = ({ atomUpdate }) => {
3455
3979
  );
3456
3980
  };
3457
3981
  var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3458
- return /* @__PURE__ */ jsxDEV16("article", { className: "node transaction_update", children: [
3459
- /* @__PURE__ */ jsxDEV16("header", { children: /* @__PURE__ */ jsxDEV16("h4", { children: serialNumber }, void 0, false, {
3982
+ return /* @__PURE__ */ jsxDEV18("article", { className: "node transaction_update", children: [
3983
+ /* @__PURE__ */ jsxDEV18("header", { children: /* @__PURE__ */ jsxDEV18("h4", { children: serialNumber }, void 0, false, {
3460
3984
  fileName: "../src/react-devtools/Updates.tsx",
3461
3985
  lineNumber: 37,
3462
3986
  columnNumber: 5
@@ -3465,22 +3989,22 @@ var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3465
3989
  lineNumber: 36,
3466
3990
  columnNumber: 4
3467
3991
  }, this),
3468
- /* @__PURE__ */ jsxDEV16("main", { children: [
3469
- /* @__PURE__ */ jsxDEV16("section", { className: "transaction_params", children: [
3470
- /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: "params: " }, void 0, false, {
3992
+ /* @__PURE__ */ jsxDEV18("main", { children: [
3993
+ /* @__PURE__ */ jsxDEV18("section", { className: "transaction_params", children: [
3994
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail", children: "params: " }, void 0, false, {
3471
3995
  fileName: "../src/react-devtools/Updates.tsx",
3472
3996
  lineNumber: 41,
3473
3997
  columnNumber: 6
3474
3998
  }, this),
3475
3999
  transactionUpdate.params.map((param, index) => {
3476
- return /* @__PURE__ */ jsxDEV16(
4000
+ return /* @__PURE__ */ jsxDEV18(
3477
4001
  "article",
3478
4002
  {
3479
4003
  className: "node transaction_param",
3480
4004
  onClick: () => console.log(transactionUpdate),
3481
4005
  onKeyUp: () => console.log(transactionUpdate),
3482
4006
  children: [
3483
- /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: [
4007
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail", children: [
3484
4008
  discoverType(param),
3485
4009
  ": "
3486
4010
  ] }, void 0, true, {
@@ -3488,11 +4012,11 @@ var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3488
4012
  lineNumber: 50,
3489
4013
  columnNumber: 9
3490
4014
  }, this),
3491
- /* @__PURE__ */ jsxDEV16("span", { className: "summary", children: typeof param === `object` && `type` in param && `target` in param ? /* @__PURE__ */ jsxDEV16(Fragment5, { children: JSON.stringify(param.type) }, void 0, false, {
4015
+ /* @__PURE__ */ jsxDEV18("span", { className: "summary", children: typeof param === `object` && `type` in param && `target` in param ? /* @__PURE__ */ jsxDEV18(Fragment5, { children: JSON.stringify(param.type) }, void 0, false, {
3492
4016
  fileName: "../src/react-devtools/Updates.tsx",
3493
4017
  lineNumber: 55,
3494
4018
  columnNumber: 11
3495
- }, this) : /* @__PURE__ */ jsxDEV16(Fragment5, { children: JSON.stringify(param) }, void 0, false, {
4019
+ }, this) : /* @__PURE__ */ jsxDEV18(Fragment5, { children: JSON.stringify(param) }, void 0, false, {
3496
4020
  fileName: "../src/react-devtools/Updates.tsx",
3497
4021
  lineNumber: 57,
3498
4022
  columnNumber: 11
@@ -3518,18 +4042,18 @@ var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3518
4042
  lineNumber: 40,
3519
4043
  columnNumber: 5
3520
4044
  }, this),
3521
- /* @__PURE__ */ jsxDEV16("section", { className: "node transaction_output", children: [
3522
- /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: "output: " }, void 0, false, {
4045
+ /* @__PURE__ */ jsxDEV18("section", { className: "node transaction_output", children: [
4046
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail", children: "output: " }, void 0, false, {
3523
4047
  fileName: "../src/react-devtools/Updates.tsx",
3524
4048
  lineNumber: 65,
3525
4049
  columnNumber: 6
3526
4050
  }, this),
3527
- /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: discoverType(transactionUpdate.output) }, void 0, false, {
4051
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail", children: discoverType(transactionUpdate.output) }, void 0, false, {
3528
4052
  fileName: "../src/react-devtools/Updates.tsx",
3529
4053
  lineNumber: 66,
3530
4054
  columnNumber: 6
3531
4055
  }, this),
3532
- transactionUpdate.output ? /* @__PURE__ */ jsxDEV16("span", { className: "summary", children: [
4056
+ transactionUpdate.output ? /* @__PURE__ */ jsxDEV18("span", { className: "summary", children: [
3533
4057
  ": ",
3534
4058
  JSON.stringify(transactionUpdate.output)
3535
4059
  ] }, void 0, true, {
@@ -3542,14 +4066,14 @@ var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3542
4066
  lineNumber: 64,
3543
4067
  columnNumber: 5
3544
4068
  }, this),
3545
- /* @__PURE__ */ jsxDEV16("section", { className: "transaction_impact", children: [
3546
- /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: "impact: " }, void 0, false, {
4069
+ /* @__PURE__ */ jsxDEV18("section", { className: "transaction_impact", children: [
4070
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail", children: "impact: " }, void 0, false, {
3547
4071
  fileName: "../src/react-devtools/Updates.tsx",
3548
4072
  lineNumber: 76,
3549
4073
  columnNumber: 6
3550
4074
  }, this),
3551
4075
  transactionUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
3552
- return /* @__PURE__ */ jsxDEV16(
4076
+ return /* @__PURE__ */ jsxDEV18(
3553
4077
  article.AtomUpdate,
3554
4078
  {
3555
4079
  serialNumber: index,
@@ -3582,8 +4106,8 @@ var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3582
4106
  }, this);
3583
4107
  };
3584
4108
  var TimelineUpdateFC = ({ timelineUpdate }) => {
3585
- return /* @__PURE__ */ jsxDEV16("article", { className: "node timeline_update", children: [
3586
- /* @__PURE__ */ jsxDEV16("header", { children: /* @__PURE__ */ jsxDEV16("h4", { children: [
4109
+ return /* @__PURE__ */ jsxDEV18("article", { className: "node timeline_update", children: [
4110
+ /* @__PURE__ */ jsxDEV18("header", { children: /* @__PURE__ */ jsxDEV18("h4", { children: [
3587
4111
  timelineUpdate.timestamp,
3588
4112
  ": ",
3589
4113
  timelineUpdate.type,
@@ -3599,8 +4123,8 @@ var TimelineUpdateFC = ({ timelineUpdate }) => {
3599
4123
  lineNumber: 99,
3600
4124
  columnNumber: 4
3601
4125
  }, this),
3602
- /* @__PURE__ */ jsxDEV16("main", { children: timelineUpdate.type === `transaction_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
3603
- return /* @__PURE__ */ jsxDEV16(
4126
+ /* @__PURE__ */ jsxDEV18("main", { children: timelineUpdate.type === `transaction_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
4127
+ return /* @__PURE__ */ jsxDEV18(
3604
4128
  article.AtomUpdate,
3605
4129
  {
3606
4130
  serialNumber: index,
@@ -3616,7 +4140,7 @@ var TimelineUpdateFC = ({ timelineUpdate }) => {
3616
4140
  this
3617
4141
  );
3618
4142
  }) : timelineUpdate.type === `selector_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
3619
- return /* @__PURE__ */ jsxDEV16(
4143
+ return /* @__PURE__ */ jsxDEV18(
3620
4144
  article.AtomUpdate,
3621
4145
  {
3622
4146
  serialNumber: index,
@@ -3631,7 +4155,7 @@ var TimelineUpdateFC = ({ timelineUpdate }) => {
3631
4155
  },
3632
4156
  this
3633
4157
  );
3634
- }) : timelineUpdate.type === `atom_update` ? /* @__PURE__ */ jsxDEV16(
4158
+ }) : timelineUpdate.type === `atom_update` ? /* @__PURE__ */ jsxDEV18(
3635
4159
  article.AtomUpdate,
3636
4160
  {
3637
4161
  serialNumber: timelineUpdate.timestamp,
@@ -3663,53 +4187,53 @@ var article = {
3663
4187
  };
3664
4188
 
3665
4189
  // ../src/react-devtools/TimelineIndex.tsx
3666
- import { jsxDEV as jsxDEV17 } from "react/jsx-dev-runtime";
4190
+ import { jsxDEV as jsxDEV19 } from "react/jsx-dev-runtime";
3667
4191
  var YouAreHere = () => {
3668
- return /* @__PURE__ */ jsxDEV17("span", { className: "you_are_here", children: "you are here" }, void 0, false, {
4192
+ return /* @__PURE__ */ jsxDEV19("span", { className: "you_are_here", children: "you are here" }, void 0, false, {
3669
4193
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3670
4194
  lineNumber: 17,
3671
4195
  columnNumber: 9
3672
4196
  }, this);
3673
4197
  };
3674
4198
  var TimelineLog = ({ token, isOpenState, timelineState }) => {
3675
- const timeline = useO3(timelineState);
4199
+ const timeline2 = useO3(timelineState);
3676
4200
  const [isOpen, setIsOpen] = useIO3(isOpenState);
3677
- return /* @__PURE__ */ jsxDEV17("section", { className: "node timeline_log", children: [
3678
- /* @__PURE__ */ jsxDEV17("header", { children: [
3679
- /* @__PURE__ */ jsxDEV17(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
4201
+ return /* @__PURE__ */ jsxDEV19("section", { className: "node timeline_log", children: [
4202
+ /* @__PURE__ */ jsxDEV19("header", { children: [
4203
+ /* @__PURE__ */ jsxDEV19(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3680
4204
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3681
4205
  lineNumber: 31,
3682
4206
  columnNumber: 5
3683
4207
  }, this),
3684
- /* @__PURE__ */ jsxDEV17("label", { children: [
3685
- /* @__PURE__ */ jsxDEV17("h2", { children: token.key }, void 0, false, {
4208
+ /* @__PURE__ */ jsxDEV19("label", { children: [
4209
+ /* @__PURE__ */ jsxDEV19("h2", { children: token.key }, void 0, false, {
3686
4210
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3687
4211
  lineNumber: 33,
3688
4212
  columnNumber: 6
3689
4213
  }, this),
3690
- /* @__PURE__ */ jsxDEV17("span", { className: "detail length", children: [
4214
+ /* @__PURE__ */ jsxDEV19("span", { className: "detail length", children: [
3691
4215
  "(",
3692
- timeline.at,
4216
+ timeline2.at,
3693
4217
  "/",
3694
- timeline.history.length,
4218
+ timeline2.history.length,
3695
4219
  ")"
3696
4220
  ] }, void 0, true, {
3697
4221
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3698
4222
  lineNumber: 34,
3699
4223
  columnNumber: 6
3700
4224
  }, this),
3701
- /* @__PURE__ */ jsxDEV17("span", { className: "gap" }, void 0, false, {
4225
+ /* @__PURE__ */ jsxDEV19("span", { className: "gap" }, void 0, false, {
3702
4226
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3703
4227
  lineNumber: 37,
3704
4228
  columnNumber: 6
3705
4229
  }, this),
3706
- /* @__PURE__ */ jsxDEV17("nav", { children: [
3707
- /* @__PURE__ */ jsxDEV17(
4230
+ /* @__PURE__ */ jsxDEV19("nav", { children: [
4231
+ /* @__PURE__ */ jsxDEV19(
3708
4232
  "button",
3709
4233
  {
3710
4234
  type: "button",
3711
4235
  onClick: () => undo(token),
3712
- disabled: timeline.at === 0,
4236
+ disabled: timeline2.at === 0,
3713
4237
  children: "undo"
3714
4238
  },
3715
4239
  void 0,
@@ -3721,12 +4245,12 @@ var TimelineLog = ({ token, isOpenState, timelineState }) => {
3721
4245
  },
3722
4246
  this
3723
4247
  ),
3724
- /* @__PURE__ */ jsxDEV17(
4248
+ /* @__PURE__ */ jsxDEV19(
3725
4249
  "button",
3726
4250
  {
3727
4251
  type: "button",
3728
4252
  onClick: () => redo(token),
3729
- disabled: timeline.at === timeline.history.length,
4253
+ disabled: timeline2.at === timeline2.history.length,
3730
4254
  children: "redo"
3731
4255
  },
3732
4256
  void 0,
@@ -3753,23 +4277,23 @@ var TimelineLog = ({ token, isOpenState, timelineState }) => {
3753
4277
  lineNumber: 30,
3754
4278
  columnNumber: 4
3755
4279
  }, this),
3756
- isOpen ? /* @__PURE__ */ jsxDEV17("main", { children: timeline.history.map((update, index) => /* @__PURE__ */ jsxDEV17(Fragment6, { children: [
3757
- index === timeline.at ? /* @__PURE__ */ jsxDEV17(YouAreHere, {}, void 0, false, {
4280
+ isOpen ? /* @__PURE__ */ jsxDEV19("main", { children: timeline2.history.map((update, index) => /* @__PURE__ */ jsxDEV19(Fragment6, { children: [
4281
+ index === timeline2.at ? /* @__PURE__ */ jsxDEV19(YouAreHere, {}, void 0, false, {
3758
4282
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3759
4283
  lineNumber: 60,
3760
4284
  columnNumber: 33
3761
4285
  }, this) : null,
3762
- /* @__PURE__ */ jsxDEV17(article.TimelineUpdate, { timelineUpdate: update }, void 0, false, {
4286
+ /* @__PURE__ */ jsxDEV19(article.TimelineUpdate, { timelineUpdate: update }, void 0, false, {
3763
4287
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3764
4288
  lineNumber: 61,
3765
4289
  columnNumber: 8
3766
4290
  }, this),
3767
- index === timeline.history.length - 1 && timeline.at === timeline.history.length ? /* @__PURE__ */ jsxDEV17(YouAreHere, {}, void 0, false, {
4291
+ index === timeline2.history.length - 1 && timeline2.at === timeline2.history.length ? /* @__PURE__ */ jsxDEV19(YouAreHere, {}, void 0, false, {
3768
4292
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3769
4293
  lineNumber: 64,
3770
4294
  columnNumber: 9
3771
4295
  }, this) : null
3772
- ] }, update.key + index + timeline.at, true, {
4296
+ ] }, update.key + index + timeline2.at, true, {
3773
4297
  fileName: "../src/react-devtools/TimelineIndex.tsx",
3774
4298
  lineNumber: 59,
3775
4299
  columnNumber: 7
@@ -3786,8 +4310,8 @@ var TimelineLog = ({ token, isOpenState, timelineState }) => {
3786
4310
  };
3787
4311
  var TimelineIndex = () => {
3788
4312
  const tokenIds = useO3(timelineIndex);
3789
- return /* @__PURE__ */ jsxDEV17("article", { className: "index timeline_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
3790
- return /* @__PURE__ */ jsxDEV17(
4313
+ return /* @__PURE__ */ jsxDEV19("article", { className: "index timeline_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
4314
+ return /* @__PURE__ */ jsxDEV19(
3791
4315
  TimelineLog,
3792
4316
  {
3793
4317
  token,
@@ -3812,24 +4336,24 @@ var TimelineIndex = () => {
3812
4336
 
3813
4337
  // ../src/react-devtools/TransactionIndex.tsx
3814
4338
  import { useIO as useIO4, useO as useO4 } from "atom.io/react";
3815
- import { jsxDEV as jsxDEV18 } from "react/jsx-dev-runtime";
4339
+ import { jsxDEV as jsxDEV20 } from "react/jsx-dev-runtime";
3816
4340
  var TransactionLog = ({ token, isOpenState, logState }) => {
3817
4341
  const log = useO4(logState);
3818
4342
  const [isOpen, setIsOpen] = useIO4(isOpenState);
3819
- return /* @__PURE__ */ jsxDEV18("section", { className: "node transaction_log", children: [
3820
- /* @__PURE__ */ jsxDEV18("header", { children: [
3821
- /* @__PURE__ */ jsxDEV18(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
4343
+ return /* @__PURE__ */ jsxDEV20("section", { className: "node transaction_log", children: [
4344
+ /* @__PURE__ */ jsxDEV20("header", { children: [
4345
+ /* @__PURE__ */ jsxDEV20(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3822
4346
  fileName: "../src/react-devtools/TransactionIndex.tsx",
3823
4347
  lineNumber: 31,
3824
4348
  columnNumber: 5
3825
4349
  }, this),
3826
- /* @__PURE__ */ jsxDEV18("label", { children: [
3827
- /* @__PURE__ */ jsxDEV18("h2", { children: token.key }, void 0, false, {
4350
+ /* @__PURE__ */ jsxDEV20("label", { children: [
4351
+ /* @__PURE__ */ jsxDEV20("h2", { children: token.key }, void 0, false, {
3828
4352
  fileName: "../src/react-devtools/TransactionIndex.tsx",
3829
4353
  lineNumber: 33,
3830
4354
  columnNumber: 6
3831
4355
  }, this),
3832
- /* @__PURE__ */ jsxDEV18("span", { className: "detail length", children: [
4356
+ /* @__PURE__ */ jsxDEV20("span", { className: "detail length", children: [
3833
4357
  "(",
3834
4358
  log.length,
3835
4359
  ")"
@@ -3848,7 +4372,7 @@ var TransactionLog = ({ token, isOpenState, logState }) => {
3848
4372
  lineNumber: 30,
3849
4373
  columnNumber: 4
3850
4374
  }, this),
3851
- isOpen ? /* @__PURE__ */ jsxDEV18("main", { children: log.map((update, index) => /* @__PURE__ */ jsxDEV18(
4375
+ isOpen ? /* @__PURE__ */ jsxDEV20("main", { children: log.map((update, index) => /* @__PURE__ */ jsxDEV20(
3852
4376
  article.TransactionUpdate,
3853
4377
  {
3854
4378
  serialNumber: index,
@@ -3875,8 +4399,8 @@ var TransactionLog = ({ token, isOpenState, logState }) => {
3875
4399
  };
3876
4400
  var TransactionIndex = () => {
3877
4401
  const tokenIds = useO4(transactionIndex);
3878
- return /* @__PURE__ */ jsxDEV18("article", { className: "index transaction_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
3879
- return /* @__PURE__ */ jsxDEV18(
4402
+ return /* @__PURE__ */ jsxDEV20("article", { className: "index transaction_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
4403
+ return /* @__PURE__ */ jsxDEV20(
3880
4404
  TransactionLog,
3881
4405
  {
3882
4406
  token,
@@ -3900,15 +4424,15 @@ var TransactionIndex = () => {
3900
4424
  };
3901
4425
 
3902
4426
  // ../src/react-devtools/AtomIODevtools.tsx
3903
- import { Fragment as Fragment7, jsxDEV as jsxDEV19 } from "react/jsx-dev-runtime";
4427
+ import { Fragment as Fragment7, jsxDEV as jsxDEV21 } from "react/jsx-dev-runtime";
3904
4428
  var AtomIODevtools = () => {
3905
4429
  const constraintsRef = useRef4(null);
3906
4430
  const [devtoolsAreOpen, setDevtoolsAreOpen] = useIO5(devtoolsAreOpenState);
3907
4431
  const [devtoolsView, setDevtoolsView] = useIO5(devtoolsViewSelectionState);
3908
4432
  const devtoolsViewOptions = useO5(devtoolsViewOptionsState);
3909
4433
  const mouseHasMoved = useRef4(false);
3910
- return /* @__PURE__ */ jsxDEV19(Fragment7, { children: [
3911
- /* @__PURE__ */ jsxDEV19(
4434
+ return /* @__PURE__ */ jsxDEV21(Fragment7, { children: [
4435
+ /* @__PURE__ */ jsxDEV21(
3912
4436
  motion.span,
3913
4437
  {
3914
4438
  ref: constraintsRef,
@@ -3926,12 +4450,12 @@ var AtomIODevtools = () => {
3926
4450
  false,
3927
4451
  {
3928
4452
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3929
- lineNumber: 30,
4453
+ lineNumber: 29,
3930
4454
  columnNumber: 4
3931
4455
  },
3932
4456
  this
3933
4457
  ),
3934
- /* @__PURE__ */ jsxDEV19(
4458
+ /* @__PURE__ */ jsxDEV21(
3935
4459
  motion.main,
3936
4460
  {
3937
4461
  drag: true,
@@ -3945,14 +4469,14 @@ var AtomIODevtools = () => {
3945
4469
  maxWidth: 33
3946
4470
  },
3947
4471
  children: [
3948
- devtoolsAreOpen ? /* @__PURE__ */ jsxDEV19(Fragment7, { children: [
3949
- /* @__PURE__ */ jsxDEV19(motion.header, { children: [
3950
- /* @__PURE__ */ jsxDEV19("h1", { children: "atom.io" }, void 0, false, {
4472
+ devtoolsAreOpen ? /* @__PURE__ */ jsxDEV21(Fragment7, { children: [
4473
+ /* @__PURE__ */ jsxDEV21(motion.header, { children: [
4474
+ /* @__PURE__ */ jsxDEV21("h1", { children: "atom.io" }, void 0, false, {
3951
4475
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3952
- lineNumber: 61,
4476
+ lineNumber: 60,
3953
4477
  columnNumber: 8
3954
4478
  }, this),
3955
- /* @__PURE__ */ jsxDEV19("nav", { children: devtoolsViewOptions.map((viewOption) => /* @__PURE__ */ jsxDEV19(
4479
+ /* @__PURE__ */ jsxDEV21("nav", { children: devtoolsViewOptions.map((viewOption) => /* @__PURE__ */ jsxDEV21(
3956
4480
  "button",
3957
4481
  {
3958
4482
  type: "button",
@@ -3965,51 +4489,51 @@ var AtomIODevtools = () => {
3965
4489
  false,
3966
4490
  {
3967
4491
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3968
- lineNumber: 64,
4492
+ lineNumber: 63,
3969
4493
  columnNumber: 10
3970
4494
  },
3971
4495
  this
3972
4496
  )) }, void 0, false, {
3973
4497
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3974
- lineNumber: 62,
4498
+ lineNumber: 61,
3975
4499
  columnNumber: 8
3976
4500
  }, this)
3977
4501
  ] }, void 0, true, {
3978
4502
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3979
- lineNumber: 60,
4503
+ lineNumber: 59,
3980
4504
  columnNumber: 7
3981
4505
  }, this),
3982
- /* @__PURE__ */ jsxDEV19(motion.main, { children: /* @__PURE__ */ jsxDEV19(LayoutGroup, { children: devtoolsView === `atoms` ? /* @__PURE__ */ jsxDEV19(StateIndex, { tokenIndex: atomIndex }, void 0, false, {
4506
+ /* @__PURE__ */ jsxDEV21(motion.main, { children: /* @__PURE__ */ jsxDEV21(LayoutGroup, { children: devtoolsView === `atoms` ? /* @__PURE__ */ jsxDEV21(StateIndex, { tokenIndex: atomIndex }, void 0, false, {
3983
4507
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3984
- lineNumber: 79,
4508
+ lineNumber: 78,
3985
4509
  columnNumber: 10
3986
- }, this) : devtoolsView === `selectors` ? /* @__PURE__ */ jsxDEV19(StateIndex, { tokenIndex: selectorIndex }, void 0, false, {
4510
+ }, this) : devtoolsView === `selectors` ? /* @__PURE__ */ jsxDEV21(StateIndex, { tokenIndex: selectorIndex }, void 0, false, {
3987
4511
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3988
- lineNumber: 81,
4512
+ lineNumber: 80,
3989
4513
  columnNumber: 10
3990
- }, this) : devtoolsView === `transactions` ? /* @__PURE__ */ jsxDEV19(TransactionIndex, {}, void 0, false, {
4514
+ }, this) : devtoolsView === `transactions` ? /* @__PURE__ */ jsxDEV21(TransactionIndex, {}, void 0, false, {
3991
4515
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3992
- lineNumber: 83,
4516
+ lineNumber: 82,
3993
4517
  columnNumber: 10
3994
- }, this) : devtoolsView === `timelines` ? /* @__PURE__ */ jsxDEV19(TimelineIndex, {}, void 0, false, {
4518
+ }, this) : devtoolsView === `timelines` ? /* @__PURE__ */ jsxDEV21(TimelineIndex, {}, void 0, false, {
3995
4519
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
3996
- lineNumber: 85,
4520
+ lineNumber: 84,
3997
4521
  columnNumber: 10
3998
4522
  }, this) : null }, void 0, false, {
3999
4523
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4000
- lineNumber: 77,
4524
+ lineNumber: 76,
4001
4525
  columnNumber: 8
4002
4526
  }, this) }, void 0, false, {
4003
4527
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4004
- lineNumber: 76,
4528
+ lineNumber: 75,
4005
4529
  columnNumber: 7
4006
4530
  }, this)
4007
4531
  ] }, void 0, true, {
4008
4532
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4009
- lineNumber: 59,
4533
+ lineNumber: 58,
4010
4534
  columnNumber: 6
4011
4535
  }, this) : null,
4012
- /* @__PURE__ */ jsxDEV19("footer", { children: /* @__PURE__ */ jsxDEV19(
4536
+ /* @__PURE__ */ jsxDEV21("footer", { children: /* @__PURE__ */ jsxDEV21(
4013
4537
  "button",
4014
4538
  {
4015
4539
  type: "button",
@@ -4026,13 +4550,13 @@ var AtomIODevtools = () => {
4026
4550
  false,
4027
4551
  {
4028
4552
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4029
- lineNumber: 92,
4553
+ lineNumber: 91,
4030
4554
  columnNumber: 6
4031
4555
  },
4032
4556
  this
4033
4557
  ) }, void 0, false, {
4034
4558
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4035
- lineNumber: 91,
4559
+ lineNumber: 90,
4036
4560
  columnNumber: 5
4037
4561
  }, this)
4038
4562
  ]
@@ -4041,14 +4565,14 @@ var AtomIODevtools = () => {
4041
4565
  true,
4042
4566
  {
4043
4567
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4044
- lineNumber: 42,
4568
+ lineNumber: 41,
4045
4569
  columnNumber: 4
4046
4570
  },
4047
4571
  this
4048
4572
  )
4049
4573
  ] }, void 0, true, {
4050
4574
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
4051
- lineNumber: 29,
4575
+ lineNumber: 28,
4052
4576
  columnNumber: 3
4053
4577
  }, this);
4054
4578
  };