atom.io 0.6.5 → 0.6.7

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 (72) hide show
  1. package/README.md +32 -78
  2. package/dist/index.d.mts +11 -43
  3. package/dist/index.d.ts +11 -43
  4. package/dist/index.js +111 -291
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +108 -278
  7. package/dist/index.mjs.map +1 -1
  8. package/introspection/dist/index.d.mts +273 -0
  9. package/introspection/dist/index.d.ts +273 -0
  10. package/introspection/dist/index.js +350 -0
  11. package/introspection/dist/index.js.map +1 -0
  12. package/introspection/dist/index.mjs +327 -0
  13. package/introspection/dist/index.mjs.map +1 -0
  14. package/introspection/package.json +15 -0
  15. package/package.json +22 -12
  16. package/react-devtools/dist/index.css +22 -5
  17. package/react-devtools/dist/index.css.map +1 -1
  18. package/react-devtools/dist/index.d.mts +347 -10
  19. package/react-devtools/dist/index.d.ts +347 -10
  20. package/react-devtools/dist/index.js +2743 -696
  21. package/react-devtools/dist/index.js.map +1 -1
  22. package/react-devtools/dist/index.mjs +2739 -701
  23. package/react-devtools/dist/index.mjs.map +1 -1
  24. package/src/internal/atom-internal.ts +5 -6
  25. package/src/internal/get.ts +7 -9
  26. package/src/internal/index.ts +0 -1
  27. package/src/internal/operation.ts +15 -21
  28. package/src/internal/selector/create-read-write-selector.ts +8 -4
  29. package/src/internal/selector/create-readonly-selector.ts +1 -7
  30. package/src/internal/selector-internal.ts +1 -3
  31. package/src/internal/set.ts +1 -4
  32. package/src/internal/store.ts +22 -24
  33. package/src/internal/subscribe-internal.ts +7 -1
  34. package/src/internal/time-travel-internal.ts +2 -0
  35. package/src/internal/timeline/add-atom-to-timeline.ts +11 -12
  36. package/src/internal/timeline-internal.ts +6 -4
  37. package/src/internal/transaction/apply-transaction.ts +9 -6
  38. package/src/internal/transaction/build-transaction.ts +6 -6
  39. package/src/internal/transaction-internal.ts +1 -7
  40. package/src/introspection/attach-atom-index.ts +73 -0
  41. package/src/introspection/attach-introspection-states.ts +42 -0
  42. package/src/introspection/attach-selector-index.ts +77 -0
  43. package/src/introspection/attach-timeline-family.ts +59 -0
  44. package/src/introspection/attach-timeline-index.ts +36 -0
  45. package/src/introspection/attach-transaction-index.ts +38 -0
  46. package/src/introspection/attach-transaction-logs.ts +40 -0
  47. package/src/introspection/index.ts +20 -0
  48. package/src/react-devtools/AtomIODevtools.tsx +97 -97
  49. package/src/react-devtools/Button.tsx +24 -0
  50. package/src/react-devtools/StateEditor.tsx +14 -16
  51. package/src/react-devtools/StateIndex.tsx +153 -0
  52. package/src/react-devtools/TimelineIndex.tsx +92 -0
  53. package/src/react-devtools/TransactionIndex.tsx +70 -0
  54. package/src/react-devtools/Updates.tsx +145 -0
  55. package/src/react-devtools/devtools.scss +196 -15
  56. package/src/react-devtools/index.ts +71 -0
  57. package/src/react-explorer/AtomIOExplorer.tsx +3 -4
  58. package/src/react-explorer/explorer-states.ts +1 -1
  59. package/src/react-explorer/space-states.ts +3 -1
  60. package/src/react-explorer/view-states.ts +0 -2
  61. package/realtime-testing/dist/index.d.mts +0 -49
  62. package/realtime-testing/dist/index.d.ts +0 -49
  63. package/realtime-testing/dist/index.js +0 -165
  64. package/realtime-testing/dist/index.js.map +0 -1
  65. package/realtime-testing/dist/index.mjs +0 -129
  66. package/realtime-testing/dist/index.mjs.map +0 -1
  67. package/src/internal/meta/attach-meta.ts +0 -17
  68. package/src/internal/meta/index.ts +0 -4
  69. package/src/internal/meta/meta-state.ts +0 -135
  70. package/src/internal/meta/meta-timelines.ts +0 -1
  71. package/src/internal/meta/meta-transactions.ts +0 -1
  72. package/src/react-devtools/TokenList.tsx +0 -61
