atom.io 0.6.5 → 0.6.6

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