atom.io 0.6.4 → 0.6.6

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