@@ -19,28 +19,18 @@ var __spreadValues = (a2, b2) => {
19
19
  var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
20
20
  var __restKey = (key) => typeof key === "symbol" ? key : key + "";
21
21
  var __objRest = (source, exclude) => {
22
- var target = {};
22
+ var target2 = {};
23
23
  for (var prop in source)
24
24
  if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
- target[prop] = source[prop];
25
+ target2[prop] = source[prop];
26
26
  if (source != null && __getOwnPropSymbols)
27
27
  for (var prop of __getOwnPropSymbols(source)) {
28
28
  if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
- target[prop] = source[prop];
29
+ target2[prop] = source[prop];
30
30
  }
31
- return target;
31
+ return target2;
32
32
  };
33
33
 
34
- // ../src/react-devtools/AtomIODevtools.tsx
35
- import { atom, __INTERNAL__ } from "atom.io";
36
- import { useI, useO, useIO } from "atom.io/react";
37
- import { LayoutGroup, motion, spring } from "framer-motion";
38
- import { useRef as useRef4 } from "react";
39
-
40
- // ../src/react-devtools/TokenList.tsx
41
- import { getState } from "atom.io";
42
- import { Fragment as Fragment3 } from "react";
43
-
44
34
  // ../../anvl/src/object/index.ts
45
35
  import { pipe as pipe3 } from "fp-ts/function";
46
36
 
@@ -59,11 +49,24 @@ var entriesToRecord = (entries) => Object.fromEntries(entries);
59
49
  // ../../anvl/src/object/mapObject.ts
60
50
  import { pipe } from "fp-ts/function";
61
51
 
52
+ // ../../anvl/src/array/venn.ts
53
+ var includesAll = (items) => (array) => {
54
+ for (const item of items) {
55
+ if (!array.includes(item))
56
+ return false;
57
+ }
58
+ return true;
59
+ };
60
+ var comprises = (items) => (array) => includesAll(items)(array) && includesAll(array)(items);
61
+
62
62
  // ../../anvl/src/array/index.ts
63
63
  var isArray = (isType) => (input) => Array.isArray(input) && input.every((item) => isType(item));
64
64
  var map = (f) => (a2) => a2.map(f);
65
65
  var every = (f = Boolean) => (a2) => a2.every(f);
66
66
  var allTrue = every((x) => x === true);
67
+ var addTo = (a2) => (x) => a2.includes(x) ? a2 : [...a2, x];
68
+ var isEmptyArray = (input) => Array.isArray(input) && input.length === 0;
69
+ var isOneOf = (...args) => (input) => args.includes(input);
67
70
 
68
71
  // ../../anvl/src/object/mapObject.ts
69
72
  var mapObject = (obj, fn) => pipe(
@@ -83,12 +86,11 @@ var pass = (...params) => (fn) => fn(...params);
83
86
  var raiseError = (message) => {
84
87
  throw new Error(message);
85
88
  };
86
- var attempt = (fn) => {
89
+ var fallback = (fn, fallbackValue) => {
87
90
  try {
88
- fn();
89
- return true;
91
+ return fn();
90
92
  } catch (_) {
91
- return false;
93
+ return fallbackValue;
92
94
  }
93
95
  };
94
96
 
@@ -100,6 +102,7 @@ var ifNullish = (alt) => (input) => input != null ? input : alt;
100
102
  // ../../anvl/src/object/refinement.ts
101
103
  var isNonNullObject = (input) => typeof input === `object` && input !== null;
102
104
  var isPlainObject = (input) => isNonNullObject(input) && Object.getPrototypeOf(input) === Object.prototype;
105
+ var isEmptyObject = (input) => isPlainObject(input) && Object.keys(input).length === 0;
103
106
  var isRecord = (isKey, isValue) => (input) => isPlainObject(input) && Object.entries(input).every(([k, v]) => isKey(k) && isValue(v));
104
107
  var hasProperties = (isValue, options = { allowExtraProperties: false }) => {
105
108
  const name = `{${recordToEntries(
@@ -130,192 +133,1573 @@ var doesExtend = (
130
133
  /* alias for hasExactProperties with allowExtraProperties */
131
134
  (isValue) => hasProperties(isValue, { allowExtraProperties: true })
132
135
  );
136
+ var hasExactProperties = (
137
+ /* alias for hasProperties without allowExtraProperties */
138
+ (isValue) => hasProperties(isValue, { allowExtraProperties: false })
139
+ );
140
+
141
+ // ../../anvl/src/object/sprawl.ts
142
+ var sprawl = (tree, inspector) => {
143
+ const walk = (path, node) => {
144
+ const inspect = (path2, node2) => {
145
+ const result2 = inspector(path2, node2);
146
+ if (result2)
147
+ return result2;
148
+ return null;
149
+ };
150
+ const result = inspect(path, node);
151
+ if ((result == null ? void 0 : result.jobComplete) || (result == null ? void 0 : result.pathComplete)) {
152
+ return result;
153
+ }
154
+ const childEntries = Array.isArray(node) ? node.map((v, i) => [i, v]) : isPlainObject(node) ? Object.entries(node) : [];
155
+ for (const [k, v] of childEntries) {
156
+ const subResult = walk([...path, k], v);
157
+ if (subResult == null ? void 0 : subResult.jobComplete) {
158
+ return subResult;
159
+ }
160
+ }
161
+ return {};
162
+ };
163
+ walk([], tree);
164
+ };
133
165
 
134
166
  // ../../anvl/src/object/index.ts
167
+ var treeShake = (shouldDiscard = isUndefined) => (obj) => {
168
+ const newObj = {};
169
+ const entries = Object.entries(obj);
170
+ entries.forEach(
171
+ ([key, val]) => !shouldDiscard(val, key) ? newObj[key] = val : null
172
+ );
173
+ return newObj;
174
+ };
135
175
  var delve = (obj, path) => {
136
176
  const found = path.reduce((acc, key) => acc == null ? void 0 : acc[key], obj);
137
177
  return found === void 0 ? new Error(`Not found`) : { found };
138
178
  };
139
179
 
140
- // ../../anvl/src/json/index.ts
141
- import { pipe as pipe4 } from "fp-ts/function";
142
-
143
- // ../../anvl/src/json/refine.ts
144
- import { isBoolean } from "fp-ts/boolean";
145
- import { isNumber } from "fp-ts/number";
146
- import { isString } from "fp-ts/string";
147
- var refineJsonType = (data) => data === null ? { type: `null`, data: null } : isBoolean(data) ? { type: `boolean`, data } : isNumber(data) ? { type: `number`, data } : isString(data) ? { type: `string`, data } : Array.isArray(data) ? { type: `array`, data } : isPlainObject(data) ? { type: `object`, data } : raiseError(
148
- 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.`
149
- );
150
- var isJson = (input) => {
151
- try {
152
- JSON.stringify(input);
153
- return true;
154
- } catch (e) {
155
- return false;
180
+ // ../../anvl/src/refinement/refinery.ts
181
+ var Refinery = class {
182
+ constructor(supported) {
183
+ this.supported = supported;
184
+ }
185
+ refine(input) {
186
+ for (const [key, refiner] of Object.entries(this.supported)) {
187
+ try {
188
+ if (
189
+ // @ts-expect-error that's the point
190
+ refiner(input) === true && refiner !== Boolean
191
+ ) {
192
+ return { type: key, data: input };
193
+ }
194
+ } catch (e) {
195
+ try {
196
+ if (input instanceof refiner) {
197
+ return { type: key, data: input };
198
+ }
199
+ } catch (e2) {
200
+ }
201
+ }
202
+ }
203
+ return null;
156
204
  }
157
205
  };
158
- var isPlainJson = (input) => attempt(() => isJson(input) && refineJsonType(input));
159
-
160
- // ../../anvl/src/json/index.ts
161
- var stringifyJson = (json) => JSON.stringify(json);
162
- var JSON_TYPE_NAMES = [
163
- `array`,
164
- `boolean`,
165
- `null`,
166
- `number`,
167
- `object`,
168
- `string`
169
- ];
170
- var JSON_DEFAULTS = {
171
- array: [],
172
- boolean: false,
173
- null: null,
174
- number: 0,
175
- object: {},
176
- string: ``
206
+ var jsonRefinery = new Refinery({
207
+ number: (input) => typeof input === `number`,
208
+ string: (input) => typeof input === `string`,
209
+ boolean: (input) => typeof input === `boolean`,
210
+ object: isPlainObject,
211
+ array: (input) => Array.isArray(input),
212
+ null: (input) => input === null
213
+ });
214
+ var discoverType = (input) => {
215
+ if (input === void 0) {
216
+ return `undefined`;
217
+ }
218
+ const refined = jsonRefinery.refine(input);
219
+ if (refined) {
220
+ return refined.type;
221
+ }
222
+ return Object.getPrototypeOf(input).constructor.name;
177
223
  };
178
224
 
179
- // ../../hamr/src/react-elastic-input/ElasticInput.tsx
180
- import {
181
- useLayoutEffect,
182
- useImperativeHandle,
183
- forwardRef,
184
- useRef,
185
- useState
186
- } from "react";
187
- import { jsxDEV } from "react/jsx-dev-runtime";
188
- var ElasticInput = forwardRef(function ElasticInputFC(props, ref) {
189
- var _a2, _b, _c, _d;
190
- const inputRef = useRef(null);
191
- const spanRef = useRef(null);
192
- const [inputWidth, setInputWidth] = useState(`auto`);
193
- useImperativeHandle(ref, () => ({
194
- focus: () => {
195
- var _a3;
196
- (_a3 = inputRef.current) == null ? void 0 : _a3.focus();
225
+ // ../../anvl/src/tree/differ.ts
226
+ function diffNumber(a2, b2) {
227
+ const sign = a2 < b2 ? `+` : `-`;
228
+ return {
229
+ summary: `${sign}${Math.abs(a2 - b2)} (${a2} \u2192 ${b2})`
230
+ };
231
+ }
232
+ function diffString(a2, b2) {
233
+ const sign = a2.length < b2.length ? `+` : `-`;
234
+ return {
235
+ summary: `${sign}${Math.abs(a2.length - b2.length)} ("${a2}" \u2192 "${b2}")`
236
+ };
237
+ }
238
+ function diffBoolean(a2, b2) {
239
+ return {
240
+ summary: `${a2} \u2192 ${b2}`
241
+ };
242
+ }
243
+ function diffObject(a2, b2, recurse) {
244
+ let summary = ``;
245
+ const added = [];
246
+ const removed = [];
247
+ const changed = [];
248
+ sprawl(a2, (path, nodeA) => {
249
+ let key;
250
+ for (key of path) {
251
+ const nodeB = b2[key];
252
+ if (nodeB === void 0) {
253
+ removed.push([key, JSON.stringify(nodeA)]);
254
+ } else {
255
+ const delta = recurse(nodeA, nodeB);
256
+ if (delta.summary !== `No Change`) {
257
+ changed.push([key, delta]);
258
+ }
259
+ }
197
260
  }
198
- }));
199
- const extraWidth = props.type === `number` ? 15 : 0;
200
- useLayoutEffect(() => {
201
- if (spanRef.current) {
202
- setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
203
- const interval = setInterval(() => {
204
- if (spanRef.current) {
205
- setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
261
+ });
262
+ sprawl(b2, (path, nodeB) => {
263
+ let key;
264
+ for (key of path) {
265
+ const nodeA = a2[key];
266
+ if (nodeA === void 0) {
267
+ added.push([key, JSON.stringify(nodeB)]);
268
+ }
269
+ }
270
+ });
271
+ summary = `\uFF5E${changed.length} \uFF0B${added.length} \uFF0D${removed.length}`;
272
+ return {
273
+ summary,
274
+ added,
275
+ removed,
276
+ changed
277
+ };
278
+ }
279
+ function diffArray(a2, b2, recurse) {
280
+ return diffObject(a2, b2, recurse);
281
+ }
282
+ var Differ = class {
283
+ constructor(leafRefinery, treeRefinery, diffFunctions) {
284
+ this.leafRefinery = leafRefinery;
285
+ this.treeRefinery = treeRefinery;
286
+ this.leafDiffers = {};
287
+ this.treeDiffers = {};
288
+ for (const key of Object.keys(leafRefinery.supported)) {
289
+ const diffFunction = diffFunctions[key];
290
+ this.leafDiffers[key] = diffFunction;
291
+ }
292
+ for (const key of Object.keys(treeRefinery.supported)) {
293
+ const diffFunction = diffFunctions[key];
294
+ this.treeDiffers[key] = diffFunction;
295
+ }
296
+ }
297
+ diff(a2, b2) {
298
+ var _a2, _b;
299
+ if (a2 === b2) {
300
+ return { summary: `No Change` };
301
+ }
302
+ try {
303
+ if (JSON.stringify(a2) === JSON.stringify(b2)) {
304
+ return { summary: `No Change` };
305
+ }
306
+ } catch (thrown) {
307
+ console.error(`Error stringifying`, a2, b2);
308
+ }
309
+ const aRefined = (_a2 = this.leafRefinery.refine(a2)) != null ? _a2 : this.treeRefinery.refine(a2);
310
+ const bRefined = (_b = this.leafRefinery.refine(b2)) != null ? _b : this.treeRefinery.refine(b2);
311
+ if (aRefined !== null && bRefined !== null) {
312
+ if (aRefined.type === bRefined.type) {
313
+ if (aRefined.type in this.leafDiffers) {
314
+ const delta = this.leafDiffers[aRefined.type](
315
+ aRefined.data,
316
+ bRefined.data
317
+ );
318
+ return delta;
206
319
  }
207
- }, 1e3);
208
- return () => clearInterval(interval);
320
+ if (aRefined.type in this.treeDiffers) {
321
+ const delta = this.treeDiffers[aRefined.type](
322
+ aRefined.data,
323
+ bRefined.data,
324
+ (x, y) => this.diff(x, y)
325
+ );
326
+ return delta;
327
+ }
328
+ }
209
329
  }
210
- }, [(_a2 = inputRef.current) == null ? void 0 : _a2.value, props.value]);
211
- return /* @__PURE__ */ jsxDEV("div", { style: { display: `inline-block`, position: `relative` }, children: [
212
- /* @__PURE__ */ jsxDEV(
213
- "input",
214
- __spreadProps(__spreadValues({}, props), {
215
- ref: inputRef,
216
- style: __spreadValues({
217
- padding: 0,
218
- borderRadius: 0,
219
- border: `none`,
220
- fontFamily: `inherit`,
221
- fontSize: `inherit`,
222
- width: inputWidth
223
- }, props.style)
224
- }),
225
- void 0,
226
- false,
227
- {
228
- fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
229
- lineNumber: 45,
230
- columnNumber: 4
231
- },
232
- this
233
- ),
234
- /* @__PURE__ */ jsxDEV(
235
- "span",
236
- {
237
- ref: spanRef,
238
- style: {
239
- padding: (_b = props.style) == null ? void 0 : _b.padding,
240
- position: `absolute`,
241
- visibility: `hidden`,
242
- // color: `red`,
243
- whiteSpace: `pre`,
244
- fontFamily: ((_c = props.style) == null ? void 0 : _c.fontFamily) || `inherit`,
245
- fontSize: ((_d = props.style) == null ? void 0 : _d.fontSize) || `inherit`
246
- },
247
- children: props.value
248
- },
249
- void 0,
250
- false,
251
- {
252
- fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
253
- lineNumber: 58,
254
- columnNumber: 4
255
- },
256
- this
257
- )
258
- ] }, void 0, true, {
259
- fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
260
- lineNumber: 44,
261
- columnNumber: 3
262
- }, this);
263
- });
264
-
265
- // ../../hamr/src/react-elastic-input/NumberInput.tsx
266
- import { pipe as pipe5 } from "fp-ts/function";
267
- import { useState as useState2, useId, useRef as useRef2 } from "react";
330
+ const typeA = discoverType(a2);
331
+ const typeB = discoverType(b2);
332
+ if (typeA === typeB) {
333
+ return {
334
+ summary: `${typeA} \u2192 ${typeB}`
335
+ };
336
+ }
337
+ return {
338
+ summary: `Type change: ${typeA} \u2192 ${typeB}`
339
+ };
340
+ }
341
+ };
268
342
 
269
- // ../../anvl/src/number/clamp.ts
270
- var clampInto = (min, max) => (value) => value < min ? min : value > max ? max : value;
343
+ // ../../anvl/src/string/capitalize.ts
344
+ var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
271
345
 
272
- // ../../hamr/src/react-elastic-input/NumberInput.tsx
273
- import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
274
- function round(value, decimalPlaces) {
275
- if (decimalPlaces === void 0)
276
- return value;
277
- const factor = Math.pow(10, decimalPlaces);
278
- return Math.round(value * factor) / factor;
346
+ // ../src/internal/get.ts
347
+ var computeSelectorState = (selector) => selector.get();
348
+ function lookup(key, store) {
349
+ const core = target(store);
350
+ const type = core.atoms.has(key) ? `atom` : core.selectors.has(key) ? `selector` : `readonly_selector`;
351
+ return { key, type };
279
352
  }
280
- var VALID_NON_NUMBERS = [``, `-`, `.`, `-.`];
281
- var isValidNonNumber = (input) => VALID_NON_NUMBERS.includes(input);
282
- var VALID_NON_NUMBER_INTERPRETATIONS = {
283
- "": null,
284
- "-": 0,
285
- ".": 0,
286
- "-.": 0
353
+ function withdraw(token, store) {
354
+ var _a2, _b, _c, _d, _e;
355
+ const core = target(store);
356
+ 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;
357
+ }
358
+ function deposit(state) {
359
+ return __spreadValues({
360
+ key: state.key,
361
+ type: state.type
362
+ }, `family` in state && { family: state.family });
363
+ }
364
+ var getState__INTERNAL = (state, store = IMPLICIT.STORE) => {
365
+ var _a2, _b, _c;
366
+ if (isValueCached(state.key, store)) {
367
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`>> read "${state.key}"`);
368
+ return readCachedValue(state.key, store);
369
+ }
370
+ if (state.type !== `atom`) {
371
+ (_b = store.config.logger) == null ? void 0 : _b.info(`-> calc "${state.key}"`);
372
+ return computeSelectorState(state);
373
+ }
374
+ (_c = store.config.logger) == null ? void 0 : _c.error(
375
+ `Attempted to get atom "${state.key}", which was never initialized in store "${store.config.name}".`
376
+ );
377
+ return state.default;
287
378
  };
288
- var isDecimalInProgress = (input) => input === `0` || !isNaN(Number(input)) && input.includes(`.`);
289
- var textToValue = (input, allowDecimal) => {
290
- if (isValidNonNumber(input))
291
- return VALID_NON_NUMBER_INTERPRETATIONS[input];
292
- return allowDecimal ? parseFloat(input) : Math.round(parseFloat(input));
379
+
380
+ // ../src/internal/is-default.ts
381
+ var isAtomDefault = (key, store = IMPLICIT.STORE) => {
382
+ const core = target(store);
383
+ return core.atomsThatAreDefault.has(key);
293
384
  };
294
- var DEFAULT_NUMBER_CONSTRAINTS = {
295
- max: Infinity,
296
- min: -Infinity,
297
- decimalPlaces: 100,
298
- nullable: true
385
+ var markAtomAsDefault = (key, store = IMPLICIT.STORE) => {
386
+ const core = target(store);
387
+ core.atomsThatAreDefault = new Set(core.atomsThatAreDefault).add(key);
299
388
  };
300
- var initRefinery = (constraints) => (input) => {
301
- if (input === null && constraints.nullable === true) {
302
- return null;
303
- }
304
- const { max, min, decimalPlaces } = __spreadValues(__spreadValues({}, DEFAULT_NUMBER_CONSTRAINTS), constraints);
305
- const constrained = pipe5(
306
- input != null ? input : 0,
307
- clampInto(min, max),
308
- (n) => decimalPlaces ? round(n, decimalPlaces) : n
309
- );
310
- return constrained;
389
+ var markAtomAsNotDefault = (key, store = IMPLICIT.STORE) => {
390
+ const core = target(store);
391
+ core.atomsThatAreDefault = new Set(target(store).atomsThatAreDefault);
392
+ core.atomsThatAreDefault.delete(key);
311
393
  };
312
- var valueToText = (numericValue) => {
313
- if (numericValue === null || numericValue === void 0) {
314
- return ``;
315
- }
316
- return numericValue.toString();
394
+
395
+ // ../../anvl/src/join/core-relation-data.ts
396
+ import { isString } from "fp-ts/string";
397
+
398
+ // ../../anvl/src/refinement/index.ts
399
+ var canExist = (_) => true;
400
+ var cannotExist = (_) => false;
401
+ var isLiteral = (value) => (input) => input === value;
402
+ var isWithin = (args) => (input) => args.includes(input);
403
+ var couldBe = (isTypeA, logging = false, refinements = [isTypeA]) => {
404
+ const name = `(${refinements.map((r) => r.name || `anon`).join(` | `)})`;
405
+ const _ = {
406
+ [name]: (input) => refinements.some(
407
+ (refinement) => {
408
+ var _a2;
409
+ return logging && console.log(
410
+ refinements.map((r) => r.name || `anon`).join(` | `),
411
+ `>`,
412
+ (_a2 = refinement.name) != null ? _a2 : `anon`,
413
+ `:`,
414
+ refinement(input)
415
+ ), refinement(input);
416
+ }
417
+ )
418
+ };
419
+ const checkTypes = Object.assign(_[name], {
420
+ or: (isTypeB) => couldBe(isTypeB, logging, [...refinements, isTypeB])
421
+ });
422
+ return checkTypes;
317
423
  };
318
- var NumberInput = ({
424
+ var isUnion = couldBe(cannotExist);
425
+ var mustBe = (isTypeA, logging = false, refinements = [isTypeA]) => {
426
+ const name = `(${refinements.map((r) => r.name || `anon`).join(` & `)})`;
427
+ const _ = {
428
+ [name]: (input) => refinements.every(
429
+ (refinement) => (logging && console.log(
430
+ refinements.map((r) => r.name || `anon`).join(` & `),
431
+ `>`,
432
+ refinement.name || `anon`,
433
+ `:`,
434
+ refinement(input)
435
+ ), refinement(input))
436
+ )
437
+ };
438
+ const checkTypes = Object.assign(_[name], {
439
+ and: (isTypeB) => mustBe(isTypeB, logging, [...refinements, isTypeB])
440
+ });
441
+ return checkTypes;
442
+ };
443
+ var isIntersection = mustBe(canExist);
444
+
445
+ // ../../anvl/src/join/core-relation-data.ts
446
+ var RELATION_TYPES = [`1:1`, `1:n`, `n:n`];
447
+ var isRelationType = (x) => RELATION_TYPES.includes(x);
448
+ var EMPTY_RELATION_DATA = {
449
+ contents: {},
450
+ relations: {},
451
+ relationType: `n:n`,
452
+ a: `from`,
453
+ b: `to`
454
+ };
455
+ var isRelationData = ({
456
+ from: a2 = `from`,
457
+ to: b2 = `to`,
458
+ isContent
459
+ } = {}) => (input) => {
460
+ return hasExactProperties({
461
+ contents: isContent ? isRecord(isString, isContent) : hasExactProperties({}),
462
+ relations: isRecord(isString, isArray(isString)),
463
+ relationType: isRelationType,
464
+ a: isLiteral(a2),
465
+ b: isLiteral(b2)
466
+ })(input);
467
+ };
468
+
469
+ // ../../anvl/src/join/get-related-ids.ts
470
+ var getRelatedIds = (relationMap, id) => {
471
+ var _a2;
472
+ return (_a2 = relationMap.relations[id]) != null ? _a2 : [];
473
+ };
474
+ var getRelatedId = (relationMap, id) => {
475
+ const relations = getRelatedIds(relationMap, id);
476
+ if (relations.length > 1) {
477
+ console.warn(
478
+ `entry with id ${id} was not expected to have multiple relations`
479
+ );
480
+ }
481
+ return relations[0];
482
+ };
483
+
484
+ // ../../anvl/src/join/make-json-interface.ts
485
+ var makeJsonInterface = (join, ...params) => {
486
+ const isContent = params[0];
487
+ const { a: a2, b: b2 } = join;
488
+ const options = {
489
+ from: a2,
490
+ to: b2,
491
+ isContent
492
+ };
493
+ return {
494
+ toJson: (join2) => join2.toJSON(),
495
+ fromJson: (json) => Join.fromJSON(json, options)
496
+ };
497
+ };
498
+
499
+ // ../../anvl/src/join/relation-contents.ts
500
+ import { pipe as pipe5 } from "fp-ts/function";
501
+
502
+ // ../../anvl/src/join/relation-record.ts
503
+ var getRelationEntries = (relationMap, idA) => getRelatedIds(relationMap, idA).map((idB) => [
504
+ idB,
505
+ getContent(relationMap, idA, idB)
506
+ ]);
507
+ var getRelationRecord = (relationMap, id) => Object.fromEntries(getRelationEntries(relationMap, id));
508
+
509
+ // ../../anvl/src/join/remove-relation.ts
510
+ import { pipe as pipe4 } from "fp-ts/function";
511
+ import { isString as isString2 } from "fp-ts/string";
512
+
513
+ // ../../anvl/src/string/split.ts
514
+ var split = (separator) => (str) => str.split(separator);
515
+
516
+ // ../../anvl/src/join/remove-relation.ts
517
+ var removeSpecific = (current, idA, idB) => {
518
+ const isIdForRemoval = isOneOf(idA, idB);
519
+ return __spreadProps(__spreadValues({}, current), {
520
+ relations: pipe4(
521
+ current.relations,
522
+ recordToEntries,
523
+ map(([id, relations]) => [
524
+ id,
525
+ isIdForRemoval(id) ? relations.filter((relation) => !isIdForRemoval(relation)) : relations
526
+ ]),
527
+ entriesToRecord,
528
+ treeShake(isEmptyArray)
529
+ ),
530
+ contents: pipe4(
531
+ current.contents,
532
+ treeShake(
533
+ (_, key) => isString2(key) && pipe4(key, split(`/`), comprises([idA, idB]))
534
+ )
535
+ )
536
+ });
537
+ };
538
+ var removeAll = (current, idToRemove) => {
539
+ const next = __spreadProps(__spreadValues({}, current), {
540
+ relations: pipe4(
541
+ current.relations,
542
+ recordToEntries,
543
+ map(([id, relations]) => [
544
+ id,
545
+ relations.filter((relation) => relation !== idToRemove)
546
+ ]),
547
+ entriesToRecord,
548
+ treeShake((val, key) => key === idToRemove || isEmptyArray(val))
549
+ ),
550
+ contents: pipe4(
551
+ current.contents,
552
+ treeShake(
553
+ (_, key) => isString2(key) && key.split(`/`).includes(idToRemove)
554
+ )
555
+ )
556
+ });
557
+ return next;
558
+ };
559
+ var removeRelation = (current, relation) => {
560
+ const idA = relation[current.a];
561
+ const idB = relation[current.b];
562
+ return idB ? removeSpecific(current, idA, idB) : removeAll(current, idA);
563
+ };
564
+
565
+ // ../../anvl/src/join/set-relation.ts
566
+ var setManyToMany = (map2, idA, idB, ...rest) => {
567
+ var _a2, _b;
568
+ const next = __spreadProps(__spreadValues({}, map2), {
569
+ relations: __spreadProps(__spreadValues({}, map2.relations), {
570
+ [idA]: addTo((_a2 = map2.relations[idA]) != null ? _a2 : [])(idB),
571
+ [idB]: addTo((_b = map2.relations[idB]) != null ? _b : [])(idA)
572
+ })
573
+ });
574
+ const content = rest[0];
575
+ return content ? setContent(next, idA, idB, content) : next;
576
+ };
577
+ var removeEmpties = treeShake(isEmptyArray);
578
+ var set1ToMany = (current, leaderId, followerId, ...rest) => {
579
+ var _a2;
580
+ const relations = __spreadValues({}, current.relations);
581
+ const prevLeaderId = getRelatedId(current, followerId);
582
+ const next = __spreadProps(__spreadValues({}, current), {
583
+ relations: removeEmpties(__spreadProps(__spreadValues(__spreadValues({}, relations), prevLeaderId && prevLeaderId !== leaderId && {
584
+ [prevLeaderId]: relations[prevLeaderId].filter(
585
+ (id) => id !== followerId
586
+ )
587
+ }), {
588
+ [followerId]: [leaderId],
589
+ [leaderId]: addTo((_a2 = relations[leaderId]) != null ? _a2 : [])(followerId)
590
+ }))
591
+ });
592
+ const content = rest[0];
593
+ return content ? setContent(next, leaderId, followerId, content) : next;
594
+ };
595
+ var set1To1 = (current, wifeId, husbandId, ...rest) => {
596
+ const prevWifeId = getRelatedId(current, husbandId);
597
+ const prevHusbandId = getRelatedId(current, wifeId);
598
+ const next = __spreadProps(__spreadValues({}, current), {
599
+ relations: removeEmpties(__spreadProps(__spreadValues(__spreadValues(__spreadValues({}, current.relations), prevWifeId && { [prevWifeId]: [] }), prevHusbandId && { [prevHusbandId]: [] }), {
600
+ [wifeId]: [husbandId],
601
+ [husbandId]: [wifeId]
602
+ }))
603
+ });
604
+ const content = rest[0];
605
+ return content ? setContent(next, wifeId, husbandId, content) : next;
606
+ };
607
+ var setRelationWithContent = (current, relation, ...rest) => {
608
+ const { [current.a]: idA, [current.b]: idB } = relation;
609
+ switch (current.relationType) {
610
+ case `1:1`:
611
+ return set1To1(current, idA, idB, ...rest);
612
+ case `1:n`:
613
+ return set1ToMany(current, idA, idB, ...rest);
614
+ case `n:n`:
615
+ return setManyToMany(current, idA, idB, ...rest);
616
+ }
617
+ };
618
+
619
+ // ../../anvl/src/join/relation-contents.ts
620
+ var makeContentId = (idA, idB) => [idA, idB].sort().join(`/`);
621
+ var getContent = (relationMap, idA, idB) => relationMap.contents[makeContentId(idA, idB)];
622
+ var setContent = (map2, idA, idB, content) => __spreadProps(__spreadValues({}, map2), {
623
+ contents: __spreadProps(__spreadValues({}, map2.contents), {
624
+ [makeContentId(idA, idB)]: content
625
+ })
626
+ });
627
+ var getRelations = (relationMap, id) => getRelationEntries(relationMap, id).map(
628
+ ([id2, content]) => __spreadValues({
629
+ id: id2
630
+ }, content)
631
+ );
632
+ var setRelations = (current, subject, relations) => {
633
+ const idA = subject[current.a];
634
+ const idB = subject[current.b];
635
+ return pipe5(
636
+ current,
637
+ (relationData) => {
638
+ const relatedIds = getRelatedIds(current, idA);
639
+ const removedIds = relatedIds.filter(
640
+ (id) => !relations.some((r) => r.id === id)
641
+ );
642
+ let step = relationData;
643
+ for (const id of removedIds) {
644
+ const remove = {
645
+ [current.a]: idA != null ? idA : id,
646
+ [current.b]: idB != null ? idB : id
647
+ };
648
+ step = removeRelation(step, remove);
649
+ }
650
+ return step;
651
+ },
652
+ (relationData) => {
653
+ let step = relationData;
654
+ for (const _a2 of relations) {
655
+ const _b = _a2, { id } = _b, rest = __objRest(_b, ["id"]);
656
+ const content = isEmptyObject(rest) ? void 0 : rest;
657
+ step = setRelationWithContent(
658
+ step,
659
+ { [current.a]: idA != null ? idA : id, [current.b]: idB != null ? idB : id },
660
+ // @ts-expect-error hacky
661
+ content
662
+ );
663
+ }
664
+ return step;
665
+ },
666
+ (relationData) => {
667
+ const newlyOrderedIds = relations.map((r) => r.id);
668
+ return __spreadProps(__spreadValues({}, relationData), {
669
+ relations: __spreadProps(__spreadValues({}, relationData.relations), {
670
+ [idA != null ? idA : idB]: newlyOrderedIds
671
+ })
672
+ });
673
+ }
674
+ );
675
+ };
676
+
677
+ // ../../anvl/src/join/index.ts
678
+ var Join = class _Join {
679
+ constructor(json) {
680
+ this.a = `from`;
681
+ this.b = `to`;
682
+ this.makeJsonInterface = (...params) => {
683
+ return makeJsonInterface(this, ...params);
684
+ };
685
+ Object.assign(this, __spreadProps(__spreadValues(__spreadValues({}, EMPTY_RELATION_DATA), json), {
686
+ makeJsonInterface: this.makeJsonInterface
687
+ }));
688
+ }
689
+ toJSON() {
690
+ return {
691
+ relationType: this.relationType,
692
+ relations: this.relations,
693
+ contents: this.contents,
694
+ a: this.a,
695
+ b: this.b
696
+ };
697
+ }
698
+ static fromJSON(json, options) {
699
+ const isValid = isRelationData(options)(json);
700
+ if (isValid) {
701
+ return new _Join(json);
702
+ }
703
+ throw new Error(
704
+ `Saved JSON for this Join is invalid: ${JSON.stringify(json)}`
705
+ );
706
+ }
707
+ from(newA) {
708
+ return new _Join(__spreadProps(__spreadValues({}, this), { a: newA }));
709
+ }
710
+ to(newB) {
711
+ return new _Join(__spreadProps(__spreadValues({}, this), { b: newB }));
712
+ }
713
+ getRelatedId(id) {
714
+ return getRelatedId(this, id);
715
+ }
716
+ getRelatedIds(id) {
717
+ return getRelatedIds(this, id);
718
+ }
719
+ getContent(idA, idB) {
720
+ return getContent(this, idA, idB);
721
+ }
722
+ getRelationEntries(id) {
723
+ return getRelationEntries(this, id);
724
+ }
725
+ getRelationRecord(id) {
726
+ return getRelationRecord(this, id);
727
+ }
728
+ getRelation(id) {
729
+ return getRelations(this, id)[0];
730
+ }
731
+ getRelations(id) {
732
+ return getRelations(this, id);
733
+ }
734
+ setRelations(subject, relations) {
735
+ return new _Join(setRelations(this, subject, relations));
736
+ }
737
+ set(relation, ...rest) {
738
+ return new _Join(setRelationWithContent(this, relation, ...rest));
739
+ }
740
+ remove(relation) {
741
+ return new _Join(
742
+ removeRelation(this, relation)
743
+ );
744
+ }
745
+ };
746
+
747
+ // ../src/internal/store.ts
748
+ var createStore = (name, store = null) => {
749
+ var _a2;
750
+ const created = __spreadProps(__spreadValues({}, store != null ? store : (() => ({
751
+ atomsThatAreDefault: /* @__PURE__ */ new Set(),
752
+ selectorAtoms: new Join({ relationType: `n:n` }).from(`selectorKey`).to(`atomKey`),
753
+ selectorGraph: new Join({ relationType: `n:n` })
754
+ }))()), {
755
+ valueMap: new Map(store == null ? void 0 : store.valueMap),
756
+ atoms: /* @__PURE__ */ new Map(),
757
+ readonlySelectors: /* @__PURE__ */ new Map(),
758
+ selectors: /* @__PURE__ */ new Map(),
759
+ transactions: /* @__PURE__ */ new Map(),
760
+ timelines: /* @__PURE__ */ new Map(),
761
+ timelineAtoms: new Join({ relationType: `1:n` }).from(`timelineKey`).to(`atomKey`),
762
+ subject: {
763
+ atomCreation: new Subject(),
764
+ selectorCreation: new Subject(),
765
+ transactionCreation: new Subject(),
766
+ timelineCreation: new Subject(),
767
+ operationStatus: new Subject()
768
+ },
769
+ operation: __spreadValues({
770
+ open: false
771
+ }, store == null ? void 0 : store.operation),
772
+ transactionStatus: __spreadValues({
773
+ phase: `idle`
774
+ }, store == null ? void 0 : store.transactionStatus),
775
+ config: __spreadProps(__spreadValues({
776
+ logger: __spreadValues(__spreadProps(__spreadValues({}, console), {
777
+ info: doNothing
778
+ }), (_a2 = store == null ? void 0 : store.config) == null ? void 0 : _a2.logger),
779
+ logger__INTERNAL: console
780
+ }, store == null ? void 0 : store.config), {
781
+ name
782
+ })
783
+ });
784
+ store == null ? void 0 : store.atoms.forEach((atom2) => {
785
+ const copiedAtom = __spreadProps(__spreadValues({}, atom2), { subject: new Subject() });
786
+ created.atoms.set(atom2.key, copiedAtom);
787
+ });
788
+ store == null ? void 0 : store.readonlySelectors.forEach((selector) => {
789
+ selector.install(created);
790
+ });
791
+ store == null ? void 0 : store.selectors.forEach((selector) => {
792
+ selector.install(created);
793
+ });
794
+ store == null ? void 0 : store.transactions.forEach((tx) => {
795
+ tx.install(created);
796
+ });
797
+ store == null ? void 0 : store.timelines.forEach((timeline2) => {
798
+ timeline2.install(created);
799
+ });
800
+ return created;
801
+ };
802
+ var IMPLICIT = {
803
+ STORE_INTERNAL: void 0,
804
+ get STORE() {
805
+ var _a2;
806
+ return (_a2 = this.STORE_INTERNAL) != null ? _a2 : this.STORE_INTERNAL = createStore(`DEFAULT`);
807
+ }
808
+ };
809
+
810
+ // ../src/internal/operation.ts
811
+ var openOperation = (token, store) => {
812
+ var _a2, _b;
813
+ const core = target(store);
814
+ if (core.operation.open) {
815
+ (_a2 = store.config.logger) == null ? void 0 : _a2.error(
816
+ `\u274C failed to setState to "${token.key}" during a setState for "${core.operation.token.key}"`
817
+ );
818
+ throw Symbol(`violation`);
819
+ }
820
+ core.operation = {
821
+ open: true,
822
+ done: /* @__PURE__ */ new Set(),
823
+ prev: new Map(store.valueMap),
824
+ time: Date.now(),
825
+ token
826
+ };
827
+ (_b = store.config.logger) == null ? void 0 : _b.info(
828
+ `\u2B55 operation start from "${token.key}" in store "${store.config.name}"`
829
+ );
830
+ };
831
+ var closeOperation = (store) => {
832
+ var _a2;
833
+ const core = target(store);
834
+ core.operation = { open: false };
835
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`\u{1F534} operation done`);
836
+ store.subject.operationStatus.next(core.operation);
837
+ };
838
+ var isDone = (key, store = IMPLICIT.STORE) => {
839
+ var _a2;
840
+ const core = target(store);
841
+ if (!core.operation.open) {
842
+ (_a2 = store.config.logger) == null ? void 0 : _a2.warn(
843
+ `isDone called outside of an operation. This is probably a bug.`
844
+ );
845
+ return true;
846
+ }
847
+ return core.operation.done.has(key);
848
+ };
849
+ var markDone = (key, store = IMPLICIT.STORE) => {
850
+ var _a2;
851
+ const core = target(store);
852
+ if (!core.operation.open) {
853
+ (_a2 = store.config.logger) == null ? void 0 : _a2.warn(
854
+ `markDone called outside of an operation. This is probably a bug.`
855
+ );
856
+ return;
857
+ }
858
+ core.operation.done.add(key);
859
+ };
860
+ var recallState = (state, store = IMPLICIT.STORE) => {
861
+ var _a2;
862
+ const core = target(store);
863
+ if (!core.operation.open) {
864
+ (_a2 = store.config.logger) == null ? void 0 : _a2.warn(
865
+ `recall called outside of an operation. This is probably a bug.`
866
+ );
867
+ return core.valueMap.get(state.key);
868
+ }
869
+ return core.operation.prev.get(state.key);
870
+ };
871
+ var cacheValue = (key, value, store = IMPLICIT.STORE) => {
872
+ const core = target(store);
873
+ core.valueMap.set(key, value);
874
+ };
875
+ var evictCachedValue = (key, store = IMPLICIT.STORE) => {
876
+ const core = target(store);
877
+ core.valueMap.delete(key);
878
+ };
879
+ var readCachedValue = (key, store = IMPLICIT.STORE) => target(store).valueMap.get(key);
880
+ var isValueCached = (key, store = IMPLICIT.STORE) => target(store).valueMap.has(key);
881
+
882
+ // ../src/internal/transaction-internal.ts
883
+ var target = (store = IMPLICIT.STORE) => store.transactionStatus.phase === `building` ? store.transactionStatus.core : store;
884
+
885
+ // ../src/internal/atom-internal.ts
886
+ function atom__INTERNAL(options, family, store = IMPLICIT.STORE) {
887
+ var _a2, _b, _c;
888
+ const core = target(store);
889
+ const existing = core.atoms.get(options.key);
890
+ if (existing) {
891
+ (_b = (_a2 = store.config.logger) == null ? void 0 : _a2.error) == null ? void 0 : _b.call(
892
+ _a2,
893
+ `Key "${options.key}" already exists in the store.`
894
+ );
895
+ return deposit(existing);
896
+ }
897
+ const subject = new Subject();
898
+ const newAtom = __spreadValues(__spreadProps(__spreadValues({}, options), {
899
+ subject,
900
+ type: `atom`
901
+ }), family && { family });
902
+ const initialValue = options.default instanceof Function ? options.default() : options.default;
903
+ core.atoms.set(newAtom.key, newAtom);
904
+ markAtomAsDefault(options.key, store);
905
+ cacheValue(options.key, initialValue, store);
906
+ const token = deposit(newAtom);
907
+ (_c = options.effects) == null ? void 0 : _c.forEach(
908
+ (effect) => effect({
909
+ setSelf: (next) => setState(token, next, store),
910
+ onSet: (handle) => subscribe(token, handle, store)
911
+ })
912
+ );
913
+ store.subject.atomCreation.next(token);
914
+ return token;
915
+ }
916
+
917
+ // ../../anvl/src/json/index.ts
918
+ import { pipe as pipe6 } from "fp-ts/function";
919
+
920
+ // ../../anvl/src/json/refine.ts
921
+ import { isBoolean } from "fp-ts/boolean";
922
+ import { isNumber } from "fp-ts/number";
923
+ import { isString as isString3 } from "fp-ts/string";
924
+ var JSON_PROTOTYPES = [
925
+ `Array`,
926
+ `Boolean`,
927
+ `Number`,
928
+ `Object`,
929
+ `String`
930
+ ];
931
+ 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(
932
+ 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.`
933
+ );
934
+ var isJson = (input) => {
935
+ var _a2;
936
+ if (input === null)
937
+ return true;
938
+ if (input === void 0)
939
+ return false;
940
+ const prototype = (_a2 = Object.getPrototypeOf(input)) == null ? void 0 : _a2.constructor.name;
941
+ const isJson2 = JSON_PROTOTYPES.includes(prototype);
942
+ return isJson2;
943
+ };
944
+
945
+ // ../../anvl/src/json/index.ts
946
+ var stringifyJson = (json) => JSON.stringify(json);
947
+ var JSON_TYPE_NAMES = [
948
+ `array`,
949
+ `boolean`,
950
+ `null`,
951
+ `number`,
952
+ `object`,
953
+ `string`
954
+ ];
955
+ var JSON_DEFAULTS = {
956
+ array: [],
957
+ boolean: false,
958
+ null: null,
959
+ number: 0,
960
+ object: {},
961
+ string: ``
962
+ };
963
+
964
+ // ../src/internal/families-internal.ts
965
+ function atomFamily__INTERNAL(options, store = IMPLICIT.STORE) {
966
+ const subject = new Subject();
967
+ return Object.assign(
968
+ (key) => {
969
+ var _a2;
970
+ const subKey = stringifyJson(key);
971
+ const family = { key: options.key, subKey };
972
+ const fullKey = `${options.key}(${subKey})`;
973
+ const existing = withdraw({ key: fullKey, type: `atom` }, store);
974
+ const token = existing ? deposit(existing) : atom__INTERNAL(
975
+ {
976
+ key: fullKey,
977
+ default: options.default instanceof Function ? options.default(key) : options.default,
978
+ effects: (_a2 = options.effects) == null ? void 0 : _a2.call(options, key)
979
+ },
980
+ family,
981
+ store
982
+ );
983
+ subject.next(token);
984
+ return token;
985
+ },
986
+ {
987
+ key: options.key,
988
+ type: `atom_family`,
989
+ subject
990
+ }
991
+ );
992
+ }
993
+
994
+ // ../src/internal/selector/lookup-selector-sources.ts
995
+ var lookupSelectorSources = (key, store) => target(store).selectorGraph.getRelations(key).filter(({ source }) => source !== key).map(({ source }) => lookup(source, store));
996
+
997
+ // ../src/internal/selector/trace-selector-atoms.ts
998
+ var traceSelectorAtoms = (selectorKey, dependency, store) => {
999
+ const roots = [];
1000
+ const sources = lookupSelectorSources(dependency.key, store);
1001
+ let depth = 0;
1002
+ while (sources.length > 0) {
1003
+ const source = sources.shift();
1004
+ ++depth;
1005
+ if (depth > 999) {
1006
+ throw new Error(
1007
+ `Maximum selector dependency depth exceeded in selector "${selectorKey}".`
1008
+ );
1009
+ }
1010
+ if (source.type !== `atom`) {
1011
+ sources.push(...lookupSelectorSources(source.key, store));
1012
+ } else {
1013
+ roots.push(source);
1014
+ }
1015
+ }
1016
+ return roots;
1017
+ };
1018
+ var traceAllSelectorAtoms = (selectorKey, store) => {
1019
+ const sources = lookupSelectorSources(selectorKey, store);
1020
+ return sources.flatMap(
1021
+ (source) => source.type === `atom` ? source : traceSelectorAtoms(selectorKey, source, store)
1022
+ );
1023
+ };
1024
+
1025
+ // ../src/internal/set.ts
1026
+ var evictDownStream = (state, store = IMPLICIT.STORE) => {
1027
+ var _a2, _b;
1028
+ const core = target(store);
1029
+ const downstream = core.selectorAtoms.getRelations(state.key);
1030
+ const downstreamKeys = downstream.map(({ id }) => id);
1031
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(
1032
+ ` || ${downstreamKeys.length} downstream:`,
1033
+ downstreamKeys
1034
+ );
1035
+ if (core.operation.open) {
1036
+ (_b = store.config.logger) == null ? void 0 : _b.info(` ||`, [...core.operation.done], `already done`);
1037
+ }
1038
+ downstream.forEach(({ id: stateKey }) => {
1039
+ var _a3, _b2, _c, _d;
1040
+ if (isDone(stateKey, store)) {
1041
+ (_a3 = store.config.logger) == null ? void 0 : _a3.info(` || ${stateKey} already done`);
1042
+ return;
1043
+ }
1044
+ const state2 = (_b2 = core.selectors.get(stateKey)) != null ? _b2 : core.readonlySelectors.get(stateKey);
1045
+ if (!state2) {
1046
+ (_c = store.config.logger) == null ? void 0 : _c.info(
1047
+ ` || ${stateKey} is an atom, and can't be downstream`
1048
+ );
1049
+ return;
1050
+ }
1051
+ evictCachedValue(stateKey, store);
1052
+ (_d = store.config.logger) == null ? void 0 : _d.info(` xx evicted "${stateKey}"`);
1053
+ markDone(stateKey, store);
1054
+ });
1055
+ };
1056
+ var setAtomState = (atom2, next, store = IMPLICIT.STORE) => {
1057
+ var _a2, _b;
1058
+ const oldValue = getState__INTERNAL(atom2, store);
1059
+ const newValue = become(next)(oldValue);
1060
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`<< setting atom "${atom2.key}" to`, newValue);
1061
+ cacheValue(atom2.key, newValue, store);
1062
+ if (isAtomDefault(atom2.key, store)) {
1063
+ markAtomAsNotDefault(atom2.key, store);
1064
+ }
1065
+ markDone(atom2.key, store);
1066
+ (_b = store.config.logger) == null ? void 0 : _b.info(
1067
+ ` || evicting caches downstream from "${atom2.key}"`
1068
+ );
1069
+ evictDownStream(atom2, store);
1070
+ const update = { oldValue, newValue };
1071
+ if (store.transactionStatus.phase !== `building`) {
1072
+ emitUpdate(atom2, update, store);
1073
+ } else {
1074
+ stowUpdate(atom2, update, store);
1075
+ }
1076
+ };
1077
+ var setSelectorState = (selector, next, store = IMPLICIT.STORE) => {
1078
+ var _a2, _b;
1079
+ const oldValue = getState__INTERNAL(selector, store);
1080
+ const newValue = become(next)(oldValue);
1081
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`<< setting selector "${selector.key}" to`, newValue);
1082
+ (_b = store.config.logger) == null ? void 0 : _b.info(` || propagating change made to "${selector.key}"`);
1083
+ selector.set(newValue);
1084
+ };
1085
+ var setState__INTERNAL = (state, value, store = IMPLICIT.STORE) => {
1086
+ if (`set` in state) {
1087
+ setSelectorState(state, value, store);
1088
+ } else {
1089
+ setAtomState(state, value, store);
1090
+ }
1091
+ };
1092
+
1093
+ // ../src/internal/subject.ts
1094
+ var Subject = class {
1095
+ constructor() {
1096
+ this.subscribers = [];
1097
+ }
1098
+ subscribe(subscriber) {
1099
+ this.subscribers.push(subscriber);
1100
+ const unsubscribe = () => this.unsubscribe(subscriber);
1101
+ return { unsubscribe };
1102
+ }
1103
+ unsubscribe(subscriber) {
1104
+ const subscriberIndex = this.subscribers.indexOf(subscriber);
1105
+ if (subscriberIndex !== -1) {
1106
+ this.subscribers.splice(subscriberIndex, 1);
1107
+ }
1108
+ }
1109
+ next(value) {
1110
+ for (const subscriber of this.subscribers) {
1111
+ subscriber(value);
1112
+ }
1113
+ }
1114
+ };
1115
+
1116
+ // ../src/internal/subscribe-internal.ts
1117
+ var stowUpdate = (state, update, store) => {
1118
+ var _a2;
1119
+ const { key } = state;
1120
+ const { logger } = store.config;
1121
+ if (store.transactionStatus.phase !== `building`) {
1122
+ (_a2 = store.config.logger) == null ? void 0 : _a2.warn(
1123
+ `stowUpdate called outside of a transaction. This is probably a bug.`
1124
+ );
1125
+ return;
1126
+ }
1127
+ store.transactionStatus.atomUpdates.push(__spreadValues({ key }, update));
1128
+ logger == null ? void 0 : logger.info(`\u{1F4DD} ${key} stowed (`, update.oldValue, `->`, update.newValue, `)`);
1129
+ };
1130
+ var emitUpdate = (state, update, store) => {
1131
+ const { key } = state;
1132
+ const { logger } = store.config;
1133
+ logger == null ? void 0 : logger.info(
1134
+ `\u{1F4E2} ${state.type} "${key}" went (`,
1135
+ update.oldValue,
1136
+ `->`,
1137
+ update.newValue,
1138
+ `)`
1139
+ );
1140
+ state.subject.next(update);
1141
+ };
1142
+ var subscribeToRootAtoms = (state, store) => {
1143
+ const dependencySubscriptions = `default` in state ? null : traceAllSelectorAtoms(state.key, store).map((atomToken) => {
1144
+ const atom2 = withdraw(atomToken, store);
1145
+ if (atom2 === null) {
1146
+ throw new Error(
1147
+ `Atom "${atomToken.key}", a dependency of selector "${state.key}", not found in store "${store.config.name}".`
1148
+ );
1149
+ }
1150
+ return atom2.subject.subscribe((atomChange) => {
1151
+ var _a2, _b;
1152
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(
1153
+ `\u{1F4E2} selector "${state.key}" saw root "${atomToken.key}" go (`,
1154
+ atomChange.oldValue,
1155
+ `->`,
1156
+ atomChange.newValue,
1157
+ `)`
1158
+ );
1159
+ const oldValue = recallState(state, store);
1160
+ const newValue = getState__INTERNAL(state, store);
1161
+ (_b = store.config.logger) == null ? void 0 : _b.info(
1162
+ ` <- "${state.key}" went (`,
1163
+ oldValue,
1164
+ `->`,
1165
+ newValue,
1166
+ `)`
1167
+ );
1168
+ state.subject.next({ newValue, oldValue });
1169
+ });
1170
+ });
1171
+ return dependencySubscriptions;
1172
+ };
1173
+
1174
+ // ../src/atom.ts
1175
+ function atom(options) {
1176
+ return atom__INTERNAL(options);
1177
+ }
1178
+ function atomFamily(options) {
1179
+ return atomFamily__INTERNAL(options);
1180
+ }
1181
+
1182
+ // ../src/subscribe.ts
1183
+ var subscribe = (token, handleUpdate, store = IMPLICIT.STORE) => {
1184
+ var _a2;
1185
+ const state = withdraw(token, store);
1186
+ if (state === null) {
1187
+ throw new Error(
1188
+ `State "${token.key}" not found in this store. Did you forget to initialize with the "atom" or "selector" function?`
1189
+ );
1190
+ }
1191
+ const subscription = state.subject.subscribe(handleUpdate);
1192
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`\u{1F440} subscribe to "${state.key}"`);
1193
+ const dependencySubscriptions = state.type !== `atom` ? subscribeToRootAtoms(state, store) : null;
1194
+ const unsubscribe = dependencySubscriptions === null ? () => {
1195
+ var _a3;
1196
+ (_a3 = store.config.logger) == null ? void 0 : _a3.info(`\u{1F648} unsubscribe from "${state.key}"`);
1197
+ subscription.unsubscribe();
1198
+ } : () => {
1199
+ var _a3;
1200
+ (_a3 = store.config.logger) == null ? void 0 : _a3.info(
1201
+ `\u{1F648} unsubscribe from "${state.key}" and its dependencies`
1202
+ );
1203
+ subscription.unsubscribe();
1204
+ for (const dependencySubscription of dependencySubscriptions) {
1205
+ dependencySubscription.unsubscribe();
1206
+ }
1207
+ };
1208
+ return unsubscribe;
1209
+ };
1210
+
1211
+ // ../src/index.ts
1212
+ var setState = (token, value, store = IMPLICIT.STORE) => {
1213
+ try {
1214
+ openOperation(token, store);
1215
+ } catch (thrown) {
1216
+ if (!(typeof thrown === `symbol`)) {
1217
+ throw thrown;
1218
+ }
1219
+ return;
1220
+ }
1221
+ const state = withdraw(token, store);
1222
+ if (state === null) {
1223
+ throw new Error(
1224
+ `${capitalize(token.type)} "${token.key}" not found in store "${store.config.name}".`
1225
+ );
1226
+ }
1227
+ setState__INTERNAL(state, value, store);
1228
+ closeOperation(store);
1229
+ };
1230
+
1231
+ // ../src/introspection/attach-introspection-states.ts
1232
+ import { __INTERNAL__ as __INTERNAL__7 } from "atom.io";
1233
+
1234
+ // ../src/introspection/attach-atom-index.ts
1235
+ import { __INTERNAL__ } from "atom.io";
1236
+ var attachAtomIndex = (store = __INTERNAL__.IMPLICIT.STORE) => {
1237
+ const atomTokenIndexState__INTERNAL = __INTERNAL__.atom__INTERNAL(
1238
+ {
1239
+ key: `\u{1F441}\u200D\u{1F5E8} Atom Token Index (Internal)`,
1240
+ default: () => [...store.atoms].filter(([key]) => !key.includes(`\u{1F441}\u200D\u{1F5E8}`)).reduce((acc, [key]) => {
1241
+ acc[key] = { key, type: `atom` };
1242
+ return acc;
1243
+ }, {}),
1244
+ effects: [
1245
+ ({ setSelf }) => {
1246
+ store.subject.atomCreation.subscribe((atomToken) => {
1247
+ if (store.operation.open) {
1248
+ return;
1249
+ }
1250
+ if (atomToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
1251
+ return;
1252
+ }
1253
+ setSelf((state) => {
1254
+ const { key, family } = atomToken;
1255
+ if (family) {
1256
+ const { key: familyKey, subKey } = family;
1257
+ const current = state[familyKey];
1258
+ if (current === void 0 || `familyMembers` in current) {
1259
+ const familyKeyState = current || {
1260
+ key: familyKey,
1261
+ familyMembers: {}
1262
+ };
1263
+ return __spreadProps(__spreadValues({}, state), {
1264
+ [familyKey]: __spreadProps(__spreadValues({}, familyKeyState), {
1265
+ familyMembers: __spreadProps(__spreadValues({}, familyKeyState.familyMembers), {
1266
+ [subKey]: atomToken
1267
+ })
1268
+ })
1269
+ });
1270
+ }
1271
+ }
1272
+ return __spreadProps(__spreadValues({}, state), {
1273
+ [key]: atomToken
1274
+ });
1275
+ });
1276
+ });
1277
+ }
1278
+ ]
1279
+ },
1280
+ void 0,
1281
+ store
1282
+ );
1283
+ return __INTERNAL__.selector__INTERNAL(
1284
+ {
1285
+ key: `\u{1F441}\u200D\u{1F5E8} Atom Token Index`,
1286
+ get: ({ get }) => get(atomTokenIndexState__INTERNAL)
1287
+ },
1288
+ void 0,
1289
+ store
1290
+ );
1291
+ };
1292
+
1293
+ // ../src/introspection/attach-selector-index.ts
1294
+ import { __INTERNAL__ as __INTERNAL__2 } from "atom.io";
1295
+ var attachSelectorIndex = (store = __INTERNAL__2.IMPLICIT.STORE) => {
1296
+ const readonlySelectorTokenIndexState__INTERNAL = __INTERNAL__2.atom__INTERNAL(
1297
+ {
1298
+ key: `\u{1F441}\u200D\u{1F5E8} Selector Token Index (Internal)`,
1299
+ default: () => Object.assign(
1300
+ [...store.readonlySelectors].filter(([key]) => !key.includes(`\u{1F441}\u200D\u{1F5E8}`)).reduce((acc, [key]) => {
1301
+ acc[key] = { key, type: `readonly_selector` };
1302
+ return acc;
1303
+ }, {}),
1304
+ [...store.selectors].reduce((acc, [key]) => {
1305
+ acc[key] = { key, type: `selector` };
1306
+ return acc;
1307
+ }, {})
1308
+ ),
1309
+ effects: [
1310
+ ({ setSelf }) => {
1311
+ store.subject.selectorCreation.subscribe((selectorToken) => {
1312
+ if (store.operation.open) {
1313
+ return;
1314
+ }
1315
+ if (selectorToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
1316
+ return;
1317
+ }
1318
+ setSelf((state) => {
1319
+ const { key, family } = selectorToken;
1320
+ if (family) {
1321
+ const { key: familyKey, subKey } = family;
1322
+ const current = state[familyKey];
1323
+ if (current === void 0 || `familyMembers` in current) {
1324
+ const familyKeyState = current || {
1325
+ key: familyKey,
1326
+ familyMembers: {}
1327
+ };
1328
+ return __spreadProps(__spreadValues({}, state), {
1329
+ [familyKey]: __spreadProps(__spreadValues({}, familyKeyState), {
1330
+ familyMembers: __spreadProps(__spreadValues({}, familyKeyState.familyMembers), {
1331
+ [subKey]: selectorToken
1332
+ })
1333
+ })
1334
+ });
1335
+ }
1336
+ }
1337
+ return __spreadProps(__spreadValues({}, state), {
1338
+ [key]: selectorToken
1339
+ });
1340
+ });
1341
+ });
1342
+ }
1343
+ ]
1344
+ },
1345
+ void 0,
1346
+ store
1347
+ );
1348
+ return __INTERNAL__2.selector__INTERNAL({
1349
+ key: `\u{1F441}\u200D\u{1F5E8} Selector Token Index`,
1350
+ get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL)
1351
+ });
1352
+ };
1353
+
1354
+ // ../src/introspection/attach-timeline-family.ts
1355
+ import { __INTERNAL__ as __INTERNAL__3 } from "atom.io";
1356
+ var attachTimelineFamily = (store = __INTERNAL__3.IMPLICIT.STORE) => {
1357
+ const findTimelineLogState__INTERNAL = __INTERNAL__3.atomFamily__INTERNAL(
1358
+ {
1359
+ key: `\u{1F441}\u200D\u{1F5E8} Timeline Update Log (Internal)`,
1360
+ default: (key) => {
1361
+ var _a2;
1362
+ return (_a2 = store.timelines.get(key)) != null ? _a2 : {
1363
+ key: ``,
1364
+ at: 0,
1365
+ timeTraveling: false,
1366
+ history: [],
1367
+ selectorTime: null,
1368
+ transactionKey: null,
1369
+ install: () => {
1370
+ },
1371
+ subject: new Subject()
1372
+ };
1373
+ },
1374
+ effects: (key) => [
1375
+ ({ setSelf }) => {
1376
+ const tl = store.timelines.get(key);
1377
+ tl == null ? void 0 : tl.subject.subscribe((_) => {
1378
+ if (store.operation.open === true) {
1379
+ const subscription = store.subject.operationStatus.subscribe(
1380
+ (operationStatus) => {
1381
+ if (operationStatus.open === false) {
1382
+ subscription.unsubscribe();
1383
+ setSelf(__spreadValues({}, tl));
1384
+ }
1385
+ }
1386
+ );
1387
+ } else {
1388
+ setSelf(__spreadValues({}, tl));
1389
+ }
1390
+ });
1391
+ }
1392
+ ]
1393
+ },
1394
+ store
1395
+ );
1396
+ const findTimelineLogState = __INTERNAL__3.selectorFamily__INTERNAL(
1397
+ {
1398
+ key: `\u{1F441}\u200D\u{1F5E8} Timeline Update Log`,
1399
+ get: (key) => ({ get }) => get(findTimelineLogState__INTERNAL(key))
1400
+ },
1401
+ store
1402
+ );
1403
+ return findTimelineLogState;
1404
+ };
1405
+
1406
+ // ../src/introspection/attach-timeline-index.ts
1407
+ import { __INTERNAL__ as __INTERNAL__4 } from "atom.io";
1408
+ var attachTimelineIndex = (store = __INTERNAL__4.IMPLICIT.STORE) => {
1409
+ const timelineTokenIndexState__INTERNAL = __INTERNAL__4.atom__INTERNAL(
1410
+ {
1411
+ key: `\u{1F441}\u200D\u{1F5E8} Timeline Token Index (Internal)`,
1412
+ default: () => [...store.timelines].map(([key]) => {
1413
+ return { key, type: `timeline` };
1414
+ }),
1415
+ effects: [
1416
+ ({ setSelf }) => {
1417
+ store.subject.timelineCreation.subscribe((timelineToken) => {
1418
+ setSelf((state) => [...state, timelineToken]);
1419
+ });
1420
+ }
1421
+ ]
1422
+ },
1423
+ void 0,
1424
+ store
1425
+ );
1426
+ const timelineTokenIndex = __INTERNAL__4.selector__INTERNAL(
1427
+ {
1428
+ key: `\u{1F441}\u200D\u{1F5E8} Timeline Token Index`,
1429
+ get: ({ get }) => get(timelineTokenIndexState__INTERNAL)
1430
+ },
1431
+ void 0,
1432
+ store
1433
+ );
1434
+ return timelineTokenIndex;
1435
+ };
1436
+
1437
+ // ../src/introspection/attach-transaction-index.ts
1438
+ import { __INTERNAL__ as __INTERNAL__5 } from "atom.io";
1439
+ var attachTransactionIndex = (store = __INTERNAL__5.IMPLICIT.STORE) => {
1440
+ const transactionTokenIndexState__INTERNAL = __INTERNAL__5.atom__INTERNAL(
1441
+ {
1442
+ key: `\u{1F441}\u200D\u{1F5E8} Transaction Token Index (Internal)`,
1443
+ default: () => [...store.transactions].map(([key]) => {
1444
+ return { key, type: `transaction` };
1445
+ }),
1446
+ effects: [
1447
+ ({ setSelf }) => {
1448
+ store.subject.transactionCreation.subscribe((transactionToken) => {
1449
+ setSelf((state) => [...state, transactionToken]);
1450
+ });
1451
+ }
1452
+ ]
1453
+ },
1454
+ void 0,
1455
+ store
1456
+ );
1457
+ const transactionTokenIndex = __INTERNAL__5.selector__INTERNAL(
1458
+ {
1459
+ key: `\u{1F441}\u200D\u{1F5E8} Transaction Token Index`,
1460
+ get: ({ get }) => get(transactionTokenIndexState__INTERNAL)
1461
+ },
1462
+ void 0,
1463
+ store
1464
+ );
1465
+ return transactionTokenIndex;
1466
+ };
1467
+
1468
+ // ../src/introspection/attach-transaction-logs.ts
1469
+ import { __INTERNAL__ as __INTERNAL__6 } from "atom.io";
1470
+ var attachTransactionLogs = (store = __INTERNAL__6.IMPLICIT.STORE) => {
1471
+ const findTransactionUpdateLog = __INTERNAL__6.atomFamily__INTERNAL(
1472
+ {
1473
+ key: `\u{1F441}\u200D\u{1F5E8} Transaction Update Log (Internal)`,
1474
+ default: () => [],
1475
+ effects: (key) => [
1476
+ ({ setSelf }) => {
1477
+ const tx = store.transactions.get(key);
1478
+ tx == null ? void 0 : tx.subject.subscribe((transactionUpdate) => {
1479
+ if (transactionUpdate.key === key) {
1480
+ setSelf((state) => [...state, transactionUpdate]);
1481
+ }
1482
+ });
1483
+ }
1484
+ ]
1485
+ },
1486
+ store
1487
+ );
1488
+ const findTransactionUpdateLogState = __INTERNAL__6.selectorFamily__INTERNAL(
1489
+ {
1490
+ key: `\u{1F441}\u200D\u{1F5E8} Transaction Update Log`,
1491
+ get: (key) => ({ get }) => get(findTransactionUpdateLog(key))
1492
+ },
1493
+ store
1494
+ );
1495
+ return findTransactionUpdateLogState;
1496
+ };
1497
+
1498
+ // ../src/introspection/attach-introspection-states.ts
1499
+ var attachIntrospectionStates = (store = __INTERNAL__7.IMPLICIT.STORE) => {
1500
+ return {
1501
+ atomIndex: attachAtomIndex(store),
1502
+ selectorIndex: attachSelectorIndex(store),
1503
+ transactionIndex: attachTransactionIndex(store),
1504
+ findTransactionLogState: attachTransactionLogs(store),
1505
+ timelineIndex: attachTimelineIndex(store),
1506
+ findTimelineState: attachTimelineFamily(store)
1507
+ };
1508
+ };
1509
+
1510
+ // ../src/web-effects/storage.ts
1511
+ var persistAtom = (storage) => ({ stringify, parse }) => (key) => ({ setSelf, onSet }) => {
1512
+ const savedValue = storage.getItem(key);
1513
+ if (savedValue != null)
1514
+ setSelf(parse(savedValue));
1515
+ onSet(({ newValue }) => {
1516
+ if (newValue == null) {
1517
+ storage.removeItem(key);
1518
+ return;
1519
+ }
1520
+ storage.setItem(key, stringify(newValue));
1521
+ });
1522
+ };
1523
+ var lazyLocalStorageEffect = persistAtom(localStorage)(JSON);
1524
+
1525
+ // ../src/react-devtools/AtomIODevtools.tsx
1526
+ import { useO as useO5, useIO as useIO5 } from "atom.io/react";
1527
+ import { LayoutGroup, motion, spring } from "framer-motion";
1528
+ import { useRef as useRef4 } from "react";
1529
+
1530
+ // ../src/react-devtools/StateIndex.tsx
1531
+ import { getState, selectorFamily } from "atom.io";
1532
+ import { useO as useO2, useIO as useIO2 } from "atom.io/react";
1533
+
1534
+ // ../src/react-devtools/Button.tsx
1535
+ import { jsxDEV } from "react/jsx-dev-runtime";
1536
+ var OpenClose = ({ isOpen, setIsOpen, disabled }) => {
1537
+ return /* @__PURE__ */ jsxDEV(
1538
+ "button",
1539
+ {
1540
+ type: "button",
1541
+ className: `carat ${isOpen ? `open` : `closed`}`,
1542
+ onClick: () => setIsOpen((isOpen2) => !isOpen2),
1543
+ disabled,
1544
+ children: "\u25B6"
1545
+ },
1546
+ void 0,
1547
+ false,
1548
+ {
1549
+ fileName: "../src/react-devtools/Button.tsx",
1550
+ lineNumber: 11,
1551
+ columnNumber: 3
1552
+ },
1553
+ this
1554
+ );
1555
+ };
1556
+ var button = {
1557
+ OpenClose
1558
+ };
1559
+
1560
+ // ../src/react-devtools/StateEditor.tsx
1561
+ import { useO, useIO } from "atom.io/react";
1562
+
1563
+ // ../../hamr/src/react-elastic-input/ElasticInput.tsx
1564
+ import {
1565
+ useLayoutEffect,
1566
+ useImperativeHandle,
1567
+ forwardRef,
1568
+ useRef,
1569
+ useState
1570
+ } from "react";
1571
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
1572
+ var ElasticInput = forwardRef(function ElasticInputFC(props, ref) {
1573
+ var _a2, _b, _c, _d;
1574
+ const inputRef = useRef(null);
1575
+ const spanRef = useRef(null);
1576
+ const [inputWidth, setInputWidth] = useState(`auto`);
1577
+ useImperativeHandle(ref, () => ({
1578
+ focus: () => {
1579
+ var _a3;
1580
+ (_a3 = inputRef.current) == null ? void 0 : _a3.focus();
1581
+ }
1582
+ }));
1583
+ const extraWidth = props.type === `number` ? 15 : 0;
1584
+ useLayoutEffect(() => {
1585
+ if (spanRef.current) {
1586
+ setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
1587
+ const interval = setInterval(() => {
1588
+ if (spanRef.current) {
1589
+ setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
1590
+ }
1591
+ }, 1e3);
1592
+ return () => clearInterval(interval);
1593
+ }
1594
+ }, [(_a2 = inputRef.current) == null ? void 0 : _a2.value, props.value]);
1595
+ return /* @__PURE__ */ jsxDEV2("div", { style: { display: `inline-block`, position: `relative` }, children: [
1596
+ /* @__PURE__ */ jsxDEV2(
1597
+ "input",
1598
+ __spreadProps(__spreadValues({}, props), {
1599
+ ref: inputRef,
1600
+ style: __spreadValues({
1601
+ padding: 0,
1602
+ borderRadius: 0,
1603
+ border: `none`,
1604
+ fontFamily: `inherit`,
1605
+ fontSize: `inherit`,
1606
+ width: inputWidth
1607
+ }, props.style)
1608
+ }),
1609
+ void 0,
1610
+ false,
1611
+ {
1612
+ fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
1613
+ lineNumber: 45,
1614
+ columnNumber: 4
1615
+ },
1616
+ this
1617
+ ),
1618
+ /* @__PURE__ */ jsxDEV2(
1619
+ "span",
1620
+ {
1621
+ ref: spanRef,
1622
+ style: {
1623
+ padding: (_b = props.style) == null ? void 0 : _b.padding,
1624
+ position: `absolute`,
1625
+ visibility: `hidden`,
1626
+ // color: `red`,
1627
+ whiteSpace: `pre`,
1628
+ fontFamily: ((_c = props.style) == null ? void 0 : _c.fontFamily) || `inherit`,
1629
+ fontSize: ((_d = props.style) == null ? void 0 : _d.fontSize) || `inherit`
1630
+ },
1631
+ children: props.value
1632
+ },
1633
+ void 0,
1634
+ false,
1635
+ {
1636
+ fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
1637
+ lineNumber: 58,
1638
+ columnNumber: 4
1639
+ },
1640
+ this
1641
+ )
1642
+ ] }, void 0, true, {
1643
+ fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
1644
+ lineNumber: 44,
1645
+ columnNumber: 3
1646
+ }, this);
1647
+ });
1648
+
1649
+ // ../../hamr/src/react-elastic-input/NumberInput.tsx
1650
+ import { pipe as pipe7 } from "fp-ts/function";
1651
+ import { useState as useState2, useId, useRef as useRef2 } from "react";
1652
+
1653
+ // ../../anvl/src/number/clamp.ts
1654
+ var clampInto = (min, max) => (value) => value < min ? min : value > max ? max : value;
1655
+
1656
+ // ../../hamr/src/react-elastic-input/NumberInput.tsx
1657
+ import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
1658
+ function round(value, decimalPlaces) {
1659
+ if (decimalPlaces === void 0)
1660
+ return value;
1661
+ const factor = Math.pow(10, decimalPlaces);
1662
+ return Math.round(value * factor) / factor;
1663
+ }
1664
+ var VALID_NON_NUMBERS = [``, `-`, `.`, `-.`];
1665
+ var isValidNonNumber = (input) => VALID_NON_NUMBERS.includes(input);
1666
+ var VALID_NON_NUMBER_INTERPRETATIONS = {
1667
+ "": null,
1668
+ "-": 0,
1669
+ ".": 0,
1670
+ "-.": 0
1671
+ };
1672
+ var isDecimalInProgress = (input) => input === `0` || !isNaN(Number(input)) && input.includes(`.`);
1673
+ var textToValue = (input, allowDecimal) => {
1674
+ if (isValidNonNumber(input))
1675
+ return VALID_NON_NUMBER_INTERPRETATIONS[input];
1676
+ return allowDecimal ? parseFloat(input) : Math.round(parseFloat(input));
1677
+ };
1678
+ var DEFAULT_NUMBER_CONSTRAINTS = {
1679
+ max: Infinity,
1680
+ min: -Infinity,
1681
+ decimalPlaces: 100,
1682
+ nullable: true
1683
+ };
1684
+ var initRefinery = (constraints) => (input) => {
1685
+ if (input === null && constraints.nullable === true) {
1686
+ return null;
1687
+ }
1688
+ const { max, min, decimalPlaces } = __spreadValues(__spreadValues({}, DEFAULT_NUMBER_CONSTRAINTS), constraints);
1689
+ const constrained = pipe7(
1690
+ input != null ? input : 0,
1691
+ clampInto(min, max),
1692
+ (n) => decimalPlaces ? round(n, decimalPlaces) : n
1693
+ );
1694
+ return constrained;
1695
+ };
1696
+ var valueToText = (numericValue) => {
1697
+ if (numericValue === null || numericValue === void 0) {
1698
+ return ``;
1699
+ }
1700
+ return numericValue.toString();
1701
+ };
1702
+ var NumberInput = ({
319
1703
  autoSize = false,
320
1704
  customCss,
321
1705
  decimalPlaces,
@@ -366,13 +1750,13 @@ var NumberInput = ({
366
1750
  }
367
1751
  };
368
1752
  const displayValue = temporaryEntry != null ? temporaryEntry : valueToText(value ? refine(value) : value);
369
- return /* @__PURE__ */ jsxDEV2("span", { css: customCss, children: [
370
- label && /* @__PURE__ */ jsxDEV2("label", { htmlFor: id, children: label }, void 0, false, {
1753
+ return /* @__PURE__ */ jsxDEV3("span", { css: customCss, children: [
1754
+ label && /* @__PURE__ */ jsxDEV3("label", { htmlFor: id, children: label }, void 0, false, {
371
1755
  fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
372
1756
  lineNumber: 166,
373
1757
  columnNumber: 14
374
1758
  }, this),
375
- autoSize ? /* @__PURE__ */ jsxDEV2(
1759
+ autoSize ? /* @__PURE__ */ jsxDEV3(
376
1760
  ElasticInput,
377
1761
  {
378
1762
  type: "text",
@@ -394,7 +1778,7 @@ var NumberInput = ({
394
1778
  columnNumber: 5
395
1779
  },
396
1780
  this
397
- ) : /* @__PURE__ */ jsxDEV2(
1781
+ ) : /* @__PURE__ */ jsxDEV3(
398
1782
  "input",
399
1783
  {
400
1784
  type: "text",
@@ -425,7 +1809,7 @@ var NumberInput = ({
425
1809
  };
426
1810
 
427
1811
  // ../../hamr/src/react-elastic-input/TextInput.tsx
428
- import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
1812
+ import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
429
1813
  var TextInput = ({
430
1814
  value,
431
1815
  set,
@@ -434,13 +1818,13 @@ var TextInput = ({
434
1818
  customCss,
435
1819
  autoSize = false
436
1820
  }) => {
437
- return /* @__PURE__ */ jsxDEV3("span", { css: customCss, children: [
438
- /* @__PURE__ */ jsxDEV3("label", { children: label }, void 0, false, {
1821
+ return /* @__PURE__ */ jsxDEV4("span", { css: customCss, children: [
1822
+ /* @__PURE__ */ jsxDEV4("label", { children: label }, void 0, false, {
439
1823
  fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
440
- lineNumber: 25,
1824
+ lineNumber: 26,
441
1825
  columnNumber: 4
442
1826
  }, this),
443
- autoSize ? /* @__PURE__ */ jsxDEV3(
1827
+ autoSize ? /* @__PURE__ */ jsxDEV4(
444
1828
  ElasticInput,
445
1829
  {
446
1830
  type: "text",
@@ -453,11 +1837,11 @@ var TextInput = ({
453
1837
  false,
454
1838
  {
455
1839
  fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
456
- lineNumber: 27,
1840
+ lineNumber: 28,
457
1841
  columnNumber: 5
458
1842
  },
459
1843
  this
460
- ) : /* @__PURE__ */ jsxDEV3(
1844
+ ) : /* @__PURE__ */ jsxDEV4(
461
1845
  "input",
462
1846
  {
463
1847
  type: "text",
@@ -470,14 +1854,14 @@ var TextInput = ({
470
1854
  false,
471
1855
  {
472
1856
  fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
473
- lineNumber: 35,
1857
+ lineNumber: 36,
474
1858
  columnNumber: 5
475
1859
  },
476
1860
  this
477
1861
  )
478
1862
  ] }, void 0, true, {
479
1863
  fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
480
- lineNumber: 24,
1864
+ lineNumber: 25,
481
1865
  columnNumber: 3
482
1866
  }, this);
483
1867
  };
@@ -491,8 +1875,32 @@ var makeElementSetters = (data, set) => data.map(
491
1875
  })
492
1876
  );
493
1877
 
1878
+ // ../../hamr/src/react-json-editor/editors-by-type/non-json.tsx
1879
+ import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
1880
+ var NonJsonEditor = ({ data }) => {
1881
+ return data === void 0 ? /* @__PURE__ */ jsxDEV5(ElasticInput, { disabled: true, value: "undefined" }, void 0, false, {
1882
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/non-json.tsx",
1883
+ lineNumber: 6,
1884
+ columnNumber: 3
1885
+ }, this) : /* @__PURE__ */ jsxDEV5(
1886
+ ElasticInput,
1887
+ {
1888
+ disabled: true,
1889
+ value: Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data)
1890
+ },
1891
+ void 0,
1892
+ false,
1893
+ {
1894
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/non-json.tsx",
1895
+ lineNumber: 8,
1896
+ columnNumber: 3
1897
+ },
1898
+ this
1899
+ );
1900
+ };
1901
+
494
1902
  // ../../hamr/src/react-json-editor/json-editor-internal.tsx
495
- import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
1903
+ import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
496
1904
  var JsonEditor_INTERNAL = ({
497
1905
  data,
498
1906
  set,
@@ -509,18 +1917,19 @@ var JsonEditor_INTERNAL = ({
509
1917
  Header: HeaderDisplay,
510
1918
  Components
511
1919
  }) => {
512
- const json = refineJsonType(data);
513
- const SubEditor = SubEditors[json.type];
1920
+ const dataIsJson = isJson(data);
1921
+ const refined = dataIsJson ? refineJsonType(data) : { type: `non-json`, data };
1922
+ const SubEditor = dataIsJson ? SubEditors[refined.type] : NonJsonEditor;
514
1923
  const disabled = isReadonly(path);
515
- return isHidden(path) ? null : /* @__PURE__ */ jsxDEV4(Components.ErrorBoundary, { children: /* @__PURE__ */ jsxDEV4(Components.EditorWrapper, { className, customCss, children: [
516
- remove && /* @__PURE__ */ jsxDEV4(
1924
+ return isHidden(path) ? null : /* @__PURE__ */ jsxDEV6(Components.ErrorBoundary, { children: /* @__PURE__ */ jsxDEV6(Components.EditorWrapper, { className, customCss, children: [
1925
+ remove && /* @__PURE__ */ jsxDEV6(
517
1926
  Components.Button,
518
1927
  {
519
1928
  onClick: disabled ? doNothing : remove,
520
1929
  disabled,
521
- children: /* @__PURE__ */ jsxDEV4(Components.DeleteIcon, {}, void 0, false, {
1930
+ children: /* @__PURE__ */ jsxDEV6(Components.DeleteIcon, {}, void 0, false, {
522
1931
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
523
- lineNumber: 61,
1932
+ lineNumber: 63,
524
1933
  columnNumber: 7
525
1934
  }, this)
526
1935
  },
@@ -528,17 +1937,17 @@ var JsonEditor_INTERNAL = ({
528
1937
  false,
529
1938
  {
530
1939
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
531
- lineNumber: 57,
1940
+ lineNumber: 59,
532
1941
  columnNumber: 6
533
1942
  },
534
1943
  this
535
1944
  ),
536
- HeaderDisplay && /* @__PURE__ */ jsxDEV4(HeaderDisplay, { data, schema }, void 0, false, {
1945
+ HeaderDisplay && /* @__PURE__ */ jsxDEV6(HeaderDisplay, { data, schema }, void 0, false, {
537
1946
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
538
- lineNumber: 64,
1947
+ lineNumber: 66,
539
1948
  columnNumber: 23
540
1949
  }, this),
541
- rename && /* @__PURE__ */ jsxDEV4(Components.KeyWrapper, { children: /* @__PURE__ */ jsxDEV4(
1950
+ rename && /* @__PURE__ */ jsxDEV6(Components.KeyWrapper, { children: /* @__PURE__ */ jsxDEV6(
542
1951
  ElasticInput,
543
1952
  {
544
1953
  value: name,
@@ -549,19 +1958,19 @@ var JsonEditor_INTERNAL = ({
549
1958
  false,
550
1959
  {
551
1960
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
552
- lineNumber: 67,
1961
+ lineNumber: 69,
553
1962
  columnNumber: 7
554
1963
  },
555
1964
  this
556
1965
  ) }, void 0, false, {
557
1966
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
558
- lineNumber: 66,
1967
+ lineNumber: 68,
559
1968
  columnNumber: 6
560
1969
  }, this),
561
- /* @__PURE__ */ jsxDEV4(
1970
+ /* @__PURE__ */ jsxDEV6(
562
1971
  SubEditor,
563
1972
  {
564
- data: json.data,
1973
+ data: refined.data,
565
1974
  set,
566
1975
  schema,
567
1976
  remove,
@@ -575,20 +1984,20 @@ var JsonEditor_INTERNAL = ({
575
1984
  false,
576
1985
  {
577
1986
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
578
- lineNumber: 74,
1987
+ lineNumber: 76,
579
1988
  columnNumber: 5
580
1989
  },
581
1990
  this
582
1991
  ),
583
- recast && /* @__PURE__ */ jsxDEV4(
1992
+ recast && dataIsJson ? /* @__PURE__ */ jsxDEV6(
584
1993
  "select",
585
1994
  {
586
1995
  onChange: disabled ? doNothing : (e) => recast(e.target.value),
587
- value: json.type,
1996
+ value: refined.type,
588
1997
  disabled,
589
- children: Object.keys(SubEditors).map((type) => /* @__PURE__ */ jsxDEV4("option", { value: type, children: type }, type, false, {
1998
+ children: Object.keys(SubEditors).map((type) => /* @__PURE__ */ jsxDEV6("option", { value: type, children: type }, type, false, {
590
1999
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
591
- lineNumber: 96,
2000
+ lineNumber: 98,
592
2001
  columnNumber: 8
593
2002
  }, this))
594
2003
  },
@@ -596,24 +2005,24 @@ var JsonEditor_INTERNAL = ({
596
2005
  false,
597
2006
  {
598
2007
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
599
- lineNumber: 86,
2008
+ lineNumber: 88,
600
2009
  columnNumber: 6
601
2010
  },
602
2011
  this
603
- )
2012
+ ) : null
604
2013
  ] }, void 0, true, {
605
2014
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
606
- lineNumber: 55,
2015
+ lineNumber: 57,
607
2016
  columnNumber: 4
608
2017
  }, this) }, void 0, false, {
609
2018
  fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
610
- lineNumber: 54,
2019
+ lineNumber: 56,
611
2020
  columnNumber: 3
612
2021
  }, this);
613
2022
  };
614
2023
 
615
2024
  // ../../hamr/src/react-json-editor/editors-by-type/array-editor.tsx
616
- import { Fragment, jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
2025
+ import { Fragment, jsxDEV as jsxDEV7 } from "react/jsx-dev-runtime";
617
2026
  var ArrayEditor = ({
618
2027
  path = [],
619
2028
  isReadonly = () => false,
@@ -623,9 +2032,9 @@ var ArrayEditor = ({
623
2032
  Components
624
2033
  }) => {
625
2034
  const setElement = makeElementSetters(data, set);
626
- return /* @__PURE__ */ jsxDEV5(Fragment, { children: data.map((element, index) => {
2035
+ return /* @__PURE__ */ jsxDEV7(Fragment, { children: data.map((element, index) => {
627
2036
  const newPath = [...path, index];
628
- return /* @__PURE__ */ jsxDEV5(
2037
+ return /* @__PURE__ */ jsxDEV7(
629
2038
  JsonEditor_INTERNAL,
630
2039
  {
631
2040
  path: newPath,
@@ -657,10 +2066,10 @@ import { useRef as useRef3 } from "react";
657
2066
  // ../../anvl/src/json-schema/json-schema.ts
658
2067
  import { isBoolean as isBoolean2 } from "fp-ts/boolean";
659
2068
  import { isNumber as isNumber2 } from "fp-ts/number";
660
- import { isString as isString4 } from "fp-ts/string";
2069
+ import { isString as isString6 } from "fp-ts/string";
661
2070
 
662
2071
  // ../../anvl/src/json-schema/integer.ts
663
- import { pipe as pipe6 } from "fp-ts/function";
2072
+ import { pipe as pipe8 } from "fp-ts/function";
664
2073
  var isInteger = (input) => Number.isInteger(input);
665
2074
  var parseInteger = (input) => {
666
2075
  if (isInteger(input))
@@ -686,7 +2095,7 @@ var IntegerParseError = class extends Error {
686
2095
  }
687
2096
  };
688
2097
  var Int = Object.assign((input) => parseInteger(input), {
689
- from: (input) => pipe6(
2098
+ from: (input) => pipe8(
690
2099
  input,
691
2100
  String,
692
2101
  parseFloat,
@@ -722,10 +2131,10 @@ var b = asNumber([new Fraction(1, 2)]);
722
2131
  var c = asNumber({ a: new Fraction(1, 2) });
723
2132
 
724
2133
  // ../../anvl/src/json-schema/refs.ts
725
- import { isString as isString2 } from "fp-ts/string";
2134
+ import { isString as isString4 } from "fp-ts/string";
726
2135
  function isJsonSchemaRef(input) {
727
2136
  return doesExtend({
728
- $ref: isString2
2137
+ $ref: isString4
729
2138
  })(input);
730
2139
  }
731
2140
  var colorPalette = {
@@ -751,93 +2160,46 @@ var colorPalette = {
751
2160
  };
752
2161
  var retrieveRef = ({
753
2162
  refNode: { $ref },
754
- refMap = {},
755
- root
756
- }) => {
757
- if (typeof root === `boolean`) {
758
- throw new TypeError(`The root is a boolean and cannot be indexed`);
759
- }
760
- if ($ref in refMap)
761
- return { node: refMap[$ref], refMap };
762
- const [_, ...refPath] = $ref.split(`/`);
763
- const discovery = delve(root, refPath);
764
- if (discovery instanceof Error)
765
- throw discovery;
766
- let node = discovery.found;
767
- while (isJsonSchemaRef(node)) {
768
- const result = retrieveRef({ refNode: node, refMap, root });
769
- node = result.node;
770
- refMap = result.refMap;
771
- }
772
- if (isJsonSchema(node)) {
773
- return { node, refMap: __spreadProps(__spreadValues({}, refMap), { [$ref]: node }) };
774
- }
775
- throw new TypeError(`The refNode is not a JsonSchema`);
776
- };
777
-
778
- // ../../anvl/src/json-schema/string-formats.ts
779
- import { isString as isString3 } from "fp-ts/string";
780
- var JSON_SCHEMA_STRING_FORMATS = [
781
- `date-time`,
782
- `date`,
783
- `email`,
784
- `hostname`,
785
- `ipv4`,
786
- `ipv6`,
787
- `regex`,
788
- `time`,
789
- `uri-reference`,
790
- `uri-template`,
791
- `uri`,
792
- `uuid`
793
- ];
794
-
795
- // ../../anvl/src/refinement/index.ts
796
- var canExist = (_) => true;
797
- var cannotExist = (_) => false;
798
- var isLiteral = (value) => (input) => input === value;
799
- var isWithin = (args) => (input) => args.includes(input);
800
- var couldBe = (isTypeA, logging = false, refinements = [isTypeA]) => {
801
- const name = `(${refinements.map((r) => r.name || `anon`).join(` | `)})`;
802
- const _ = {
803
- [name]: (input) => refinements.some(
804
- (refinement) => {
805
- var _a2;
806
- return logging && console.log(
807
- refinements.map((r) => r.name || `anon`).join(` | `),
808
- `>`,
809
- (_a2 = refinement.name) != null ? _a2 : `anon`,
810
- `:`,
811
- refinement(input)
812
- ), refinement(input);
813
- }
814
- )
815
- };
816
- const checkTypes = Object.assign(_[name], {
817
- or: (isTypeB) => couldBe(isTypeB, logging, [...refinements, isTypeB])
818
- });
819
- return checkTypes;
820
- };
821
- var isUnion = couldBe(cannotExist);
822
- var mustBe = (isTypeA, logging = false, refinements = [isTypeA]) => {
823
- const name = `(${refinements.map((r) => r.name || `anon`).join(` & `)})`;
824
- const _ = {
825
- [name]: (input) => refinements.every(
826
- (refinement) => (logging && console.log(
827
- refinements.map((r) => r.name || `anon`).join(` & `),
828
- `>`,
829
- refinement.name || `anon`,
830
- `:`,
831
- refinement(input)
832
- ), refinement(input))
833
- )
834
- };
835
- const checkTypes = Object.assign(_[name], {
836
- and: (isTypeB) => mustBe(isTypeB, logging, [...refinements, isTypeB])
837
- });
838
- return checkTypes;
2163
+ refMap = {},
2164
+ root
2165
+ }) => {
2166
+ if (typeof root === `boolean`) {
2167
+ throw new TypeError(`The root is a boolean and cannot be indexed`);
2168
+ }
2169
+ if ($ref in refMap)
2170
+ return { node: refMap[$ref], refMap };
2171
+ const [_, ...refPath] = $ref.split(`/`);
2172
+ const discovery = delve(root, refPath);
2173
+ if (discovery instanceof Error)
2174
+ throw discovery;
2175
+ let node = discovery.found;
2176
+ while (isJsonSchemaRef(node)) {
2177
+ const result = retrieveRef({ refNode: node, refMap, root });
2178
+ node = result.node;
2179
+ refMap = result.refMap;
2180
+ }
2181
+ if (isJsonSchema(node)) {
2182
+ return { node, refMap: __spreadProps(__spreadValues({}, refMap), { [$ref]: node }) };
2183
+ }
2184
+ throw new TypeError(`The refNode is not a JsonSchema`);
839
2185
  };
840
- var isIntersection = mustBe(canExist);
2186
+
2187
+ // ../../anvl/src/json-schema/string-formats.ts
2188
+ import { isString as isString5 } from "fp-ts/string";
2189
+ var JSON_SCHEMA_STRING_FORMATS = [
2190
+ `date-time`,
2191
+ `date`,
2192
+ `email`,
2193
+ `hostname`,
2194
+ `ipv4`,
2195
+ `ipv6`,
2196
+ `regex`,
2197
+ `time`,
2198
+ `uri-reference`,
2199
+ `uri-template`,
2200
+ `uri`,
2201
+ `uuid`
2202
+ ];
841
2203
 
842
2204
  // ../../anvl/src/json-schema/json-schema.ts
843
2205
  var JSON_SCHEMA_TYPE_NAMES = [...JSON_TYPE_NAMES, `integer`];
@@ -863,10 +2225,10 @@ var JSON_SCHEMA_REFINERY = {
863
2225
  };
864
2226
  var stringSchemaStructure = {
865
2227
  type: isLiteral(`string`),
866
- enum: ifDefined(isArray(isString4)),
2228
+ enum: ifDefined(isArray(isString6)),
867
2229
  minLength: ifDefined(isInteger),
868
2230
  maxLength: ifDefined(isInteger),
869
- pattern: ifDefined(isString4),
2231
+ pattern: ifDefined(isString6),
870
2232
  format: ifDefined(isWithin(JSON_SCHEMA_STRING_FORMATS))
871
2233
  };
872
2234
  function isStringSchema(input) {
@@ -911,13 +2273,13 @@ function isNullSchema(input) {
911
2273
  }
912
2274
  var objectSchemaStructure = {
913
2275
  type: isLiteral(`object`),
914
- properties: ifDefined(isRecord(isString4, isJsonSchema)),
915
- required: ifDefined(isArray(isString4)),
2276
+ properties: ifDefined(isRecord(isString6, isJsonSchema)),
2277
+ required: ifDefined(isArray(isString6)),
916
2278
  additionalProperties: ifDefined(isJsonSchema),
917
2279
  propertyNames: ifDefined(isStringSchema),
918
2280
  minProperties: ifDefined(isInteger),
919
2281
  maxProperties: ifDefined(isInteger),
920
- dependentSchemas: ifDefined(isRecord(isString4, isJsonSchema))
2282
+ dependentSchemas: ifDefined(isRecord(isString6, isJsonSchema))
921
2283
  };
922
2284
  function isObjectSchema(input) {
923
2285
  return doesExtend(objectSchemaStructure)(input);
@@ -959,7 +2321,7 @@ function isNegationSchema(input) {
959
2321
  var mixedSchemaStructure = __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, arraySchemaStructure), booleanSchemaStructure), integerSchemaStructure), nullSchemaStructure), numberSchemaStructure), objectSchemaStructure), stringSchemaStructure), {
960
2322
  type: isArray(isWithin(JSON_SCHEMA_TYPE_NAMES)),
961
2323
  enum: ifDefined(
962
- isArray(isUnion.or(isInteger).or(isBoolean2).or(isNumber2).or(isString4))
2324
+ isArray(isUnion.or(isInteger).or(isBoolean2).or(isNumber2).or(isString6))
963
2325
  )
964
2326
  });
965
2327
  function isMixedSchema(input) {
@@ -967,8 +2329,8 @@ function isMixedSchema(input) {
967
2329
  }
968
2330
  var isJsonSchemaCore = isUnion.or(isArraySchema).or(isBooleanSchema).or(isConditionalSchema).or(isExclusiveSchema).or(isIntegerSchema).or(isIntersectionSchema).or(isMixedSchema).or(isNegationSchema).or(isNullSchema).or(isNumberSchema).or(isObjectSchema).or(isStringSchema).or(isUnionSchema);
969
2331
  var isJsonSchemaRoot = doesExtend({
970
- $id: ifDefined(isString4),
971
- $schema: ifDefined(isString4)
2332
+ $id: ifDefined(isString6),
2333
+ $schema: ifDefined(isString6)
972
2334
  });
973
2335
  var isJsonSchemaObject = isIntersection.and(isJsonSchemaCore).and(isJsonSchemaRoot);
974
2336
  function isJsonSchema(input) {
@@ -1205,27 +2567,27 @@ var makePropertySorter = (data, set, sortFn) => () => {
1205
2567
  };
1206
2568
 
1207
2569
  // ../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx
1208
- import { Fragment as Fragment2, jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
2570
+ import { Fragment as Fragment2, jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
1209
2571
  var PropertyAdder = ({
1210
2572
  addProperty,
1211
2573
  disabled,
1212
2574
  propertyKey,
1213
2575
  Components
1214
- }) => /* @__PURE__ */ jsxDEV6(Components.MissingPropertyWrapper, { children: [
1215
- /* @__PURE__ */ jsxDEV6(ElasticInput, { disabled: true, defaultValue: propertyKey }, void 0, false, {
2576
+ }) => /* @__PURE__ */ jsxDEV8(Components.MissingPropertyWrapper, { children: [
2577
+ /* @__PURE__ */ jsxDEV8(ElasticInput, { disabled: true, defaultValue: propertyKey }, void 0, false, {
1216
2578
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1217
2579
  lineNumber: 38,
1218
2580
  columnNumber: 3
1219
2581
  }, this),
1220
2582
  ` `,
1221
- /* @__PURE__ */ jsxDEV6(ElasticInput, { disabled: true, defaultValue: "is missing" }, void 0, false, {
2583
+ /* @__PURE__ */ jsxDEV8(ElasticInput, { disabled: true, defaultValue: "is missing" }, void 0, false, {
1222
2584
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1223
- lineNumber: 41,
2585
+ lineNumber: 40,
1224
2586
  columnNumber: 3
1225
2587
  }, this),
1226
- /* @__PURE__ */ jsxDEV6(Components.Button, { onClick: () => addProperty(), disabled, children: "+" }, void 0, false, {
2588
+ /* @__PURE__ */ jsxDEV8(Components.Button, { onClick: () => addProperty(), disabled, children: "+" }, void 0, false, {
1227
2589
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1228
- lineNumber: 42,
2590
+ lineNumber: 41,
1229
2591
  columnNumber: 3
1230
2592
  }, this)
1231
2593
  ] }, void 0, true, {
@@ -1267,20 +2629,20 @@ var ObjectEditor = ({
1267
2629
  [[], []]
1268
2630
  );
1269
2631
  const missingKeys = schemaKeys === true ? [] : schemaKeys.filter((key) => !dataKeys.includes(key));
1270
- return /* @__PURE__ */ jsxDEV6(Fragment2, { children: [
1271
- /* @__PURE__ */ jsxDEV6(Components.Button, { onClick: () => sortProperties(), disabled, children: "Sort" }, void 0, false, {
2632
+ return /* @__PURE__ */ jsxDEV8(Fragment2, { children: [
2633
+ /* @__PURE__ */ jsxDEV8(Components.Button, { onClick: () => sortProperties(), disabled, children: "Sort" }, void 0, false, {
1272
2634
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1273
- lineNumber: 96,
2635
+ lineNumber: 95,
1274
2636
  columnNumber: 4
1275
2637
  }, this),
1276
- /* @__PURE__ */ jsxDEV6(Components.ObjectWrapper, { children: [
1277
- /* @__PURE__ */ jsxDEV6("div", { className: "json_editor_properties", children: [...missingKeys, ...officialKeys, ...unofficialKeys].map((key) => {
2638
+ /* @__PURE__ */ jsxDEV8(Components.ObjectWrapper, { children: [
2639
+ /* @__PURE__ */ jsxDEV8("div", { className: "json_editor_properties", children: [...missingKeys, ...officialKeys, ...unofficialKeys].map((key) => {
1278
2640
  const originalKey = stableKeyMap.current[key];
1279
2641
  const newPath = [...path, key];
1280
2642
  const originalPath = [...path, originalKey];
1281
2643
  const isOfficial = schemaKeys === true || schemaKeys.includes(key);
1282
2644
  const isMissing = missingKeys.includes(key);
1283
- return isMissing ? /* @__PURE__ */ jsxDEV6(
2645
+ return isMissing ? /* @__PURE__ */ jsxDEV8(
1284
2646
  PropertyAdder,
1285
2647
  {
1286
2648
  propertyKey: key,
@@ -1292,11 +2654,11 @@ var ObjectEditor = ({
1292
2654
  false,
1293
2655
  {
1294
2656
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1295
- lineNumber: 109,
2657
+ lineNumber: 108,
1296
2658
  columnNumber: 8
1297
2659
  },
1298
2660
  this
1299
- ) : /* @__PURE__ */ jsxDEV6(
2661
+ ) : /* @__PURE__ */ jsxDEV8(
1300
2662
  JsonEditor_INTERNAL,
1301
2663
  {
1302
2664
  schema,
@@ -1316,17 +2678,17 @@ var ObjectEditor = ({
1316
2678
  false,
1317
2679
  {
1318
2680
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1319
- lineNumber: 117,
2681
+ lineNumber: 116,
1320
2682
  columnNumber: 8
1321
2683
  },
1322
2684
  this
1323
2685
  );
1324
2686
  }) }, void 0, false, {
1325
2687
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1326
- lineNumber: 100,
2688
+ lineNumber: 99,
1327
2689
  columnNumber: 5
1328
2690
  }, this),
1329
- /* @__PURE__ */ jsxDEV6(
2691
+ /* @__PURE__ */ jsxDEV8(
1330
2692
  Components.Button,
1331
2693
  {
1332
2694
  onClick: disabled ? doNothing : () => makePropertyAdder(`new_property`, `string`)(),
@@ -1337,29 +2699,30 @@ var ObjectEditor = ({
1337
2699
  false,
1338
2700
  {
1339
2701
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1340
- lineNumber: 137,
2702
+ lineNumber: 136,
1341
2703
  columnNumber: 5
1342
2704
  },
1343
2705
  this
1344
2706
  )
1345
2707
  ] }, void 0, true, {
1346
2708
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1347
- lineNumber: 99,
2709
+ lineNumber: 98,
1348
2710
  columnNumber: 4
1349
2711
  }, this)
1350
2712
  ] }, void 0, true, {
1351
2713
  fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1352
- lineNumber: 95,
2714
+ lineNumber: 94,
1353
2715
  columnNumber: 3
1354
2716
  }, this);
1355
2717
  };
1356
2718
 
1357
2719
  // ../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx
1358
- import { jsxDEV as jsxDEV7 } from "react/jsx-dev-runtime";
2720
+ import { Fragment as Fragment3, jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
1359
2721
  var BooleanEditor = ({
1360
2722
  data,
1361
- set
1362
- }) => /* @__PURE__ */ jsxDEV7(
2723
+ set,
2724
+ Components
2725
+ }) => /* @__PURE__ */ jsxDEV9(Components.BooleanWrapper, { children: /* @__PURE__ */ jsxDEV9(
1363
2726
  "input",
1364
2727
  {
1365
2728
  type: "checkbox",
@@ -1370,22 +2733,33 @@ var BooleanEditor = ({
1370
2733
  false,
1371
2734
  {
1372
2735
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1373
- lineNumber: 10,
1374
- columnNumber: 2
2736
+ lineNumber: 12,
2737
+ columnNumber: 3
1375
2738
  },
1376
2739
  this
1377
- );
1378
- var NullEditor = () => /* @__PURE__ */ jsxDEV7("input", { type: "text", value: "null", readOnly: true }, void 0, false, {
2740
+ ) }, void 0, false, {
2741
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2742
+ lineNumber: 11,
2743
+ columnNumber: 2
2744
+ }, this);
2745
+ var NullEditor = ({
2746
+ Components
2747
+ }) => /* @__PURE__ */ jsxDEV9(Components.NullWrapper, { children: /* @__PURE__ */ jsxDEV9(Fragment3, {}, void 0, false, {
2748
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2749
+ lineNumber: 24,
2750
+ columnNumber: 3
2751
+ }, this) }, void 0, false, {
1379
2752
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1380
- lineNumber: 18,
2753
+ lineNumber: 23,
1381
2754
  columnNumber: 2
1382
2755
  }, this);
1383
2756
  var NumberEditor = ({
1384
2757
  path = [],
1385
2758
  isReadonly = () => false,
1386
2759
  data,
1387
- set
1388
- }) => /* @__PURE__ */ jsxDEV7(
2760
+ set,
2761
+ Components
2762
+ }) => /* @__PURE__ */ jsxDEV9(Components.NumberWrapper, { children: /* @__PURE__ */ jsxDEV9(
1389
2763
  NumberInput,
1390
2764
  {
1391
2765
  value: data,
@@ -1396,11 +2770,15 @@ var NumberEditor = ({
1396
2770
  false,
1397
2771
  {
1398
2772
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1399
- lineNumber: 27,
1400
- columnNumber: 2
2773
+ lineNumber: 36,
2774
+ columnNumber: 3
1401
2775
  },
1402
2776
  this
1403
- );
2777
+ ) }, void 0, false, {
2778
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
2779
+ lineNumber: 35,
2780
+ columnNumber: 2
2781
+ }, this);
1404
2782
  var StringEditor = ({
1405
2783
  path = [],
1406
2784
  isReadonly = () => false,
@@ -1408,7 +2786,7 @@ var StringEditor = ({
1408
2786
  set,
1409
2787
  Components
1410
2788
  }) => {
1411
- return /* @__PURE__ */ jsxDEV7(Components.StringWrapper, { children: /* @__PURE__ */ jsxDEV7(
2789
+ return /* @__PURE__ */ jsxDEV9(Components.StringWrapper, { children: /* @__PURE__ */ jsxDEV9(
1412
2790
  TextInput,
1413
2791
  {
1414
2792
  value: data,
@@ -1419,28 +2797,27 @@ var StringEditor = ({
1419
2797
  false,
1420
2798
  {
1421
2799
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1422
- lineNumber: 43,
2800
+ lineNumber: 53,
1423
2801
  columnNumber: 4
1424
2802
  },
1425
2803
  this
1426
2804
  ) }, void 0, false, {
1427
2805
  fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1428
- lineNumber: 42,
2806
+ lineNumber: 52,
1429
2807
  columnNumber: 3
1430
2808
  }, this);
1431
2809
  };
1432
2810
 
1433
- // ../../hamr/src/react-error-boundary/ErrorBoundary.tsx
1434
- import { useId as useId2, Component } from "react";
1435
- import { atomFamily, useRecoilState, useResetRecoilState } from "recoil";
2811
+ // ../../hamr/src/react-error-boundary/ReactErrorBoundary.tsx
2812
+ import { Component, useState as useState3 } from "react";
1436
2813
 
1437
2814
  // ../../hamr/src/react-error-boundary/DefaultFallback.tsx
1438
- import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
2815
+ import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
1439
2816
  var DefaultFallback = ({ error, errorInfo }) => {
1440
2817
  var _a2, _b;
1441
2818
  const component = errorInfo == null ? void 0 : errorInfo.componentStack.split(` `).filter(Boolean)[2];
1442
2819
  const message = (_b = (_a2 = error == null ? void 0 : error.toString()) != null ? _a2 : errorInfo == null ? void 0 : errorInfo.componentStack) != null ? _b : `Unknown error`;
1443
- return /* @__PURE__ */ jsxDEV8(
2820
+ return /* @__PURE__ */ jsxDEV10(
1444
2821
  "div",
1445
2822
  {
1446
2823
  "data-testid": "error-boundary",
@@ -1452,7 +2829,7 @@ var DefaultFallback = ({ error, errorInfo }) => {
1452
2829
  // backgroundRepeat: `no-repeat`,
1453
2830
  backgroundSize: `overlay`
1454
2831
  },
1455
- children: /* @__PURE__ */ jsxDEV8(
2832
+ children: /* @__PURE__ */ jsxDEV10(
1456
2833
  "div",
1457
2834
  {
1458
2835
  style: {
@@ -1461,7 +2838,7 @@ var DefaultFallback = ({ error, errorInfo }) => {
1461
2838
  padding: `50px`,
1462
2839
  border: `1px solid dashed`
1463
2840
  },
1464
- children: /* @__PURE__ */ jsxDEV8(
2841
+ children: /* @__PURE__ */ jsxDEV10(
1465
2842
  "span",
1466
2843
  {
1467
2844
  style: {
@@ -1472,7 +2849,7 @@ var DefaultFallback = ({ error, errorInfo }) => {
1472
2849
  },
1473
2850
  children: [
1474
2851
  `\u26A0\uFE0F `,
1475
- /* @__PURE__ */ jsxDEV8("span", { style: { color: `#fc0`, fontWeight: 700 }, children: component }, void 0, false, {
2852
+ /* @__PURE__ */ jsxDEV10("span", { style: { color: `#fc0`, fontWeight: 700 }, children: component }, void 0, false, {
1476
2853
  fileName: "../../hamr/src/react-error-boundary/DefaultFallback.tsx",
1477
2854
  lineNumber: 42,
1478
2855
  columnNumber: 6
@@ -1512,8 +2889,8 @@ var DefaultFallback = ({ error, errorInfo }) => {
1512
2889
  );
1513
2890
  };
1514
2891
 
1515
- // ../../hamr/src/react-error-boundary/ErrorBoundary.tsx
1516
- import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
2892
+ // ../../hamr/src/react-error-boundary/ReactErrorBoundary.tsx
2893
+ import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
1517
2894
  var ErrorBoundary = class extends Component {
1518
2895
  constructor(props) {
1519
2896
  super(props);
@@ -1530,27 +2907,23 @@ var ErrorBoundary = class extends Component {
1530
2907
  render() {
1531
2908
  const { error, errorInfo } = this.state;
1532
2909
  const { children, Fallback = DefaultFallback } = this.props;
1533
- return errorInfo ? /* @__PURE__ */ jsxDEV9(Fallback, { error, errorInfo }, void 0, false, {
1534
- fileName: "../../hamr/src/react-error-boundary/ErrorBoundary.tsx",
1535
- lineNumber: 43,
2910
+ return errorInfo ? /* @__PURE__ */ jsxDEV11(Fallback, { error, errorInfo }, void 0, false, {
2911
+ fileName: "../../hamr/src/react-error-boundary/ReactErrorBoundary.tsx",
2912
+ lineNumber: 51,
1536
2913
  columnNumber: 4
1537
2914
  }, this) : children;
1538
2915
  }
1539
2916
  };
1540
- var findErrorBoundaryState = atomFamily({
1541
- key: `errorBoundary`,
1542
- default: { error: void 0, errorInfo: void 0 }
1543
- });
1544
2917
 
1545
2918
  // ../../hamr/src/react-json-editor/default-components.tsx
1546
- import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
2919
+ import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
1547
2920
  var DEFAULT_JSON_EDITOR_COMPONENTS = {
1548
- ErrorBoundary: ({ children }) => /* @__PURE__ */ jsxDEV10(ErrorBoundary, { children }, void 0, false, {
2921
+ ErrorBoundary: ({ children }) => /* @__PURE__ */ jsxDEV12(ErrorBoundary, { children }, void 0, false, {
1549
2922
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1550
- lineNumber: 47,
2923
+ lineNumber: 46,
1551
2924
  columnNumber: 35
1552
2925
  }, this),
1553
- Button: ({ onClick, children, disabled }) => /* @__PURE__ */ jsxDEV10(
2926
+ Button: ({ onClick, children, disabled }) => /* @__PURE__ */ jsxDEV12(
1554
2927
  "button",
1555
2928
  {
1556
2929
  type: "button",
@@ -1563,14 +2936,14 @@ var DEFAULT_JSON_EDITOR_COMPONENTS = {
1563
2936
  false,
1564
2937
  {
1565
2938
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1566
- lineNumber: 49,
2939
+ lineNumber: 48,
1567
2940
  columnNumber: 3
1568
2941
  },
1569
2942
  this
1570
2943
  ),
1571
- EditorWrapper: ({ children, customCss, className }) => /* @__PURE__ */ jsxDEV10("div", { className: `json_editor ` + className, css: customCss, children }, void 0, false, {
2944
+ EditorWrapper: ({ children, customCss, className }) => /* @__PURE__ */ jsxDEV12("div", { className: `json_editor ` + className, css: customCss, children }, void 0, false, {
1572
2945
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1573
- lineNumber: 59,
2946
+ lineNumber: 58,
1574
2947
  columnNumber: 3
1575
2948
  }, this),
1576
2949
  EditorLayout: ({
@@ -1581,101 +2954,101 @@ var DEFAULT_JSON_EDITOR_COMPONENTS = {
1581
2954
  ValueEditor,
1582
2955
  Wrapper
1583
2956
  }) => {
1584
- return /* @__PURE__ */ jsxDEV10(Wrapper, { children: [
1585
- DeleteButton && /* @__PURE__ */ jsxDEV10(DeleteButton, {}, void 0, false, {
2957
+ return /* @__PURE__ */ jsxDEV12(Wrapper, { children: [
2958
+ DeleteButton && /* @__PURE__ */ jsxDEV12(DeleteButton, {}, void 0, false, {
1586
2959
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1587
- lineNumber: 73,
2960
+ lineNumber: 72,
1588
2961
  columnNumber: 22
1589
2962
  }, this),
1590
- Header && /* @__PURE__ */ jsxDEV10(Header, {}, void 0, false, {
2963
+ Header && /* @__PURE__ */ jsxDEV12(Header, {}, void 0, false, {
1591
2964
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1592
- lineNumber: 74,
2965
+ lineNumber: 73,
1593
2966
  columnNumber: 16
1594
2967
  }, this),
1595
- KeyInput && /* @__PURE__ */ jsxDEV10(KeyInput, {}, void 0, false, {
2968
+ KeyInput && /* @__PURE__ */ jsxDEV12(KeyInput, {}, void 0, false, {
1596
2969
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1597
- lineNumber: 75,
2970
+ lineNumber: 74,
1598
2971
  columnNumber: 18
1599
2972
  }, this),
1600
- TypeSelect && /* @__PURE__ */ jsxDEV10(TypeSelect, {}, void 0, false, {
2973
+ TypeSelect && /* @__PURE__ */ jsxDEV12(TypeSelect, {}, void 0, false, {
1601
2974
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1602
- lineNumber: 76,
2975
+ lineNumber: 75,
1603
2976
  columnNumber: 20
1604
2977
  }, this),
1605
- /* @__PURE__ */ jsxDEV10(ValueEditor, {}, void 0, false, {
2978
+ /* @__PURE__ */ jsxDEV12(ValueEditor, {}, void 0, false, {
1606
2979
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1607
- lineNumber: 77,
2980
+ lineNumber: 76,
1608
2981
  columnNumber: 5
1609
2982
  }, this)
1610
2983
  ] }, void 0, true, {
1611
2984
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1612
- lineNumber: 72,
2985
+ lineNumber: 71,
1613
2986
  columnNumber: 4
1614
2987
  }, this);
1615
2988
  },
1616
- ArrayWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_array", children }, void 0, false, {
2989
+ ArrayWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_array", children }, void 0, false, {
1617
2990
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1618
- lineNumber: 82,
2991
+ lineNumber: 81,
1619
2992
  columnNumber: 3
1620
2993
  }, this),
1621
- ObjectWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_object", children }, void 0, false, {
2994
+ ObjectWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_object", children }, void 0, false, {
1622
2995
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1623
- lineNumber: 85,
2996
+ lineNumber: 84,
1624
2997
  columnNumber: 3
1625
2998
  }, this),
1626
- StringWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_string", children }, void 0, false, {
2999
+ StringWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_string", children }, void 0, false, {
1627
3000
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1628
- lineNumber: 88,
3001
+ lineNumber: 87,
1629
3002
  columnNumber: 3
1630
3003
  }, this),
1631
- NumberWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_number", children }, void 0, false, {
3004
+ NumberWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_number", children }, void 0, false, {
1632
3005
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1633
- lineNumber: 91,
3006
+ lineNumber: 90,
1634
3007
  columnNumber: 3
1635
3008
  }, this),
1636
- BooleanWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_boolean", children }, void 0, false, {
3009
+ BooleanWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_boolean", children }, void 0, false, {
1637
3010
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1638
- lineNumber: 94,
3011
+ lineNumber: 93,
1639
3012
  columnNumber: 3
1640
3013
  }, this),
1641
- NullWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_null", children }, void 0, false, {
3014
+ NullWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_null", children }, void 0, false, {
1642
3015
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1643
- lineNumber: 97,
3016
+ lineNumber: 96,
1644
3017
  columnNumber: 3
1645
3018
  }, this),
1646
- MissingPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_property json_editor_missing", children }, void 0, false, {
3019
+ MissingPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_property json_editor_missing", children }, void 0, false, {
1647
3020
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1648
- lineNumber: 100,
3021
+ lineNumber: 99,
1649
3022
  columnNumber: 3
1650
3023
  }, this),
1651
- MiscastPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_property json_editor_miscast", children }, void 0, false, {
3024
+ MiscastPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("div", { className: "json_editor_property json_editor_miscast", children }, void 0, false, {
1652
3025
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1653
- lineNumber: 103,
3026
+ lineNumber: 102,
1654
3027
  columnNumber: 3
1655
3028
  }, this),
1656
- IllegalPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_property json_editor_illegal", children }, void 0, false, {
3029
+ IllegalPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_property json_editor_illegal", children }, void 0, false, {
1657
3030
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1658
- lineNumber: 106,
3031
+ lineNumber: 105,
1659
3032
  columnNumber: 3
1660
3033
  }, this),
1661
- OfficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_property json_editor_official", children }, void 0, false, {
3034
+ OfficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_property json_editor_official", children }, void 0, false, {
1662
3035
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1663
- lineNumber: 109,
3036
+ lineNumber: 108,
1664
3037
  columnNumber: 3
1665
3038
  }, this),
1666
- UnofficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_property json_editor_unofficial", children }, void 0, false, {
3039
+ UnofficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_property json_editor_unofficial", children }, void 0, false, {
1667
3040
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1668
- lineNumber: 112,
3041
+ lineNumber: 111,
1669
3042
  columnNumber: 3
1670
3043
  }, this),
1671
- DeleteIcon: () => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_icon json_editor_delete", children: "x" }, void 0, false, {
3044
+ DeleteIcon: () => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_icon json_editor_delete", children: "x" }, void 0, false, {
1672
3045
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1673
- lineNumber: 117,
3046
+ lineNumber: 116,
1674
3047
  columnNumber: 3
1675
3048
  }, this),
1676
- KeyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_key", children }, void 0, false, {
3049
+ KeyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV12("span", { className: "json_editor_key", children }, void 0, false, {
1677
3050
  fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1678
- lineNumber: 120,
3051
+ lineNumber: 119,
1679
3052
  columnNumber: 3
1680
3053
  }, this)
1681
3054
  };
@@ -1683,7 +3056,7 @@ var DEFAULT_JSON_EDITOR_COMPONENTS = {
1683
3056
  // ../../hamr/src/react-json-editor/developer-interface.tsx
1684
3057
  import Ajv from "ajv";
1685
3058
  import { useMemo } from "react";
1686
- import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
3059
+ import { jsxDEV as jsxDEV13 } from "react/jsx-dev-runtime";
1687
3060
  var JsonEditor = ({
1688
3061
  data,
1689
3062
  set,
@@ -1705,7 +3078,7 @@ var JsonEditor = ({
1705
3078
  return ajv.compile(schema);
1706
3079
  }, [schema]);
1707
3080
  const validationResults = validate(data);
1708
- return /* @__PURE__ */ jsxDEV11(
3081
+ return /* @__PURE__ */ jsxDEV13(
1709
3082
  JsonEditor_INTERNAL,
1710
3083
  {
1711
3084
  data,
@@ -1726,7 +3099,7 @@ var JsonEditor = ({
1726
3099
  false,
1727
3100
  {
1728
3101
  fileName: "../../hamr/src/react-json-editor/developer-interface.tsx",
1729
- lineNumber: 79,
3102
+ lineNumber: 78,
1730
3103
  columnNumber: 3
1731
3104
  },
1732
3105
  this
@@ -1744,17 +3117,17 @@ var SubEditors = {
1744
3117
  };
1745
3118
 
1746
3119
  // ../src/react-devtools/StateEditor.tsx
1747
- import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
1748
- var StateEditor = ({ storeHooks, token }) => {
1749
- const [data, set] = storeHooks.useIO(token);
1750
- return isPlainJson(data) ? /* @__PURE__ */ jsxDEV12(JsonEditor, { data, set, schema: true }, void 0, false, {
3120
+ import { jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
3121
+ var StateEditor = ({ token }) => {
3122
+ const [data, set] = useIO(token);
3123
+ return isJson(data) ? /* @__PURE__ */ jsxDEV14(JsonEditor, { data, set, schema: true }, void 0, false, {
1751
3124
  fileName: "../src/react-devtools/StateEditor.tsx",
1752
3125
  lineNumber: 15,
1753
3126
  columnNumber: 3
1754
- }, this) : /* @__PURE__ */ jsxDEV12("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV12(
3127
+ }, this) : /* @__PURE__ */ jsxDEV14("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV14(
1755
3128
  ElasticInput,
1756
3129
  {
1757
- value: data instanceof Set ? `Set { ${JSON.stringify([...data]).slice(1, -1)} }` : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
3130
+ 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), `?`),
1758
3131
  disabled: true
1759
3132
  },
1760
3133
  void 0,
@@ -1763,318 +3136,983 @@ var StateEditor = ({ storeHooks, token }) => {
1763
3136
  fileName: "../src/react-devtools/StateEditor.tsx",
1764
3137
  lineNumber: 18,
1765
3138
  columnNumber: 4
1766
- },
1767
- this
1768
- ) }, void 0, false, {
1769
- fileName: "../src/react-devtools/StateEditor.tsx",
1770
- lineNumber: 17,
3139
+ },
3140
+ this
3141
+ ) }, void 0, false, {
3142
+ fileName: "../src/react-devtools/StateEditor.tsx",
3143
+ lineNumber: 17,
3144
+ columnNumber: 3
3145
+ }, this);
3146
+ };
3147
+ var ReadonlySelectorViewer = ({ token }) => {
3148
+ const data = useO(token);
3149
+ return isJson(data) ? /* @__PURE__ */ jsxDEV14(
3150
+ JsonEditor,
3151
+ {
3152
+ data,
3153
+ set: () => null,
3154
+ schema: true,
3155
+ isReadonly: () => true
3156
+ },
3157
+ void 0,
3158
+ false,
3159
+ {
3160
+ fileName: "../src/react-devtools/StateEditor.tsx",
3161
+ lineNumber: 39,
3162
+ columnNumber: 3
3163
+ },
3164
+ this
3165
+ ) : /* @__PURE__ */ jsxDEV14("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV14(
3166
+ ElasticInput,
3167
+ {
3168
+ value: data instanceof Set ? `Set ` + JSON.stringify([...data]) : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
3169
+ disabled: true
3170
+ },
3171
+ void 0,
3172
+ false,
3173
+ {
3174
+ fileName: "../src/react-devtools/StateEditor.tsx",
3175
+ lineNumber: 47,
3176
+ columnNumber: 4
3177
+ },
3178
+ this
3179
+ ) }, void 0, false, {
3180
+ fileName: "../src/react-devtools/StateEditor.tsx",
3181
+ lineNumber: 46,
3182
+ columnNumber: 3
3183
+ }, this);
3184
+ };
3185
+ var StoreEditor = ({ token }) => {
3186
+ if (token.type === `readonly_selector`) {
3187
+ return /* @__PURE__ */ jsxDEV14(ReadonlySelectorViewer, { token }, void 0, false, {
3188
+ fileName: "../src/react-devtools/StateEditor.tsx",
3189
+ lineNumber: 67,
3190
+ columnNumber: 10
3191
+ }, this);
3192
+ }
3193
+ return /* @__PURE__ */ jsxDEV14(StateEditor, { token }, void 0, false, {
3194
+ fileName: "../src/react-devtools/StateEditor.tsx",
3195
+ lineNumber: 69,
3196
+ columnNumber: 9
3197
+ }, this);
3198
+ };
3199
+
3200
+ // ../src/react-devtools/StateIndex.tsx
3201
+ import { Fragment as Fragment4, jsxDEV as jsxDEV15 } from "react/jsx-dev-runtime";
3202
+ var findStateTypeState = selectorFamily({
3203
+ key: `\u{1F441}\u200D\u{1F5E8} State Type`,
3204
+ get: (token) => ({ get }) => {
3205
+ let state;
3206
+ try {
3207
+ state = get(token);
3208
+ } catch (error) {
3209
+ return `error`;
3210
+ }
3211
+ if (state === void 0)
3212
+ return `undefined`;
3213
+ if (isJson(state))
3214
+ return refineJsonType(state).type;
3215
+ return Object.getPrototypeOf(state).constructor.name;
3216
+ }
3217
+ });
3218
+ var StateIndexLeafNode = ({ node, isOpenState, typeState }) => {
3219
+ var _a2, _b;
3220
+ const [isOpen, setIsOpen] = useIO2(isOpenState);
3221
+ const state = useO2(node);
3222
+ const stateType = useO2(typeState);
3223
+ const isPrimitive = Boolean(primitiveRefinery.refine(state));
3224
+ return /* @__PURE__ */ jsxDEV15(Fragment4, { children: [
3225
+ /* @__PURE__ */ jsxDEV15("header", { children: [
3226
+ /* @__PURE__ */ jsxDEV15(
3227
+ button.OpenClose,
3228
+ {
3229
+ isOpen: isOpen && !isPrimitive,
3230
+ setIsOpen,
3231
+ disabled: isPrimitive
3232
+ },
3233
+ void 0,
3234
+ false,
3235
+ {
3236
+ fileName: "../src/react-devtools/StateIndex.tsx",
3237
+ lineNumber: 45,
3238
+ columnNumber: 5
3239
+ },
3240
+ this
3241
+ ),
3242
+ /* @__PURE__ */ jsxDEV15(
3243
+ "label",
3244
+ {
3245
+ onClick: () => console.log(node, getState(node)),
3246
+ onKeyUp: () => console.log(node, getState(node)),
3247
+ children: [
3248
+ /* @__PURE__ */ jsxDEV15("h2", { children: (_b = (_a2 = node.family) == null ? void 0 : _a2.subKey) != null ? _b : node.key }, void 0, false, {
3249
+ fileName: "../src/react-devtools/StateIndex.tsx",
3250
+ lineNumber: 54,
3251
+ columnNumber: 6
3252
+ }, this),
3253
+ /* @__PURE__ */ jsxDEV15("span", { className: "type detail", children: [
3254
+ "(",
3255
+ stateType,
3256
+ ")"
3257
+ ] }, void 0, true, {
3258
+ fileName: "../src/react-devtools/StateIndex.tsx",
3259
+ lineNumber: 55,
3260
+ columnNumber: 6
3261
+ }, this)
3262
+ ]
3263
+ },
3264
+ void 0,
3265
+ true,
3266
+ {
3267
+ fileName: "../src/react-devtools/StateIndex.tsx",
3268
+ lineNumber: 50,
3269
+ columnNumber: 5
3270
+ },
3271
+ this
3272
+ ),
3273
+ isPrimitive ? /* @__PURE__ */ jsxDEV15(StoreEditor, { token: node }, void 0, false, {
3274
+ fileName: "../src/react-devtools/StateIndex.tsx",
3275
+ lineNumber: 57,
3276
+ columnNumber: 20
3277
+ }, this) : null
3278
+ ] }, void 0, true, {
3279
+ fileName: "../src/react-devtools/StateIndex.tsx",
3280
+ lineNumber: 44,
3281
+ columnNumber: 4
3282
+ }, this),
3283
+ isOpen && !isPrimitive ? /* @__PURE__ */ jsxDEV15("main", { children: /* @__PURE__ */ jsxDEV15(StoreEditor, { token: node }, void 0, false, {
3284
+ fileName: "../src/react-devtools/StateIndex.tsx",
3285
+ lineNumber: 61,
3286
+ columnNumber: 6
3287
+ }, this) }, void 0, false, {
3288
+ fileName: "../src/react-devtools/StateIndex.tsx",
3289
+ lineNumber: 60,
3290
+ columnNumber: 5
3291
+ }, this) : null
3292
+ ] }, void 0, true, {
3293
+ fileName: "../src/react-devtools/StateIndex.tsx",
3294
+ lineNumber: 43,
3295
+ columnNumber: 3
3296
+ }, this);
3297
+ };
3298
+ var StateIndexTreeNode = ({ node, isOpenState }) => {
3299
+ const [isOpen, setIsOpen] = useIO2(isOpenState);
3300
+ Object.entries(node.familyMembers).forEach(([key, childNode]) => {
3301
+ findViewIsOpenState(key);
3302
+ findStateTypeState(childNode);
3303
+ });
3304
+ return /* @__PURE__ */ jsxDEV15(Fragment4, { children: [
3305
+ /* @__PURE__ */ jsxDEV15("header", { children: [
3306
+ /* @__PURE__ */ jsxDEV15(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3307
+ fileName: "../src/react-devtools/StateIndex.tsx",
3308
+ lineNumber: 81,
3309
+ columnNumber: 5
3310
+ }, this),
3311
+ /* @__PURE__ */ jsxDEV15("label", { children: [
3312
+ /* @__PURE__ */ jsxDEV15("h2", { children: node.key }, void 0, false, {
3313
+ fileName: "../src/react-devtools/StateIndex.tsx",
3314
+ lineNumber: 83,
3315
+ columnNumber: 6
3316
+ }, this),
3317
+ /* @__PURE__ */ jsxDEV15("span", { className: "type detail", children: " (family)" }, void 0, false, {
3318
+ fileName: "../src/react-devtools/StateIndex.tsx",
3319
+ lineNumber: 84,
3320
+ columnNumber: 6
3321
+ }, this)
3322
+ ] }, void 0, true, {
3323
+ fileName: "../src/react-devtools/StateIndex.tsx",
3324
+ lineNumber: 82,
3325
+ columnNumber: 5
3326
+ }, this)
3327
+ ] }, void 0, true, {
3328
+ fileName: "../src/react-devtools/StateIndex.tsx",
3329
+ lineNumber: 80,
3330
+ columnNumber: 4
3331
+ }, this),
3332
+ isOpen ? Object.entries(node.familyMembers).map(([key, childNode]) => /* @__PURE__ */ jsxDEV15(
3333
+ StateIndexNode,
3334
+ {
3335
+ node: childNode,
3336
+ isOpenState: findViewIsOpenState(childNode.key),
3337
+ typeState: findStateTypeState(childNode)
3338
+ },
3339
+ key,
3340
+ false,
3341
+ {
3342
+ fileName: "../src/react-devtools/StateIndex.tsx",
3343
+ lineNumber: 89,
3344
+ columnNumber: 7
3345
+ },
3346
+ this
3347
+ )) : null
3348
+ ] }, void 0, true, {
3349
+ fileName: "../src/react-devtools/StateIndex.tsx",
3350
+ lineNumber: 79,
3351
+ columnNumber: 3
3352
+ }, this);
3353
+ };
3354
+ var StateIndexNode = ({ node, isOpenState, typeState }) => {
3355
+ if (node.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)) {
3356
+ return null;
3357
+ }
3358
+ return /* @__PURE__ */ jsxDEV15("section", { className: "node state", children: `type` in node ? /* @__PURE__ */ jsxDEV15(
3359
+ StateIndexLeafNode,
3360
+ {
3361
+ node,
3362
+ isOpenState,
3363
+ typeState
3364
+ },
3365
+ void 0,
3366
+ false,
3367
+ {
3368
+ fileName: "../src/react-devtools/StateIndex.tsx",
3369
+ lineNumber: 114,
3370
+ columnNumber: 5
3371
+ },
3372
+ this
3373
+ ) : /* @__PURE__ */ jsxDEV15(StateIndexTreeNode, { node, isOpenState }, void 0, false, {
3374
+ fileName: "../src/react-devtools/StateIndex.tsx",
3375
+ lineNumber: 120,
3376
+ columnNumber: 5
3377
+ }, this) }, void 0, false, {
3378
+ fileName: "../src/react-devtools/StateIndex.tsx",
3379
+ lineNumber: 112,
3380
+ columnNumber: 3
3381
+ }, this);
3382
+ };
3383
+ var StateIndex = ({ tokenIndex }) => {
3384
+ const tokenIds = useO2(tokenIndex);
3385
+ 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]) => {
3386
+ return /* @__PURE__ */ jsxDEV15(
3387
+ StateIndexNode,
3388
+ {
3389
+ node,
3390
+ isOpenState: findViewIsOpenState(node.key),
3391
+ typeState: findStateTypeState(node)
3392
+ },
3393
+ key,
3394
+ false,
3395
+ {
3396
+ fileName: "../src/react-devtools/StateIndex.tsx",
3397
+ lineNumber: 143,
3398
+ columnNumber: 7
3399
+ },
3400
+ this
3401
+ );
3402
+ }) }, void 0, false, {
3403
+ fileName: "../src/react-devtools/StateIndex.tsx",
3404
+ lineNumber: 137,
3405
+ columnNumber: 3
3406
+ }, this);
3407
+ };
3408
+
3409
+ // ../src/react-devtools/TimelineIndex.tsx
3410
+ import {
3411
+ undo,
3412
+ redo
3413
+ } from "atom.io";
3414
+ import { useIO as useIO3, useO as useO3 } from "atom.io/react";
3415
+ import { Fragment as Fragment6 } from "react";
3416
+
3417
+ // ../src/react-devtools/Updates.tsx
3418
+ import { Fragment as Fragment5, jsxDEV as jsxDEV16 } from "react/jsx-dev-runtime";
3419
+ var AtomUpdateFC = ({ atomUpdate }) => {
3420
+ return /* @__PURE__ */ jsxDEV16(
3421
+ "article",
3422
+ {
3423
+ className: "node atom_update",
3424
+ onClick: () => console.log(atomUpdate),
3425
+ onKeyUp: () => console.log(atomUpdate),
3426
+ children: [
3427
+ /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: [
3428
+ atomUpdate.key,
3429
+ ": "
3430
+ ] }, void 0, true, {
3431
+ fileName: "../src/react-devtools/Updates.tsx",
3432
+ lineNumber: 20,
3433
+ columnNumber: 4
3434
+ }, this),
3435
+ /* @__PURE__ */ jsxDEV16("span", { children: /* @__PURE__ */ jsxDEV16("span", { className: "summary", children: prettyJson.diff(atomUpdate.oldValue, atomUpdate.newValue).summary }, void 0, false, {
3436
+ fileName: "../src/react-devtools/Updates.tsx",
3437
+ lineNumber: 22,
3438
+ columnNumber: 5
3439
+ }, this) }, void 0, false, {
3440
+ fileName: "../src/react-devtools/Updates.tsx",
3441
+ lineNumber: 21,
3442
+ columnNumber: 4
3443
+ }, this)
3444
+ ]
3445
+ },
3446
+ atomUpdate.key,
3447
+ true,
3448
+ {
3449
+ fileName: "../src/react-devtools/Updates.tsx",
3450
+ lineNumber: 14,
3451
+ columnNumber: 3
3452
+ },
3453
+ this
3454
+ );
3455
+ };
3456
+ var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
3457
+ return /* @__PURE__ */ jsxDEV16("article", { className: "node transaction_update", children: [
3458
+ /* @__PURE__ */ jsxDEV16("header", { children: /* @__PURE__ */ jsxDEV16("h4", { children: serialNumber }, void 0, false, {
3459
+ fileName: "../src/react-devtools/Updates.tsx",
3460
+ lineNumber: 37,
3461
+ columnNumber: 5
3462
+ }, this) }, void 0, false, {
3463
+ fileName: "../src/react-devtools/Updates.tsx",
3464
+ lineNumber: 36,
3465
+ columnNumber: 4
3466
+ }, this),
3467
+ /* @__PURE__ */ jsxDEV16("main", { children: [
3468
+ /* @__PURE__ */ jsxDEV16("section", { className: "transaction_params", children: [
3469
+ /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: "params: " }, void 0, false, {
3470
+ fileName: "../src/react-devtools/Updates.tsx",
3471
+ lineNumber: 41,
3472
+ columnNumber: 6
3473
+ }, this),
3474
+ transactionUpdate.params.map((param, index) => {
3475
+ return /* @__PURE__ */ jsxDEV16(
3476
+ "article",
3477
+ {
3478
+ className: "node transaction_param",
3479
+ onClick: () => console.log(transactionUpdate),
3480
+ onKeyUp: () => console.log(transactionUpdate),
3481
+ children: [
3482
+ /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: [
3483
+ discoverType(param),
3484
+ ": "
3485
+ ] }, void 0, true, {
3486
+ fileName: "../src/react-devtools/Updates.tsx",
3487
+ lineNumber: 50,
3488
+ columnNumber: 9
3489
+ }, this),
3490
+ /* @__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, {
3491
+ fileName: "../src/react-devtools/Updates.tsx",
3492
+ lineNumber: 55,
3493
+ columnNumber: 11
3494
+ }, this) : /* @__PURE__ */ jsxDEV16(Fragment5, { children: JSON.stringify(param) }, void 0, false, {
3495
+ fileName: "../src/react-devtools/Updates.tsx",
3496
+ lineNumber: 57,
3497
+ columnNumber: 11
3498
+ }, this) }, void 0, false, {
3499
+ fileName: "../src/react-devtools/Updates.tsx",
3500
+ lineNumber: 51,
3501
+ columnNumber: 9
3502
+ }, this)
3503
+ ]
3504
+ },
3505
+ `param` + index,
3506
+ true,
3507
+ {
3508
+ fileName: "../src/react-devtools/Updates.tsx",
3509
+ lineNumber: 44,
3510
+ columnNumber: 8
3511
+ },
3512
+ this
3513
+ );
3514
+ })
3515
+ ] }, void 0, true, {
3516
+ fileName: "../src/react-devtools/Updates.tsx",
3517
+ lineNumber: 40,
3518
+ columnNumber: 5
3519
+ }, this),
3520
+ /* @__PURE__ */ jsxDEV16("section", { className: "node transaction_output", children: [
3521
+ /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: "output: " }, void 0, false, {
3522
+ fileName: "../src/react-devtools/Updates.tsx",
3523
+ lineNumber: 65,
3524
+ columnNumber: 6
3525
+ }, this),
3526
+ /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: discoverType(transactionUpdate.output) }, void 0, false, {
3527
+ fileName: "../src/react-devtools/Updates.tsx",
3528
+ lineNumber: 66,
3529
+ columnNumber: 6
3530
+ }, this),
3531
+ transactionUpdate.output ? /* @__PURE__ */ jsxDEV16("span", { className: "summary", children: [
3532
+ ": ",
3533
+ JSON.stringify(transactionUpdate.output)
3534
+ ] }, void 0, true, {
3535
+ fileName: "../src/react-devtools/Updates.tsx",
3536
+ lineNumber: 70,
3537
+ columnNumber: 7
3538
+ }, this) : null
3539
+ ] }, void 0, true, {
3540
+ fileName: "../src/react-devtools/Updates.tsx",
3541
+ lineNumber: 64,
3542
+ columnNumber: 5
3543
+ }, this),
3544
+ /* @__PURE__ */ jsxDEV16("section", { className: "transaction_impact", children: [
3545
+ /* @__PURE__ */ jsxDEV16("span", { className: "detail", children: "impact: " }, void 0, false, {
3546
+ fileName: "../src/react-devtools/Updates.tsx",
3547
+ lineNumber: 76,
3548
+ columnNumber: 6
3549
+ }, this),
3550
+ transactionUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
3551
+ return /* @__PURE__ */ jsxDEV16(
3552
+ article.AtomUpdate,
3553
+ {
3554
+ serialNumber: index,
3555
+ atomUpdate
3556
+ },
3557
+ `${transactionUpdate.key}:${index}:${atomUpdate.key}`,
3558
+ false,
3559
+ {
3560
+ fileName: "../src/react-devtools/Updates.tsx",
3561
+ lineNumber: 81,
3562
+ columnNumber: 9
3563
+ },
3564
+ this
3565
+ );
3566
+ })
3567
+ ] }, void 0, true, {
3568
+ fileName: "../src/react-devtools/Updates.tsx",
3569
+ lineNumber: 75,
3570
+ columnNumber: 5
3571
+ }, this)
3572
+ ] }, void 0, true, {
3573
+ fileName: "../src/react-devtools/Updates.tsx",
3574
+ lineNumber: 39,
3575
+ columnNumber: 4
3576
+ }, this)
3577
+ ] }, void 0, true, {
3578
+ fileName: "../src/react-devtools/Updates.tsx",
3579
+ lineNumber: 35,
1771
3580
  columnNumber: 3
1772
3581
  }, this);
1773
3582
  };
1774
- var ReadonlySelectorEditor = ({ storeHooks, token }) => {
1775
- const data = storeHooks.useO(token);
1776
- return isPlainJson(data) ? /* @__PURE__ */ jsxDEV12(
1777
- JsonEditor,
1778
- {
1779
- data,
1780
- set: () => null,
1781
- schema: true,
1782
- isReadonly: () => true
1783
- },
1784
- void 0,
1785
- false,
1786
- {
1787
- fileName: "../src/react-devtools/StateEditor.tsx",
1788
- lineNumber: 40,
1789
- columnNumber: 3
1790
- },
1791
- this
1792
- ) : /* @__PURE__ */ jsxDEV12("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV12(
1793
- ElasticInput,
1794
- {
1795
- value: data instanceof Set ? `Set ` + JSON.stringify([...data]) : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
1796
- disabled: true
1797
- },
1798
- void 0,
1799
- false,
1800
- {
1801
- fileName: "../src/react-devtools/StateEditor.tsx",
1802
- lineNumber: 48,
3583
+ var TimelineUpdateFC = ({ timelineUpdate }) => {
3584
+ return /* @__PURE__ */ jsxDEV16("article", { className: "node timeline_update", children: [
3585
+ /* @__PURE__ */ jsxDEV16("header", { children: /* @__PURE__ */ jsxDEV16("h4", { children: [
3586
+ timelineUpdate.timestamp,
3587
+ ": ",
3588
+ timelineUpdate.type,
3589
+ " (",
3590
+ timelineUpdate.key,
3591
+ ")"
3592
+ ] }, void 0, true, {
3593
+ fileName: "../src/react-devtools/Updates.tsx",
3594
+ lineNumber: 100,
3595
+ columnNumber: 5
3596
+ }, this) }, void 0, false, {
3597
+ fileName: "../src/react-devtools/Updates.tsx",
3598
+ lineNumber: 99,
1803
3599
  columnNumber: 4
1804
- },
1805
- this
1806
- ) }, void 0, false, {
1807
- fileName: "../src/react-devtools/StateEditor.tsx",
1808
- lineNumber: 47,
3600
+ }, this),
3601
+ /* @__PURE__ */ jsxDEV16("main", { children: timelineUpdate.type === `transaction_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
3602
+ return /* @__PURE__ */ jsxDEV16(
3603
+ article.AtomUpdate,
3604
+ {
3605
+ serialNumber: index,
3606
+ atomUpdate
3607
+ },
3608
+ `${timelineUpdate.key}:${index}:${atomUpdate.key}`,
3609
+ false,
3610
+ {
3611
+ fileName: "../src/react-devtools/Updates.tsx",
3612
+ lineNumber: 111,
3613
+ columnNumber: 9
3614
+ },
3615
+ this
3616
+ );
3617
+ }) : timelineUpdate.type === `selector_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
3618
+ return /* @__PURE__ */ jsxDEV16(
3619
+ article.AtomUpdate,
3620
+ {
3621
+ serialNumber: index,
3622
+ atomUpdate
3623
+ },
3624
+ `${timelineUpdate.key}:${index}:${atomUpdate.key}`,
3625
+ false,
3626
+ {
3627
+ fileName: "../src/react-devtools/Updates.tsx",
3628
+ lineNumber: 123,
3629
+ columnNumber: 9
3630
+ },
3631
+ this
3632
+ );
3633
+ }) : timelineUpdate.type === `atom_update` ? /* @__PURE__ */ jsxDEV16(
3634
+ article.AtomUpdate,
3635
+ {
3636
+ serialNumber: timelineUpdate.timestamp,
3637
+ atomUpdate: timelineUpdate
3638
+ },
3639
+ void 0,
3640
+ false,
3641
+ {
3642
+ fileName: "../src/react-devtools/Updates.tsx",
3643
+ lineNumber: 131,
3644
+ columnNumber: 6
3645
+ },
3646
+ this
3647
+ ) : null }, void 0, false, {
3648
+ fileName: "../src/react-devtools/Updates.tsx",
3649
+ lineNumber: 105,
3650
+ columnNumber: 4
3651
+ }, this)
3652
+ ] }, void 0, true, {
3653
+ fileName: "../src/react-devtools/Updates.tsx",
3654
+ lineNumber: 98,
1809
3655
  columnNumber: 3
1810
3656
  }, this);
1811
3657
  };
1812
- var StoreEditor = ({ storeHooks, token }) => {
1813
- if (token.type === `readonly_selector`) {
1814
- return /* @__PURE__ */ jsxDEV12(ReadonlySelectorEditor, { storeHooks, token }, void 0, false, {
1815
- fileName: "../src/react-devtools/StateEditor.tsx",
1816
- lineNumber: 69,
1817
- columnNumber: 10
1818
- }, this);
1819
- }
1820
- return /* @__PURE__ */ jsxDEV12(StateEditor, { storeHooks, token }, void 0, false, {
1821
- fileName: "../src/react-devtools/StateEditor.tsx",
1822
- lineNumber: 71,
3658
+ var article = {
3659
+ AtomUpdate: AtomUpdateFC,
3660
+ TransactionUpdate: TransactionUpdateFC,
3661
+ TimelineUpdate: TimelineUpdateFC
3662
+ };
3663
+
3664
+ // ../src/react-devtools/TimelineIndex.tsx
3665
+ import { jsxDEV as jsxDEV17 } from "react/jsx-dev-runtime";
3666
+ var YouAreHere = () => {
3667
+ return /* @__PURE__ */ jsxDEV17("span", { className: "you_are_here", children: "you are here" }, void 0, false, {
3668
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3669
+ lineNumber: 17,
1823
3670
  columnNumber: 9
1824
3671
  }, this);
1825
3672
  };
1826
-
1827
- // ../src/react-devtools/TokenList.tsx
1828
- import { Fragment as Fragment4, jsxDEV as jsxDEV13 } from "react/jsx-dev-runtime";
1829
- var TokenList = ({ storeHooks, tokenIndex }) => {
1830
- const tokenIds = storeHooks.useO(tokenIndex);
1831
- return /* @__PURE__ */ jsxDEV13(Fragment4, { children: Object.entries(tokenIds).map(([key, token]) => {
1832
- let logState;
1833
- return /* @__PURE__ */ jsxDEV13(Fragment3, { children: key.startsWith(`\u{1F441}\u200D\u{1F5E8}_`) ? null : /* @__PURE__ */ jsxDEV13("div", { className: "node", children: `type` in token ? (logState = () => console.log(token, getState(token)), /* @__PURE__ */ jsxDEV13(Fragment4, { children: [
1834
- /* @__PURE__ */ jsxDEV13("label", { onClick: logState, onKeyUp: logState, children: key }, void 0, false, {
1835
- fileName: "../src/react-devtools/TokenList.tsx",
1836
- lineNumber: 39,
1837
- columnNumber: 13
1838
- }, this),
1839
- /* @__PURE__ */ jsxDEV13(StoreEditor, { storeHooks, token }, void 0, false, {
1840
- fileName: "../src/react-devtools/TokenList.tsx",
1841
- lineNumber: 42,
1842
- columnNumber: 13
1843
- }, this)
1844
- ] }, void 0, true, {
1845
- fileName: "../src/react-devtools/TokenList.tsx",
1846
- lineNumber: 38,
1847
- columnNumber: 12
1848
- }, this)) : recordToEntries(token.familyMembers).map(([key2, token2]) => /* @__PURE__ */ jsxDEV13(Fragment4, { children: [
1849
- /* @__PURE__ */ jsxDEV13("label", { children: key2 }, void 0, false, {
1850
- fileName: "../src/react-devtools/TokenList.tsx",
1851
- lineNumber: 47,
1852
- columnNumber: 13
3673
+ var TimelineLog = ({ token, isOpenState, timelineState }) => {
3674
+ const timeline2 = useO3(timelineState);
3675
+ const [isOpen, setIsOpen] = useIO3(isOpenState);
3676
+ return /* @__PURE__ */ jsxDEV17("section", { className: "node timeline_log", children: [
3677
+ /* @__PURE__ */ jsxDEV17("header", { children: [
3678
+ /* @__PURE__ */ jsxDEV17(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3679
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3680
+ lineNumber: 31,
3681
+ columnNumber: 5
1853
3682
  }, this),
1854
- /* @__PURE__ */ jsxDEV13("div", { className: "node", children: [
1855
- key2,
1856
- ":",
1857
- /* @__PURE__ */ jsxDEV13(StoreEditor, { storeHooks, token: token2 }, void 0, false, {
1858
- fileName: "../src/react-devtools/TokenList.tsx",
1859
- lineNumber: 50,
1860
- columnNumber: 14
3683
+ /* @__PURE__ */ jsxDEV17("label", { children: [
3684
+ /* @__PURE__ */ jsxDEV17("h2", { children: token.key }, void 0, false, {
3685
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3686
+ lineNumber: 33,
3687
+ columnNumber: 6
3688
+ }, this),
3689
+ /* @__PURE__ */ jsxDEV17("span", { className: "detail length", children: [
3690
+ "(",
3691
+ timeline2.at,
3692
+ "/",
3693
+ timeline2.history.length,
3694
+ ")"
3695
+ ] }, void 0, true, {
3696
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3697
+ lineNumber: 34,
3698
+ columnNumber: 6
3699
+ }, this),
3700
+ /* @__PURE__ */ jsxDEV17("span", { className: "gap" }, void 0, false, {
3701
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3702
+ lineNumber: 37,
3703
+ columnNumber: 6
3704
+ }, this),
3705
+ /* @__PURE__ */ jsxDEV17("nav", { children: [
3706
+ /* @__PURE__ */ jsxDEV17(
3707
+ "button",
3708
+ {
3709
+ type: "button",
3710
+ onClick: () => undo(token),
3711
+ disabled: timeline2.at === 0,
3712
+ children: "undo"
3713
+ },
3714
+ void 0,
3715
+ false,
3716
+ {
3717
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3718
+ lineNumber: 39,
3719
+ columnNumber: 7
3720
+ },
3721
+ this
3722
+ ),
3723
+ /* @__PURE__ */ jsxDEV17(
3724
+ "button",
3725
+ {
3726
+ type: "button",
3727
+ onClick: () => redo(token),
3728
+ disabled: timeline2.at === timeline2.history.length,
3729
+ children: "redo"
3730
+ },
3731
+ void 0,
3732
+ false,
3733
+ {
3734
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3735
+ lineNumber: 46,
3736
+ columnNumber: 7
3737
+ },
3738
+ this
3739
+ )
3740
+ ] }, void 0, true, {
3741
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3742
+ lineNumber: 38,
3743
+ columnNumber: 6
1861
3744
  }, this)
1862
- ] }, key2, true, {
1863
- fileName: "../src/react-devtools/TokenList.tsx",
1864
- lineNumber: 48,
1865
- columnNumber: 13
3745
+ ] }, void 0, true, {
3746
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3747
+ lineNumber: 32,
3748
+ columnNumber: 5
1866
3749
  }, this)
1867
3750
  ] }, void 0, true, {
1868
- fileName: "../src/react-devtools/TokenList.tsx",
1869
- lineNumber: 46,
1870
- columnNumber: 12
3751
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3752
+ lineNumber: 30,
3753
+ columnNumber: 4
3754
+ }, this),
3755
+ isOpen ? /* @__PURE__ */ jsxDEV17("main", { children: timeline2.history.map((update, index) => /* @__PURE__ */ jsxDEV17(Fragment6, { children: [
3756
+ index === timeline2.at ? /* @__PURE__ */ jsxDEV17(YouAreHere, {}, void 0, false, {
3757
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3758
+ lineNumber: 60,
3759
+ columnNumber: 33
3760
+ }, this) : null,
3761
+ /* @__PURE__ */ jsxDEV17(article.TimelineUpdate, { timelineUpdate: update }, void 0, false, {
3762
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3763
+ lineNumber: 61,
3764
+ columnNumber: 8
3765
+ }, this),
3766
+ index === timeline2.history.length - 1 && timeline2.at === timeline2.history.length ? /* @__PURE__ */ jsxDEV17(YouAreHere, {}, void 0, false, {
3767
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3768
+ lineNumber: 64,
3769
+ columnNumber: 9
3770
+ }, this) : null
3771
+ ] }, update.key + index + timeline2.at, true, {
3772
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3773
+ lineNumber: 59,
3774
+ columnNumber: 7
1871
3775
  }, this)) }, void 0, false, {
1872
- fileName: "../src/react-devtools/TokenList.tsx",
1873
- lineNumber: 34,
1874
- columnNumber: 8
1875
- }, this) }, key, false, {
1876
- fileName: "../src/react-devtools/TokenList.tsx",
1877
- lineNumber: 32,
1878
- columnNumber: 6
1879
- }, this);
3776
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3777
+ lineNumber: 57,
3778
+ columnNumber: 5
3779
+ }, this) : null
3780
+ ] }, void 0, true, {
3781
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3782
+ lineNumber: 29,
3783
+ columnNumber: 3
3784
+ }, this);
3785
+ };
3786
+ var TimelineIndex = () => {
3787
+ const tokenIds = useO3(timelineIndex);
3788
+ return /* @__PURE__ */ jsxDEV17("article", { className: "index timeline_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
3789
+ return /* @__PURE__ */ jsxDEV17(
3790
+ TimelineLog,
3791
+ {
3792
+ token,
3793
+ isOpenState: findViewIsOpenState(token.key),
3794
+ timelineState: findTimelineState(token.key)
3795
+ },
3796
+ token.key,
3797
+ false,
3798
+ {
3799
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3800
+ lineNumber: 82,
3801
+ columnNumber: 7
3802
+ },
3803
+ this
3804
+ );
1880
3805
  }) }, void 0, false, {
1881
- fileName: "../src/react-devtools/TokenList.tsx",
1882
- lineNumber: 28,
3806
+ fileName: "../src/react-devtools/TimelineIndex.tsx",
3807
+ lineNumber: 77,
1883
3808
  columnNumber: 3
1884
3809
  }, this);
1885
3810
  };
1886
3811
 
1887
- // ../src/web-effects/storage.ts
1888
- var persistAtom = (storage) => ({ stringify, parse }) => (key) => ({ setSelf, onSet }) => {
1889
- const savedValue = storage.getItem(key);
1890
- if (savedValue != null)
1891
- setSelf(parse(savedValue));
1892
- onSet(({ newValue }) => {
1893
- if (newValue == null) {
1894
- storage.removeItem(key);
1895
- return;
1896
- }
1897
- storage.setItem(key, stringify(newValue));
1898
- });
3812
+ // ../src/react-devtools/TransactionIndex.tsx
3813
+ import { useIO as useIO4, useO as useO4 } from "atom.io/react";
3814
+ import { jsxDEV as jsxDEV18 } from "react/jsx-dev-runtime";
3815
+ var TransactionLog = ({ token, isOpenState, logState }) => {
3816
+ const log = useO4(logState);
3817
+ const [isOpen, setIsOpen] = useIO4(isOpenState);
3818
+ return /* @__PURE__ */ jsxDEV18("section", { className: "node transaction_log", children: [
3819
+ /* @__PURE__ */ jsxDEV18("header", { children: [
3820
+ /* @__PURE__ */ jsxDEV18(button.OpenClose, { isOpen, setIsOpen }, void 0, false, {
3821
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3822
+ lineNumber: 31,
3823
+ columnNumber: 5
3824
+ }, this),
3825
+ /* @__PURE__ */ jsxDEV18("label", { children: [
3826
+ /* @__PURE__ */ jsxDEV18("h2", { children: token.key }, void 0, false, {
3827
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3828
+ lineNumber: 33,
3829
+ columnNumber: 6
3830
+ }, this),
3831
+ /* @__PURE__ */ jsxDEV18("span", { className: "detail length", children: [
3832
+ "(",
3833
+ log.length,
3834
+ ")"
3835
+ ] }, void 0, true, {
3836
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3837
+ lineNumber: 34,
3838
+ columnNumber: 6
3839
+ }, this)
3840
+ ] }, void 0, true, {
3841
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3842
+ lineNumber: 32,
3843
+ columnNumber: 5
3844
+ }, this)
3845
+ ] }, void 0, true, {
3846
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3847
+ lineNumber: 30,
3848
+ columnNumber: 4
3849
+ }, this),
3850
+ isOpen ? /* @__PURE__ */ jsxDEV18("main", { children: log.map((update, index) => /* @__PURE__ */ jsxDEV18(
3851
+ article.TransactionUpdate,
3852
+ {
3853
+ serialNumber: index,
3854
+ transactionUpdate: update
3855
+ },
3856
+ update.key + index,
3857
+ false,
3858
+ {
3859
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3860
+ lineNumber: 40,
3861
+ columnNumber: 7
3862
+ },
3863
+ this
3864
+ )) }, void 0, false, {
3865
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3866
+ lineNumber: 38,
3867
+ columnNumber: 5
3868
+ }, this) : null
3869
+ ] }, void 0, true, {
3870
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3871
+ lineNumber: 29,
3872
+ columnNumber: 3
3873
+ }, this);
3874
+ };
3875
+ var TransactionIndex = () => {
3876
+ const tokenIds = useO4(transactionIndex);
3877
+ return /* @__PURE__ */ jsxDEV18("article", { className: "index transaction_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
3878
+ return /* @__PURE__ */ jsxDEV18(
3879
+ TransactionLog,
3880
+ {
3881
+ token,
3882
+ isOpenState: findViewIsOpenState(token.key),
3883
+ logState: findTransactionLogState(token.key)
3884
+ },
3885
+ token.key,
3886
+ false,
3887
+ {
3888
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3889
+ lineNumber: 60,
3890
+ columnNumber: 7
3891
+ },
3892
+ this
3893
+ );
3894
+ }) }, void 0, false, {
3895
+ fileName: "../src/react-devtools/TransactionIndex.tsx",
3896
+ lineNumber: 55,
3897
+ columnNumber: 3
3898
+ }, this);
1899
3899
  };
1900
- var lazyLocalStorageEffect = persistAtom(localStorage)(JSON);
1901
3900
 
1902
3901
  // ../src/react-devtools/AtomIODevtools.tsx
1903
- import { Fragment as Fragment5, jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
1904
- var { atomTokenIndexState, selectorTokenIndexState } = __INTERNAL__.META.attachMetaState();
1905
- var devtoolsAreOpenState = atom({
1906
- key: `\u{1F441}\u200D\u{1F5E8}_devtools_are_open`,
1907
- default: true,
1908
- effects: [lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8}_devtools_are_open`)]
1909
- });
1910
- var composeDevtools = (storeHooks) => {
1911
- const Devtools = () => {
1912
- const constraintsRef = useRef4(null);
1913
- const [devtoolsAreOpen, setDevtoolsAreOpen] = storeHooks.useIO(devtoolsAreOpenState);
1914
- const mouseHasMoved = useRef4(false);
1915
- return /* @__PURE__ */ jsxDEV14(Fragment5, { children: [
1916
- /* @__PURE__ */ jsxDEV14(
1917
- motion.span,
1918
- {
1919
- ref: constraintsRef,
1920
- className: "atom_io_devtools_zone",
1921
- style: {
1922
- position: `fixed`,
1923
- top: 0,
1924
- left: 0,
1925
- right: 0,
1926
- bottom: 0,
1927
- pointerEvents: `none`
1928
- }
1929
- },
1930
- void 0,
1931
- false,
1932
- {
1933
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
1934
- lineNumber: 33,
1935
- columnNumber: 5
3902
+ import { Fragment as Fragment7, jsxDEV as jsxDEV19 } from "react/jsx-dev-runtime";
3903
+ var AtomIODevtools = () => {
3904
+ const constraintsRef = useRef4(null);
3905
+ const [devtoolsAreOpen, setDevtoolsAreOpen] = useIO5(devtoolsAreOpenState);
3906
+ const [devtoolsView, setDevtoolsView] = useIO5(devtoolsViewSelectionState);
3907
+ const devtoolsViewOptions = useO5(devtoolsViewOptionsState);
3908
+ const mouseHasMoved = useRef4(false);
3909
+ return /* @__PURE__ */ jsxDEV19(Fragment7, { children: [
3910
+ /* @__PURE__ */ jsxDEV19(
3911
+ motion.span,
3912
+ {
3913
+ ref: constraintsRef,
3914
+ className: "atom_io_devtools_zone",
3915
+ style: {
3916
+ position: `fixed`,
3917
+ top: 0,
3918
+ left: 0,
3919
+ right: 0,
3920
+ bottom: 0,
3921
+ pointerEvents: `none`
3922
+ }
3923
+ },
3924
+ void 0,
3925
+ false,
3926
+ {
3927
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
3928
+ lineNumber: 29,
3929
+ columnNumber: 4
3930
+ },
3931
+ this
3932
+ ),
3933
+ /* @__PURE__ */ jsxDEV19(
3934
+ motion.main,
3935
+ {
3936
+ drag: true,
3937
+ dragConstraints: constraintsRef,
3938
+ className: "atom_io_devtools",
3939
+ transition: spring,
3940
+ style: devtoolsAreOpen ? {} : {
3941
+ backgroundColor: `#0000`,
3942
+ borderColor: `#0000`,
3943
+ maxHeight: 28,
3944
+ maxWidth: 33
1936
3945
  },
1937
- this
1938
- ),
1939
- /* @__PURE__ */ jsxDEV14(
1940
- motion.main,
1941
- {
1942
- drag: true,
1943
- dragConstraints: constraintsRef,
1944
- className: "atom_io_devtools",
1945
- transition: spring,
1946
- style: devtoolsAreOpen ? {} : {
1947
- backgroundColor: `#0000`,
1948
- borderColor: `#0000`,
1949
- maxHeight: 28,
1950
- maxWidth: 33
1951
- },
1952
- children: [
1953
- devtoolsAreOpen ? /* @__PURE__ */ jsxDEV14(Fragment5, { children: [
1954
- /* @__PURE__ */ jsxDEV14(motion.header, { children: /* @__PURE__ */ jsxDEV14("h1", { children: "atom.io" }, void 0, false, {
3946
+ children: [
3947
+ devtoolsAreOpen ? /* @__PURE__ */ jsxDEV19(Fragment7, { children: [
3948
+ /* @__PURE__ */ jsxDEV19(motion.header, { children: [
3949
+ /* @__PURE__ */ jsxDEV19("h1", { children: "atom.io" }, void 0, false, {
1955
3950
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
1956
- lineNumber: 64,
1957
- columnNumber: 9
1958
- }, this) }, void 0, false, {
1959
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
1960
- lineNumber: 63,
3951
+ lineNumber: 60,
1961
3952
  columnNumber: 8
1962
3953
  }, this),
1963
- /* @__PURE__ */ jsxDEV14(motion.main, { children: /* @__PURE__ */ jsxDEV14(LayoutGroup, { children: [
1964
- /* @__PURE__ */ jsxDEV14("section", { children: [
1965
- /* @__PURE__ */ jsxDEV14("h2", { children: "atoms" }, void 0, false, {
1966
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
1967
- lineNumber: 69,
1968
- columnNumber: 11
1969
- }, this),
1970
- /* @__PURE__ */ jsxDEV14(
1971
- TokenList,
1972
- {
1973
- storeHooks,
1974
- tokenIndex: atomTokenIndexState
1975
- },
1976
- void 0,
1977
- false,
1978
- {
1979
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
1980
- lineNumber: 70,
1981
- columnNumber: 11
1982
- },
1983
- this
1984
- )
1985
- ] }, void 0, true, {
1986
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
1987
- lineNumber: 68,
1988
- columnNumber: 10
1989
- }, this),
1990
- /* @__PURE__ */ jsxDEV14("section", { children: [
1991
- /* @__PURE__ */ jsxDEV14("h2", { children: "selectors" }, void 0, false, {
1992
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
1993
- lineNumber: 76,
1994
- columnNumber: 11
1995
- }, this),
1996
- /* @__PURE__ */ jsxDEV14(
1997
- TokenList,
1998
- {
1999
- storeHooks,
2000
- tokenIndex: selectorTokenIndexState
2001
- },
2002
- void 0,
2003
- false,
2004
- {
2005
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
2006
- lineNumber: 77,
2007
- columnNumber: 11
2008
- },
2009
- this
2010
- )
2011
- ] }, void 0, true, {
3954
+ /* @__PURE__ */ jsxDEV19("nav", { children: devtoolsViewOptions.map((viewOption) => /* @__PURE__ */ jsxDEV19(
3955
+ "button",
3956
+ {
3957
+ type: "button",
3958
+ className: viewOption === devtoolsView ? `active` : ``,
3959
+ onClick: () => setDevtoolsView(viewOption),
3960
+ disabled: viewOption === devtoolsView,
3961
+ children: viewOption
3962
+ },
3963
+ viewOption,
3964
+ false,
3965
+ {
2012
3966
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
2013
- lineNumber: 75,
3967
+ lineNumber: 63,
2014
3968
  columnNumber: 10
2015
- }, this)
2016
- ] }, void 0, true, {
2017
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
2018
- lineNumber: 67,
2019
- columnNumber: 9
2020
- }, this) }, void 0, false, {
3969
+ },
3970
+ this
3971
+ )) }, void 0, false, {
2021
3972
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
2022
- lineNumber: 66,
3973
+ lineNumber: 61,
2023
3974
  columnNumber: 8
2024
3975
  }, this)
2025
3976
  ] }, void 0, true, {
2026
3977
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
2027
- lineNumber: 62,
3978
+ lineNumber: 59,
2028
3979
  columnNumber: 7
2029
- }, this) : null,
2030
- /* @__PURE__ */ jsxDEV14("footer", { children: /* @__PURE__ */ jsxDEV14(
2031
- "button",
2032
- {
2033
- type: "button",
2034
- onMouseDown: () => mouseHasMoved.current = false,
2035
- onMouseMove: () => mouseHasMoved.current = true,
2036
- onMouseUp: () => {
2037
- if (!mouseHasMoved.current) {
2038
- setDevtoolsAreOpen((open) => !open);
2039
- }
2040
- },
2041
- children: "\u{1F441}\u200D\u{1F5E8}"
2042
- },
2043
- void 0,
2044
- false,
2045
- {
2046
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
2047
- lineNumber: 87,
2048
- columnNumber: 7
3980
+ }, this),
3981
+ /* @__PURE__ */ jsxDEV19(motion.main, { children: /* @__PURE__ */ jsxDEV19(LayoutGroup, { children: devtoolsView === `atoms` ? /* @__PURE__ */ jsxDEV19(StateIndex, { tokenIndex: atomIndex }, void 0, false, {
3982
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
3983
+ lineNumber: 78,
3984
+ columnNumber: 10
3985
+ }, this) : devtoolsView === `selectors` ? /* @__PURE__ */ jsxDEV19(StateIndex, { tokenIndex: selectorIndex }, void 0, false, {
3986
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
3987
+ lineNumber: 80,
3988
+ columnNumber: 10
3989
+ }, this) : devtoolsView === `transactions` ? /* @__PURE__ */ jsxDEV19(TransactionIndex, {}, void 0, false, {
3990
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
3991
+ lineNumber: 82,
3992
+ columnNumber: 10
3993
+ }, this) : devtoolsView === `timelines` ? /* @__PURE__ */ jsxDEV19(TimelineIndex, {}, void 0, false, {
3994
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
3995
+ lineNumber: 84,
3996
+ columnNumber: 10
3997
+ }, this) : null }, void 0, false, {
3998
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
3999
+ lineNumber: 76,
4000
+ columnNumber: 8
4001
+ }, this) }, void 0, false, {
4002
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
4003
+ lineNumber: 75,
4004
+ columnNumber: 7
4005
+ }, this)
4006
+ ] }, void 0, true, {
4007
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
4008
+ lineNumber: 58,
4009
+ columnNumber: 6
4010
+ }, this) : null,
4011
+ /* @__PURE__ */ jsxDEV19("footer", { children: /* @__PURE__ */ jsxDEV19(
4012
+ "button",
4013
+ {
4014
+ type: "button",
4015
+ onMouseDown: () => mouseHasMoved.current = false,
4016
+ onMouseMove: () => mouseHasMoved.current = true,
4017
+ onMouseUp: () => {
4018
+ if (!mouseHasMoved.current) {
4019
+ setDevtoolsAreOpen((open) => !open);
4020
+ }
2049
4021
  },
2050
- this
2051
- ) }, void 0, false, {
4022
+ children: "\u{1F441}\u200D\u{1F5E8}"
4023
+ },
4024
+ void 0,
4025
+ false,
4026
+ {
2052
4027
  fileName: "../src/react-devtools/AtomIODevtools.tsx",
2053
- lineNumber: 86,
4028
+ lineNumber: 91,
2054
4029
  columnNumber: 6
2055
- }, this)
2056
- ]
2057
- },
2058
- void 0,
2059
- true,
2060
- {
2061
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
2062
- lineNumber: 45,
2063
- columnNumber: 5
2064
- },
2065
- this
2066
- )
2067
- ] }, void 0, true, {
2068
- fileName: "../src/react-devtools/AtomIODevtools.tsx",
2069
- lineNumber: 32,
2070
- columnNumber: 4
2071
- }, this);
2072
- };
2073
- return Devtools;
4030
+ },
4031
+ this
4032
+ ) }, void 0, false, {
4033
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
4034
+ lineNumber: 90,
4035
+ columnNumber: 5
4036
+ }, this)
4037
+ ]
4038
+ },
4039
+ void 0,
4040
+ true,
4041
+ {
4042
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
4043
+ lineNumber: 41,
4044
+ columnNumber: 4
4045
+ },
4046
+ this
4047
+ )
4048
+ ] }, void 0, true, {
4049
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
4050
+ lineNumber: 28,
4051
+ columnNumber: 3
4052
+ }, this);
2074
4053
  };
2075
- var AtomIODevtools = composeDevtools({ useI, useO, useIO });
4054
+
4055
+ // ../src/react-devtools/index.ts
4056
+ var {
4057
+ atomIndex,
4058
+ selectorIndex,
4059
+ transactionIndex,
4060
+ findTransactionLogState,
4061
+ timelineIndex,
4062
+ findTimelineState
4063
+ } = attachIntrospectionStates();
4064
+ var devtoolsAreOpenState = atom({
4065
+ key: `\u{1F441}\u200D\u{1F5E8} Devtools Are Open`,
4066
+ default: true,
4067
+ effects: [lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8} Devtools Are Open`)]
4068
+ });
4069
+ var devtoolsViewSelectionState = atom({
4070
+ key: `\u{1F441}\u200D\u{1F5E8} Devtools View Selection`,
4071
+ default: `atoms`,
4072
+ effects: [lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8} Devtools View`)]
4073
+ });
4074
+ var devtoolsViewOptionsState = atom({
4075
+ key: `\u{1F441}\u200D\u{1F5E8} Devtools View Options`,
4076
+ default: [`atoms`, `selectors`, `transactions`, `timelines`],
4077
+ effects: [lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8} Devtools View Options`)]
4078
+ });
4079
+ var findViewIsOpenState = atomFamily({
4080
+ key: `\u{1F441}\u200D\u{1F5E8} Devtools View Is Open`,
4081
+ default: false,
4082
+ effects: (key) => [lazyLocalStorageEffect(key + `:view-is-open`)]
4083
+ });
4084
+ var primitiveRefinery = new Refinery({
4085
+ number: (input) => typeof input === `number`,
4086
+ string: (input) => typeof input === `string`,
4087
+ boolean: (input) => typeof input === `boolean`,
4088
+ null: (input) => input === null
4089
+ });
4090
+ var jsonTreeRefinery = new Refinery({
4091
+ object: isPlainObject,
4092
+ array: (input) => Array.isArray(input)
4093
+ });
4094
+ var prettyJson = new Differ(primitiveRefinery, jsonTreeRefinery, {
4095
+ number: diffNumber,
4096
+ string: diffString,
4097
+ boolean: diffBoolean,
4098
+ null: () => ({ summary: `No Change` }),
4099
+ object: diffObject,
4100
+ array: diffArray
4101
+ });
2076
4102
  export {
2077
4103
  AtomIODevtools,
2078
- composeDevtools
4104
+ atomIndex,
4105
+ devtoolsAreOpenState,
4106
+ devtoolsViewOptionsState,
4107
+ devtoolsViewSelectionState,
4108
+ findTimelineState,
4109
+ findTransactionLogState,
4110
+ findViewIsOpenState,
4111
+ jsonTreeRefinery,
4112
+ prettyJson,
4113
+ primitiveRefinery,
4114
+ selectorIndex,
4115
+ timelineIndex,
4116
+ transactionIndex
2079
4117
  };
2080
4118
  //# sourceMappingURL=index.mjs.map