atom.io 0.6.5 → 0.6.7

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