atom.io 0.6.2 → 0.6.4

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 (117) hide show
  1. package/dist/index.d.mts +27 -15
  2. package/dist/index.d.ts +27 -15
  3. package/dist/index.js +44 -24
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +44 -24
  6. package/dist/index.mjs.map +1 -1
  7. package/json/dist/index.d.mts +18 -0
  8. package/json/dist/index.d.ts +18 -0
  9. package/json/dist/index.js +51 -0
  10. package/json/dist/index.js.map +1 -0
  11. package/json/dist/index.mjs +15 -0
  12. package/json/dist/index.mjs.map +1 -0
  13. package/json/package.json +13 -13
  14. package/package.json +31 -12
  15. package/react/dist/index.d.mts +24 -0
  16. package/react/dist/index.d.ts +24 -0
  17. package/react/dist/index.js +87 -0
  18. package/react/dist/index.js.map +1 -0
  19. package/react/dist/index.mjs +45 -0
  20. package/react/dist/index.mjs.map +1 -0
  21. package/react/package.json +13 -13
  22. package/react-devtools/dist/index.css +26 -0
  23. package/react-devtools/dist/index.css.map +1 -0
  24. package/react-devtools/dist/index.d.mts +15 -0
  25. package/react-devtools/dist/index.d.ts +15 -0
  26. package/react-devtools/dist/index.js +2108 -0
  27. package/react-devtools/dist/index.js.map +1 -0
  28. package/react-devtools/dist/index.mjs +2080 -0
  29. package/react-devtools/dist/index.mjs.map +1 -0
  30. package/react-devtools/package.json +13 -13
  31. package/realtime/dist/index.d.mts +27 -0
  32. package/realtime/dist/index.d.ts +27 -0
  33. package/realtime/dist/index.js +191 -0
  34. package/realtime/dist/index.js.map +1 -0
  35. package/realtime/dist/index.mjs +152 -0
  36. package/realtime/dist/index.mjs.map +1 -0
  37. package/realtime/package.json +13 -13
  38. package/realtime-react/dist/index.d.mts +45 -0
  39. package/realtime-react/dist/index.d.ts +45 -0
  40. package/realtime-react/dist/index.js +217 -0
  41. package/realtime-react/dist/index.js.map +1 -0
  42. package/realtime-react/dist/index.mjs +172 -0
  43. package/realtime-react/dist/index.mjs.map +1 -0
  44. package/realtime-react/package.json +13 -13
  45. package/realtime-testing/dist/index.d.mts +49 -0
  46. package/realtime-testing/dist/index.d.ts +49 -0
  47. package/realtime-testing/dist/index.js +165 -0
  48. package/realtime-testing/dist/index.js.map +1 -0
  49. package/realtime-testing/dist/index.mjs +129 -0
  50. package/realtime-testing/dist/index.mjs.map +1 -0
  51. package/realtime-testing/package.json +15 -0
  52. package/src/atom.ts +16 -17
  53. package/src/index.ts +59 -59
  54. package/src/internal/atom-internal.ts +37 -37
  55. package/src/internal/families-internal.ts +115 -116
  56. package/src/internal/get.ts +83 -83
  57. package/src/internal/index.ts +1 -0
  58. package/src/internal/is-default.ts +17 -17
  59. package/src/internal/meta/attach-meta.ts +7 -7
  60. package/src/internal/meta/meta-state.ts +115 -115
  61. package/src/internal/operation.ts +93 -93
  62. package/src/internal/selector/create-read-write-selector.ts +47 -47
  63. package/src/internal/selector/create-readonly-selector.ts +38 -38
  64. package/src/internal/selector/lookup-selector-sources.ts +9 -9
  65. package/src/internal/selector/register-selector.ts +44 -44
  66. package/src/internal/selector/trace-selector-atoms.ts +30 -30
  67. package/src/internal/selector/update-selector-atoms.ts +25 -25
  68. package/src/internal/selector-internal.ts +38 -39
  69. package/src/internal/set.ts +78 -78
  70. package/src/internal/store.ts +119 -119
  71. package/src/internal/subject.ts +24 -0
  72. package/src/internal/subscribe-internal.ts +62 -62
  73. package/src/internal/time-travel-internal.ts +76 -76
  74. package/src/internal/timeline/add-atom-to-timeline.ts +158 -153
  75. package/src/internal/timeline-internal.ts +81 -82
  76. package/src/internal/transaction/abort-transaction.ts +8 -8
  77. package/src/internal/transaction/apply-transaction.ts +41 -41
  78. package/src/internal/transaction/build-transaction.ts +28 -28
  79. package/src/internal/transaction/index.ts +7 -7
  80. package/src/internal/transaction/redo-transaction.ts +13 -13
  81. package/src/internal/transaction/undo-transaction.ts +13 -13
  82. package/src/internal/transaction-internal.ts +49 -49
  83. package/src/json/select-json.ts +12 -12
  84. package/src/logger.ts +30 -30
  85. package/src/react/store-context.tsx +5 -6
  86. package/src/react/store-hooks.ts +19 -20
  87. package/src/react-devtools/AtomIODevtools.tsx +85 -85
  88. package/src/react-devtools/StateEditor.tsx +54 -55
  89. package/src/react-devtools/TokenList.tsx +49 -45
  90. package/src/react-explorer/AtomIOExplorer.tsx +198 -187
  91. package/src/react-explorer/explorer-effects.ts +11 -11
  92. package/src/react-explorer/explorer-states.ts +186 -193
  93. package/src/react-explorer/index.ts +11 -11
  94. package/src/react-explorer/space-states.ts +48 -50
  95. package/src/react-explorer/view-states.ts +25 -25
  96. package/src/realtime/hook-composition/expose-family.ts +81 -81
  97. package/src/realtime/hook-composition/expose-single.ts +26 -26
  98. package/src/realtime/hook-composition/expose-timeline.ts +60 -0
  99. package/src/realtime/hook-composition/index.ts +2 -2
  100. package/src/realtime/hook-composition/receive-state.ts +18 -18
  101. package/src/realtime/hook-composition/receive-transaction.ts +8 -8
  102. package/src/realtime-react/realtime-context.tsx +18 -19
  103. package/src/realtime-react/realtime-hooks.ts +17 -17
  104. package/src/realtime-react/realtime-state.ts +4 -4
  105. package/src/realtime-react/use-pull-family-member.ts +16 -17
  106. package/src/realtime-react/use-pull-family.ts +14 -15
  107. package/src/realtime-react/use-pull.ts +13 -14
  108. package/src/realtime-react/use-push.ts +16 -17
  109. package/src/realtime-react/use-server-action.ts +22 -23
  110. package/src/realtime-testing/index.ts +1 -0
  111. package/src/realtime-testing/setup-realtime-test.tsx +159 -0
  112. package/src/selector.ts +26 -27
  113. package/src/silo.ts +38 -38
  114. package/src/subscribe.ts +68 -68
  115. package/src/timeline.ts +13 -13
  116. package/src/transaction.ts +28 -28
  117. package/src/web-effects/storage.ts +17 -17
@@ -0,0 +1,2080 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a2, b2) => {
9
+ for (var prop in b2 || (b2 = {}))
10
+ if (__hasOwnProp.call(b2, prop))
11
+ __defNormalProp(a2, prop, b2[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b2)) {
14
+ if (__propIsEnum.call(b2, prop))
15
+ __defNormalProp(a2, prop, b2[prop]);
16
+ }
17
+ return a2;
18
+ };
19
+ var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
20
+ var __restKey = (key) => typeof key === "symbol" ? key : key + "";
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+
34
+ // ../src/react-devtools/AtomIODevtools.tsx
35
+ import { atom, __INTERNAL__ } from "atom.io";
36
+ import { useI, useO, useIO } from "atom.io/react";
37
+ import { LayoutGroup, motion, spring } from "framer-motion";
38
+ import { useRef as useRef4 } from "react";
39
+
40
+ // ../src/react-devtools/TokenList.tsx
41
+ import { getState } from "atom.io";
42
+ import { Fragment as Fragment3 } from "react";
43
+
44
+ // ../../anvl/src/object/index.ts
45
+ import { pipe as pipe3 } from "fp-ts/function";
46
+
47
+ // ../../anvl/src/object/refinement.ts
48
+ import { pipe as pipe2 } from "fp-ts/function";
49
+
50
+ // ../../anvl/src/object/access.ts
51
+ var access = (k) => Object.assign((obj) => obj[k], {
52
+ in: (obj) => obj[k]
53
+ });
54
+
55
+ // ../../anvl/src/object/entries.ts
56
+ var recordToEntries = (obj) => Object.entries(obj);
57
+ var entriesToRecord = (entries) => Object.fromEntries(entries);
58
+
59
+ // ../../anvl/src/object/mapObject.ts
60
+ import { pipe } from "fp-ts/function";
61
+
62
+ // ../../anvl/src/array/index.ts
63
+ var isArray = (isType) => (input) => Array.isArray(input) && input.every((item) => isType(item));
64
+ var map = (f) => (a2) => a2.map(f);
65
+ var every = (f = Boolean) => (a2) => a2.every(f);
66
+ var allTrue = every((x) => x === true);
67
+
68
+ // ../../anvl/src/object/mapObject.ts
69
+ var mapObject = (obj, fn) => pipe(
70
+ obj,
71
+ recordToEntries,
72
+ map(([key, val]) => [key, fn(val, key)]),
73
+ entriesToRecord
74
+ );
75
+ var mob = (fn) => (obj) => mapObject(obj, fn);
76
+
77
+ // ../../anvl/src/function/index.ts
78
+ var doNothing = () => void 0;
79
+ var become = (nextVersionOfThing) => (originalThing) => nextVersionOfThing instanceof Function ? nextVersionOfThing(
80
+ originalThing instanceof Function ? originalThing() : originalThing
81
+ ) : nextVersionOfThing;
82
+ var pass = (...params) => (fn) => fn(...params);
83
+ var raiseError = (message) => {
84
+ throw new Error(message);
85
+ };
86
+ var attempt = (fn) => {
87
+ try {
88
+ fn();
89
+ return true;
90
+ } catch (_) {
91
+ return false;
92
+ }
93
+ };
94
+
95
+ // ../../anvl/src/nullish/index.ts
96
+ var isUndefined = (input) => input === void 0;
97
+ var ifDefined = (validate) => (input) => isUndefined(input) || validate(input);
98
+ var ifNullish = (alt) => (input) => input != null ? input : alt;
99
+
100
+ // ../../anvl/src/object/refinement.ts
101
+ var isNonNullObject = (input) => typeof input === `object` && input !== null;
102
+ var isPlainObject = (input) => isNonNullObject(input) && Object.getPrototypeOf(input) === Object.prototype;
103
+ var isRecord = (isKey, isValue) => (input) => isPlainObject(input) && Object.entries(input).every(([k, v]) => isKey(k) && isValue(v));
104
+ var hasProperties = (isValue, options = { allowExtraProperties: false }) => {
105
+ const name = `{${recordToEntries(
106
+ isValue
107
+ ).map(([k, v]) => String(k) + `:` + v.name).join(`,`)}}`;
108
+ const _ = {
109
+ [name]: (input) => isPlainObject(input) && pipe2(
110
+ isValue,
111
+ Object.entries,
112
+ every(([key, val]) => key in input || val(void 0))
113
+ ) && pipe2(
114
+ input,
115
+ mob(
116
+ (val, key) => pipe2(
117
+ isValue,
118
+ access(key),
119
+ ifNullish(() => options.allowExtraProperties),
120
+ pass(val)
121
+ )
122
+ ),
123
+ Object.values,
124
+ allTrue
125
+ )
126
+ };
127
+ return _[name];
128
+ };
129
+ var doesExtend = (
130
+ /* alias for hasExactProperties with allowExtraProperties */
131
+ (isValue) => hasProperties(isValue, { allowExtraProperties: true })
132
+ );
133
+
134
+ // ../../anvl/src/object/index.ts
135
+ var delve = (obj, path) => {
136
+ const found = path.reduce((acc, key) => acc == null ? void 0 : acc[key], obj);
137
+ return found === void 0 ? new Error(`Not found`) : { found };
138
+ };
139
+
140
+ // ../../anvl/src/json/index.ts
141
+ import { pipe as pipe4 } from "fp-ts/function";
142
+
143
+ // ../../anvl/src/json/refine.ts
144
+ import { isBoolean } from "fp-ts/boolean";
145
+ import { isNumber } from "fp-ts/number";
146
+ import { isString } from "fp-ts/string";
147
+ var refineJsonType = (data) => data === null ? { type: `null`, data: null } : isBoolean(data) ? { type: `boolean`, data } : isNumber(data) ? { type: `number`, data } : isString(data) ? { type: `string`, data } : Array.isArray(data) ? { type: `array`, data } : isPlainObject(data) ? { type: `object`, data } : raiseError(
148
+ data === void 0 ? `undefined passed to refineJsonType. This is not valid JSON.` : `${stringifyJson(data)} with prototype "${Object.getPrototypeOf(data).constructor.name}" passed to refineJsonType. This is not valid JSON.`
149
+ );
150
+ var isJson = (input) => {
151
+ try {
152
+ JSON.stringify(input);
153
+ return true;
154
+ } catch (e) {
155
+ return false;
156
+ }
157
+ };
158
+ var isPlainJson = (input) => attempt(() => isJson(input) && refineJsonType(input));
159
+
160
+ // ../../anvl/src/json/index.ts
161
+ var stringifyJson = (json) => JSON.stringify(json);
162
+ var JSON_TYPE_NAMES = [
163
+ `array`,
164
+ `boolean`,
165
+ `null`,
166
+ `number`,
167
+ `object`,
168
+ `string`
169
+ ];
170
+ var JSON_DEFAULTS = {
171
+ array: [],
172
+ boolean: false,
173
+ null: null,
174
+ number: 0,
175
+ object: {},
176
+ string: ``
177
+ };
178
+
179
+ // ../../hamr/src/react-elastic-input/ElasticInput.tsx
180
+ import {
181
+ useLayoutEffect,
182
+ useImperativeHandle,
183
+ forwardRef,
184
+ useRef,
185
+ useState
186
+ } from "react";
187
+ import { jsxDEV } from "react/jsx-dev-runtime";
188
+ var ElasticInput = forwardRef(function ElasticInputFC(props, ref) {
189
+ var _a2, _b, _c, _d;
190
+ const inputRef = useRef(null);
191
+ const spanRef = useRef(null);
192
+ const [inputWidth, setInputWidth] = useState(`auto`);
193
+ useImperativeHandle(ref, () => ({
194
+ focus: () => {
195
+ var _a3;
196
+ (_a3 = inputRef.current) == null ? void 0 : _a3.focus();
197
+ }
198
+ }));
199
+ const extraWidth = props.type === `number` ? 15 : 0;
200
+ useLayoutEffect(() => {
201
+ if (spanRef.current) {
202
+ setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
203
+ const interval = setInterval(() => {
204
+ if (spanRef.current) {
205
+ setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
206
+ }
207
+ }, 1e3);
208
+ return () => clearInterval(interval);
209
+ }
210
+ }, [(_a2 = inputRef.current) == null ? void 0 : _a2.value, props.value]);
211
+ return /* @__PURE__ */ jsxDEV("div", { style: { display: `inline-block`, position: `relative` }, children: [
212
+ /* @__PURE__ */ jsxDEV(
213
+ "input",
214
+ __spreadProps(__spreadValues({}, props), {
215
+ ref: inputRef,
216
+ style: __spreadValues({
217
+ padding: 0,
218
+ borderRadius: 0,
219
+ border: `none`,
220
+ fontFamily: `inherit`,
221
+ fontSize: `inherit`,
222
+ width: inputWidth
223
+ }, props.style)
224
+ }),
225
+ void 0,
226
+ false,
227
+ {
228
+ fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
229
+ lineNumber: 45,
230
+ columnNumber: 4
231
+ },
232
+ this
233
+ ),
234
+ /* @__PURE__ */ jsxDEV(
235
+ "span",
236
+ {
237
+ ref: spanRef,
238
+ style: {
239
+ padding: (_b = props.style) == null ? void 0 : _b.padding,
240
+ position: `absolute`,
241
+ visibility: `hidden`,
242
+ // color: `red`,
243
+ whiteSpace: `pre`,
244
+ fontFamily: ((_c = props.style) == null ? void 0 : _c.fontFamily) || `inherit`,
245
+ fontSize: ((_d = props.style) == null ? void 0 : _d.fontSize) || `inherit`
246
+ },
247
+ children: props.value
248
+ },
249
+ void 0,
250
+ false,
251
+ {
252
+ fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
253
+ lineNumber: 58,
254
+ columnNumber: 4
255
+ },
256
+ this
257
+ )
258
+ ] }, void 0, true, {
259
+ fileName: "../../hamr/src/react-elastic-input/ElasticInput.tsx",
260
+ lineNumber: 44,
261
+ columnNumber: 3
262
+ }, this);
263
+ });
264
+
265
+ // ../../hamr/src/react-elastic-input/NumberInput.tsx
266
+ import { pipe as pipe5 } from "fp-ts/function";
267
+ import { useState as useState2, useId, useRef as useRef2 } from "react";
268
+
269
+ // ../../anvl/src/number/clamp.ts
270
+ var clampInto = (min, max) => (value) => value < min ? min : value > max ? max : value;
271
+
272
+ // ../../hamr/src/react-elastic-input/NumberInput.tsx
273
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
274
+ function round(value, decimalPlaces) {
275
+ if (decimalPlaces === void 0)
276
+ return value;
277
+ const factor = Math.pow(10, decimalPlaces);
278
+ return Math.round(value * factor) / factor;
279
+ }
280
+ var VALID_NON_NUMBERS = [``, `-`, `.`, `-.`];
281
+ var isValidNonNumber = (input) => VALID_NON_NUMBERS.includes(input);
282
+ var VALID_NON_NUMBER_INTERPRETATIONS = {
283
+ "": null,
284
+ "-": 0,
285
+ ".": 0,
286
+ "-.": 0
287
+ };
288
+ var isDecimalInProgress = (input) => input === `0` || !isNaN(Number(input)) && input.includes(`.`);
289
+ var textToValue = (input, allowDecimal) => {
290
+ if (isValidNonNumber(input))
291
+ return VALID_NON_NUMBER_INTERPRETATIONS[input];
292
+ return allowDecimal ? parseFloat(input) : Math.round(parseFloat(input));
293
+ };
294
+ var DEFAULT_NUMBER_CONSTRAINTS = {
295
+ max: Infinity,
296
+ min: -Infinity,
297
+ decimalPlaces: 100,
298
+ nullable: true
299
+ };
300
+ var initRefinery = (constraints) => (input) => {
301
+ if (input === null && constraints.nullable === true) {
302
+ return null;
303
+ }
304
+ const { max, min, decimalPlaces } = __spreadValues(__spreadValues({}, DEFAULT_NUMBER_CONSTRAINTS), constraints);
305
+ const constrained = pipe5(
306
+ input != null ? input : 0,
307
+ clampInto(min, max),
308
+ (n) => decimalPlaces ? round(n, decimalPlaces) : n
309
+ );
310
+ return constrained;
311
+ };
312
+ var valueToText = (numericValue) => {
313
+ if (numericValue === null || numericValue === void 0) {
314
+ return ``;
315
+ }
316
+ return numericValue.toString();
317
+ };
318
+ var NumberInput = ({
319
+ autoSize = false,
320
+ customCss,
321
+ decimalPlaces,
322
+ disabled = false,
323
+ label,
324
+ max,
325
+ min,
326
+ name,
327
+ onChange,
328
+ onClick,
329
+ placeholder = ``,
330
+ set = () => null,
331
+ testId,
332
+ value = null
333
+ }) => {
334
+ const id = useId();
335
+ const [temporaryEntry, setTemporaryEntry] = useState2(null);
336
+ const userHasMadeDeliberateChange = useRef2(false);
337
+ const refine = initRefinery({ max, min, decimalPlaces, nullable: true });
338
+ const allowDecimal = decimalPlaces === void 0 || decimalPlaces > 0;
339
+ const handleBlur = () => {
340
+ if (userHasMadeDeliberateChange.current) {
341
+ set(refine(value != null ? value : null));
342
+ setTemporaryEntry(null);
343
+ }
344
+ userHasMadeDeliberateChange.current = false;
345
+ };
346
+ const handleChange = (event) => {
347
+ var _a2;
348
+ if (onChange)
349
+ onChange(event);
350
+ if (set === void 0)
351
+ return;
352
+ userHasMadeDeliberateChange.current = true;
353
+ const input = event.target.value;
354
+ if (isValidNonNumber(input) || isDecimalInProgress(input)) {
355
+ setTemporaryEntry(input);
356
+ const textInterpretation = isDecimalInProgress(input) ? input : (_a2 = min == null ? void 0 : min.toString()) != null ? _a2 : `0`;
357
+ const newValue = textToValue(textInterpretation, allowDecimal);
358
+ set(refine(newValue));
359
+ return;
360
+ }
361
+ setTemporaryEntry(null);
362
+ const inputIsNumeric = !isNaN(Number(input)) && !input.includes(` `) || allowDecimal && input === `.` || allowDecimal && input === `-.` || input === `` || input === `-`;
363
+ const numericValue = textToValue(input, allowDecimal);
364
+ if (inputIsNumeric) {
365
+ set(refine(numericValue));
366
+ }
367
+ };
368
+ const displayValue = temporaryEntry != null ? temporaryEntry : valueToText(value ? refine(value) : value);
369
+ return /* @__PURE__ */ jsxDEV2("span", { css: customCss, children: [
370
+ label && /* @__PURE__ */ jsxDEV2("label", { htmlFor: id, children: label }, void 0, false, {
371
+ fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
372
+ lineNumber: 166,
373
+ columnNumber: 14
374
+ }, this),
375
+ autoSize ? /* @__PURE__ */ jsxDEV2(
376
+ ElasticInput,
377
+ {
378
+ type: "text",
379
+ value: displayValue,
380
+ placeholder: placeholder != null ? placeholder : `-`,
381
+ onChange: handleChange,
382
+ onBlur: handleBlur,
383
+ disabled,
384
+ name: name != null ? name : id,
385
+ id,
386
+ onClick,
387
+ "data-testid": `number-input-${testId != null ? testId : id}`
388
+ },
389
+ void 0,
390
+ false,
391
+ {
392
+ fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
393
+ lineNumber: 168,
394
+ columnNumber: 5
395
+ },
396
+ this
397
+ ) : /* @__PURE__ */ jsxDEV2(
398
+ "input",
399
+ {
400
+ type: "text",
401
+ value: displayValue,
402
+ placeholder: placeholder != null ? placeholder : `-`,
403
+ onChange: handleChange,
404
+ onBlur: handleBlur,
405
+ disabled,
406
+ name: name != null ? name : id,
407
+ id,
408
+ onClick,
409
+ "data-testid": `number-input-${testId != null ? testId : id}`
410
+ },
411
+ void 0,
412
+ false,
413
+ {
414
+ fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
415
+ lineNumber: 181,
416
+ columnNumber: 5
417
+ },
418
+ this
419
+ )
420
+ ] }, void 0, true, {
421
+ fileName: "../../hamr/src/react-elastic-input/NumberInput.tsx",
422
+ lineNumber: 165,
423
+ columnNumber: 3
424
+ }, this);
425
+ };
426
+
427
+ // ../../hamr/src/react-elastic-input/TextInput.tsx
428
+ import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
429
+ var TextInput = ({
430
+ value,
431
+ set,
432
+ label,
433
+ placeholder,
434
+ customCss,
435
+ autoSize = false
436
+ }) => {
437
+ return /* @__PURE__ */ jsxDEV3("span", { css: customCss, children: [
438
+ /* @__PURE__ */ jsxDEV3("label", { children: label }, void 0, false, {
439
+ fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
440
+ lineNumber: 25,
441
+ columnNumber: 4
442
+ }, this),
443
+ autoSize ? /* @__PURE__ */ jsxDEV3(
444
+ ElasticInput,
445
+ {
446
+ type: "text",
447
+ value,
448
+ onChange: (e) => set == null ? void 0 : set(e.target.value),
449
+ disabled: set === void 0,
450
+ placeholder
451
+ },
452
+ void 0,
453
+ false,
454
+ {
455
+ fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
456
+ lineNumber: 27,
457
+ columnNumber: 5
458
+ },
459
+ this
460
+ ) : /* @__PURE__ */ jsxDEV3(
461
+ "input",
462
+ {
463
+ type: "text",
464
+ value,
465
+ onChange: (e) => set == null ? void 0 : set(e.target.value),
466
+ disabled: set === void 0,
467
+ placeholder
468
+ },
469
+ void 0,
470
+ false,
471
+ {
472
+ fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
473
+ lineNumber: 35,
474
+ columnNumber: 5
475
+ },
476
+ this
477
+ )
478
+ ] }, void 0, true, {
479
+ fileName: "../../hamr/src/react-elastic-input/TextInput.tsx",
480
+ lineNumber: 24,
481
+ columnNumber: 3
482
+ }, this);
483
+ };
484
+
485
+ // ../../hamr/src/react-json-editor/editors-by-type/utilities/array-elements.ts
486
+ var makeElementSetters = (data, set) => data.map(
487
+ (value, index) => (newValue) => set(() => {
488
+ const newData = [...data];
489
+ newData[index] = become(newValue)(value);
490
+ return newData;
491
+ })
492
+ );
493
+
494
+ // ../../hamr/src/react-json-editor/json-editor-internal.tsx
495
+ import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
496
+ var JsonEditor_INTERNAL = ({
497
+ data,
498
+ set,
499
+ schema,
500
+ name,
501
+ rename,
502
+ remove,
503
+ recast,
504
+ path = [],
505
+ isReadonly = () => false,
506
+ isHidden = () => false,
507
+ className,
508
+ customCss,
509
+ Header: HeaderDisplay,
510
+ Components
511
+ }) => {
512
+ const json = refineJsonType(data);
513
+ const SubEditor = SubEditors[json.type];
514
+ const disabled = isReadonly(path);
515
+ return isHidden(path) ? null : /* @__PURE__ */ jsxDEV4(Components.ErrorBoundary, { children: /* @__PURE__ */ jsxDEV4(Components.EditorWrapper, { className, customCss, children: [
516
+ remove && /* @__PURE__ */ jsxDEV4(
517
+ Components.Button,
518
+ {
519
+ onClick: disabled ? doNothing : remove,
520
+ disabled,
521
+ children: /* @__PURE__ */ jsxDEV4(Components.DeleteIcon, {}, void 0, false, {
522
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
523
+ lineNumber: 61,
524
+ columnNumber: 7
525
+ }, this)
526
+ },
527
+ void 0,
528
+ false,
529
+ {
530
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
531
+ lineNumber: 57,
532
+ columnNumber: 6
533
+ },
534
+ this
535
+ ),
536
+ HeaderDisplay && /* @__PURE__ */ jsxDEV4(HeaderDisplay, { data, schema }, void 0, false, {
537
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
538
+ lineNumber: 64,
539
+ columnNumber: 23
540
+ }, this),
541
+ rename && /* @__PURE__ */ jsxDEV4(Components.KeyWrapper, { children: /* @__PURE__ */ jsxDEV4(
542
+ ElasticInput,
543
+ {
544
+ value: name,
545
+ onChange: disabled ? doNothing : (e) => rename(e.target.value),
546
+ disabled
547
+ },
548
+ void 0,
549
+ false,
550
+ {
551
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
552
+ lineNumber: 67,
553
+ columnNumber: 7
554
+ },
555
+ this
556
+ ) }, void 0, false, {
557
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
558
+ lineNumber: 66,
559
+ columnNumber: 6
560
+ }, this),
561
+ /* @__PURE__ */ jsxDEV4(
562
+ SubEditor,
563
+ {
564
+ data: json.data,
565
+ set,
566
+ schema,
567
+ remove,
568
+ rename,
569
+ path,
570
+ isReadonly,
571
+ isHidden,
572
+ Components
573
+ },
574
+ void 0,
575
+ false,
576
+ {
577
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
578
+ lineNumber: 74,
579
+ columnNumber: 5
580
+ },
581
+ this
582
+ ),
583
+ recast && /* @__PURE__ */ jsxDEV4(
584
+ "select",
585
+ {
586
+ onChange: disabled ? doNothing : (e) => recast(e.target.value),
587
+ value: json.type,
588
+ disabled,
589
+ children: Object.keys(SubEditors).map((type) => /* @__PURE__ */ jsxDEV4("option", { value: type, children: type }, type, false, {
590
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
591
+ lineNumber: 96,
592
+ columnNumber: 8
593
+ }, this))
594
+ },
595
+ void 0,
596
+ false,
597
+ {
598
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
599
+ lineNumber: 86,
600
+ columnNumber: 6
601
+ },
602
+ this
603
+ )
604
+ ] }, void 0, true, {
605
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
606
+ lineNumber: 55,
607
+ columnNumber: 4
608
+ }, this) }, void 0, false, {
609
+ fileName: "../../hamr/src/react-json-editor/json-editor-internal.tsx",
610
+ lineNumber: 54,
611
+ columnNumber: 3
612
+ }, this);
613
+ };
614
+
615
+ // ../../hamr/src/react-json-editor/editors-by-type/array-editor.tsx
616
+ import { Fragment, jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
617
+ var ArrayEditor = ({
618
+ path = [],
619
+ isReadonly = () => false,
620
+ isHidden = () => false,
621
+ data,
622
+ set,
623
+ Components
624
+ }) => {
625
+ const setElement = makeElementSetters(data, set);
626
+ return /* @__PURE__ */ jsxDEV5(Fragment, { children: data.map((element, index) => {
627
+ const newPath = [...path, index];
628
+ return /* @__PURE__ */ jsxDEV5(
629
+ JsonEditor_INTERNAL,
630
+ {
631
+ path: newPath,
632
+ isReadonly,
633
+ isHidden,
634
+ data: element,
635
+ set: setElement[index],
636
+ Components
637
+ },
638
+ newPath.join(``),
639
+ false,
640
+ {
641
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/array-editor.tsx",
642
+ lineNumber: 23,
643
+ columnNumber: 6
644
+ },
645
+ this
646
+ );
647
+ }) }, void 0, false, {
648
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/array-editor.tsx",
649
+ lineNumber: 19,
650
+ columnNumber: 3
651
+ }, this);
652
+ };
653
+
654
+ // ../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx
655
+ import { useRef as useRef3 } from "react";
656
+
657
+ // ../../anvl/src/json-schema/json-schema.ts
658
+ import { isBoolean as isBoolean2 } from "fp-ts/boolean";
659
+ import { isNumber as isNumber2 } from "fp-ts/number";
660
+ import { isString as isString4 } from "fp-ts/string";
661
+
662
+ // ../../anvl/src/json-schema/integer.ts
663
+ import { pipe as pipe6 } from "fp-ts/function";
664
+ var isInteger = (input) => Number.isInteger(input);
665
+ var parseInteger = (input) => {
666
+ if (isInteger(input))
667
+ return input;
668
+ throw new IntegerParseError(input);
669
+ };
670
+ var _a;
671
+ var Fraction = class extends Number {
672
+ constructor(n, d) {
673
+ super(n / d);
674
+ this[_a] = () => this.numerator / this.denominator;
675
+ if (d === 0) {
676
+ throw new Error(`Denominator cannot be zero`);
677
+ }
678
+ this.numerator = parseInteger(n);
679
+ this.denominator = parseInteger(d);
680
+ }
681
+ };
682
+ _a = Symbol.toPrimitive;
683
+ var IntegerParseError = class extends Error {
684
+ constructor(value) {
685
+ super(`Could not parse integer from ${JSON.stringify(value)}`);
686
+ }
687
+ };
688
+ var Int = Object.assign((input) => parseInteger(input), {
689
+ from: (input) => pipe6(
690
+ input,
691
+ String,
692
+ parseFloat,
693
+ (num) => isInteger(num) ? {
694
+ value: num,
695
+ error: null,
696
+ round: null,
697
+ upper: null,
698
+ lower: null,
699
+ ratio: null
700
+ } : {
701
+ value: null,
702
+ error: new IntegerParseError(input),
703
+ round: Math.round(num),
704
+ upper: Math.ceil(num),
705
+ lower: Math.floor(num),
706
+ ratio: null
707
+ }
708
+ ),
709
+ formula: (fm) => {
710
+ return (input) => {
711
+ return fm(
712
+ input
713
+ );
714
+ };
715
+ }
716
+ });
717
+ function asNumber(input) {
718
+ return input;
719
+ }
720
+ var a = asNumber(new Fraction(1, 2));
721
+ var b = asNumber([new Fraction(1, 2)]);
722
+ var c = asNumber({ a: new Fraction(1, 2) });
723
+
724
+ // ../../anvl/src/json-schema/refs.ts
725
+ import { isString as isString2 } from "fp-ts/string";
726
+ function isJsonSchemaRef(input) {
727
+ return doesExtend({
728
+ $ref: isString2
729
+ })(input);
730
+ }
731
+ var colorPalette = {
732
+ $defs: {
733
+ colorChannel: {
734
+ type: `integer`,
735
+ minimum: Int(0),
736
+ maximum: Int(255)
737
+ },
738
+ color: {
739
+ type: `object`,
740
+ properties: {
741
+ red: { $ref: `#/$defs/colorChannel` },
742
+ green: { $ref: `#/$defs/colorChannel` },
743
+ blue: { $ref: `#/$defs/colorChannel` }
744
+ }
745
+ }
746
+ },
747
+ type: `array`,
748
+ items: {
749
+ $ref: `#/$defs/color`
750
+ }
751
+ };
752
+ var retrieveRef = ({
753
+ refNode: { $ref },
754
+ refMap = {},
755
+ root
756
+ }) => {
757
+ if (typeof root === `boolean`) {
758
+ throw new TypeError(`The root is a boolean and cannot be indexed`);
759
+ }
760
+ if ($ref in refMap)
761
+ return { node: refMap[$ref], refMap };
762
+ const [_, ...refPath] = $ref.split(`/`);
763
+ const discovery = delve(root, refPath);
764
+ if (discovery instanceof Error)
765
+ throw discovery;
766
+ let node = discovery.found;
767
+ while (isJsonSchemaRef(node)) {
768
+ const result = retrieveRef({ refNode: node, refMap, root });
769
+ node = result.node;
770
+ refMap = result.refMap;
771
+ }
772
+ if (isJsonSchema(node)) {
773
+ return { node, refMap: __spreadProps(__spreadValues({}, refMap), { [$ref]: node }) };
774
+ }
775
+ throw new TypeError(`The refNode is not a JsonSchema`);
776
+ };
777
+
778
+ // ../../anvl/src/json-schema/string-formats.ts
779
+ import { isString as isString3 } from "fp-ts/string";
780
+ var JSON_SCHEMA_STRING_FORMATS = [
781
+ `date-time`,
782
+ `date`,
783
+ `email`,
784
+ `hostname`,
785
+ `ipv4`,
786
+ `ipv6`,
787
+ `regex`,
788
+ `time`,
789
+ `uri-reference`,
790
+ `uri-template`,
791
+ `uri`,
792
+ `uuid`
793
+ ];
794
+
795
+ // ../../anvl/src/refinement/index.ts
796
+ var canExist = (_) => true;
797
+ var cannotExist = (_) => false;
798
+ var isLiteral = (value) => (input) => input === value;
799
+ var isWithin = (args) => (input) => args.includes(input);
800
+ var couldBe = (isTypeA, logging = false, refinements = [isTypeA]) => {
801
+ const name = `(${refinements.map((r) => r.name || `anon`).join(` | `)})`;
802
+ const _ = {
803
+ [name]: (input) => refinements.some(
804
+ (refinement) => {
805
+ var _a2;
806
+ return logging && console.log(
807
+ refinements.map((r) => r.name || `anon`).join(` | `),
808
+ `>`,
809
+ (_a2 = refinement.name) != null ? _a2 : `anon`,
810
+ `:`,
811
+ refinement(input)
812
+ ), refinement(input);
813
+ }
814
+ )
815
+ };
816
+ const checkTypes = Object.assign(_[name], {
817
+ or: (isTypeB) => couldBe(isTypeB, logging, [...refinements, isTypeB])
818
+ });
819
+ return checkTypes;
820
+ };
821
+ var isUnion = couldBe(cannotExist);
822
+ var mustBe = (isTypeA, logging = false, refinements = [isTypeA]) => {
823
+ const name = `(${refinements.map((r) => r.name || `anon`).join(` & `)})`;
824
+ const _ = {
825
+ [name]: (input) => refinements.every(
826
+ (refinement) => (logging && console.log(
827
+ refinements.map((r) => r.name || `anon`).join(` & `),
828
+ `>`,
829
+ refinement.name || `anon`,
830
+ `:`,
831
+ refinement(input)
832
+ ), refinement(input))
833
+ )
834
+ };
835
+ const checkTypes = Object.assign(_[name], {
836
+ and: (isTypeB) => mustBe(isTypeB, logging, [...refinements, isTypeB])
837
+ });
838
+ return checkTypes;
839
+ };
840
+ var isIntersection = mustBe(canExist);
841
+
842
+ // ../../anvl/src/json-schema/json-schema.ts
843
+ var JSON_SCHEMA_TYPE_NAMES = [...JSON_TYPE_NAMES, `integer`];
844
+ var JSON_SCHEMA_META_TYPE_NAMES = [
845
+ ...JSON_SCHEMA_TYPE_NAMES,
846
+ `any`,
847
+ `never`
848
+ ];
849
+ var JSON_SCHEMA_REFINERY = {
850
+ array: isArraySchema,
851
+ boolean: isBooleanSchema,
852
+ integer: isIntegerSchema,
853
+ null: isNullSchema,
854
+ number: isNumberSchema,
855
+ object: isObjectSchema,
856
+ string: isStringSchema,
857
+ any: isLiteral(true),
858
+ never: isLiteral(false),
859
+ union: isUnionSchema,
860
+ intersection: isIntersectionSchema,
861
+ negation: isNegationSchema,
862
+ conditional: isConditionalSchema
863
+ };
864
+ var stringSchemaStructure = {
865
+ type: isLiteral(`string`),
866
+ enum: ifDefined(isArray(isString4)),
867
+ minLength: ifDefined(isInteger),
868
+ maxLength: ifDefined(isInteger),
869
+ pattern: ifDefined(isString4),
870
+ format: ifDefined(isWithin(JSON_SCHEMA_STRING_FORMATS))
871
+ };
872
+ function isStringSchema(input) {
873
+ return doesExtend(stringSchemaStructure)(input);
874
+ }
875
+ var numberSchemaStructure = {
876
+ type: isLiteral(`number`),
877
+ enum: ifDefined(isArray(isNumber2)),
878
+ minimum: ifDefined(isNumber2),
879
+ maximum: ifDefined(isNumber2),
880
+ exclusiveMinimum: ifDefined(isNumber2),
881
+ exclusiveMaximum: ifDefined(isNumber2),
882
+ multipleOf: ifDefined(isNumber2)
883
+ };
884
+ function isNumberSchema(input) {
885
+ return doesExtend(numberSchemaStructure)(input);
886
+ }
887
+ var integerSchemaStructure = {
888
+ type: isLiteral(`integer`),
889
+ enum: ifDefined(isArray(isInteger)),
890
+ minimum: ifDefined(isInteger),
891
+ maximum: ifDefined(isInteger),
892
+ exclusiveMinimum: ifDefined(isInteger),
893
+ exclusiveMaximum: ifDefined(isInteger),
894
+ multipleOf: ifDefined(isInteger)
895
+ };
896
+ function isIntegerSchema(input) {
897
+ return doesExtend(integerSchemaStructure)(input);
898
+ }
899
+ var booleanSchemaStructure = {
900
+ type: isLiteral(`boolean`),
901
+ enum: ifDefined(isArray(isBoolean2))
902
+ };
903
+ function isBooleanSchema(input) {
904
+ return doesExtend(booleanSchemaStructure)(input);
905
+ }
906
+ var nullSchemaStructure = {
907
+ type: isLiteral(`null`)
908
+ };
909
+ function isNullSchema(input) {
910
+ return doesExtend(nullSchemaStructure)(input);
911
+ }
912
+ var objectSchemaStructure = {
913
+ type: isLiteral(`object`),
914
+ properties: ifDefined(isRecord(isString4, isJsonSchema)),
915
+ required: ifDefined(isArray(isString4)),
916
+ additionalProperties: ifDefined(isJsonSchema),
917
+ propertyNames: ifDefined(isStringSchema),
918
+ minProperties: ifDefined(isInteger),
919
+ maxProperties: ifDefined(isInteger),
920
+ dependentSchemas: ifDefined(isRecord(isString4, isJsonSchema))
921
+ };
922
+ function isObjectSchema(input) {
923
+ return doesExtend(objectSchemaStructure)(input);
924
+ }
925
+ var arraySchemaStructure = {
926
+ type: isLiteral(`array`),
927
+ items: ifDefined(couldBe(isJsonSchema).or(isArray(isJsonSchema))),
928
+ minItems: ifDefined(isInteger),
929
+ maxItems: ifDefined(isInteger),
930
+ uniqueItems: ifDefined(isBoolean2)
931
+ };
932
+ function isArraySchema(input) {
933
+ return doesExtend(arraySchemaStructure)(input);
934
+ }
935
+ var unionSchemaStructure = { anyOf: isArray(isJsonSchema) };
936
+ function isUnionSchema(input) {
937
+ return doesExtend(unionSchemaStructure)(input);
938
+ }
939
+ var exclusiveSchemaStructure = { oneOf: isArray(isJsonSchema) };
940
+ function isExclusiveSchema(input) {
941
+ return doesExtend(exclusiveSchemaStructure)(input);
942
+ }
943
+ var intersectionSchemaStructure = { allOf: isArray(isJsonSchema) };
944
+ function isIntersectionSchema(input) {
945
+ return doesExtend(intersectionSchemaStructure)(input);
946
+ }
947
+ var conditionalSchemaStructure = {
948
+ if: isJsonSchema,
949
+ then: ifDefined(isJsonSchema),
950
+ else: ifDefined(isJsonSchema)
951
+ };
952
+ function isConditionalSchema(input) {
953
+ return doesExtend(conditionalSchemaStructure)(input);
954
+ }
955
+ var negationSchemaStructure = { not: isJsonSchema };
956
+ function isNegationSchema(input) {
957
+ return doesExtend(negationSchemaStructure)(input);
958
+ }
959
+ var mixedSchemaStructure = __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, arraySchemaStructure), booleanSchemaStructure), integerSchemaStructure), nullSchemaStructure), numberSchemaStructure), objectSchemaStructure), stringSchemaStructure), {
960
+ type: isArray(isWithin(JSON_SCHEMA_TYPE_NAMES)),
961
+ enum: ifDefined(
962
+ isArray(isUnion.or(isInteger).or(isBoolean2).or(isNumber2).or(isString4))
963
+ )
964
+ });
965
+ function isMixedSchema(input) {
966
+ return doesExtend(mixedSchemaStructure)(input);
967
+ }
968
+ var isJsonSchemaCore = isUnion.or(isArraySchema).or(isBooleanSchema).or(isConditionalSchema).or(isExclusiveSchema).or(isIntegerSchema).or(isIntersectionSchema).or(isMixedSchema).or(isNegationSchema).or(isNullSchema).or(isNumberSchema).or(isObjectSchema).or(isStringSchema).or(isUnionSchema);
969
+ var isJsonSchemaRoot = doesExtend({
970
+ $id: ifDefined(isString4),
971
+ $schema: ifDefined(isString4)
972
+ });
973
+ var isJsonSchemaObject = isIntersection.and(isJsonSchemaCore).and(isJsonSchemaRoot);
974
+ function isJsonSchema(input) {
975
+ return couldBe(isJsonSchemaObject).or(isBoolean2).or(isJsonSchemaRef)(input);
976
+ }
977
+
978
+ // ../../anvl/src/json-schema/path-into.ts
979
+ var expandPathForSchema = (path) => {
980
+ try {
981
+ return path.flatMap((key) => {
982
+ switch (typeof key) {
983
+ case `string`:
984
+ return [`properties`, key];
985
+ case `number`:
986
+ return [`items`, key];
987
+ case `symbol`:
988
+ throw new TypeError(
989
+ `The key ${String(
990
+ key
991
+ )} is not a valid JSON key; expected string or number, got symbol`
992
+ );
993
+ default:
994
+ throw new TypeError(
995
+ `The key ${key} is not a valid JSON key; expected string or number, got ${typeof key}`
996
+ );
997
+ }
998
+ });
999
+ } catch (caught) {
1000
+ if (caught instanceof TypeError)
1001
+ return caught;
1002
+ throw caught;
1003
+ }
1004
+ };
1005
+
1006
+ // ../../anvl/src/json-schema/find-sub-schema.ts
1007
+ var findSubSchema = (schema) => {
1008
+ if (typeof schema === `boolean`) {
1009
+ throw new Error(`The schema does not contain subSchemas`);
1010
+ }
1011
+ return (path) => {
1012
+ const pathIntoSchema = expandPathForSchema(path);
1013
+ if (pathIntoSchema instanceof Error)
1014
+ return pathIntoSchema;
1015
+ if (typeof schema === `boolean`) {
1016
+ return new TypeError(`The schema is not a JsonSchema`);
1017
+ }
1018
+ const { node, refMap } = pathIntoSchema.reduce(
1019
+ ({ node: node2, refMap: refMap2 = void 0 }, key) => (console.log({ node: node2, key }), isJsonSchemaRef(node2) ? retrieveRef({ refNode: node2, root: schema, refMap: refMap2 }) : { node: node2[key], refMap: refMap2 }),
1020
+ { node: schema, refMap: void 0 }
1021
+ );
1022
+ if (node instanceof Error)
1023
+ throw node;
1024
+ let subSchema = node;
1025
+ while (isJsonSchemaRef(subSchema)) {
1026
+ console.log({ subSchema });
1027
+ subSchema = retrieveRef({ refNode: subSchema, root: schema, refMap }).node;
1028
+ }
1029
+ console.log({ subSchema });
1030
+ if (isJsonSchema(subSchema)) {
1031
+ return subSchema;
1032
+ }
1033
+ throw new TypeError(`The subSchema is not a JsonSchema`);
1034
+ };
1035
+ };
1036
+
1037
+ // ../../anvl/src/json/cast.ts
1038
+ var stringToBoolean = (str) => str === `true`;
1039
+ var stringToNumber = (str) => Number(str);
1040
+ var stringToArray = (str) => str.split(`,`);
1041
+ var stringToObject = (str) => {
1042
+ try {
1043
+ return JSON.parse(str);
1044
+ } catch (e) {
1045
+ return { [str]: str };
1046
+ }
1047
+ };
1048
+ var objectToString = (obj) => JSON.stringify(obj);
1049
+ var objectToBoolean = (obj) => obj.true === true;
1050
+ var objectToNumber = (obj) => {
1051
+ var _a2, _b, _c;
1052
+ return Number((_c = (_b = (_a2 = obj.number) != null ? _a2 : obj.size) != null ? _b : obj.count) != null ? _c : 0);
1053
+ };
1054
+ var objectToArray = (obj) => Object.entries(obj);
1055
+ var booleanToString = (bool) => bool.toString();
1056
+ var booleanToNumber = (bool) => +bool;
1057
+ var booleanToObject = (bool) => ({
1058
+ [bool.toString()]: bool
1059
+ });
1060
+ var booleanToArray = (bool) => [bool];
1061
+ var numberToString = (num) => num.toString();
1062
+ var numberToBoolean = (num) => num === 1;
1063
+ var numberToObject = (num) => ({
1064
+ number: num
1065
+ });
1066
+ var numberToArray = (num) => Array(num).fill(null);
1067
+ var arrayToString = (arr) => arr.join(`,`);
1068
+ var arrayToNumber = (arr) => arr.length;
1069
+ var arrayToBoolean = (arr) => typeof arr[0] === `boolean` ? arr[0] : arr.length > 0;
1070
+ var arrayToObject = (arr) => arr.reduce((acc, cur, idx) => {
1071
+ acc[`${idx}`] = cur;
1072
+ return acc;
1073
+ }, {});
1074
+ var nullToString = () => ``;
1075
+ var nullToNumber = () => 0;
1076
+ var nullToBoolean = () => false;
1077
+ var nullToArray = () => [];
1078
+ var nullToObject = () => ({});
1079
+ var cast = (input) => {
1080
+ const json = refineJsonType(input);
1081
+ return {
1082
+ to: {
1083
+ array: () => {
1084
+ switch (json.type) {
1085
+ case `array`:
1086
+ return json.data;
1087
+ case `object`:
1088
+ return objectToArray(json.data);
1089
+ case `string`:
1090
+ return stringToArray(json.data);
1091
+ case `boolean`:
1092
+ return booleanToArray(json.data);
1093
+ case `number`:
1094
+ return numberToArray(json.data);
1095
+ case `null`:
1096
+ return nullToArray();
1097
+ }
1098
+ },
1099
+ boolean: () => {
1100
+ switch (json.type) {
1101
+ case `array`:
1102
+ return arrayToBoolean(json.data);
1103
+ case `object`:
1104
+ return objectToBoolean(json.data);
1105
+ case `string`:
1106
+ return stringToBoolean(json.data);
1107
+ case `boolean`:
1108
+ return json.data;
1109
+ case `number`:
1110
+ return numberToBoolean(json.data);
1111
+ case `null`:
1112
+ return nullToBoolean();
1113
+ }
1114
+ },
1115
+ number: () => {
1116
+ switch (json.type) {
1117
+ case `array`:
1118
+ return arrayToNumber(json.data);
1119
+ case `object`:
1120
+ return objectToNumber(json.data);
1121
+ case `string`:
1122
+ return stringToNumber(json.data);
1123
+ case `boolean`:
1124
+ return booleanToNumber(json.data);
1125
+ case `number`:
1126
+ return json.data;
1127
+ case `null`:
1128
+ return nullToNumber();
1129
+ }
1130
+ },
1131
+ object: () => {
1132
+ switch (json.type) {
1133
+ case `array`:
1134
+ return arrayToObject(json.data);
1135
+ case `object`:
1136
+ return json.data;
1137
+ case `string`:
1138
+ return stringToObject(json.data);
1139
+ case `boolean`:
1140
+ return booleanToObject(json.data);
1141
+ case `number`:
1142
+ return numberToObject(json.data);
1143
+ case `null`:
1144
+ return nullToObject();
1145
+ }
1146
+ },
1147
+ string: () => {
1148
+ switch (json.type) {
1149
+ case `array`:
1150
+ return arrayToString(json.data);
1151
+ case `object`:
1152
+ return objectToString(json.data);
1153
+ case `string`:
1154
+ return json.data;
1155
+ case `boolean`:
1156
+ return booleanToString(json.data);
1157
+ case `number`:
1158
+ return numberToString(json.data);
1159
+ case `null`:
1160
+ return nullToString();
1161
+ }
1162
+ },
1163
+ null: () => null
1164
+ }
1165
+ };
1166
+ };
1167
+
1168
+ // ../../hamr/src/react-json-editor/editors-by-type/utilities/object-properties.ts
1169
+ var makePropertySetters = (data, set) => mapObject(
1170
+ data,
1171
+ (value, key) => (newValue) => set(__spreadProps(__spreadValues({}, data), { [key]: become(newValue)(value[key]) }))
1172
+ );
1173
+ var makePropertyRenamers = (data, set, stableKeyMapRef) => mapObject(
1174
+ data,
1175
+ (value, key) => (newKey) => Object.hasOwn(data, newKey) ? null : set(() => {
1176
+ const entries = Object.entries(data);
1177
+ const index = entries.findIndex(([k]) => k === key);
1178
+ entries[index] = [newKey, value];
1179
+ const stableKeyMap = stableKeyMapRef.current;
1180
+ stableKeyMapRef.current = __spreadProps(__spreadValues({}, stableKeyMap), {
1181
+ [newKey]: stableKeyMap[key]
1182
+ });
1183
+ return Object.fromEntries(entries);
1184
+ })
1185
+ );
1186
+ var makePropertyRemovers = (data, set) => mapObject(
1187
+ data,
1188
+ (_, key) => () => set(() => {
1189
+ const _a2 = data, { [key]: _2 } = _a2, rest = __objRest(_a2, [__restKey(key)]);
1190
+ return rest;
1191
+ })
1192
+ );
1193
+ var makePropertyRecasters = (data, set) => mapObject(
1194
+ data,
1195
+ (value, key) => (newType) => set(() => __spreadProps(__spreadValues({}, data), {
1196
+ [key]: cast(value).to[newType]()
1197
+ }))
1198
+ );
1199
+ var makePropertyCreationInterface = (data, set) => (key, type) => (value) => set(__spreadProps(__spreadValues({}, data), { [key]: value != null ? value : JSON_DEFAULTS[type] }));
1200
+ var makePropertySorter = (data, set, sortFn) => () => {
1201
+ const sortedKeys = Object.keys(data).sort(sortFn);
1202
+ const sortedObj = {};
1203
+ sortedKeys.forEach((key) => sortedObj[key] = data[key]);
1204
+ set(sortedObj);
1205
+ };
1206
+
1207
+ // ../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx
1208
+ import { Fragment as Fragment2, jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
1209
+ var PropertyAdder = ({
1210
+ addProperty,
1211
+ disabled,
1212
+ propertyKey,
1213
+ Components
1214
+ }) => /* @__PURE__ */ jsxDEV6(Components.MissingPropertyWrapper, { children: [
1215
+ /* @__PURE__ */ jsxDEV6(ElasticInput, { disabled: true, defaultValue: propertyKey }, void 0, false, {
1216
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1217
+ lineNumber: 38,
1218
+ columnNumber: 3
1219
+ }, this),
1220
+ ` `,
1221
+ /* @__PURE__ */ jsxDEV6(ElasticInput, { disabled: true, defaultValue: "is missing" }, void 0, false, {
1222
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1223
+ lineNumber: 41,
1224
+ columnNumber: 3
1225
+ }, this),
1226
+ /* @__PURE__ */ jsxDEV6(Components.Button, { onClick: () => addProperty(), disabled, children: "+" }, void 0, false, {
1227
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1228
+ lineNumber: 42,
1229
+ columnNumber: 3
1230
+ }, this)
1231
+ ] }, void 0, true, {
1232
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1233
+ lineNumber: 37,
1234
+ columnNumber: 2
1235
+ }, this);
1236
+ var ObjectEditor = ({
1237
+ schema,
1238
+ path = [],
1239
+ isReadonly = () => false,
1240
+ isHidden = () => false,
1241
+ data,
1242
+ set,
1243
+ Components
1244
+ }) => {
1245
+ var _a2;
1246
+ const disabled = isReadonly(path);
1247
+ const stableKeyMap = useRef3(
1248
+ Object.keys(data).reduce((acc, key) => {
1249
+ acc[key] = key;
1250
+ return acc;
1251
+ }, {})
1252
+ );
1253
+ const setProperty = makePropertySetters(data, set);
1254
+ const renameProperty = makePropertyRenamers(data, set, stableKeyMap);
1255
+ const removeProperty = makePropertyRemovers(data, set);
1256
+ const recastProperty = makePropertyRecasters(data, set);
1257
+ const sortProperties = makePropertySorter(data, set);
1258
+ const makePropertyAdder = makePropertyCreationInterface(data, set);
1259
+ const subSchema = isPlainObject(schema) ? findSubSchema(schema)(path) : true;
1260
+ const schemaKeys = isLiteral(true)(subSchema) ? true : isObjectSchema(subSchema) ? Object.keys((_a2 = subSchema.properties) != null ? _a2 : {}) : [];
1261
+ const dataKeys = Object.keys(data);
1262
+ const [unofficialKeys, officialKeys] = dataKeys.reduce(
1263
+ ([unofficial, official], key) => {
1264
+ const isOfficial = schemaKeys === true || schemaKeys.includes(key);
1265
+ return isOfficial ? [unofficial, [...official, key]] : [[...unofficial, key], official];
1266
+ },
1267
+ [[], []]
1268
+ );
1269
+ const missingKeys = schemaKeys === true ? [] : schemaKeys.filter((key) => !dataKeys.includes(key));
1270
+ return /* @__PURE__ */ jsxDEV6(Fragment2, { children: [
1271
+ /* @__PURE__ */ jsxDEV6(Components.Button, { onClick: () => sortProperties(), disabled, children: "Sort" }, void 0, false, {
1272
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1273
+ lineNumber: 96,
1274
+ columnNumber: 4
1275
+ }, this),
1276
+ /* @__PURE__ */ jsxDEV6(Components.ObjectWrapper, { children: [
1277
+ /* @__PURE__ */ jsxDEV6("div", { className: "json_editor_properties", children: [...missingKeys, ...officialKeys, ...unofficialKeys].map((key) => {
1278
+ const originalKey = stableKeyMap.current[key];
1279
+ const newPath = [...path, key];
1280
+ const originalPath = [...path, originalKey];
1281
+ const isOfficial = schemaKeys === true || schemaKeys.includes(key);
1282
+ const isMissing = missingKeys.includes(key);
1283
+ return isMissing ? /* @__PURE__ */ jsxDEV6(
1284
+ PropertyAdder,
1285
+ {
1286
+ propertyKey: key,
1287
+ addProperty: makePropertyAdder(key, `string`),
1288
+ disabled,
1289
+ Components
1290
+ },
1291
+ key + `IsMissing`,
1292
+ false,
1293
+ {
1294
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1295
+ lineNumber: 109,
1296
+ columnNumber: 8
1297
+ },
1298
+ this
1299
+ ) : /* @__PURE__ */ jsxDEV6(
1300
+ JsonEditor_INTERNAL,
1301
+ {
1302
+ schema,
1303
+ path: newPath,
1304
+ name: key,
1305
+ isReadonly,
1306
+ isHidden,
1307
+ data: data[key],
1308
+ set: setProperty[key],
1309
+ rename: renameProperty[key],
1310
+ remove: removeProperty[key],
1311
+ recast: recastProperty[key],
1312
+ className: `json_editor_property ${isOfficial ? `json_editor_official` : `json_editor_unofficial`}`,
1313
+ Components
1314
+ },
1315
+ originalPath.join(`.`),
1316
+ false,
1317
+ {
1318
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1319
+ lineNumber: 117,
1320
+ columnNumber: 8
1321
+ },
1322
+ this
1323
+ );
1324
+ }) }, void 0, false, {
1325
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1326
+ lineNumber: 100,
1327
+ columnNumber: 5
1328
+ }, this),
1329
+ /* @__PURE__ */ jsxDEV6(
1330
+ Components.Button,
1331
+ {
1332
+ onClick: disabled ? doNothing : () => makePropertyAdder(`new_property`, `string`)(),
1333
+ disabled,
1334
+ children: "+"
1335
+ },
1336
+ void 0,
1337
+ false,
1338
+ {
1339
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1340
+ lineNumber: 137,
1341
+ columnNumber: 5
1342
+ },
1343
+ this
1344
+ )
1345
+ ] }, void 0, true, {
1346
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1347
+ lineNumber: 99,
1348
+ columnNumber: 4
1349
+ }, this)
1350
+ ] }, void 0, true, {
1351
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/object-editor.tsx",
1352
+ lineNumber: 95,
1353
+ columnNumber: 3
1354
+ }, this);
1355
+ };
1356
+
1357
+ // ../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx
1358
+ import { jsxDEV as jsxDEV7 } from "react/jsx-dev-runtime";
1359
+ var BooleanEditor = ({
1360
+ data,
1361
+ set
1362
+ }) => /* @__PURE__ */ jsxDEV7(
1363
+ "input",
1364
+ {
1365
+ type: "checkbox",
1366
+ checked: data,
1367
+ onChange: (event) => set(event.target.checked)
1368
+ },
1369
+ void 0,
1370
+ false,
1371
+ {
1372
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1373
+ lineNumber: 10,
1374
+ columnNumber: 2
1375
+ },
1376
+ this
1377
+ );
1378
+ var NullEditor = () => /* @__PURE__ */ jsxDEV7("input", { type: "text", value: "null", readOnly: true }, void 0, false, {
1379
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1380
+ lineNumber: 18,
1381
+ columnNumber: 2
1382
+ }, this);
1383
+ var NumberEditor = ({
1384
+ path = [],
1385
+ isReadonly = () => false,
1386
+ data,
1387
+ set
1388
+ }) => /* @__PURE__ */ jsxDEV7(
1389
+ NumberInput,
1390
+ {
1391
+ value: data,
1392
+ set: isReadonly(path) ? void 0 : (newValue) => set(Number(newValue)),
1393
+ autoSize: true
1394
+ },
1395
+ void 0,
1396
+ false,
1397
+ {
1398
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1399
+ lineNumber: 27,
1400
+ columnNumber: 2
1401
+ },
1402
+ this
1403
+ );
1404
+ var StringEditor = ({
1405
+ path = [],
1406
+ isReadonly = () => false,
1407
+ data,
1408
+ set,
1409
+ Components
1410
+ }) => {
1411
+ return /* @__PURE__ */ jsxDEV7(Components.StringWrapper, { children: /* @__PURE__ */ jsxDEV7(
1412
+ TextInput,
1413
+ {
1414
+ value: data,
1415
+ set: isReadonly(path) ? void 0 : set,
1416
+ autoSize: true
1417
+ },
1418
+ void 0,
1419
+ false,
1420
+ {
1421
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1422
+ lineNumber: 43,
1423
+ columnNumber: 4
1424
+ },
1425
+ this
1426
+ ) }, void 0, false, {
1427
+ fileName: "../../hamr/src/react-json-editor/editors-by-type/primitive-editors.tsx",
1428
+ lineNumber: 42,
1429
+ columnNumber: 3
1430
+ }, this);
1431
+ };
1432
+
1433
+ // ../../hamr/src/react-error-boundary/ErrorBoundary.tsx
1434
+ import { useId as useId2, Component } from "react";
1435
+ import { atomFamily, useRecoilState, useResetRecoilState } from "recoil";
1436
+
1437
+ // ../../hamr/src/react-error-boundary/DefaultFallback.tsx
1438
+ import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
1439
+ var DefaultFallback = ({ error, errorInfo }) => {
1440
+ var _a2, _b;
1441
+ const component = errorInfo == null ? void 0 : errorInfo.componentStack.split(` `).filter(Boolean)[2];
1442
+ const message = (_b = (_a2 = error == null ? void 0 : error.toString()) != null ? _a2 : errorInfo == null ? void 0 : errorInfo.componentStack) != null ? _b : `Unknown error`;
1443
+ return /* @__PURE__ */ jsxDEV8(
1444
+ "div",
1445
+ {
1446
+ "data-testid": "error-boundary",
1447
+ style: {
1448
+ flex: `1`,
1449
+ background: `black`,
1450
+ backgroundImage: `url(./src/assets/kablooey.gif)`,
1451
+ backgroundPosition: `center`,
1452
+ // backgroundRepeat: `no-repeat`,
1453
+ backgroundSize: `overlay`
1454
+ },
1455
+ children: /* @__PURE__ */ jsxDEV8(
1456
+ "div",
1457
+ {
1458
+ style: {
1459
+ margin: `50px`,
1460
+ marginTop: `0`,
1461
+ padding: `50px`,
1462
+ border: `1px solid dashed`
1463
+ },
1464
+ children: /* @__PURE__ */ jsxDEV8(
1465
+ "span",
1466
+ {
1467
+ style: {
1468
+ background: `black`,
1469
+ color: `white`,
1470
+ padding: 10,
1471
+ paddingTop: 5
1472
+ },
1473
+ children: [
1474
+ `\u26A0\uFE0F `,
1475
+ /* @__PURE__ */ jsxDEV8("span", { style: { color: `#fc0`, fontWeight: 700 }, children: component }, void 0, false, {
1476
+ fileName: "../../hamr/src/react-error-boundary/DefaultFallback.tsx",
1477
+ lineNumber: 42,
1478
+ columnNumber: 6
1479
+ }, this),
1480
+ ` \u26A0\uFE0F `,
1481
+ message
1482
+ ]
1483
+ },
1484
+ void 0,
1485
+ true,
1486
+ {
1487
+ fileName: "../../hamr/src/react-error-boundary/DefaultFallback.tsx",
1488
+ lineNumber: 33,
1489
+ columnNumber: 5
1490
+ },
1491
+ this
1492
+ )
1493
+ },
1494
+ void 0,
1495
+ false,
1496
+ {
1497
+ fileName: "../../hamr/src/react-error-boundary/DefaultFallback.tsx",
1498
+ lineNumber: 25,
1499
+ columnNumber: 4
1500
+ },
1501
+ this
1502
+ )
1503
+ },
1504
+ void 0,
1505
+ false,
1506
+ {
1507
+ fileName: "../../hamr/src/react-error-boundary/DefaultFallback.tsx",
1508
+ lineNumber: 13,
1509
+ columnNumber: 3
1510
+ },
1511
+ this
1512
+ );
1513
+ };
1514
+
1515
+ // ../../hamr/src/react-error-boundary/ErrorBoundary.tsx
1516
+ import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
1517
+ var ErrorBoundary = class extends Component {
1518
+ constructor(props) {
1519
+ super(props);
1520
+ this.state = { error: void 0, errorInfo: void 0 };
1521
+ }
1522
+ componentDidCatch(error, errorInfo) {
1523
+ var _a2, _b;
1524
+ (_b = (_a2 = this.props).onError) == null ? void 0 : _b.call(_a2, error, errorInfo);
1525
+ this.setState({
1526
+ error,
1527
+ errorInfo
1528
+ });
1529
+ }
1530
+ render() {
1531
+ const { error, errorInfo } = this.state;
1532
+ const { children, Fallback = DefaultFallback } = this.props;
1533
+ return errorInfo ? /* @__PURE__ */ jsxDEV9(Fallback, { error, errorInfo }, void 0, false, {
1534
+ fileName: "../../hamr/src/react-error-boundary/ErrorBoundary.tsx",
1535
+ lineNumber: 43,
1536
+ columnNumber: 4
1537
+ }, this) : children;
1538
+ }
1539
+ };
1540
+ var findErrorBoundaryState = atomFamily({
1541
+ key: `errorBoundary`,
1542
+ default: { error: void 0, errorInfo: void 0 }
1543
+ });
1544
+
1545
+ // ../../hamr/src/react-json-editor/default-components.tsx
1546
+ import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
1547
+ var DEFAULT_JSON_EDITOR_COMPONENTS = {
1548
+ ErrorBoundary: ({ children }) => /* @__PURE__ */ jsxDEV10(ErrorBoundary, { children }, void 0, false, {
1549
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1550
+ lineNumber: 47,
1551
+ columnNumber: 35
1552
+ }, this),
1553
+ Button: ({ onClick, children, disabled }) => /* @__PURE__ */ jsxDEV10(
1554
+ "button",
1555
+ {
1556
+ type: "button",
1557
+ className: "json_editor_button",
1558
+ onClick,
1559
+ disabled,
1560
+ children
1561
+ },
1562
+ void 0,
1563
+ false,
1564
+ {
1565
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1566
+ lineNumber: 49,
1567
+ columnNumber: 3
1568
+ },
1569
+ this
1570
+ ),
1571
+ EditorWrapper: ({ children, customCss, className }) => /* @__PURE__ */ jsxDEV10("div", { className: `json_editor ` + className, css: customCss, children }, void 0, false, {
1572
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1573
+ lineNumber: 59,
1574
+ columnNumber: 3
1575
+ }, this),
1576
+ EditorLayout: ({
1577
+ DeleteButton,
1578
+ Header,
1579
+ KeyInput,
1580
+ TypeSelect,
1581
+ ValueEditor,
1582
+ Wrapper
1583
+ }) => {
1584
+ return /* @__PURE__ */ jsxDEV10(Wrapper, { children: [
1585
+ DeleteButton && /* @__PURE__ */ jsxDEV10(DeleteButton, {}, void 0, false, {
1586
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1587
+ lineNumber: 73,
1588
+ columnNumber: 22
1589
+ }, this),
1590
+ Header && /* @__PURE__ */ jsxDEV10(Header, {}, void 0, false, {
1591
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1592
+ lineNumber: 74,
1593
+ columnNumber: 16
1594
+ }, this),
1595
+ KeyInput && /* @__PURE__ */ jsxDEV10(KeyInput, {}, void 0, false, {
1596
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1597
+ lineNumber: 75,
1598
+ columnNumber: 18
1599
+ }, this),
1600
+ TypeSelect && /* @__PURE__ */ jsxDEV10(TypeSelect, {}, void 0, false, {
1601
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1602
+ lineNumber: 76,
1603
+ columnNumber: 20
1604
+ }, this),
1605
+ /* @__PURE__ */ jsxDEV10(ValueEditor, {}, void 0, false, {
1606
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1607
+ lineNumber: 77,
1608
+ columnNumber: 5
1609
+ }, this)
1610
+ ] }, void 0, true, {
1611
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1612
+ lineNumber: 72,
1613
+ columnNumber: 4
1614
+ }, this);
1615
+ },
1616
+ ArrayWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_array", children }, void 0, false, {
1617
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1618
+ lineNumber: 82,
1619
+ columnNumber: 3
1620
+ }, this),
1621
+ ObjectWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_object", children }, void 0, false, {
1622
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1623
+ lineNumber: 85,
1624
+ columnNumber: 3
1625
+ }, this),
1626
+ StringWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_string", children }, void 0, false, {
1627
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1628
+ lineNumber: 88,
1629
+ columnNumber: 3
1630
+ }, this),
1631
+ NumberWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_number", children }, void 0, false, {
1632
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1633
+ lineNumber: 91,
1634
+ columnNumber: 3
1635
+ }, this),
1636
+ BooleanWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_boolean", children }, void 0, false, {
1637
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1638
+ lineNumber: 94,
1639
+ columnNumber: 3
1640
+ }, this),
1641
+ NullWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_null", children }, void 0, false, {
1642
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1643
+ lineNumber: 97,
1644
+ columnNumber: 3
1645
+ }, this),
1646
+ MissingPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_property json_editor_missing", children }, void 0, false, {
1647
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1648
+ lineNumber: 100,
1649
+ columnNumber: 3
1650
+ }, this),
1651
+ MiscastPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("div", { className: "json_editor_property json_editor_miscast", children }, void 0, false, {
1652
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1653
+ lineNumber: 103,
1654
+ columnNumber: 3
1655
+ }, this),
1656
+ IllegalPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_property json_editor_illegal", children }, void 0, false, {
1657
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1658
+ lineNumber: 106,
1659
+ columnNumber: 3
1660
+ }, this),
1661
+ OfficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_property json_editor_official", children }, void 0, false, {
1662
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1663
+ lineNumber: 109,
1664
+ columnNumber: 3
1665
+ }, this),
1666
+ UnofficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_property json_editor_unofficial", children }, void 0, false, {
1667
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1668
+ lineNumber: 112,
1669
+ columnNumber: 3
1670
+ }, this),
1671
+ DeleteIcon: () => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_icon json_editor_delete", children: "x" }, void 0, false, {
1672
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1673
+ lineNumber: 117,
1674
+ columnNumber: 3
1675
+ }, this),
1676
+ KeyWrapper: ({ children }) => /* @__PURE__ */ jsxDEV10("span", { className: "json_editor_key", children }, void 0, false, {
1677
+ fileName: "../../hamr/src/react-json-editor/default-components.tsx",
1678
+ lineNumber: 120,
1679
+ columnNumber: 3
1680
+ }, this)
1681
+ };
1682
+
1683
+ // ../../hamr/src/react-json-editor/developer-interface.tsx
1684
+ import Ajv from "ajv";
1685
+ import { useMemo } from "react";
1686
+ import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
1687
+ var JsonEditor = ({
1688
+ data,
1689
+ set,
1690
+ schema = true,
1691
+ name,
1692
+ rename,
1693
+ remove,
1694
+ isReadonly = () => false,
1695
+ isHidden = () => false,
1696
+ // isIllegal = () => false,
1697
+ className,
1698
+ customCss,
1699
+ Header,
1700
+ Components: CustomComponents = {}
1701
+ }) => {
1702
+ const Components = __spreadValues(__spreadValues({}, DEFAULT_JSON_EDITOR_COMPONENTS), CustomComponents);
1703
+ const ajv = new Ajv({ allErrors: true, verbose: true });
1704
+ const validate = useMemo(() => {
1705
+ return ajv.compile(schema);
1706
+ }, [schema]);
1707
+ const validationResults = validate(data);
1708
+ return /* @__PURE__ */ jsxDEV11(
1709
+ JsonEditor_INTERNAL,
1710
+ {
1711
+ data,
1712
+ set,
1713
+ name,
1714
+ schema,
1715
+ rename,
1716
+ remove,
1717
+ path: [],
1718
+ isReadonly,
1719
+ isHidden,
1720
+ className,
1721
+ customCss,
1722
+ Header,
1723
+ Components
1724
+ },
1725
+ void 0,
1726
+ false,
1727
+ {
1728
+ fileName: "../../hamr/src/react-json-editor/developer-interface.tsx",
1729
+ lineNumber: 79,
1730
+ columnNumber: 3
1731
+ },
1732
+ this
1733
+ );
1734
+ };
1735
+
1736
+ // ../../hamr/src/react-json-editor/index.ts
1737
+ var SubEditors = {
1738
+ array: ArrayEditor,
1739
+ boolean: BooleanEditor,
1740
+ null: NullEditor,
1741
+ number: NumberEditor,
1742
+ object: ObjectEditor,
1743
+ string: StringEditor
1744
+ };
1745
+
1746
+ // ../src/react-devtools/StateEditor.tsx
1747
+ import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
1748
+ var StateEditor = ({ storeHooks, token }) => {
1749
+ const [data, set] = storeHooks.useIO(token);
1750
+ return isPlainJson(data) ? /* @__PURE__ */ jsxDEV12(JsonEditor, { data, set, schema: true }, void 0, false, {
1751
+ fileName: "../src/react-devtools/StateEditor.tsx",
1752
+ lineNumber: 15,
1753
+ columnNumber: 3
1754
+ }, this) : /* @__PURE__ */ jsxDEV12("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV12(
1755
+ ElasticInput,
1756
+ {
1757
+ value: data instanceof Set ? `Set { ${JSON.stringify([...data]).slice(1, -1)} }` : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
1758
+ disabled: true
1759
+ },
1760
+ void 0,
1761
+ false,
1762
+ {
1763
+ fileName: "../src/react-devtools/StateEditor.tsx",
1764
+ lineNumber: 18,
1765
+ columnNumber: 4
1766
+ },
1767
+ this
1768
+ ) }, void 0, false, {
1769
+ fileName: "../src/react-devtools/StateEditor.tsx",
1770
+ lineNumber: 17,
1771
+ columnNumber: 3
1772
+ }, this);
1773
+ };
1774
+ var ReadonlySelectorEditor = ({ storeHooks, token }) => {
1775
+ const data = storeHooks.useO(token);
1776
+ return isPlainJson(data) ? /* @__PURE__ */ jsxDEV12(
1777
+ JsonEditor,
1778
+ {
1779
+ data,
1780
+ set: () => null,
1781
+ schema: true,
1782
+ isReadonly: () => true
1783
+ },
1784
+ void 0,
1785
+ false,
1786
+ {
1787
+ fileName: "../src/react-devtools/StateEditor.tsx",
1788
+ lineNumber: 40,
1789
+ columnNumber: 3
1790
+ },
1791
+ this
1792
+ ) : /* @__PURE__ */ jsxDEV12("div", { className: "json_editor", children: /* @__PURE__ */ jsxDEV12(
1793
+ ElasticInput,
1794
+ {
1795
+ value: data instanceof Set ? `Set ` + JSON.stringify([...data]) : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
1796
+ disabled: true
1797
+ },
1798
+ void 0,
1799
+ false,
1800
+ {
1801
+ fileName: "../src/react-devtools/StateEditor.tsx",
1802
+ lineNumber: 48,
1803
+ columnNumber: 4
1804
+ },
1805
+ this
1806
+ ) }, void 0, false, {
1807
+ fileName: "../src/react-devtools/StateEditor.tsx",
1808
+ lineNumber: 47,
1809
+ columnNumber: 3
1810
+ }, this);
1811
+ };
1812
+ var StoreEditor = ({ storeHooks, token }) => {
1813
+ if (token.type === `readonly_selector`) {
1814
+ return /* @__PURE__ */ jsxDEV12(ReadonlySelectorEditor, { storeHooks, token }, void 0, false, {
1815
+ fileName: "../src/react-devtools/StateEditor.tsx",
1816
+ lineNumber: 69,
1817
+ columnNumber: 10
1818
+ }, this);
1819
+ }
1820
+ return /* @__PURE__ */ jsxDEV12(StateEditor, { storeHooks, token }, void 0, false, {
1821
+ fileName: "../src/react-devtools/StateEditor.tsx",
1822
+ lineNumber: 71,
1823
+ columnNumber: 9
1824
+ }, this);
1825
+ };
1826
+
1827
+ // ../src/react-devtools/TokenList.tsx
1828
+ import { Fragment as Fragment4, jsxDEV as jsxDEV13 } from "react/jsx-dev-runtime";
1829
+ var TokenList = ({ storeHooks, tokenIndex }) => {
1830
+ const tokenIds = storeHooks.useO(tokenIndex);
1831
+ return /* @__PURE__ */ jsxDEV13(Fragment4, { children: Object.entries(tokenIds).map(([key, token]) => {
1832
+ let logState;
1833
+ return /* @__PURE__ */ jsxDEV13(Fragment3, { children: key.startsWith(`\u{1F441}\u200D\u{1F5E8}_`) ? null : /* @__PURE__ */ jsxDEV13("div", { className: "node", children: `type` in token ? (logState = () => console.log(token, getState(token)), /* @__PURE__ */ jsxDEV13(Fragment4, { children: [
1834
+ /* @__PURE__ */ jsxDEV13("label", { onClick: logState, onKeyUp: logState, children: key }, void 0, false, {
1835
+ fileName: "../src/react-devtools/TokenList.tsx",
1836
+ lineNumber: 39,
1837
+ columnNumber: 13
1838
+ }, this),
1839
+ /* @__PURE__ */ jsxDEV13(StoreEditor, { storeHooks, token }, void 0, false, {
1840
+ fileName: "../src/react-devtools/TokenList.tsx",
1841
+ lineNumber: 42,
1842
+ columnNumber: 13
1843
+ }, this)
1844
+ ] }, void 0, true, {
1845
+ fileName: "../src/react-devtools/TokenList.tsx",
1846
+ lineNumber: 38,
1847
+ columnNumber: 12
1848
+ }, this)) : recordToEntries(token.familyMembers).map(([key2, token2]) => /* @__PURE__ */ jsxDEV13(Fragment4, { children: [
1849
+ /* @__PURE__ */ jsxDEV13("label", { children: key2 }, void 0, false, {
1850
+ fileName: "../src/react-devtools/TokenList.tsx",
1851
+ lineNumber: 47,
1852
+ columnNumber: 13
1853
+ }, this),
1854
+ /* @__PURE__ */ jsxDEV13("div", { className: "node", children: [
1855
+ key2,
1856
+ ":",
1857
+ /* @__PURE__ */ jsxDEV13(StoreEditor, { storeHooks, token: token2 }, void 0, false, {
1858
+ fileName: "../src/react-devtools/TokenList.tsx",
1859
+ lineNumber: 50,
1860
+ columnNumber: 14
1861
+ }, this)
1862
+ ] }, key2, true, {
1863
+ fileName: "../src/react-devtools/TokenList.tsx",
1864
+ lineNumber: 48,
1865
+ columnNumber: 13
1866
+ }, this)
1867
+ ] }, void 0, true, {
1868
+ fileName: "../src/react-devtools/TokenList.tsx",
1869
+ lineNumber: 46,
1870
+ columnNumber: 12
1871
+ }, this)) }, void 0, false, {
1872
+ fileName: "../src/react-devtools/TokenList.tsx",
1873
+ lineNumber: 34,
1874
+ columnNumber: 8
1875
+ }, this) }, key, false, {
1876
+ fileName: "../src/react-devtools/TokenList.tsx",
1877
+ lineNumber: 32,
1878
+ columnNumber: 6
1879
+ }, this);
1880
+ }) }, void 0, false, {
1881
+ fileName: "../src/react-devtools/TokenList.tsx",
1882
+ lineNumber: 28,
1883
+ columnNumber: 3
1884
+ }, this);
1885
+ };
1886
+
1887
+ // ../src/web-effects/storage.ts
1888
+ var persistAtom = (storage) => ({ stringify, parse }) => (key) => ({ setSelf, onSet }) => {
1889
+ const savedValue = storage.getItem(key);
1890
+ if (savedValue != null)
1891
+ setSelf(parse(savedValue));
1892
+ onSet(({ newValue }) => {
1893
+ if (newValue == null) {
1894
+ storage.removeItem(key);
1895
+ return;
1896
+ }
1897
+ storage.setItem(key, stringify(newValue));
1898
+ });
1899
+ };
1900
+ var lazyLocalStorageEffect = persistAtom(localStorage)(JSON);
1901
+
1902
+ // ../src/react-devtools/AtomIODevtools.tsx
1903
+ import { Fragment as Fragment5, jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
1904
+ var { atomTokenIndexState, selectorTokenIndexState } = __INTERNAL__.META.attachMetaState();
1905
+ var devtoolsAreOpenState = atom({
1906
+ key: `\u{1F441}\u200D\u{1F5E8}_devtools_are_open`,
1907
+ default: true,
1908
+ effects: [lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8}_devtools_are_open`)]
1909
+ });
1910
+ var composeDevtools = (storeHooks) => {
1911
+ const Devtools = () => {
1912
+ const constraintsRef = useRef4(null);
1913
+ const [devtoolsAreOpen, setDevtoolsAreOpen] = storeHooks.useIO(devtoolsAreOpenState);
1914
+ const mouseHasMoved = useRef4(false);
1915
+ return /* @__PURE__ */ jsxDEV14(Fragment5, { children: [
1916
+ /* @__PURE__ */ jsxDEV14(
1917
+ motion.span,
1918
+ {
1919
+ ref: constraintsRef,
1920
+ className: "atom_io_devtools_zone",
1921
+ style: {
1922
+ position: `fixed`,
1923
+ top: 0,
1924
+ left: 0,
1925
+ right: 0,
1926
+ bottom: 0,
1927
+ pointerEvents: `none`
1928
+ }
1929
+ },
1930
+ void 0,
1931
+ false,
1932
+ {
1933
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1934
+ lineNumber: 33,
1935
+ columnNumber: 5
1936
+ },
1937
+ this
1938
+ ),
1939
+ /* @__PURE__ */ jsxDEV14(
1940
+ motion.main,
1941
+ {
1942
+ drag: true,
1943
+ dragConstraints: constraintsRef,
1944
+ className: "atom_io_devtools",
1945
+ transition: spring,
1946
+ style: devtoolsAreOpen ? {} : {
1947
+ backgroundColor: `#0000`,
1948
+ borderColor: `#0000`,
1949
+ maxHeight: 28,
1950
+ maxWidth: 33
1951
+ },
1952
+ children: [
1953
+ devtoolsAreOpen ? /* @__PURE__ */ jsxDEV14(Fragment5, { children: [
1954
+ /* @__PURE__ */ jsxDEV14(motion.header, { children: /* @__PURE__ */ jsxDEV14("h1", { children: "atom.io" }, void 0, false, {
1955
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1956
+ lineNumber: 64,
1957
+ columnNumber: 9
1958
+ }, this) }, void 0, false, {
1959
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1960
+ lineNumber: 63,
1961
+ columnNumber: 8
1962
+ }, this),
1963
+ /* @__PURE__ */ jsxDEV14(motion.main, { children: /* @__PURE__ */ jsxDEV14(LayoutGroup, { children: [
1964
+ /* @__PURE__ */ jsxDEV14("section", { children: [
1965
+ /* @__PURE__ */ jsxDEV14("h2", { children: "atoms" }, void 0, false, {
1966
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1967
+ lineNumber: 69,
1968
+ columnNumber: 11
1969
+ }, this),
1970
+ /* @__PURE__ */ jsxDEV14(
1971
+ TokenList,
1972
+ {
1973
+ storeHooks,
1974
+ tokenIndex: atomTokenIndexState
1975
+ },
1976
+ void 0,
1977
+ false,
1978
+ {
1979
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1980
+ lineNumber: 70,
1981
+ columnNumber: 11
1982
+ },
1983
+ this
1984
+ )
1985
+ ] }, void 0, true, {
1986
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1987
+ lineNumber: 68,
1988
+ columnNumber: 10
1989
+ }, this),
1990
+ /* @__PURE__ */ jsxDEV14("section", { children: [
1991
+ /* @__PURE__ */ jsxDEV14("h2", { children: "selectors" }, void 0, false, {
1992
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
1993
+ lineNumber: 76,
1994
+ columnNumber: 11
1995
+ }, this),
1996
+ /* @__PURE__ */ jsxDEV14(
1997
+ TokenList,
1998
+ {
1999
+ storeHooks,
2000
+ tokenIndex: selectorTokenIndexState
2001
+ },
2002
+ void 0,
2003
+ false,
2004
+ {
2005
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2006
+ lineNumber: 77,
2007
+ columnNumber: 11
2008
+ },
2009
+ this
2010
+ )
2011
+ ] }, void 0, true, {
2012
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2013
+ lineNumber: 75,
2014
+ columnNumber: 10
2015
+ }, this)
2016
+ ] }, void 0, true, {
2017
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2018
+ lineNumber: 67,
2019
+ columnNumber: 9
2020
+ }, this) }, void 0, false, {
2021
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2022
+ lineNumber: 66,
2023
+ columnNumber: 8
2024
+ }, this)
2025
+ ] }, void 0, true, {
2026
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2027
+ lineNumber: 62,
2028
+ columnNumber: 7
2029
+ }, this) : null,
2030
+ /* @__PURE__ */ jsxDEV14("footer", { children: /* @__PURE__ */ jsxDEV14(
2031
+ "button",
2032
+ {
2033
+ type: "button",
2034
+ onMouseDown: () => mouseHasMoved.current = false,
2035
+ onMouseMove: () => mouseHasMoved.current = true,
2036
+ onMouseUp: () => {
2037
+ if (!mouseHasMoved.current) {
2038
+ setDevtoolsAreOpen((open) => !open);
2039
+ }
2040
+ },
2041
+ children: "\u{1F441}\u200D\u{1F5E8}"
2042
+ },
2043
+ void 0,
2044
+ false,
2045
+ {
2046
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2047
+ lineNumber: 87,
2048
+ columnNumber: 7
2049
+ },
2050
+ this
2051
+ ) }, void 0, false, {
2052
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2053
+ lineNumber: 86,
2054
+ columnNumber: 6
2055
+ }, this)
2056
+ ]
2057
+ },
2058
+ void 0,
2059
+ true,
2060
+ {
2061
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2062
+ lineNumber: 45,
2063
+ columnNumber: 5
2064
+ },
2065
+ this
2066
+ )
2067
+ ] }, void 0, true, {
2068
+ fileName: "../src/react-devtools/AtomIODevtools.tsx",
2069
+ lineNumber: 32,
2070
+ columnNumber: 4
2071
+ }, this);
2072
+ };
2073
+ return Devtools;
2074
+ };
2075
+ var AtomIODevtools = composeDevtools({ useI, useO, useIO });
2076
+ export {
2077
+ AtomIODevtools,
2078
+ composeDevtools
2079
+ };
2080
+ //# sourceMappingURL=index.mjs.map