atom.io 0.33.2 → 0.33.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 (116) hide show
  1. package/dist/data/index.d.ts +3 -3
  2. package/dist/data/index.d.ts.map +1 -1
  3. package/dist/data/index.js.map +1 -1
  4. package/dist/eslint-plugin/index.d.ts.map +1 -1
  5. package/dist/internal/index.d.ts +118 -54
  6. package/dist/internal/index.d.ts.map +1 -1
  7. package/dist/internal/index.js +381 -128
  8. package/dist/internal/index.js.map +1 -1
  9. package/dist/introspection/index.d.ts +11 -10
  10. package/dist/introspection/index.d.ts.map +1 -1
  11. package/dist/introspection/index.js +4 -4
  12. package/dist/introspection/index.js.map +1 -1
  13. package/dist/json/index.d.ts +3 -3
  14. package/dist/json/index.d.ts.map +1 -1
  15. package/dist/json/index.js +2 -2
  16. package/dist/json/index.js.map +1 -1
  17. package/dist/main/index.d.ts +157 -36
  18. package/dist/main/index.d.ts.map +1 -1
  19. package/dist/main/index.js +15 -3
  20. package/dist/main/index.js.map +1 -1
  21. package/dist/react/index.d.ts.map +1 -1
  22. package/dist/{devtools-Jyn42mZm.css → react-devtools/index.css} +1 -1
  23. package/dist/react-devtools/index.css.map +1 -0
  24. package/dist/react-devtools/index.d.ts +0 -1
  25. package/dist/react-devtools/index.d.ts.map +1 -1
  26. package/dist/react-devtools/index.js +8 -3
  27. package/dist/react-devtools/index.js.map +1 -1
  28. package/dist/realtime/index.d.ts +3 -2
  29. package/dist/realtime/index.d.ts.map +1 -1
  30. package/dist/realtime/index.js.map +1 -1
  31. package/dist/realtime-client/index.d.ts +4 -1
  32. package/dist/realtime-client/index.d.ts.map +1 -1
  33. package/dist/realtime-client/index.js.map +1 -1
  34. package/dist/realtime-react/index.d.ts.map +1 -1
  35. package/dist/realtime-react/index.js.map +1 -1
  36. package/dist/realtime-server/index.d.ts +27 -2
  37. package/dist/realtime-server/index.d.ts.map +1 -1
  38. package/dist/realtime-server/index.js.map +1 -1
  39. package/dist/realtime-testing/index.d.ts.map +1 -1
  40. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  41. package/dist/web/index.d.ts.map +1 -1
  42. package/package.json +21 -21
  43. package/src/data/dict.ts +5 -5
  44. package/src/data/struct-family.ts +2 -2
  45. package/src/data/struct.ts +1 -1
  46. package/src/internal/atom/create-regular-atom.ts +14 -17
  47. package/src/internal/caching.ts +1 -1
  48. package/src/internal/families/create-readonly-held-selector-family.ts +81 -0
  49. package/src/internal/families/{create-readonly-selector-family.ts → create-readonly-pure-selector-family.ts} +26 -23
  50. package/src/internal/families/create-selector-family.ts +39 -16
  51. package/src/internal/families/create-writable-held-selector-family.ts +80 -0
  52. package/src/internal/families/{create-writable-selector-family.ts → create-writable-pure-selector-family.ts} +26 -23
  53. package/src/internal/families/dispose-from-store.ts +4 -2
  54. package/src/internal/families/find-in-store.ts +8 -8
  55. package/src/internal/families/get-family-of-token.ts +8 -8
  56. package/src/internal/families/index.ts +3 -3
  57. package/src/internal/families/init-family-member.ts +12 -10
  58. package/src/internal/families/seek-in-store.ts +13 -11
  59. package/src/internal/get-state/get-from-store.ts +5 -2
  60. package/src/internal/get-state/read-or-compute-value.ts +4 -2
  61. package/src/internal/index.ts +97 -20
  62. package/src/internal/join/join-internal.ts +18 -18
  63. package/src/internal/keys.ts +1 -1
  64. package/src/internal/mutable/create-mutable-atom.ts +17 -15
  65. package/src/internal/mutable/get-json-family.ts +4 -4
  66. package/src/internal/mutable/get-json-token.ts +7 -7
  67. package/src/internal/selector/create-readonly-held-selector.ts +50 -0
  68. package/src/internal/selector/create-readonly-pure-selector.ts +51 -0
  69. package/src/internal/selector/create-standalone-selector.ts +48 -15
  70. package/src/internal/selector/create-writable-held-selector.ts +68 -0
  71. package/src/internal/selector/{create-writable-selector.ts → create-writable-pure-selector.ts} +18 -25
  72. package/src/internal/selector/dispose-selector.ts +37 -7
  73. package/src/internal/selector/get-selector-dependency-keys.ts +1 -1
  74. package/src/internal/selector/index.ts +4 -2
  75. package/src/internal/selector/register-selector.ts +17 -5
  76. package/src/internal/selector/trace-selector-atoms.ts +5 -5
  77. package/src/internal/selector/update-selector-atoms.ts +16 -10
  78. package/src/internal/set-state/emit-update.ts +4 -2
  79. package/src/internal/set-state/set-atom-or-selector.ts +2 -1
  80. package/src/internal/store/counterfeit.ts +13 -11
  81. package/src/internal/store/deposit.ts +18 -14
  82. package/src/internal/store/store.ts +9 -14
  83. package/src/internal/store/withdraw.ts +83 -7
  84. package/src/internal/subscribe/subscribe-in-store.ts +4 -2
  85. package/src/internal/subscribe/subscribe-to-state.ts +2 -1
  86. package/src/internal/timeline/create-timeline.ts +4 -2
  87. package/src/internal/transaction/build-transaction.ts +1 -1
  88. package/src/introspection/attach-atom-index.ts +2 -2
  89. package/src/introspection/attach-introspection-states.ts +9 -9
  90. package/src/introspection/attach-selector-index.ts +3 -3
  91. package/src/introspection/attach-timeline-family.ts +2 -2
  92. package/src/introspection/attach-timeline-index.ts +2 -2
  93. package/src/introspection/attach-transaction-index.ts +2 -2
  94. package/src/introspection/attach-transaction-logs.ts +2 -2
  95. package/src/introspection/attach-type-selectors.ts +5 -5
  96. package/src/introspection/auditor.ts +3 -3
  97. package/src/json/select-json-family.ts +5 -5
  98. package/src/json/select-json.ts +1 -1
  99. package/src/main/find-state.ts +8 -8
  100. package/src/main/index.ts +51 -6
  101. package/src/main/join.ts +13 -13
  102. package/src/main/logger.ts +32 -15
  103. package/src/main/selector.ts +164 -30
  104. package/src/main/transaction.ts +3 -3
  105. package/src/main/validators.ts +16 -12
  106. package/src/react-devtools/StateEditor.tsx +14 -4
  107. package/src/react-devtools/StateIndex.tsx +6 -4
  108. package/src/react-devtools/TimelineIndex.tsx +2 -2
  109. package/src/react-devtools/TransactionIndex.tsx +2 -2
  110. package/src/realtime/shared-room-store.ts +3 -3
  111. package/src/realtime-client/realtime-client-stores/client-main-store.ts +1 -1
  112. package/src/realtime-react/use-pull-selector-family-member.ts +1 -0
  113. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +2 -2
  114. package/dist/devtools-CAg2k57t.js +0 -0
  115. package/dist/devtools-Jyn42mZm.css.map +0 -1
  116. package/src/internal/selector/create-readonly-selector.ts +0 -55
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen: (next: Modify<boolean> | boolean) => void\n\tdisabled?: boolean\n\ttestid: string\n}>","button: {\n\tOpenClose: typeof OpenClose\n}","ElasticInput: ForwardRefExoticComponent<\n\tDetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> & {\n\t\twidthPadding?: number\n\t}\n>","min: number","max: number","value: number","decimalPlaces?: number","input: string","VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n\tRecord<ValidNonNumber, number | null>\n>","allowDecimal: boolean","DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints","constraints: { [K in keyof Constraints]?: Constraints[K] | undefined }","input: number | null","numericValue: number | null","NumberInput: FC<NumberInputProps>","event: React.ChangeEvent<HTMLInputElement>","TextInput: FC<TextInputProps>","NonJsonEditor: React.FC<JsonEditorProps<never>>","data: T","set: SetterOrUpdater<T>","str: string","obj: Json.Tree.Object","obj: Json.Tree.Object<string, T>","bool: boolean","num: number","arr: Json.Tree.Array","arr: Json.Tree.Array<T>","input: unknown","data: T","set: SetterOrUpdater<T>","newValue: unknown","stableKeyMapRef: RefObject<{ [Key in keyof T]: keyof T }>","newKey: string","newType: JsonTypeName","sortFn?: (a: string, b: string) => number","key: keyof T","DefaultFallback: FC<FallbackProps>","props: ErrorBoundaryProps","error: Error","errorInfo: ErrorInfo","DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents","SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n>","StateEditor: FC<{\n\ttoken: WritableToken<unknown>\n}>","ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}>","StoreEditor: FC<{\n\ttoken: ReadonlySelectorToken<unknown> | WritableToken<unknown>\n}>","store: Store","DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\n>","StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlySelectorToken<string>\n}>","StateIndexTreeNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>>\n\tisOpenState: RegularAtomToken<boolean>\n}>","StateIndexNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>> | ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlySelectorToken<string>\n}>","StateIndex: FC<{\n\ttokenIndex: ReadonlySelectorToken<WritableTokenIndex<ReadableToken<unknown>>>\n}>","AtomUpdateFC: React.FC<{\n\tserialNumber: number\n\tatomUpdate: KeyedStateUpdate<unknown>\n}>","TransactionUpdateFC: React.FC<{\n\tserialNumber: number\n\ttransactionUpdate: TransactionUpdate<Func>\n}>","TimelineUpdateFC: React.FC<{\n\ttimelineUpdate: TimelineUpdate<any>\n\tserialNumber: number\n}>","article: {\n\tAtomUpdate: typeof AtomUpdateFC\n\tTransactionUpdate: typeof TransactionUpdateFC\n\tTimelineUpdate: typeof TimelineUpdateFC\n}","YouAreHere: FC","TimelineLog: FC<{\n\ttoken: TimelineToken<any>\n\tisOpenState: RegularAtomToken<boolean>\n\ttimelineState: ReadonlySelectorToken<Timeline<any>>\n}>","TimelineIndex: FC","TransactionLog: FC<{\n\ttoken: TransactionToken<Func>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlySelectorToken<TransactionUpdate<Func>[]>\n}>","TransactionIndex: FC","AtomIODevtools: React.FC"],"sources":["../../src/react-devtools/Button.tsx","../../src/react-devtools/elastic-input/ElasticInput.tsx","../../src/react-devtools/elastic-input/NumberInput.tsx","../../src/react-devtools/elastic-input/TextInput.tsx","../../src/react-devtools/json-editor/editors-by-type/non-json.tsx","../../src/react-devtools/json-editor/json-editor-internal.tsx","../../src/react-devtools/json-editor/editors-by-type/utilities/array-elements.ts","../../src/react-devtools/json-editor/editors-by-type/array-editor.tsx","../../src/react-devtools/json-editor/editors-by-type/utilities/cast-json.ts","../../src/react-devtools/json-editor/editors-by-type/utilities/cast-to-json.ts","../../src/react-devtools/json-editor/editors-by-type/utilities/object-properties.ts","../../src/react-devtools/json-editor/editors-by-type/object-editor.tsx","../../src/react-devtools/json-editor/editors-by-type/primitive-editors.tsx","../../src/react-devtools/error-boundary/DefaultFallback.tsx","../../src/react-devtools/error-boundary/ReactErrorBoundary.tsx","../../src/react-devtools/json-editor/default-components.tsx","../../src/react-devtools/json-editor/developer-interface.tsx","../../src/react-devtools/json-editor/index.ts","../../src/react-devtools/StateEditor.tsx","../../src/react-devtools/store.ts","../../src/react-devtools/StateIndex.tsx","../../src/react-devtools/Updates.tsx","../../src/react-devtools/TimelineIndex.tsx","../../src/react-devtools/TransactionIndex.tsx","../../src/react-devtools/AtomIODevtools.tsx"],"sourcesContent":["import type { Modify } from \"atom.io/internal\"\nimport type { FC } from \"react\"\n\nexport const OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen: (next: Modify<boolean> | boolean) => void\n\tdisabled?: boolean\n\ttestid: string\n}> = ({ isOpen, setIsOpen, disabled, testid }) => {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdata-testid={testid}\n\t\t\tclassName={`carat ${isOpen ? `open` : `closed`}`}\n\t\t\tonClick={() => {\n\t\t\t\tsetIsOpen((prev) => !prev)\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t▶\n\t\t</button>\n\t)\n}\n\nexport const button: {\n\tOpenClose: typeof OpenClose\n} = {\n\tOpenClose,\n}\n","import type {\n\tDetailedHTMLProps,\n\tForwardRefExoticComponent,\n\tInputHTMLAttributes,\n} from \"react\"\nimport {\n\tforwardRef,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\"\n\nexport type ElasticInputProps = DetailedHTMLProps<\n\tInputHTMLAttributes<HTMLInputElement>,\n\tHTMLInputElement\n> & {\n\twidthPadding?: number\n}\n\nexport const ElasticInput: ForwardRefExoticComponent<\n\tDetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> & {\n\t\twidthPadding?: number\n\t}\n> = forwardRef(function ElasticInputFC(props, ref) {\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\tconst spanRef = useRef<HTMLSpanElement>(null)\n\tconst [inputWidth, setInputWidth] = useState(`auto`)\n\n\tuseImperativeHandle<Partial<HTMLInputElement>, Partial<HTMLInputElement>>(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => {\n\t\t\t\tinputRef.current?.focus()\n\t\t\t},\n\t\t}),\n\t)\n\n\tconst extraWidth = props.type === `number` ? 15 : 0\n\n\tuseLayoutEffect(() => {\n\t\tif (spanRef.current) {\n\t\t\tsetInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`)\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tif (spanRef.current) {\n\t\t\t\t\tsetInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`)\n\t\t\t\t}\n\t\t\t}, 1000)\n\t\t\treturn () => {\n\t\t\t\tclearInterval(interval)\n\t\t\t}\n\t\t}\n\t}, [inputRef.current?.value, props.value])\n\n\treturn (\n\t\t<div style={{ display: `inline-block`, position: `relative` }}>\n\t\t\t<input\n\t\t\t\t{...props}\n\t\t\t\tref={inputRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\tborder: `none`,\n\t\t\t\t\tfontFamily: `inherit`,\n\t\t\t\t\tfontSize: `inherit`,\n\t\t\t\t\twidth: inputWidth,\n\t\t\t\t\t...props.style,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<span\n\t\t\t\tref={spanRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tpadding: props.style?.padding,\n\t\t\t\t\tposition: `absolute`,\n\t\t\t\t\tvisibility: `hidden`,\n\t\t\t\t\t// color: `red`,\n\t\t\t\t\twhiteSpace: `pre`,\n\t\t\t\t\tfontFamily: props.style?.fontFamily ?? `inherit`,\n\t\t\t\t\tfontSize: props.style?.fontSize ?? `inherit`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{props.value}\n\t\t\t</span>\n\t\t</div>\n\t)\n})\n","import type { FC } from \"react\"\nimport { useId, useRef, useState } from \"react\"\n\nimport { ElasticInput } from \".\"\n\nexport function clampInto(min: number, max: number) {\n\treturn (value: number): number =>\n\t\tvalue < min ? min : value > max ? max : value\n}\nfunction round(value: number, decimalPlaces?: number): number {\n\tif (decimalPlaces === undefined) return value\n\tconst factor = 10 ** decimalPlaces\n\treturn Math.round(value * factor) / factor\n}\nfunction roundAndPad(value: number, decimalPlaces?: number): string {\n\tconst roundedValue = round(value, decimalPlaces)\n\tconst paddedString = roundedValue.toFixed(decimalPlaces)\n\treturn paddedString\n}\n\nexport const VALID_NON_NUMBERS = [``, `-`, `.`, `-.`] as const\nexport type ValidNonNumber = (typeof VALID_NON_NUMBERS)[number]\nexport const isValidNonNumber = (input: string): input is ValidNonNumber =>\n\tVALID_NON_NUMBERS.includes(input as ValidNonNumber)\nexport const VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n\tRecord<ValidNonNumber, number | null>\n> = {\n\t\"\": null,\n\t\"-\": 0,\n\t\".\": 0,\n\t\"-.\": 0,\n} as const\nexport type DecimalInProgress = `${number | ``}.${number}`\nexport const isDecimalInProgress = (input: string): input is DecimalInProgress =>\n\tinput === `0` || (!Number.isNaN(Number(input)) && input.includes(`.`))\n\nconst textToValue = (input: string, allowDecimal: boolean): number | null => {\n\tif (isValidNonNumber(input)) return VALID_NON_NUMBER_INTERPRETATIONS[input]\n\treturn allowDecimal\n\t\t? Number.parseFloat(input)\n\t\t: Math.round(Number.parseFloat(input))\n}\n\nexport type NumberConstraints = {\n\tmax: number\n\tmin: number\n\tdecimalPlaces: number\n\tnullable: boolean\n}\nexport const DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints = {\n\tmax: Number.POSITIVE_INFINITY,\n\tmin: Number.NEGATIVE_INFINITY,\n\tdecimalPlaces: 100,\n\tnullable: true,\n}\n\nconst initRefinery =\n\t<Constraints extends NumberConstraints>(\n\t\tconstraints: { [K in keyof Constraints]?: Constraints[K] | undefined },\n\t) =>\n\t(\n\t\tinput: number | null,\n\t): Constraints extends { nullable: true | undefined }\n\t\t? number | null\n\t\t: number => {\n\t\tif (input === null && constraints.nullable === true) {\n\t\t\treturn null as Constraints extends { nullable: true }\n\t\t\t\t? number | null\n\t\t\t\t: number\n\t\t}\n\t\tconst { max, min, decimalPlaces } = {\n\t\t\t...DEFAULT_NUMBER_CONSTRAINTS,\n\t\t\t...constraints,\n\t\t}\n\t\tlet constrained = clampInto(min, max)(input ?? 0)\n\t\tif (decimalPlaces) {\n\t\t\tconstrained = round(constrained, decimalPlaces)\n\t\t}\n\t\treturn constrained\n\t}\n\nconst valueToText = (numericValue: number | null): string => {\n\tif (numericValue === null || numericValue === undefined) {\n\t\treturn ``\n\t}\n\treturn numericValue.toString()\n}\n\ntype NumberInputProps = Partial<NumberConstraints> & {\n\tautoSize?: boolean\n\tdisabled?: boolean\n\tid?: string\n\tlabel?: string\n\tname?: string\n\tonChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n\tonClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void\n\tplaceholder?: string\n\tset?: ((newValue: number | null) => void) | undefined\n\ttestid?: string\n\tvalue?: number | null\n}\n\nexport const NumberInput: FC<NumberInputProps> = ({\n\tautoSize = false,\n\tdecimalPlaces,\n\tdisabled = false,\n\tlabel,\n\tmax,\n\tmin,\n\tname,\n\tonChange,\n\tonClick,\n\tplaceholder = ``,\n\tset = () => null,\n\ttestid,\n\tvalue = null,\n}) => {\n\tconst htmlId = useId()\n\tconst [temporaryEntry, setTemporaryEntry] = useState<\n\t\tDecimalInProgress | ValidNonNumber | null\n\t>(null)\n\tconst userHasMadeDeliberateChange = useRef<boolean>(false)\n\n\tconst refine = initRefinery({ max, min, decimalPlaces, nullable: true })\n\n\tconst allowDecimal = decimalPlaces === undefined || decimalPlaces > 0\n\n\tconst handleBlur = () => {\n\t\tif (userHasMadeDeliberateChange.current) {\n\t\t\tset(refine(value ?? null))\n\t\t\tsetTemporaryEntry(null)\n\t\t}\n\t\tuserHasMadeDeliberateChange.current = false\n\t}\n\n\tconst handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (onChange) onChange(event)\n\t\tif (set === undefined) return\n\t\tuserHasMadeDeliberateChange.current = true\n\t\tconst input = event.target.value\n\t\tif (isValidNonNumber(input) || isDecimalInProgress(input)) {\n\t\t\tsetTemporaryEntry(input)\n\t\t\tconst textInterpretation = isDecimalInProgress(input)\n\t\t\t\t? input\n\t\t\t\t: (min?.toString() ?? `0`)\n\t\t\tconst newValue = textToValue(textInterpretation, allowDecimal)\n\t\t\tset(refine(newValue))\n\t\t\treturn\n\t\t}\n\t\tsetTemporaryEntry(null)\n\t\tconst inputIsNumeric =\n\t\t\t(!Number.isNaN(Number(input)) && !input.includes(` `)) ||\n\t\t\t(allowDecimal && input === `.`) ||\n\t\t\t(allowDecimal && input === `-.`) ||\n\t\t\tinput === `` ||\n\t\t\tinput === `-`\n\t\tconst numericValue = textToValue(input, allowDecimal)\n\n\t\tif (inputIsNumeric) {\n\t\t\tset(refine(numericValue))\n\t\t}\n\t}\n\n\tconst displayValue =\n\t\ttemporaryEntry ?? valueToText(value ? refine(value) : value)\n\n\treturn (\n\t\t<span>\n\t\t\t{label ? <label htmlFor={htmlId}>{label}</label> : null}\n\t\t\t{autoSize ? (\n\t\t\t\t<ElasticInput\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\tplaceholder={placeholder ?? `-`}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tname={name ?? htmlId}\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\tplaceholder={placeholder ?? `-`}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tname={name ?? htmlId}\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n","import { type FC, useId } from \"react\"\n\nimport { ElasticInput } from \".\"\n\nexport type TextInputProps = {\n\tvalue: string\n\tset?: ((value: string) => void) | undefined\n\tlabel?: string\n\tplaceholder?: string\n\tautoSize?: boolean\n\treadOnly?: boolean\n\ttestid?: string\n}\n\nexport const TextInput: FC<TextInputProps> = ({\n\tvalue,\n\tset,\n\tlabel,\n\tplaceholder,\n\tautoSize = false,\n\ttestid,\n}) => {\n\tconst htmlId = useId()\n\treturn (\n\t\t<span>\n\t\t\t{label ? <label htmlFor={htmlId}>{label}</label> : null}\n\t\t\t{autoSize ? (\n\t\t\t\t<ElasticInput\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => set?.(e.target.value)}\n\t\t\t\t\tdisabled={set === undefined}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<input\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => set?.(e.target.value)}\n\t\t\t\t\tdisabled={set === undefined}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n","import { ElasticInput } from \"../../elastic-input\"\nimport type { JsonEditorProps } from \"../developer-interface\"\n\nexport const NonJsonEditor: React.FC<JsonEditorProps<never>> = ({\n\tdata,\n\ttestid,\n}) => {\n\treturn data === undefined ? (\n\t\t<ElasticInput\n\t\t\tdisabled\n\t\t\tvalue=\"undefined\"\n\t\t\tdata-testid={`${testid}-undefined`}\n\t\t/>\n\t) : (\n\t\t<ElasticInput\n\t\t\tdisabled\n\t\t\tvalue={\n\t\t\t\tObject.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data)\n\t\t\t}\n\t\t\tdata-testid={`${testid}-non-json-${Object.getPrototypeOf(data).constructor.name}`}\n\t\t/>\n\t)\n}\n","import { jsonRefinery } from \"atom.io/introspection\"\nimport type { JsonTypes } from \"atom.io/json\"\nimport { isJson } from \"atom.io/json\"\nimport type { CSSProperties, FC, ReactElement } from \"react\"\n\nimport { ElasticInput } from \"../elastic-input\"\nimport type { SetterOrUpdater } from \".\"\nimport { SubEditors } from \".\"\nimport type { JsonEditorComponents } from \"./default-components\"\nimport { NonJsonEditor } from \"./editors-by-type/non-json\"\n\nexport type JsonEditorProps_INTERNAL<T> = {\n\tdata: T\n\tset: SetterOrUpdater<T>\n\tname?: string | undefined\n\trename?: ((newKey: string) => void) | undefined\n\tremove?: (() => void) | undefined\n\trecast?: (newType: keyof JsonTypes) => void\n\tpath?: ReadonlyArray<number | string>\n\tisReadonly?: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden?: (path: ReadonlyArray<number | string>) => boolean\n\tclassName?: string | undefined\n\tstyle?: CSSProperties | undefined\n\tHeader?: FC<{ data: T }> | undefined\n\tComponents: JsonEditorComponents\n\ttestid?: string | undefined\n}\n\nexport const JsonEditor_INTERNAL = <T,>({\n\tdata,\n\tset,\n\tname,\n\trename,\n\tremove,\n\trecast,\n\tpath = [],\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tclassName,\n\tstyle,\n\tHeader: HeaderDisplay,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<T>): ReactElement | null => {\n\tconst dataIsJson = isJson(data)\n\tconst refined = jsonRefinery.refine<unknown>(data) ?? {\n\t\ttype: `non-json`,\n\t\tdata,\n\t}\n\tconst SubEditor = dataIsJson\n\t\t? SubEditors[refined.type as keyof JsonTypes]\n\t\t: NonJsonEditor\n\n\tconst disabled = isReadonly(path)\n\n\treturn isHidden(path) ? null : (\n\t\t<Components.ErrorBoundary>\n\t\t\t<Components.EditorWrapper\n\t\t\t\tclassName={className}\n\t\t\t\tstyle={style}\n\t\t\t\ttestid={testid}\n\t\t\t>\n\t\t\t\t{remove ? (\n\t\t\t\t\tdisabled ? (\n\t\t\t\t\t\t<Components.Button disabled testid={`${testid}-delete`}>\n\t\t\t\t\t\t\t<Components.DeleteIcon />\n\t\t\t\t\t\t</Components.Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Components.Button\n\t\t\t\t\t\t\ttestid={`${testid}-delete`}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tremove()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Components.DeleteIcon />\n\t\t\t\t\t\t</Components.Button>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t{HeaderDisplay && <HeaderDisplay data={data} />}\n\t\t\t\t{rename && (\n\t\t\t\t\t<Components.KeyWrapper>\n\t\t\t\t\t\t<ElasticInput\n\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: (e) => {\n\t\t\t\t\t\t\t\t\t\t\trename(e.target.value)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdata-testid={`${testid}-rename`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Components.KeyWrapper>\n\t\t\t\t)}\n\t\t\t\t<SubEditor\n\t\t\t\t\tdata={refined.data as never}\n\t\t\t\t\tset={set}\n\t\t\t\t\tremove={remove}\n\t\t\t\t\trename={rename}\n\t\t\t\t\tpath={path}\n\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\tComponents={Components}\n\t\t\t\t\ttestid={testid}\n\t\t\t\t/>\n\t\t\t\t{recast && dataIsJson ? (\n\t\t\t\t\t<select\n\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: (e) => {\n\t\t\t\t\t\t\t\t\t\trecast(e.target.value as keyof JsonTypes)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={refined.type}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tdata-testid={`${testid}-recast`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Object.keys(SubEditors).map((type) => (\n\t\t\t\t\t\t\t<option key={type} value={type}>\n\t\t\t\t\t\t\t\t{type}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t) : null}\n\t\t\t</Components.EditorWrapper>\n\t\t</Components.ErrorBoundary>\n\t)\n}\n","import { become } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { SetterOrUpdater } from \"../..\"\n\nexport const makeElementSetters = <T extends Json.Tree.Array>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): SetterOrUpdater<T[number]>[] =>\n\tdata.map((value, index) => (newValue) => {\n\t\tset((): T => {\n\t\t\tconst newData = [...data]\n\t\t\tnewData[index] = become(newValue)(value)\n\t\t\treturn newData as unknown as T\n\t\t})\n\t})\n","import type { Json } from \"atom.io/json\"\nimport type { ReactElement } from \"react\"\n\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\nimport { makeElementSetters } from \"./utilities/array-elements\"\n\nexport const ArrayEditor = ({\n\tpath = [],\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<Json.Tree.Array>): ReactElement => {\n\tconst setElement = makeElementSetters(data, set)\n\treturn (\n\t\t<>\n\t\t\t{data.map((element, index) => {\n\t\t\t\tconst newPath = [...path, index]\n\t\t\t\treturn (\n\t\t\t\t\t<JsonEditor_INTERNAL\n\t\t\t\t\t\tkey={newPath.join(``)}\n\t\t\t\t\t\tpath={newPath}\n\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\tdata={element}\n\t\t\t\t\t\tset={setElement[index]}\n\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\tclassName=\"json_editor_element\"\n\t\t\t\t\t\ttestid={`${testid}-element-${index}`}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n}\n","import type { Json } from \"atom.io/json\"\n\nexport const stringToBoolean = (str: string): boolean => str === `true`\nexport const stringToNumber = (str: string): number => Number(str)\nexport const stringToArray = (str: string): string[] => str.split(`,`)\nexport const stringToObject = (str: string): Json.Tree.Object => {\n\ttry {\n\t\treturn JSON.parse(str)\n\t} catch (e) {\n\t\treturn { [str]: str }\n\t}\n}\n\nexport const objectToString = (obj: Json.Tree.Object): string =>\n\tJSON.stringify(obj)\nexport const objectToBoolean = (obj: Json.Tree.Object): boolean =>\n\tobj[`true`] === true\nexport const objectToNumber = (obj: Json.Tree.Object): number =>\n\tNumber(obj[`number`] ?? obj[`size`] ?? obj[`count`] ?? 0)\nexport const objectToArray = <T>(\n\tobj: Json.Tree.Object<string, T>,\n): [key: string, value: T][] => Object.entries(obj)\n\nexport const booleanToString = (bool: boolean): string => bool.toString()\nexport const booleanToNumber = (bool: boolean): number => +bool\nexport const booleanToObject = (bool: boolean): Json.Tree.Object => ({\n\t[bool.toString()]: bool,\n})\nexport const booleanToArray = (bool: boolean): boolean[] => [bool]\n\nexport const numberToString = (num: number): string => num.toString()\nexport const numberToBoolean = (num: number): boolean => num === 1\nexport const numberToObject = (num: number): Json.Tree.Object => ({\n\tnumber: num,\n})\nexport const numberToArray = (num: number): null[] => Array(num).fill(null)\n\nexport const arrayToString = (arr: Json.Tree.Array): string => arr.join(`,`)\nexport const arrayToNumber = (arr: Json.Tree.Array): number => arr.length\nexport const arrayToBoolean = (arr: Json.Tree.Array): boolean =>\n\ttypeof arr[0] === `boolean` ? arr[0] : arr.length > 0\nexport const arrayToObject = <T>(\n\tarr: Json.Tree.Array<T>,\n): Json.Tree.Object<`${number}`, T> =>\n\tarr.reduce(\n\t\t(acc, cur, idx) => {\n\t\t\tacc[`${idx}`] = cur\n\t\t\treturn acc\n\t\t},\n\t\t{} as Json.Tree.Object<`${number}`, T>,\n\t)\n\nexport const nullToString = (): string => ``\nexport const nullToNumber = (): number => 0\nexport const nullToBoolean = (): boolean => false\nexport const nullToArray = (): Json.Tree.Array => []\nexport const nullToObject = (): Json.Tree.Object => ({})\n","import { jsonRefinery } from \"atom.io/introspection\"\nimport type { Json } from \"atom.io/json\"\n\nimport * as Cast from \"./cast-json\"\n\nexport const castToJson = (\n\tinput: unknown,\n): {\n\tarray: Json.Tree.Array\n\tboolean: boolean\n\tnumber: number\n\tobject: Json.Tree.Object\n\tstring: string\n\tnull: null\n} => {\n\tconst refined = jsonRefinery.refine(input)\n\tswitch (refined?.type) {\n\t\tcase `array`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.arrayToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.arrayToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.arrayToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.arrayToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `boolean`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.booleanToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.booleanToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.booleanToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.booleanToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `number`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.numberToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.numberToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.numberToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.numberToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `object`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.objectToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.objectToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.objectToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.objectToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `string`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.stringToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.stringToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.stringToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.stringToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `null`:\n\t\tcase undefined: {\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.nullToArray()\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.nullToBoolean()\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.nullToNumber()\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.nullToObject()\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.nullToString()\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n","import { become } from \"atom.io/internal\"\nimport type { Json, JsonTypeName } from \"atom.io/json\"\nimport { fromEntries, JSON_DEFAULTS, toEntries } from \"atom.io/json\"\nimport type { RefObject } from \"react\"\n\nimport type { SetterOrUpdater } from \"../..\"\nimport { castToJson } from \"./cast-to-json\"\n\nexport const makePropertySetters = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): { [K in keyof T]: SetterOrUpdater<T[K]> } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key, value]) => [\n\t\t\tkey,\n\t\t\t(newValue: unknown) => {\n\t\t\t\tset({ ...data, [key]: become(newValue)(value) })\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRenamers = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n\tstableKeyMapRef: RefObject<{ [Key in keyof T]: keyof T }>,\n): { [K in keyof T]: (newKey: string) => void } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key, value]) => [\n\t\t\tkey,\n\t\t\t(newKey: string) => {\n\t\t\t\tif (!Object.hasOwn(data, newKey)) {\n\t\t\t\t\tset(() => {\n\t\t\t\t\t\tconst entries = Object.entries(data)\n\t\t\t\t\t\tconst index = entries.findIndex(([k]) => k === key)\n\t\t\t\t\t\tentries[index] = [newKey, value]\n\t\t\t\t\t\tconst stableKeyMap = stableKeyMapRef.current\n\t\t\t\t\t\tstableKeyMapRef.current = {\n\t\t\t\t\t\t\t...stableKeyMap,\n\t\t\t\t\t\t\t[newKey]: stableKeyMap[key],\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Object.fromEntries(entries) as T\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRemovers = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): { [K in keyof T]: () => void } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key]) => [\n\t\t\tkey,\n\t\t\t() => {\n\t\t\t\tset(() => {\n\t\t\t\t\tconst { [key]: _, ...rest } = data\n\t\t\t\t\treturn rest as T\n\t\t\t\t})\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRecasters = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): { [K in keyof T]: (newType: JsonTypeName) => void } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key, value]) => [\n\t\t\tkey,\n\t\t\t(newType: JsonTypeName) => {\n\t\t\t\tset(() => ({\n\t\t\t\t\t...data,\n\t\t\t\t\t[key]: castToJson(value)[newType],\n\t\t\t\t}))\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyCreationInterface =\n\t<T extends Json.Tree.Object>(\n\t\tdata: T,\n\t\tset: SetterOrUpdater<T>,\n\t): ((\n\t\tkey: string,\n\t\ttype: JsonTypeName,\n\t) => (value?: Json.Serializable) => void) =>\n\t(key, type) =>\n\t(value) => {\n\t\tset({ ...data, [key]: value ?? JSON_DEFAULTS[type] })\n\t}\n\nexport const makePropertySorter =\n\t<T extends Json.Tree.Object>(\n\t\tdata: T,\n\t\tset: SetterOrUpdater<T>,\n\t\tsortFn?: (a: string, b: string) => number,\n\t): (() => void) =>\n\t() => {\n\t\tconst sortedKeys = Object.keys(data).sort(sortFn)\n\t\tconst sortedObj = {} as Record<string, unknown>\n\t\tfor (const key of sortedKeys) {\n\t\t\tsortedObj[key] = data[key]\n\t\t}\n\t\tset(sortedObj as T)\n\t}\n","import type { Json } from \"atom.io/json\"\nimport type { FC, ReactElement } from \"react\"\nimport { useRef } from \"react\"\n\nimport { ElasticInput } from \"../../elastic-input\"\nimport type { JsonEditorComponents } from \"../default-components\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\nimport {\n\tmakePropertyCreationInterface,\n\tmakePropertyRecasters,\n\tmakePropertyRemovers,\n\tmakePropertyRenamers,\n\tmakePropertySetters,\n\tmakePropertySorter,\n} from \"./utilities/object-properties\"\n\nexport type PropertyAdderProps = {\n\taddProperty: () => void\n\tdisabled: boolean\n\tpropertyKey: string\n\tComponents: JsonEditorComponents\n}\n\nexport const PropertyAdder: FC<PropertyAdderProps> = ({\n\taddProperty,\n\tdisabled,\n\tpropertyKey,\n\tComponents,\n}) => (\n\t<Components.MissingPropertyWrapper>\n\t\t<ElasticInput disabled defaultValue={propertyKey} />\n\t\t{` `}\n\t\t<ElasticInput disabled defaultValue=\"is missing\" />\n\t\t<Components.Button\n\t\t\tonClick={() => {\n\t\t\t\taddProperty()\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t+\n\t\t</Components.Button>\n\t</Components.MissingPropertyWrapper>\n)\n\nexport const ObjectEditor = <T extends Json.Tree.Object>({\n\tpath = [],\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<T>): ReactElement => {\n\tconst disabled = isReadonly(path)\n\n\tconst stableKeyMap = useRef<Record<keyof T, keyof T>>(\n\t\tObject.keys(data).reduce(\n\t\t\t(acc, key: keyof T) => {\n\t\t\t\tacc[key] = key\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<keyof T, keyof T>,\n\t\t),\n\t)\n\n\tconst setProperty = makePropertySetters(data, set)\n\tconst renameProperty = makePropertyRenamers(data, set, stableKeyMap)\n\tconst removeProperty = makePropertyRemovers(data, set)\n\tconst recastProperty = makePropertyRecasters(data, set)\n\tconst sortProperties = makePropertySorter(data, set)\n\tconst makePropertyAdder = makePropertyCreationInterface(data, set)\n\n\treturn (\n\t\t<>\n\t\t\t<Components.Button\n\t\t\t\ttestid={`${testid}-sort-properties`}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tsortProperties()\n\t\t\t\t}}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\tSort\n\t\t\t</Components.Button>\n\t\t\t<Components.ObjectWrapper>\n\t\t\t\t<div className=\"json_editor_properties\">\n\t\t\t\t\t{Object.keys(data).map((key) => {\n\t\t\t\t\t\tconst originalKey = stableKeyMap.current[key]\n\t\t\t\t\t\tconst newPath = [...path, key]\n\t\t\t\t\t\tconst originalPath = [...path, originalKey]\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<JsonEditor_INTERNAL\n\t\t\t\t\t\t\t\tkey={originalPath.join(`.`)}\n\t\t\t\t\t\t\t\tpath={newPath}\n\t\t\t\t\t\t\t\tname={key}\n\t\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\t\tdata={data[key as keyof T]}\n\t\t\t\t\t\t\t\tset={setProperty[key as keyof T]}\n\t\t\t\t\t\t\t\trename={renameProperty[key as keyof T]}\n\t\t\t\t\t\t\t\tremove={removeProperty[key as keyof T]}\n\t\t\t\t\t\t\t\trecast={recastProperty[key as keyof T]}\n\t\t\t\t\t\t\t\tclassName=\"json_editor_property\"\n\t\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\t\ttestid={`${testid}-property-${key}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t\t{disabled ? (\n\t\t\t\t\t<Components.Button disabled testid={`${testid}-add-property`}>\n\t\t\t\t\t\t+\n\t\t\t\t\t</Components.Button>\n\t\t\t\t) : (\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\ttestid={`${testid}-add-property`}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tmakePropertyAdder(`new_property`, `string`)()\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t+\n\t\t\t\t\t</Components.Button>\n\t\t\t\t)}\n\t\t\t</Components.ObjectWrapper>\n\t\t</>\n\t)\n}\n","import type { ReactElement } from \"react\"\n\nimport { NumberInput, TextInput } from \"../../elastic-input\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\n\nexport const BooleanEditor = ({\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<boolean>): ReactElement => (\n\t<Components.BooleanWrapper>\n\t\t<input\n\t\t\tdata-testid={`${testid}-boolean-input`}\n\t\t\ttype=\"checkbox\"\n\t\t\tchecked={data}\n\t\t\tonChange={(event) => {\n\t\t\t\tset(event.target.checked)\n\t\t\t}}\n\t\t/>\n\t</Components.BooleanWrapper>\n)\n\nexport const NullEditor = ({\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<null>): ReactElement => (\n\t<Components.Null testid={`${testid}-null`} />\n)\n\nexport const NumberEditor = ({\n\tpath = [],\n\tisReadonly = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<number>): ReactElement => (\n\t<Components.NumberWrapper>\n\t\t<NumberInput\n\t\t\ttestid={`${testid}-number-input`}\n\t\t\tvalue={data}\n\t\t\tset={\n\t\t\t\tisReadonly(path)\n\t\t\t\t\t? undefined\n\t\t\t\t\t: (newValue) => {\n\t\t\t\t\t\t\tset(Number(newValue))\n\t\t\t\t\t\t}\n\t\t\t}\n\t\t\tautoSize={true}\n\t\t/>\n\t</Components.NumberWrapper>\n)\n\nexport const StringEditor = ({\n\tpath = [],\n\tisReadonly = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<string>): ReactElement => {\n\treturn (\n\t\t<Components.StringWrapper>\n\t\t\t<TextInput\n\t\t\t\ttestid={`${testid}-string-input`}\n\t\t\t\tvalue={data}\n\t\t\t\tset={isReadonly(path) ? undefined : set}\n\t\t\t\tautoSize={true}\n\t\t\t/>\n\t\t</Components.StringWrapper>\n\t)\n}\n","import type { ErrorInfo, FC } from \"react\"\n\nexport type FallbackProps = {\n\terror?: Error | string | undefined\n\terrorInfo?: ErrorInfo | undefined\n}\n\nexport const DefaultFallback: FC<FallbackProps> = ({ error, errorInfo }) => {\n\tconst component = errorInfo?.componentStack?.split(` `).filter(Boolean)[2]\n\tconst message =\n\t\terror?.toString() ?? errorInfo?.componentStack ?? `Unknown error`\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"error-boundary\"\n\t\t\tstyle={{\n\t\t\t\tflex: `1`,\n\t\t\t\tbackground: `black`,\n\t\t\t\tbackgroundImage: `url(./src/assets/kablooey.gif)`,\n\t\t\t\tbackgroundPosition: `center`,\n\t\t\t\t// backgroundRepeat: `no-repeat`,\n\t\t\t\tbackgroundSize: `overlay`,\n\t\t\t}}\n\t\t>\n\t\t\t{/* <img src=\"./src/assets/kablooey.gif\" alt=\"error\" /> */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: `50px`,\n\t\t\t\t\tmarginTop: `0`,\n\t\t\t\t\tpadding: `50px`,\n\t\t\t\t\tborder: `1px solid dashed`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: `black`,\n\t\t\t\t\t\tcolor: `white`,\n\t\t\t\t\t\tpadding: 10,\n\t\t\t\t\t\tpaddingTop: 5,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{`⚠️ `}\n\t\t\t\t\t<span style={{ color: `#fc0`, fontWeight: 700 }}>{component}</span>\n\t\t\t\t\t{` ⚠️ `}\n\t\t\t\t\t{message}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import type { ErrorInfo, FC, ReactNode } from \"react\"\nimport { Component } from \"react\"\n\nimport type { FallbackProps } from \"./DefaultFallback\"\nimport { DefaultFallback } from \"./DefaultFallback\"\n\nexport type ErrorBoundaryState = {\n\terror?: Error | string\n\terrorInfo?: ErrorInfo\n}\n\nexport type ErrorBoundaryProps = {\n\tchildren: ReactNode\n\tonError?: ((error: Error | string, errorInfo: ErrorInfo) => void) | undefined\n\tFallback?: FC<FallbackProps> | undefined\n\tuseResetErrorState?: () => () => void\n\tuseErrorState?: () => [\n\t\tErrorBoundaryState,\n\t\t(\n\t\t\tnewState:\n\t\t\t\t| ErrorBoundaryState\n\t\t\t\t| ((currState: ErrorBoundaryState) => ErrorBoundaryState),\n\t\t) => void,\n\t]\n}\n\nexport class ErrorBoundary extends Component<\n\tErrorBoundaryProps,\n\tErrorBoundaryState\n> {\n\tpublic constructor(props: ErrorBoundaryProps) {\n\t\tsuper(props)\n\t\tthis.state = {}\n\t\t// We can filter or add information\n\t\t// to airbrake notifications here:\n\t}\n\n\tpublic override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n\t\tthis.props.onError?.(error, errorInfo)\n\t\tthis.setState({\n\t\t\terror,\n\t\t\terrorInfo,\n\t\t})\n\t}\n\n\tpublic override render(): ReactNode {\n\t\tconst { error, errorInfo } = this.state\n\t\tconst { children, Fallback = DefaultFallback } = this.props\n\n\t\treturn errorInfo ? (\n\t\t\t<Fallback error={error} errorInfo={errorInfo} />\n\t\t) : (\n\t\t\tchildren\n\t\t)\n\t}\n}\n","import type { CSSProperties, FC, ReactNode } from \"react\"\n\nimport { ErrorBoundary } from \"../error-boundary\"\n\nexport type Dict<T> = Record<string, T>\n\nexport type WrapperComponent<T extends Dict<unknown> = Dict<unknown>> = FC<\n\tT & { children: ReactNode; testid?: string | undefined }\n>\n\nexport type WC<T extends Dict<unknown> = Dict<unknown>> = WrapperComponent<T>\n\nexport type JsonEditorComponents = {\n\tErrorBoundary: WC\n\n\tButton: WC<{\n\t\tonClick?: () => void\n\t\tdisabled?: boolean\n\t}>\n\tDeleteIcon: FC\n\n\tEditorWrapper: WC<{\n\t\tstyle?: CSSProperties | undefined\n\t\tclassName?: string | undefined\n\t\ttestid?: string | undefined\n\t}>\n\n\tArrayWrapper: WC\n\tObjectWrapper: WC\n\tStringWrapper: WC\n\tNumberWrapper: WC\n\tBooleanWrapper: WC\n\tNull: FC<{ testid?: string | undefined }>\n\n\tMissingPropertyWrapper: WC\n\tKeyWrapper: WC\n}\n\nexport const DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents = {\n\tErrorBoundary: ({ children }) => <ErrorBoundary>{children}</ErrorBoundary>,\n\tButton: ({ onClick, children, disabled, testid }) => (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName=\"json_editor_button\"\n\t\t\tonClick={onClick}\n\t\t\tdisabled={disabled}\n\t\t\tdata-testid={testid}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t),\n\tEditorWrapper: ({ children, className, testid }) => (\n\t\t<div\n\t\t\tclassName={`json_editor` + (className ? ` ${className}` : ``)}\n\t\t\tdata-testid={testid}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t),\n\tArrayWrapper: ({ children, testid }) => (\n\t\t<div className=\"json_editor_array\" data-testid={testid}>\n\t\t\t{children}\n\t\t</div>\n\t),\n\tObjectWrapper: ({ children, testid }) => (\n\t\t<div className=\"json_editor_object\" data-testid={testid}>\n\t\t\t{children}\n\t\t</div>\n\t),\n\tStringWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_string\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tNumberWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_number\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tBooleanWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_boolean\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tNull: ({ testid }) => (\n\t\t<span className=\"json_editor_null\" data-testid={testid} />\n\t),\n\tDeleteIcon: () => (\n\t\t<span className=\"json_editor_icon json_editor_delete\">x</span>\n\t),\n\tMissingPropertyWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_missing_property\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tKeyWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_key\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n}\n","import type { Json, JsonTypes } from \"atom.io/json\"\nimport type { CSSProperties, FC, ReactElement } from \"react\"\n\nimport type { JsonEditorComponents } from \"./default-components\"\nimport { DEFAULT_JSON_EDITOR_COMPONENTS } from \"./default-components\"\nimport { ArrayEditor } from \"./editors-by-type/array-editor\"\nimport { ObjectEditor } from \"./editors-by-type/object-editor\"\nimport {\n\tBooleanEditor,\n\tNullEditor,\n\tNumberEditor,\n\tStringEditor,\n} from \"./editors-by-type/primitive-editors\"\nimport type { JsonEditorProps_INTERNAL } from \"./json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"./json-editor-internal\"\n\nexport const SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n> = {\n\tarray: ArrayEditor,\n\tboolean: BooleanEditor,\n\tnull: NullEditor,\n\tnumber: NumberEditor,\n\tobject: ObjectEditor,\n\tstring: StringEditor,\n}\n\nexport type JsonEditorProps<T> = {\n\tdata: T\n\tset: (valOrUpdater: T | ((currVal: T) => T)) => void\n\tname?: string | undefined\n\trename?: ((newKey: string) => void) | undefined\n\tremove?: (() => void) | undefined\n\tpath?: ReadonlyArray<number | string>\n\tisReadonly?: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden?: (path: ReadonlyArray<number | string>) => boolean\n\tclassName?: string\n\tstyle?: CSSProperties\n\tHeader?: FC<{ data: T }>\n\tComponents?: Partial<JsonEditorComponents>\n\ttestid?: string | undefined\n}\n\nexport const JsonEditor = <T,>({\n\tdata,\n\tset,\n\tname,\n\trename,\n\tremove,\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tclassName,\n\tHeader,\n\tstyle,\n\tComponents: CustomComponents = {},\n\ttestid,\n}: JsonEditorProps<T>): ReactElement => {\n\tconst Components = {\n\t\t...DEFAULT_JSON_EDITOR_COMPONENTS,\n\t\t...CustomComponents,\n\t}\n\n\treturn (\n\t\t<JsonEditor_INTERNAL\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\tname={name}\n\t\t\trename={rename}\n\t\t\tremove={remove}\n\t\t\tpath={[]}\n\t\t\tisReadonly={isReadonly}\n\t\t\tisHidden={isHidden}\n\t\t\tclassName={className}\n\t\t\tHeader={Header}\n\t\t\tstyle={style}\n\t\t\tComponents={Components}\n\t\t\ttestid={testid}\n\t\t/>\n\t)\n}\n","import type { JsonTypes } from \"atom.io/json\"\nimport type { FC } from \"react\"\n\nimport { ArrayEditor } from \"./editors-by-type/array-editor\"\nimport { ObjectEditor } from \"./editors-by-type/object-editor\"\nimport {\n\tBooleanEditor,\n\tNullEditor,\n\tNumberEditor,\n\tStringEditor,\n} from \"./editors-by-type/primitive-editors\"\nimport type { JsonEditorProps_INTERNAL } from \"./json-editor-internal\"\n\nexport * from \"./default-components\"\nexport * from \"./developer-interface\"\nexport * from \"./editors-by-type/utilities/cast-to-json\"\n\nexport type SetterOrUpdater<T> = <New extends T>(\n\tnext: New | ((old: T) => New),\n) => void\n\nexport const SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n> = {\n\tarray: ArrayEditor,\n\tboolean: BooleanEditor,\n\tnull: NullEditor,\n\tnumber: NumberEditor,\n\tobject: ObjectEditor,\n\tstring: StringEditor,\n}\n","import type { ReadonlySelectorToken, WritableToken } from \"atom.io\"\nimport { useI, useO } from \"atom.io/react\"\nimport type { FC } from \"react\"\n\nimport { JsonEditor } from \"./json-editor\"\n\nexport const StateEditor: FC<{\n\ttoken: WritableToken<unknown>\n}> = ({ token }) => {\n\tconst set = useI(token)\n\tconst data = useO(token)\n\treturn (\n\t\t<JsonEditor testid={`${token.key}-state-editor`} data={data} set={set} />\n\t)\n}\n\nexport const ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}> = ({ token }) => {\n\tconst data = useO(token)\n\treturn (\n\t\t<JsonEditor\n\t\t\ttestid={`${token.key}-state-editor`}\n\t\t\tdata={data}\n\t\t\tset={() => null}\n\t\t\tisReadonly={() => true}\n\t\t/>\n\t)\n}\n\nexport const StoreEditor: FC<{\n\ttoken: ReadonlySelectorToken<unknown> | WritableToken<unknown>\n}> = ({ token }) => {\n\tif (token.type === `readonly_selector`) {\n\t\treturn <ReadonlySelectorViewer token={token} />\n\t}\n\treturn <StateEditor token={token} />\n}\n","import type { RegularAtomFamilyToken, RegularAtomToken } from \"atom.io\"\nimport {\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n\tIMPLICIT,\n\ttype Store,\n} from \"atom.io/internal\"\nimport type { IntrospectionStates } from \"atom.io/introspection\"\nimport { attachIntrospectionStates } from \"atom.io/introspection\"\nimport { persistSync } from \"atom.io/web\"\nimport type { Context } from \"react\"\nimport { createContext } from \"react\"\n\ntype DevtoolsView = `atoms` | `selectors` | `timelines` | `transactions`\n\nexport type DevtoolsStates = {\n\tdevtoolsAreOpenState: RegularAtomToken<boolean>\n\tdevtoolsViewSelectionState: RegularAtomToken<DevtoolsView>\n\tdevtoolsViewOptionsState: RegularAtomToken<DevtoolsView[]>\n\tviewIsOpenAtoms: RegularAtomFamilyToken<boolean, string>\n}\n\nexport function attachDevtoolsStates(\n\tstore: Store,\n): DevtoolsStates & IntrospectionStates & { store: Store } {\n\tconst introspectionStates = attachIntrospectionStates(store)\n\n\tconst devtoolsAreOpenState = createStandaloneAtom<boolean>(store, {\n\t\tkey: `🔍 Devtools Are Open`,\n\t\tdefault: true,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `🔍 Devtools Are Open`)],\n\t})\n\n\tconst devtoolsViewSelectionState = createStandaloneAtom<DevtoolsView>(store, {\n\t\tkey: `🔍 Devtools View Selection`,\n\t\tdefault: `atoms`,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `🔍 Devtools View`)],\n\t})\n\n\tconst devtoolsViewOptionsState = createStandaloneAtom<DevtoolsView[]>(store, {\n\t\tkey: `🔍 Devtools View Options`,\n\t\tdefault: [`atoms`, `selectors`, `transactions`, `timelines`],\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `🔍 Devtools View Options`)],\n\t})\n\n\tconst viewIsOpenAtoms = createAtomFamily<boolean, string>(store, {\n\t\tkey: `🔍 Devtools View Is Open`,\n\t\tdefault: false,\n\t\teffects: (key) =>\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, key + `:view-is-open`)],\n\t})\n\n\treturn {\n\t\t...introspectionStates,\n\t\tdevtoolsAreOpenState,\n\t\tdevtoolsViewSelectionState,\n\t\tdevtoolsViewOptionsState,\n\t\tviewIsOpenAtoms,\n\t\tstore,\n\t}\n}\n\nexport const DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\n> = createContext(attachDevtoolsStates(IMPLICIT.STORE))\n","import type {\n\tReadableToken,\n\tReadonlySelectorToken,\n\tRegularAtomToken,\n} from \"atom.io\"\nimport { getState } from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { FamilyNode, WritableTokenIndex } from \"atom.io/introspection\"\nimport { primitiveRefinery } from \"atom.io/introspection\"\nimport { useI, useO } from \"atom.io/react\"\nimport { type FC, useContext } from \"react\"\n\nimport { button } from \"./Button\"\nimport { StoreEditor } from \"./StateEditor\"\nimport { DevtoolsContext } from \"./store\"\n\n/* eslint-disable no-console */\n\nexport const StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlySelectorToken<string>\n}> = ({ node, isOpenState, typeState }) => {\n\tconst setIsOpen = useI(isOpenState)\n\tconst isOpen = useO(isOpenState)\n\n\tconst state = useO(node)\n\tconst stateType = useO(typeState)\n\n\tconst isPrimitive = Boolean(primitiveRefinery.refine(state))\n\n\treturn (\n\t\t<>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen && !isPrimitive}\n\t\t\t\t\ttestid={`open-close-state-${node.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\tdisabled={isPrimitive}\n\t\t\t\t/>\n\t\t\t\t<main\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconsole.log(node, getState(node))\n\t\t\t\t\t}}\n\t\t\t\t\tonKeyUp={() => {\n\t\t\t\t\t\tconsole.log(node, getState(node))\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<h2>{node.family?.subKey ?? node.key}</h2>\n\t\t\t\t\t<span className=\"type detail\">({stateType})</span>\n\t\t\t\t</main>\n\t\t\t\t<StoreEditor token={node} />\n\t\t\t</header>\n\t\t\t{isOpen && !isPrimitive ? (\n\t\t\t\t<main>\n\t\t\t\t\t<StoreEditor token={node} />\n\t\t\t\t</main>\n\t\t\t) : null}\n\t\t</>\n\t)\n}\nexport const StateIndexTreeNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>>\n\tisOpenState: RegularAtomToken<boolean>\n}> = ({ node, isOpenState }) => {\n\tconst setIsOpen = useI(isOpenState)\n\tconst isOpen = useO(isOpenState)\n\n\tconst { typeSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\n\tfor (const [key, childNode] of node.familyMembers) {\n\t\tfindInStore(store, viewIsOpenAtoms, key)\n\t\tfindInStore(store, typeSelectors, childNode.key)\n\t}\n\treturn (\n\t\t<>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\ttestid={`open-close-state-family-${node.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t/>\n\t\t\t\t<main>\n\t\t\t\t\t<h2>{node.key}</h2>\n\t\t\t\t\t<span className=\"type detail\"> (family)</span>\n\t\t\t\t</main>\n\t\t\t</header>\n\t\t\t{isOpen\n\t\t\t\t? [...node.familyMembers.entries()].map(([key, childNode]) => (\n\t\t\t\t\t\t<StateIndexNode\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tnode={childNode}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, childNode.key)}\n\t\t\t\t\t\t\ttypeState={findInStore(store, typeSelectors, childNode.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))\n\t\t\t\t: null}\n\t\t</>\n\t)\n}\n\nexport const StateIndexNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>> | ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlySelectorToken<string>\n}> = ({ node, isOpenState, typeState }) => {\n\treturn (\n\t\t<section className=\"node state\" data-testid={`state-${node.key}`}>\n\t\t\t{`type` in node ? (\n\t\t\t\t<StateIndexLeafNode\n\t\t\t\t\tnode={node}\n\t\t\t\t\tisOpenState={isOpenState}\n\t\t\t\t\ttypeState={typeState}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<StateIndexTreeNode node={node} isOpenState={isOpenState} />\n\t\t\t)}\n\t\t</section>\n\t)\n}\n\nexport const StateIndex: FC<{\n\ttokenIndex: ReadonlySelectorToken<WritableTokenIndex<ReadableToken<unknown>>>\n}> = ({ tokenIndex }) => {\n\tconst tokenIds = useO(tokenIndex)\n\n\tconst { typeSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\n\treturn (\n\t\t<article className=\"index state_index\" data-testid=\"state-index\">\n\t\t\t{[...tokenIds.entries()]\n\t\t\t\t.filter(([key]) => !key.startsWith(`👁‍🗨`))\n\t\t\t\t.sort()\n\t\t\t\t.map(([key, node]) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<StateIndexNode\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tnode={node}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, node.key)}\n\t\t\t\t\t\t\ttypeState={findInStore(store, typeSelectors, node.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</article>\n\t)\n}\n","import type {\n\tKeyedStateUpdate,\n\tTimelineUpdate,\n\tTransactionUpdate,\n} from \"atom.io\"\nimport type { Func } from \"atom.io/internal\"\nimport { discoverType, prettyJson } from \"atom.io/introspection\"\nimport { stringifyJson } from \"atom.io/json\"\nimport * as React from \"react\"\n\n/* eslint-disable no-console */\n\nconst AtomUpdateFC: React.FC<{\n\tserialNumber: number\n\tatomUpdate: KeyedStateUpdate<unknown>\n}> = ({ atomUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tkey={atomUpdate.key}\n\t\t\tclassName=\"node atom_update\"\n\t\t\tonClick={() => {\n\t\t\t\tconsole.log(atomUpdate)\n\t\t\t}}\n\t\t\tonKeyUp={() => {\n\t\t\t\tconsole.log(atomUpdate)\n\t\t\t}}\n\t\t>\n\t\t\t<span className=\"detail\">{atomUpdate.key}: </span>\n\t\t\t<span>\n\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t{prettyJson.diff(atomUpdate.oldValue, atomUpdate.newValue).summary}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</article>\n\t)\n}\n\nconst TransactionUpdateFC: React.FC<{\n\tserialNumber: number\n\ttransactionUpdate: TransactionUpdate<Func>\n}> = ({ serialNumber, transactionUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tclassName=\"node transaction_update\"\n\t\t\tdata-testid={`transaction-update-${transactionUpdate.key}-${serialNumber}`}\n\t\t>\n\t\t\t<header>\n\t\t\t\t<h4>{serialNumber}</h4>\n\t\t\t</header>\n\t\t\t<main>\n\t\t\t\t<section className=\"transaction_params\">\n\t\t\t\t\t<span className=\"detail\">params: </span>\n\t\t\t\t\t{transactionUpdate.params.map((param, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<article\n\t\t\t\t\t\t\t\tkey={`param` + index}\n\t\t\t\t\t\t\t\tclassName=\"node transaction_param\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tconsole.log(transactionUpdate)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyUp={() => {\n\t\t\t\t\t\t\t\t\tconsole.log(transactionUpdate)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"detail\">{discoverType(param)}: </span>\n\t\t\t\t\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t\t\t\t\t{typeof param === `object` &&\n\t\t\t\t\t\t\t\t\tparam !== null &&\n\t\t\t\t\t\t\t\t\t`type` in param &&\n\t\t\t\t\t\t\t\t\t`target` in param ? (\n\t\t\t\t\t\t\t\t\t\t<>{JSON.stringify(param.type)}</>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<>{JSON.stringify(param)}</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</section>\n\t\t\t\t<section className=\"node transaction_output\">\n\t\t\t\t\t<span className=\"detail\">output: </span>\n\t\t\t\t\t<span className=\"detail\">\n\t\t\t\t\t\t{discoverType(transactionUpdate.output)}\n\t\t\t\t\t</span>\n\t\t\t\t\t{transactionUpdate.output ? (\n\t\t\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t\t\t: {JSON.stringify(transactionUpdate.output)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</section>\n\t\t\t\t<section className=\"transaction_impact\">\n\t\t\t\t\t<span className=\"detail\">impact: </span>\n\t\t\t\t\t{transactionUpdate.updates\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(token) =>\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!token.key.startsWith(`👁‍🗨`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((update, index) => {\n\t\t\t\t\t\t\tswitch (update.type) {\n\t\t\t\t\t\t\t\tcase `atom_update`:\n\t\t\t\t\t\t\t\tcase `selector_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\t\t\t\t\t\tkey={`${transactionUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\tatomUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `transaction_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TransactionUpdateFC\n\t\t\t\t\t\t\t\t\t\t\tkey={`${transactionUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\ttransactionUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `molecule_creation`:\n\t\t\t\t\t\t\t\tcase `molecule_disposal`:\n\t\t\t\t\t\t\t\tcase `molecule_transfer`:\n\t\t\t\t\t\t\t\tcase `state_creation`:\n\t\t\t\t\t\t\t\tcase `state_disposal`:\n\t\t\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})}\n\t\t\t\t</section>\n\t\t\t</main>\n\t\t</article>\n\t)\n}\n\nexport const TimelineUpdateFC: React.FC<{\n\ttimelineUpdate: TimelineUpdate<any>\n\tserialNumber: number\n}> = ({ timelineUpdate, serialNumber }) => {\n\treturn `key` in timelineUpdate ? (\n\t\t<article\n\t\t\tclassName=\"node timeline_update\"\n\t\t\tdata-testid={`timeline-update-${typeof timelineUpdate.key === `string` ? timelineUpdate.key : stringifyJson(timelineUpdate.key)}-${serialNumber}`}\n\t\t>\n\t\t\t<header>\n\t\t\t\t<h4>\n\t\t\t\t\t{timelineUpdate.timestamp}: {timelineUpdate.type} ({timelineUpdate.key}\n\t\t\t\t\t)\n\t\t\t\t</h4>\n\t\t\t</header>\n\t\t\t<main>\n\t\t\t\t{timelineUpdate.type === `transaction_update` ? (\n\t\t\t\t\ttimelineUpdate.updates\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(token) =>\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!token.key.startsWith(`👁‍🗨`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((update, index) => {\n\t\t\t\t\t\t\tswitch (update.type) {\n\t\t\t\t\t\t\t\tcase `atom_update`:\n\t\t\t\t\t\t\t\tcase `selector_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\t\t\t\t\t\tkey={`${timelineUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\tatomUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `transaction_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TransactionUpdateFC\n\t\t\t\t\t\t\t\t\t\t\tkey={`${timelineUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\ttransactionUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `molecule_creation`:\n\t\t\t\t\t\t\t\tcase `molecule_disposal`:\n\t\t\t\t\t\t\t\tcase `molecule_transfer`:\n\t\t\t\t\t\t\t\tcase `state_creation`:\n\t\t\t\t\t\t\t\tcase `state_disposal`:\n\t\t\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t) : timelineUpdate.type === `selector_update` ? (\n\t\t\t\t\ttimelineUpdate.atomUpdates\n\t\t\t\t\t\t.filter((token) => !token.key.startsWith(`👁‍🗨`))\n\t\t\t\t\t\t.map((atomUpdate, index) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\t\t\t\tkey={`${timelineUpdate.key}:${index}:${atomUpdate.key}`}\n\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\tatomUpdate={atomUpdate}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t) : timelineUpdate.type === `atom_update` ? (\n\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\tserialNumber={timelineUpdate.timestamp}\n\t\t\t\t\t\tatomUpdate={timelineUpdate}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</main>\n\t\t</article>\n\t) : null\n}\n\nexport const article: {\n\tAtomUpdate: typeof AtomUpdateFC\n\tTransactionUpdate: typeof TransactionUpdateFC\n\tTimelineUpdate: typeof TimelineUpdateFC\n} = {\n\tAtomUpdate: AtomUpdateFC,\n\tTransactionUpdate: TransactionUpdateFC,\n\tTimelineUpdate: TimelineUpdateFC,\n}\n","import type {\n\tReadonlySelectorToken,\n\tRegularAtomToken,\n\tTimelineToken,\n} from \"atom.io\"\nimport { redo, undo } from \"atom.io\"\nimport { findInStore, type Timeline } from \"atom.io/internal\"\nimport { useI, useO } from \"atom.io/react\"\nimport { type FC, Fragment, useContext } from \"react\"\n\nimport { button } from \"./Button\"\nimport { DevtoolsContext } from \"./store\"\nimport { article } from \"./Updates\"\n\nexport const YouAreHere: FC = () => {\n\treturn <span className=\"you_are_here\">you are here</span>\n}\n\nexport const TimelineLog: FC<{\n\ttoken: TimelineToken<any>\n\tisOpenState: RegularAtomToken<boolean>\n\ttimelineState: ReadonlySelectorToken<Timeline<any>>\n}> = ({ token, isOpenState, timelineState }) => {\n\tconst timeline = useO(timelineState)\n\tconst isOpen = useO(isOpenState)\n\tconst setIsOpen = useI(isOpenState)\n\n\treturn (\n\t\t<section className=\"node timeline_log\" data-testid={`timeline-${token.key}`}>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\ttestid={`open-close-timeline-${token.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t/>\n\t\t\t\t<main>\n\t\t\t\t\t<h2>{token.key}</h2>\n\t\t\t\t\t<span className=\"detail length\">\n\t\t\t\t\t\t({timeline.at}/{timeline.history.length})\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"gap\" />\n\t\t\t\t\t<nav>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tundo(token)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={timeline.at === 0}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tundo\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tredo(token)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={timeline.at === timeline.history.length}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tredo\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</nav>\n\t\t\t\t</main>\n\t\t\t</header>\n\t\t\t{isOpen ? (\n\t\t\t\t<main>\n\t\t\t\t\t{timeline.history.map((update, index) =>\n\t\t\t\t\t\tupdate.type !== `molecule_creation` &&\n\t\t\t\t\t\tupdate.type !== `molecule_disposal` &&\n\t\t\t\t\t\tupdate.type !== `state_creation` &&\n\t\t\t\t\t\tupdate.type !== `state_disposal` ? (\n\t\t\t\t\t\t\t<Fragment key={update.key + index + timeline.at}>\n\t\t\t\t\t\t\t\t{index === timeline.at ? <YouAreHere /> : null}\n\t\t\t\t\t\t\t\t<article.TimelineUpdate\n\t\t\t\t\t\t\t\t\ttimelineUpdate={update}\n\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{index === timeline.history.length - 1 &&\n\t\t\t\t\t\t\t\ttimeline.at === timeline.history.length ? (\n\t\t\t\t\t\t\t\t\t<YouAreHere />\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t) : null,\n\t\t\t\t\t)}\n\t\t\t\t</main>\n\t\t\t) : null}\n\t\t</section>\n\t)\n}\n\nexport const TimelineIndex: FC = () => {\n\tconst { timelineIndex, timelineSelectors, viewIsOpenAtoms, store } =\n\t\tuseContext(DevtoolsContext)\n\n\tconst tokenIds = useO(timelineIndex)\n\n\treturn (\n\t\t<article className=\"index timeline_index\" data-testid=\"timeline-index\">\n\t\t\t{tokenIds\n\t\t\t\t.filter((token) => !token.key.startsWith(`👁‍🗨`))\n\t\t\t\t.map((token) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TimelineLog\n\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, token.key)}\n\t\t\t\t\t\t\ttimelineState={findInStore(store, timelineSelectors, token.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</article>\n\t)\n}\n","import type {\n\tReadonlySelectorToken,\n\tRegularAtomToken,\n\tTransactionToken,\n\tTransactionUpdate,\n} from \"atom.io\"\nimport { findInStore, type Func } from \"atom.io/internal\"\nimport { useI, useO } from \"atom.io/react\"\nimport { type FC, useContext } from \"react\"\n\nimport { button } from \"./Button\"\nimport { DevtoolsContext } from \"./store\"\nimport { article } from \"./Updates\"\n\nexport const TransactionLog: FC<{\n\ttoken: TransactionToken<Func>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlySelectorToken<TransactionUpdate<Func>[]>\n}> = ({ token, isOpenState, logState }) => {\n\tconst log = useO(logState)\n\tconst isOpen = useO(isOpenState)\n\tconst setIsOpen = useI(isOpenState)\n\n\treturn (\n\t\t<section\n\t\t\tclassName=\"node transaction_log\"\n\t\t\tdata-testid={`transaction-${token.key}`}\n\t\t>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\ttestid={`open-close-transaction-${token.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t/>\n\t\t\t\t<main>\n\t\t\t\t\t<h2>{token.key}</h2>\n\t\t\t\t\t<span className=\"detail length\">({log.length})</span>\n\t\t\t\t</main>\n\t\t\t</header>\n\t\t\t{isOpen ? (\n\t\t\t\t<main>\n\t\t\t\t\t{log.map((update, index) => (\n\t\t\t\t\t\t<article.TransactionUpdate\n\t\t\t\t\t\t\tkey={update.key + index}\n\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\ttransactionUpdate={update}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</main>\n\t\t\t) : null}\n\t\t</section>\n\t)\n}\n\nexport const TransactionIndex: FC = () => {\n\tconst { transactionIndex, transactionLogSelectors, viewIsOpenAtoms, store } =\n\t\tuseContext(DevtoolsContext)\n\n\tconst tokenIds = useO(transactionIndex)\n\treturn (\n\t\t<article className=\"index transaction_index\" data-testid=\"transaction-index\">\n\t\t\t{tokenIds\n\t\t\t\t.filter((token) => !token.key.startsWith(`🔍`))\n\t\t\t\t.map((token) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TransactionLog\n\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, token.key)}\n\t\t\t\t\t\t\tlogState={findInStore(store, transactionLogSelectors, token.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</article>\n\t)\n}\n","import \"./devtools.css\"\n\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport { LayoutGroup, motion, spring } from \"motion/react\"\nimport { useContext, useRef } from \"react\"\n\nimport { StateIndex } from \"./StateIndex\"\nimport { attachDevtoolsStates, DevtoolsContext } from \"./store\"\nimport { TimelineIndex } from \"./TimelineIndex\"\nimport { TransactionIndex } from \"./TransactionIndex\"\n\nexport const AtomIODevtools: React.FC = () => {\n\tconst store = useContext(StoreContext)\n\treturn (\n\t\t<DevtoolsContext.Provider value={attachDevtoolsStates(store)}>\n\t\t\t<AtomIODevtoolsInternal />\n\t\t</DevtoolsContext.Provider>\n\t)\n}\n\nconst AtomIODevtoolsInternal = (): React.ReactNode => {\n\tconst constraintsRef = useRef(null)\n\n\tconst {\n\t\tatomIndex,\n\t\tselectorIndex,\n\t\tdevtoolsAreOpenState,\n\t\tdevtoolsViewSelectionState,\n\t\tdevtoolsViewOptionsState,\n\t} = useContext(DevtoolsContext)\n\n\tconst setDevtoolsAreOpen = useI(devtoolsAreOpenState)\n\tconst devtoolsAreOpen = useO(devtoolsAreOpenState)\n\tconst setDevtoolsView = useI(devtoolsViewSelectionState)\n\tconst devtoolsView = useO(devtoolsViewSelectionState)\n\tconst devtoolsViewOptions = useO(devtoolsViewOptionsState)\n\n\tconst mouseHasMoved = useRef(false)\n\n\treturn (\n\t\t<span\n\t\t\tstyle={{\n\t\t\t\tposition: `fixed`,\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0,\n\t\t\t}}\n\t\t>\n\t\t\t<motion.span\n\t\t\t\tref={constraintsRef}\n\t\t\t\tdata-css=\"atom_io_devtools_zone\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: `fixed`,\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tpointerEvents: `none`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<motion.main\n\t\t\t\tdrag\n\t\t\t\tdragConstraints={constraintsRef}\n\t\t\t\tdata-css=\"atom_io_devtools\"\n\t\t\t\ttransition={spring}\n\t\t\t\tstyle={\n\t\t\t\t\tdevtoolsAreOpen\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tbackgroundColor: `#0000`,\n\t\t\t\t\t\t\t\tborderColor: `#0000`,\n\t\t\t\t\t\t\t\tmaxHeight: 28,\n\t\t\t\t\t\t\t\tmaxWidth: 33,\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{devtoolsAreOpen ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<motion.header>\n\t\t\t\t\t\t\t<h1>atom.io</h1>\n\t\t\t\t\t\t\t<nav>\n\t\t\t\t\t\t\t\t{devtoolsViewOptions.map((viewOption) => (\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tkey={viewOption}\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tdata-testid={`view-${viewOption}`}\n\t\t\t\t\t\t\t\t\t\tclassName={viewOption === devtoolsView ? `active` : ``}\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\tsetDevtoolsView(viewOption)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdisabled={viewOption === devtoolsView}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{viewOption}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t</motion.header>\n\t\t\t\t\t\t<motion.main>\n\t\t\t\t\t\t\t<LayoutGroup>\n\t\t\t\t\t\t\t\t{devtoolsView === `atoms` ? (\n\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={atomIndex} />\n\t\t\t\t\t\t\t\t) : devtoolsView === `selectors` ? (\n\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={selectorIndex} />\n\t\t\t\t\t\t\t\t) : devtoolsView === `transactions` ? (\n\t\t\t\t\t\t\t\t\t<TransactionIndex />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<TimelineIndex />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</LayoutGroup>\n\t\t\t\t\t\t</motion.main>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t<footer>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonMouseDown={() => (mouseHasMoved.current = false)}\n\t\t\t\t\t\tonMouseMove={() => (mouseHasMoved.current = true)}\n\t\t\t\t\t\tonMouseUp={() => {\n\t\t\t\t\t\t\tif (!mouseHasMoved.current) {\n\t\t\t\t\t\t\t\tsetDevtoolsAreOpen((open) => !open)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t🔍\n\t\t\t\t\t</button>\n\t\t\t\t</footer>\n\t\t\t</motion.main>\n\t\t</span>\n\t)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen: (next: Modify<boolean> | boolean) => void\n\tdisabled?: boolean\n\ttestid: string\n}>","button: {\n\tOpenClose: typeof OpenClose\n}","ElasticInput: ForwardRefExoticComponent<\n\tDetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> & {\n\t\twidthPadding?: number\n\t}\n>","min: number","max: number","value: number","decimalPlaces?: number","input: string","VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n\tRecord<ValidNonNumber, number | null>\n>","allowDecimal: boolean","DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints","constraints: { [K in keyof Constraints]?: Constraints[K] | undefined }","input: number | null","numericValue: number | null","NumberInput: FC<NumberInputProps>","event: React.ChangeEvent<HTMLInputElement>","TextInput: FC<TextInputProps>","NonJsonEditor: React.FC<JsonEditorProps<never>>","data: T","set: SetterOrUpdater<T>","str: string","obj: Json.Tree.Object","obj: Json.Tree.Object<string, T>","bool: boolean","num: number","arr: Json.Tree.Array","arr: Json.Tree.Array<T>","input: unknown","data: T","set: SetterOrUpdater<T>","newValue: unknown","stableKeyMapRef: RefObject<{ [Key in keyof T]: keyof T }>","newKey: string","newType: JsonTypeName","sortFn?: (a: string, b: string) => number","key: keyof T","DefaultFallback: FC<FallbackProps>","props: ErrorBoundaryProps","error: Error","errorInfo: ErrorInfo","DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents","SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n>","StateEditor: FC<{\n\ttoken: WritableToken<unknown>\n}>","ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}>","StoreEditor: FC<{\n\ttoken: ReadonlySelectorToken<unknown> | WritableToken<unknown>\n}>","store: Store","DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\n>","StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<string>\n}>","StateIndexTreeNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>>\n\tisOpenState: RegularAtomToken<boolean>\n}>","StateIndexNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>> | ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<string>\n}>","StateIndex: FC<{\n\ttokenIndex: ReadonlyPureSelectorToken<\n\t\tWritableTokenIndex<ReadableToken<unknown>>\n\t>\n}>","AtomUpdateFC: React.FC<{\n\tserialNumber: number\n\tatomUpdate: KeyedStateUpdate<unknown>\n}>","TransactionUpdateFC: React.FC<{\n\tserialNumber: number\n\ttransactionUpdate: TransactionUpdate<Func>\n}>","TimelineUpdateFC: React.FC<{\n\ttimelineUpdate: TimelineUpdate<any>\n\tserialNumber: number\n}>","article: {\n\tAtomUpdate: typeof AtomUpdateFC\n\tTransactionUpdate: typeof TransactionUpdateFC\n\tTimelineUpdate: typeof TimelineUpdateFC\n}","YouAreHere: FC","TimelineLog: FC<{\n\ttoken: TimelineToken<any>\n\tisOpenState: RegularAtomToken<boolean>\n\ttimelineState: ReadonlyPureSelectorToken<Timeline<any>>\n}>","TimelineIndex: FC","TransactionLog: FC<{\n\ttoken: TransactionToken<Func>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<TransactionUpdate<Func>[]>\n}>","TransactionIndex: FC","AtomIODevtools: React.FC"],"sources":["../../src/react-devtools/Button.tsx","../../src/react-devtools/elastic-input/ElasticInput.tsx","../../src/react-devtools/elastic-input/NumberInput.tsx","../../src/react-devtools/elastic-input/TextInput.tsx","../../src/react-devtools/json-editor/editors-by-type/non-json.tsx","../../src/react-devtools/json-editor/json-editor-internal.tsx","../../src/react-devtools/json-editor/editors-by-type/utilities/array-elements.ts","../../src/react-devtools/json-editor/editors-by-type/array-editor.tsx","../../src/react-devtools/json-editor/editors-by-type/utilities/cast-json.ts","../../src/react-devtools/json-editor/editors-by-type/utilities/cast-to-json.ts","../../src/react-devtools/json-editor/editors-by-type/utilities/object-properties.ts","../../src/react-devtools/json-editor/editors-by-type/object-editor.tsx","../../src/react-devtools/json-editor/editors-by-type/primitive-editors.tsx","../../src/react-devtools/error-boundary/DefaultFallback.tsx","../../src/react-devtools/error-boundary/ReactErrorBoundary.tsx","../../src/react-devtools/json-editor/default-components.tsx","../../src/react-devtools/json-editor/developer-interface.tsx","../../src/react-devtools/json-editor/index.ts","../../src/react-devtools/StateEditor.tsx","../../src/react-devtools/store.ts","../../src/react-devtools/StateIndex.tsx","../../src/react-devtools/Updates.tsx","../../src/react-devtools/TimelineIndex.tsx","../../src/react-devtools/TransactionIndex.tsx","../../src/react-devtools/AtomIODevtools.tsx"],"sourcesContent":["import type { Modify } from \"atom.io/internal\"\nimport type { FC } from \"react\"\n\nexport const OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen: (next: Modify<boolean> | boolean) => void\n\tdisabled?: boolean\n\ttestid: string\n}> = ({ isOpen, setIsOpen, disabled, testid }) => {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdata-testid={testid}\n\t\t\tclassName={`carat ${isOpen ? `open` : `closed`}`}\n\t\t\tonClick={() => {\n\t\t\t\tsetIsOpen((prev) => !prev)\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t▶\n\t\t</button>\n\t)\n}\n\nexport const button: {\n\tOpenClose: typeof OpenClose\n} = {\n\tOpenClose,\n}\n","import type {\n\tDetailedHTMLProps,\n\tForwardRefExoticComponent,\n\tInputHTMLAttributes,\n} from \"react\"\nimport {\n\tforwardRef,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\"\n\nexport type ElasticInputProps = DetailedHTMLProps<\n\tInputHTMLAttributes<HTMLInputElement>,\n\tHTMLInputElement\n> & {\n\twidthPadding?: number\n}\n\nexport const ElasticInput: ForwardRefExoticComponent<\n\tDetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> & {\n\t\twidthPadding?: number\n\t}\n> = forwardRef(function ElasticInputFC(props, ref) {\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\tconst spanRef = useRef<HTMLSpanElement>(null)\n\tconst [inputWidth, setInputWidth] = useState(`auto`)\n\n\tuseImperativeHandle<Partial<HTMLInputElement>, Partial<HTMLInputElement>>(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => {\n\t\t\t\tinputRef.current?.focus()\n\t\t\t},\n\t\t}),\n\t)\n\n\tconst extraWidth = props.type === `number` ? 15 : 0\n\n\tuseLayoutEffect(() => {\n\t\tif (spanRef.current) {\n\t\t\tsetInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`)\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tif (spanRef.current) {\n\t\t\t\t\tsetInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`)\n\t\t\t\t}\n\t\t\t}, 1000)\n\t\t\treturn () => {\n\t\t\t\tclearInterval(interval)\n\t\t\t}\n\t\t}\n\t}, [inputRef.current?.value, props.value])\n\n\treturn (\n\t\t<div style={{ display: `inline-block`, position: `relative` }}>\n\t\t\t<input\n\t\t\t\t{...props}\n\t\t\t\tref={inputRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\tborder: `none`,\n\t\t\t\t\tfontFamily: `inherit`,\n\t\t\t\t\tfontSize: `inherit`,\n\t\t\t\t\twidth: inputWidth,\n\t\t\t\t\t...props.style,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<span\n\t\t\t\tref={spanRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tpadding: props.style?.padding,\n\t\t\t\t\tposition: `absolute`,\n\t\t\t\t\tvisibility: `hidden`,\n\t\t\t\t\t// color: `red`,\n\t\t\t\t\twhiteSpace: `pre`,\n\t\t\t\t\tfontFamily: props.style?.fontFamily ?? `inherit`,\n\t\t\t\t\tfontSize: props.style?.fontSize ?? `inherit`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{props.value}\n\t\t\t</span>\n\t\t</div>\n\t)\n})\n","import type { FC } from \"react\"\nimport { useId, useRef, useState } from \"react\"\n\nimport { ElasticInput } from \".\"\n\nexport function clampInto(min: number, max: number) {\n\treturn (value: number): number =>\n\t\tvalue < min ? min : value > max ? max : value\n}\nfunction round(value: number, decimalPlaces?: number): number {\n\tif (decimalPlaces === undefined) return value\n\tconst factor = 10 ** decimalPlaces\n\treturn Math.round(value * factor) / factor\n}\nfunction roundAndPad(value: number, decimalPlaces?: number): string {\n\tconst roundedValue = round(value, decimalPlaces)\n\tconst paddedString = roundedValue.toFixed(decimalPlaces)\n\treturn paddedString\n}\n\nexport const VALID_NON_NUMBERS = [``, `-`, `.`, `-.`] as const\nexport type ValidNonNumber = (typeof VALID_NON_NUMBERS)[number]\nexport const isValidNonNumber = (input: string): input is ValidNonNumber =>\n\tVALID_NON_NUMBERS.includes(input as ValidNonNumber)\nexport const VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n\tRecord<ValidNonNumber, number | null>\n> = {\n\t\"\": null,\n\t\"-\": 0,\n\t\".\": 0,\n\t\"-.\": 0,\n} as const\nexport type DecimalInProgress = `${number | ``}.${number}`\nexport const isDecimalInProgress = (input: string): input is DecimalInProgress =>\n\tinput === `0` || (!Number.isNaN(Number(input)) && input.includes(`.`))\n\nconst textToValue = (input: string, allowDecimal: boolean): number | null => {\n\tif (isValidNonNumber(input)) return VALID_NON_NUMBER_INTERPRETATIONS[input]\n\treturn allowDecimal\n\t\t? Number.parseFloat(input)\n\t\t: Math.round(Number.parseFloat(input))\n}\n\nexport type NumberConstraints = {\n\tmax: number\n\tmin: number\n\tdecimalPlaces: number\n\tnullable: boolean\n}\nexport const DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints = {\n\tmax: Number.POSITIVE_INFINITY,\n\tmin: Number.NEGATIVE_INFINITY,\n\tdecimalPlaces: 100,\n\tnullable: true,\n}\n\nconst initRefinery =\n\t<Constraints extends NumberConstraints>(\n\t\tconstraints: { [K in keyof Constraints]?: Constraints[K] | undefined },\n\t) =>\n\t(\n\t\tinput: number | null,\n\t): Constraints extends { nullable: true | undefined }\n\t\t? number | null\n\t\t: number => {\n\t\tif (input === null && constraints.nullable === true) {\n\t\t\treturn null as Constraints extends { nullable: true }\n\t\t\t\t? number | null\n\t\t\t\t: number\n\t\t}\n\t\tconst { max, min, decimalPlaces } = {\n\t\t\t...DEFAULT_NUMBER_CONSTRAINTS,\n\t\t\t...constraints,\n\t\t}\n\t\tlet constrained = clampInto(min, max)(input ?? 0)\n\t\tif (decimalPlaces) {\n\t\t\tconstrained = round(constrained, decimalPlaces)\n\t\t}\n\t\treturn constrained\n\t}\n\nconst valueToText = (numericValue: number | null): string => {\n\tif (numericValue === null || numericValue === undefined) {\n\t\treturn ``\n\t}\n\treturn numericValue.toString()\n}\n\ntype NumberInputProps = Partial<NumberConstraints> & {\n\tautoSize?: boolean\n\tdisabled?: boolean\n\tid?: string\n\tlabel?: string\n\tname?: string\n\tonChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n\tonClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void\n\tplaceholder?: string\n\tset?: ((newValue: number | null) => void) | undefined\n\ttestid?: string\n\tvalue?: number | null\n}\n\nexport const NumberInput: FC<NumberInputProps> = ({\n\tautoSize = false,\n\tdecimalPlaces,\n\tdisabled = false,\n\tlabel,\n\tmax,\n\tmin,\n\tname,\n\tonChange,\n\tonClick,\n\tplaceholder = ``,\n\tset = () => null,\n\ttestid,\n\tvalue = null,\n}) => {\n\tconst htmlId = useId()\n\tconst [temporaryEntry, setTemporaryEntry] = useState<\n\t\tDecimalInProgress | ValidNonNumber | null\n\t>(null)\n\tconst userHasMadeDeliberateChange = useRef<boolean>(false)\n\n\tconst refine = initRefinery({ max, min, decimalPlaces, nullable: true })\n\n\tconst allowDecimal = decimalPlaces === undefined || decimalPlaces > 0\n\n\tconst handleBlur = () => {\n\t\tif (userHasMadeDeliberateChange.current) {\n\t\t\tset(refine(value ?? null))\n\t\t\tsetTemporaryEntry(null)\n\t\t}\n\t\tuserHasMadeDeliberateChange.current = false\n\t}\n\n\tconst handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n\t\tif (onChange) onChange(event)\n\t\tif (set === undefined) return\n\t\tuserHasMadeDeliberateChange.current = true\n\t\tconst input = event.target.value\n\t\tif (isValidNonNumber(input) || isDecimalInProgress(input)) {\n\t\t\tsetTemporaryEntry(input)\n\t\t\tconst textInterpretation = isDecimalInProgress(input)\n\t\t\t\t? input\n\t\t\t\t: (min?.toString() ?? `0`)\n\t\t\tconst newValue = textToValue(textInterpretation, allowDecimal)\n\t\t\tset(refine(newValue))\n\t\t\treturn\n\t\t}\n\t\tsetTemporaryEntry(null)\n\t\tconst inputIsNumeric =\n\t\t\t(!Number.isNaN(Number(input)) && !input.includes(` `)) ||\n\t\t\t(allowDecimal && input === `.`) ||\n\t\t\t(allowDecimal && input === `-.`) ||\n\t\t\tinput === `` ||\n\t\t\tinput === `-`\n\t\tconst numericValue = textToValue(input, allowDecimal)\n\n\t\tif (inputIsNumeric) {\n\t\t\tset(refine(numericValue))\n\t\t}\n\t}\n\n\tconst displayValue =\n\t\ttemporaryEntry ?? valueToText(value ? refine(value) : value)\n\n\treturn (\n\t\t<span>\n\t\t\t{label ? <label htmlFor={htmlId}>{label}</label> : null}\n\t\t\t{autoSize ? (\n\t\t\t\t<ElasticInput\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\tplaceholder={placeholder ?? `-`}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tname={name ?? htmlId}\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\tplaceholder={placeholder ?? `-`}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tname={name ?? htmlId}\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n","import { type FC, useId } from \"react\"\n\nimport { ElasticInput } from \".\"\n\nexport type TextInputProps = {\n\tvalue: string\n\tset?: ((value: string) => void) | undefined\n\tlabel?: string\n\tplaceholder?: string\n\tautoSize?: boolean\n\treadOnly?: boolean\n\ttestid?: string\n}\n\nexport const TextInput: FC<TextInputProps> = ({\n\tvalue,\n\tset,\n\tlabel,\n\tplaceholder,\n\tautoSize = false,\n\ttestid,\n}) => {\n\tconst htmlId = useId()\n\treturn (\n\t\t<span>\n\t\t\t{label ? <label htmlFor={htmlId}>{label}</label> : null}\n\t\t\t{autoSize ? (\n\t\t\t\t<ElasticInput\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => set?.(e.target.value)}\n\t\t\t\t\tdisabled={set === undefined}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<input\n\t\t\t\t\tid={htmlId}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => set?.(e.target.value)}\n\t\t\t\t\tdisabled={set === undefined}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tdata-testid={testid}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n","import { ElasticInput } from \"../../elastic-input\"\nimport type { JsonEditorProps } from \"../developer-interface\"\n\nexport const NonJsonEditor: React.FC<JsonEditorProps<never>> = ({\n\tdata,\n\ttestid,\n}) => {\n\treturn data === undefined ? (\n\t\t<ElasticInput\n\t\t\tdisabled\n\t\t\tvalue=\"undefined\"\n\t\t\tdata-testid={`${testid}-undefined`}\n\t\t/>\n\t) : (\n\t\t<ElasticInput\n\t\t\tdisabled\n\t\t\tvalue={\n\t\t\t\tObject.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data)\n\t\t\t}\n\t\t\tdata-testid={`${testid}-non-json-${Object.getPrototypeOf(data).constructor.name}`}\n\t\t/>\n\t)\n}\n","import { jsonRefinery } from \"atom.io/introspection\"\nimport type { JsonTypes } from \"atom.io/json\"\nimport { isJson } from \"atom.io/json\"\nimport type { CSSProperties, FC, ReactElement } from \"react\"\n\nimport { ElasticInput } from \"../elastic-input\"\nimport type { SetterOrUpdater } from \".\"\nimport { SubEditors } from \".\"\nimport type { JsonEditorComponents } from \"./default-components\"\nimport { NonJsonEditor } from \"./editors-by-type/non-json\"\n\nexport type JsonEditorProps_INTERNAL<T> = {\n\tdata: T\n\tset: SetterOrUpdater<T>\n\tname?: string | undefined\n\trename?: ((newKey: string) => void) | undefined\n\tremove?: (() => void) | undefined\n\trecast?: (newType: keyof JsonTypes) => void\n\tpath?: ReadonlyArray<number | string>\n\tisReadonly?: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden?: (path: ReadonlyArray<number | string>) => boolean\n\tclassName?: string | undefined\n\tstyle?: CSSProperties | undefined\n\tHeader?: FC<{ data: T }> | undefined\n\tComponents: JsonEditorComponents\n\ttestid?: string | undefined\n}\n\nexport const JsonEditor_INTERNAL = <T,>({\n\tdata,\n\tset,\n\tname,\n\trename,\n\tremove,\n\trecast,\n\tpath = [],\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tclassName,\n\tstyle,\n\tHeader: HeaderDisplay,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<T>): ReactElement | null => {\n\tconst dataIsJson = isJson(data)\n\tconst refined = jsonRefinery.refine<unknown>(data) ?? {\n\t\ttype: `non-json`,\n\t\tdata,\n\t}\n\tconst SubEditor = dataIsJson\n\t\t? SubEditors[refined.type as keyof JsonTypes]\n\t\t: NonJsonEditor\n\n\tconst disabled = isReadonly(path)\n\n\treturn isHidden(path) ? null : (\n\t\t<Components.ErrorBoundary>\n\t\t\t<Components.EditorWrapper\n\t\t\t\tclassName={className}\n\t\t\t\tstyle={style}\n\t\t\t\ttestid={testid}\n\t\t\t>\n\t\t\t\t{remove ? (\n\t\t\t\t\tdisabled ? (\n\t\t\t\t\t\t<Components.Button disabled testid={`${testid}-delete`}>\n\t\t\t\t\t\t\t<Components.DeleteIcon />\n\t\t\t\t\t\t</Components.Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Components.Button\n\t\t\t\t\t\t\ttestid={`${testid}-delete`}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tremove()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Components.DeleteIcon />\n\t\t\t\t\t\t</Components.Button>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t{HeaderDisplay && <HeaderDisplay data={data} />}\n\t\t\t\t{rename && (\n\t\t\t\t\t<Components.KeyWrapper>\n\t\t\t\t\t\t<ElasticInput\n\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: (e) => {\n\t\t\t\t\t\t\t\t\t\t\trename(e.target.value)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdata-testid={`${testid}-rename`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Components.KeyWrapper>\n\t\t\t\t)}\n\t\t\t\t<SubEditor\n\t\t\t\t\tdata={refined.data as never}\n\t\t\t\t\tset={set}\n\t\t\t\t\tremove={remove}\n\t\t\t\t\trename={rename}\n\t\t\t\t\tpath={path}\n\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\tComponents={Components}\n\t\t\t\t\ttestid={testid}\n\t\t\t\t/>\n\t\t\t\t{recast && dataIsJson ? (\n\t\t\t\t\t<select\n\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: (e) => {\n\t\t\t\t\t\t\t\t\t\trecast(e.target.value as keyof JsonTypes)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={refined.type}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tdata-testid={`${testid}-recast`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Object.keys(SubEditors).map((type) => (\n\t\t\t\t\t\t\t<option key={type} value={type}>\n\t\t\t\t\t\t\t\t{type}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t) : null}\n\t\t\t</Components.EditorWrapper>\n\t\t</Components.ErrorBoundary>\n\t)\n}\n","import { become } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { SetterOrUpdater } from \"../..\"\n\nexport const makeElementSetters = <T extends Json.Tree.Array>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): SetterOrUpdater<T[number]>[] =>\n\tdata.map((value, index) => (newValue) => {\n\t\tset((): T => {\n\t\t\tconst newData = [...data]\n\t\t\tnewData[index] = become(newValue)(value)\n\t\t\treturn newData as unknown as T\n\t\t})\n\t})\n","import type { Json } from \"atom.io/json\"\nimport type { ReactElement } from \"react\"\n\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\nimport { makeElementSetters } from \"./utilities/array-elements\"\n\nexport const ArrayEditor = ({\n\tpath = [],\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<Json.Tree.Array>): ReactElement => {\n\tconst setElement = makeElementSetters(data, set)\n\treturn (\n\t\t<>\n\t\t\t{data.map((element, index) => {\n\t\t\t\tconst newPath = [...path, index]\n\t\t\t\treturn (\n\t\t\t\t\t<JsonEditor_INTERNAL\n\t\t\t\t\t\tkey={newPath.join(``)}\n\t\t\t\t\t\tpath={newPath}\n\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\tdata={element}\n\t\t\t\t\t\tset={setElement[index]}\n\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\tclassName=\"json_editor_element\"\n\t\t\t\t\t\ttestid={`${testid}-element-${index}`}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n}\n","import type { Json } from \"atom.io/json\"\n\nexport const stringToBoolean = (str: string): boolean => str === `true`\nexport const stringToNumber = (str: string): number => Number(str)\nexport const stringToArray = (str: string): string[] => str.split(`,`)\nexport const stringToObject = (str: string): Json.Tree.Object => {\n\ttry {\n\t\treturn JSON.parse(str)\n\t} catch (e) {\n\t\treturn { [str]: str }\n\t}\n}\n\nexport const objectToString = (obj: Json.Tree.Object): string =>\n\tJSON.stringify(obj)\nexport const objectToBoolean = (obj: Json.Tree.Object): boolean =>\n\tobj[`true`] === true\nexport const objectToNumber = (obj: Json.Tree.Object): number =>\n\tNumber(obj[`number`] ?? obj[`size`] ?? obj[`count`] ?? 0)\nexport const objectToArray = <T>(\n\tobj: Json.Tree.Object<string, T>,\n): [key: string, value: T][] => Object.entries(obj)\n\nexport const booleanToString = (bool: boolean): string => bool.toString()\nexport const booleanToNumber = (bool: boolean): number => +bool\nexport const booleanToObject = (bool: boolean): Json.Tree.Object => ({\n\t[bool.toString()]: bool,\n})\nexport const booleanToArray = (bool: boolean): boolean[] => [bool]\n\nexport const numberToString = (num: number): string => num.toString()\nexport const numberToBoolean = (num: number): boolean => num === 1\nexport const numberToObject = (num: number): Json.Tree.Object => ({\n\tnumber: num,\n})\nexport const numberToArray = (num: number): null[] => Array(num).fill(null)\n\nexport const arrayToString = (arr: Json.Tree.Array): string => arr.join(`,`)\nexport const arrayToNumber = (arr: Json.Tree.Array): number => arr.length\nexport const arrayToBoolean = (arr: Json.Tree.Array): boolean =>\n\ttypeof arr[0] === `boolean` ? arr[0] : arr.length > 0\nexport const arrayToObject = <T>(\n\tarr: Json.Tree.Array<T>,\n): Json.Tree.Object<`${number}`, T> =>\n\tarr.reduce(\n\t\t(acc, cur, idx) => {\n\t\t\tacc[`${idx}`] = cur\n\t\t\treturn acc\n\t\t},\n\t\t{} as Json.Tree.Object<`${number}`, T>,\n\t)\n\nexport const nullToString = (): string => ``\nexport const nullToNumber = (): number => 0\nexport const nullToBoolean = (): boolean => false\nexport const nullToArray = (): Json.Tree.Array => []\nexport const nullToObject = (): Json.Tree.Object => ({})\n","import { jsonRefinery } from \"atom.io/introspection\"\nimport type { Json } from \"atom.io/json\"\n\nimport * as Cast from \"./cast-json\"\n\nexport const castToJson = (\n\tinput: unknown,\n): {\n\tarray: Json.Tree.Array\n\tboolean: boolean\n\tnumber: number\n\tobject: Json.Tree.Object\n\tstring: string\n\tnull: null\n} => {\n\tconst refined = jsonRefinery.refine(input)\n\tswitch (refined?.type) {\n\t\tcase `array`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.arrayToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.arrayToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.arrayToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.arrayToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `boolean`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.booleanToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.booleanToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.booleanToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.booleanToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `number`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.numberToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.numberToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.numberToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.numberToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `object`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.objectToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.objectToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.objectToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.objectToString(data)\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `string`: {\n\t\t\tconst data = refined.data\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.stringToArray(data)\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.stringToBoolean(data)\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.stringToNumber(data)\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.stringToObject(data)\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn data\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tcase `null`:\n\t\tcase undefined: {\n\t\t\treturn {\n\t\t\t\tget array() {\n\t\t\t\t\treturn Cast.nullToArray()\n\t\t\t\t},\n\t\t\t\tget boolean() {\n\t\t\t\t\treturn Cast.nullToBoolean()\n\t\t\t\t},\n\t\t\t\tget number() {\n\t\t\t\t\treturn Cast.nullToNumber()\n\t\t\t\t},\n\t\t\t\tget object() {\n\t\t\t\t\treturn Cast.nullToObject()\n\t\t\t\t},\n\t\t\t\tget string() {\n\t\t\t\t\treturn Cast.nullToString()\n\t\t\t\t},\n\t\t\t\tget null() {\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n","import { become } from \"atom.io/internal\"\nimport type { Json, JsonTypeName } from \"atom.io/json\"\nimport { fromEntries, JSON_DEFAULTS, toEntries } from \"atom.io/json\"\nimport type { RefObject } from \"react\"\n\nimport type { SetterOrUpdater } from \"../..\"\nimport { castToJson } from \"./cast-to-json\"\n\nexport const makePropertySetters = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): { [K in keyof T]: SetterOrUpdater<T[K]> } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key, value]) => [\n\t\t\tkey,\n\t\t\t(newValue: unknown) => {\n\t\t\t\tset({ ...data, [key]: become(newValue)(value) })\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRenamers = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n\tstableKeyMapRef: RefObject<{ [Key in keyof T]: keyof T }>,\n): { [K in keyof T]: (newKey: string) => void } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key, value]) => [\n\t\t\tkey,\n\t\t\t(newKey: string) => {\n\t\t\t\tif (!Object.hasOwn(data, newKey)) {\n\t\t\t\t\tset(() => {\n\t\t\t\t\t\tconst entries = Object.entries(data)\n\t\t\t\t\t\tconst index = entries.findIndex(([k]) => k === key)\n\t\t\t\t\t\tentries[index] = [newKey, value]\n\t\t\t\t\t\tconst stableKeyMap = stableKeyMapRef.current\n\t\t\t\t\t\tstableKeyMapRef.current = {\n\t\t\t\t\t\t\t...stableKeyMap,\n\t\t\t\t\t\t\t[newKey]: stableKeyMap[key],\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Object.fromEntries(entries) as T\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRemovers = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): { [K in keyof T]: () => void } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key]) => [\n\t\t\tkey,\n\t\t\t() => {\n\t\t\t\tset(() => {\n\t\t\t\t\tconst { [key]: _, ...rest } = data\n\t\t\t\t\treturn rest as T\n\t\t\t\t})\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRecasters = <T extends Json.Tree.Object>(\n\tdata: T,\n\tset: SetterOrUpdater<T>,\n): { [K in keyof T]: (newType: JsonTypeName) => void } =>\n\tfromEntries(\n\t\ttoEntries(data).map(([key, value]) => [\n\t\t\tkey,\n\t\t\t(newType: JsonTypeName) => {\n\t\t\t\tset(() => ({\n\t\t\t\t\t...data,\n\t\t\t\t\t[key]: castToJson(value)[newType],\n\t\t\t\t}))\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyCreationInterface =\n\t<T extends Json.Tree.Object>(\n\t\tdata: T,\n\t\tset: SetterOrUpdater<T>,\n\t): ((\n\t\tkey: string,\n\t\ttype: JsonTypeName,\n\t) => (value?: Json.Serializable) => void) =>\n\t(key, type) =>\n\t(value) => {\n\t\tset({ ...data, [key]: value ?? JSON_DEFAULTS[type] })\n\t}\n\nexport const makePropertySorter =\n\t<T extends Json.Tree.Object>(\n\t\tdata: T,\n\t\tset: SetterOrUpdater<T>,\n\t\tsortFn?: (a: string, b: string) => number,\n\t): (() => void) =>\n\t() => {\n\t\tconst sortedKeys = Object.keys(data).sort(sortFn)\n\t\tconst sortedObj = {} as Record<string, unknown>\n\t\tfor (const key of sortedKeys) {\n\t\t\tsortedObj[key] = data[key]\n\t\t}\n\t\tset(sortedObj as T)\n\t}\n","import type { Json } from \"atom.io/json\"\nimport type { FC, ReactElement } from \"react\"\nimport { useRef } from \"react\"\n\nimport { ElasticInput } from \"../../elastic-input\"\nimport type { JsonEditorComponents } from \"../default-components\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\nimport {\n\tmakePropertyCreationInterface,\n\tmakePropertyRecasters,\n\tmakePropertyRemovers,\n\tmakePropertyRenamers,\n\tmakePropertySetters,\n\tmakePropertySorter,\n} from \"./utilities/object-properties\"\n\nexport type PropertyAdderProps = {\n\taddProperty: () => void\n\tdisabled: boolean\n\tpropertyKey: string\n\tComponents: JsonEditorComponents\n}\n\nexport const PropertyAdder: FC<PropertyAdderProps> = ({\n\taddProperty,\n\tdisabled,\n\tpropertyKey,\n\tComponents,\n}) => (\n\t<Components.MissingPropertyWrapper>\n\t\t<ElasticInput disabled defaultValue={propertyKey} />\n\t\t{` `}\n\t\t<ElasticInput disabled defaultValue=\"is missing\" />\n\t\t<Components.Button\n\t\t\tonClick={() => {\n\t\t\t\taddProperty()\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t+\n\t\t</Components.Button>\n\t</Components.MissingPropertyWrapper>\n)\n\nexport const ObjectEditor = <T extends Json.Tree.Object>({\n\tpath = [],\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<T>): ReactElement => {\n\tconst disabled = isReadonly(path)\n\n\tconst stableKeyMap = useRef<Record<keyof T, keyof T>>(\n\t\tObject.keys(data).reduce(\n\t\t\t(acc, key: keyof T) => {\n\t\t\t\tacc[key] = key\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<keyof T, keyof T>,\n\t\t),\n\t)\n\n\tconst setProperty = makePropertySetters(data, set)\n\tconst renameProperty = makePropertyRenamers(data, set, stableKeyMap)\n\tconst removeProperty = makePropertyRemovers(data, set)\n\tconst recastProperty = makePropertyRecasters(data, set)\n\tconst sortProperties = makePropertySorter(data, set)\n\tconst makePropertyAdder = makePropertyCreationInterface(data, set)\n\n\treturn (\n\t\t<>\n\t\t\t<Components.Button\n\t\t\t\ttestid={`${testid}-sort-properties`}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tsortProperties()\n\t\t\t\t}}\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\tSort\n\t\t\t</Components.Button>\n\t\t\t<Components.ObjectWrapper>\n\t\t\t\t<div className=\"json_editor_properties\">\n\t\t\t\t\t{Object.keys(data).map((key) => {\n\t\t\t\t\t\tconst originalKey = stableKeyMap.current[key]\n\t\t\t\t\t\tconst newPath = [...path, key]\n\t\t\t\t\t\tconst originalPath = [...path, originalKey]\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<JsonEditor_INTERNAL\n\t\t\t\t\t\t\t\tkey={originalPath.join(`.`)}\n\t\t\t\t\t\t\t\tpath={newPath}\n\t\t\t\t\t\t\t\tname={key}\n\t\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\t\tdata={data[key as keyof T]}\n\t\t\t\t\t\t\t\tset={setProperty[key as keyof T]}\n\t\t\t\t\t\t\t\trename={renameProperty[key as keyof T]}\n\t\t\t\t\t\t\t\tremove={removeProperty[key as keyof T]}\n\t\t\t\t\t\t\t\trecast={recastProperty[key as keyof T]}\n\t\t\t\t\t\t\t\tclassName=\"json_editor_property\"\n\t\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\t\ttestid={`${testid}-property-${key}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t\t{disabled ? (\n\t\t\t\t\t<Components.Button disabled testid={`${testid}-add-property`}>\n\t\t\t\t\t\t+\n\t\t\t\t\t</Components.Button>\n\t\t\t\t) : (\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\ttestid={`${testid}-add-property`}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tmakePropertyAdder(`new_property`, `string`)()\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t+\n\t\t\t\t\t</Components.Button>\n\t\t\t\t)}\n\t\t\t</Components.ObjectWrapper>\n\t\t</>\n\t)\n}\n","import type { ReactElement } from \"react\"\n\nimport { NumberInput, TextInput } from \"../../elastic-input\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\n\nexport const BooleanEditor = ({\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<boolean>): ReactElement => (\n\t<Components.BooleanWrapper>\n\t\t<input\n\t\t\tdata-testid={`${testid}-boolean-input`}\n\t\t\ttype=\"checkbox\"\n\t\t\tchecked={data}\n\t\t\tonChange={(event) => {\n\t\t\t\tset(event.target.checked)\n\t\t\t}}\n\t\t/>\n\t</Components.BooleanWrapper>\n)\n\nexport const NullEditor = ({\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<null>): ReactElement => (\n\t<Components.Null testid={`${testid}-null`} />\n)\n\nexport const NumberEditor = ({\n\tpath = [],\n\tisReadonly = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<number>): ReactElement => (\n\t<Components.NumberWrapper>\n\t\t<NumberInput\n\t\t\ttestid={`${testid}-number-input`}\n\t\t\tvalue={data}\n\t\t\tset={\n\t\t\t\tisReadonly(path)\n\t\t\t\t\t? undefined\n\t\t\t\t\t: (newValue) => {\n\t\t\t\t\t\t\tset(Number(newValue))\n\t\t\t\t\t\t}\n\t\t\t}\n\t\t\tautoSize={true}\n\t\t/>\n\t</Components.NumberWrapper>\n)\n\nexport const StringEditor = ({\n\tpath = [],\n\tisReadonly = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<string>): ReactElement => {\n\treturn (\n\t\t<Components.StringWrapper>\n\t\t\t<TextInput\n\t\t\t\ttestid={`${testid}-string-input`}\n\t\t\t\tvalue={data}\n\t\t\t\tset={isReadonly(path) ? undefined : set}\n\t\t\t\tautoSize={true}\n\t\t\t/>\n\t\t</Components.StringWrapper>\n\t)\n}\n","import type { ErrorInfo, FC } from \"react\"\n\nexport type FallbackProps = {\n\terror?: Error | string | undefined\n\terrorInfo?: ErrorInfo | undefined\n}\n\nexport const DefaultFallback: FC<FallbackProps> = ({ error, errorInfo }) => {\n\tconst component = errorInfo?.componentStack?.split(` `).filter(Boolean)[2]\n\tconst message =\n\t\terror?.toString() ?? errorInfo?.componentStack ?? `Unknown error`\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"error-boundary\"\n\t\t\tstyle={{\n\t\t\t\tflex: `1`,\n\t\t\t\tbackground: `black`,\n\t\t\t\tbackgroundImage: `url(./src/assets/kablooey.gif)`,\n\t\t\t\tbackgroundPosition: `center`,\n\t\t\t\t// backgroundRepeat: `no-repeat`,\n\t\t\t\tbackgroundSize: `overlay`,\n\t\t\t}}\n\t\t>\n\t\t\t{/* <img src=\"./src/assets/kablooey.gif\" alt=\"error\" /> */}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: `50px`,\n\t\t\t\t\tmarginTop: `0`,\n\t\t\t\t\tpadding: `50px`,\n\t\t\t\t\tborder: `1px solid dashed`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: `black`,\n\t\t\t\t\t\tcolor: `white`,\n\t\t\t\t\t\tpadding: 10,\n\t\t\t\t\t\tpaddingTop: 5,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{`⚠️ `}\n\t\t\t\t\t<span style={{ color: `#fc0`, fontWeight: 700 }}>{component}</span>\n\t\t\t\t\t{` ⚠️ `}\n\t\t\t\t\t{message}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import type { ErrorInfo, FC, ReactNode } from \"react\"\nimport { Component } from \"react\"\n\nimport type { FallbackProps } from \"./DefaultFallback\"\nimport { DefaultFallback } from \"./DefaultFallback\"\n\nexport type ErrorBoundaryState = {\n\terror?: Error | string\n\terrorInfo?: ErrorInfo\n}\n\nexport type ErrorBoundaryProps = {\n\tchildren: ReactNode\n\tonError?: ((error: Error | string, errorInfo: ErrorInfo) => void) | undefined\n\tFallback?: FC<FallbackProps> | undefined\n\tuseResetErrorState?: () => () => void\n\tuseErrorState?: () => [\n\t\tErrorBoundaryState,\n\t\t(\n\t\t\tnewState:\n\t\t\t\t| ErrorBoundaryState\n\t\t\t\t| ((currState: ErrorBoundaryState) => ErrorBoundaryState),\n\t\t) => void,\n\t]\n}\n\nexport class ErrorBoundary extends Component<\n\tErrorBoundaryProps,\n\tErrorBoundaryState\n> {\n\tpublic constructor(props: ErrorBoundaryProps) {\n\t\tsuper(props)\n\t\tthis.state = {}\n\t\t// We can filter or add information\n\t\t// to airbrake notifications here:\n\t}\n\n\tpublic override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n\t\tthis.props.onError?.(error, errorInfo)\n\t\tthis.setState({\n\t\t\terror,\n\t\t\terrorInfo,\n\t\t})\n\t}\n\n\tpublic override render(): ReactNode {\n\t\tconst { error, errorInfo } = this.state\n\t\tconst { children, Fallback = DefaultFallback } = this.props\n\n\t\treturn errorInfo ? (\n\t\t\t<Fallback error={error} errorInfo={errorInfo} />\n\t\t) : (\n\t\t\tchildren\n\t\t)\n\t}\n}\n","import type { CSSProperties, FC, ReactNode } from \"react\"\n\nimport { ErrorBoundary } from \"../error-boundary\"\n\nexport type Dict<T> = Record<string, T>\n\nexport type WrapperComponent<T extends Dict<unknown> = Dict<unknown>> = FC<\n\tT & { children: ReactNode; testid?: string | undefined }\n>\n\nexport type WC<T extends Dict<unknown> = Dict<unknown>> = WrapperComponent<T>\n\nexport type JsonEditorComponents = {\n\tErrorBoundary: WC\n\n\tButton: WC<{\n\t\tonClick?: () => void\n\t\tdisabled?: boolean\n\t}>\n\tDeleteIcon: FC\n\n\tEditorWrapper: WC<{\n\t\tstyle?: CSSProperties | undefined\n\t\tclassName?: string | undefined\n\t\ttestid?: string | undefined\n\t}>\n\n\tArrayWrapper: WC\n\tObjectWrapper: WC\n\tStringWrapper: WC\n\tNumberWrapper: WC\n\tBooleanWrapper: WC\n\tNull: FC<{ testid?: string | undefined }>\n\n\tMissingPropertyWrapper: WC\n\tKeyWrapper: WC\n}\n\nexport const DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents = {\n\tErrorBoundary: ({ children }) => <ErrorBoundary>{children}</ErrorBoundary>,\n\tButton: ({ onClick, children, disabled, testid }) => (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName=\"json_editor_button\"\n\t\t\tonClick={onClick}\n\t\t\tdisabled={disabled}\n\t\t\tdata-testid={testid}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t),\n\tEditorWrapper: ({ children, className, testid }) => (\n\t\t<div\n\t\t\tclassName={`json_editor` + (className ? ` ${className}` : ``)}\n\t\t\tdata-testid={testid}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t),\n\tArrayWrapper: ({ children, testid }) => (\n\t\t<div className=\"json_editor_array\" data-testid={testid}>\n\t\t\t{children}\n\t\t</div>\n\t),\n\tObjectWrapper: ({ children, testid }) => (\n\t\t<div className=\"json_editor_object\" data-testid={testid}>\n\t\t\t{children}\n\t\t</div>\n\t),\n\tStringWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_string\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tNumberWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_number\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tBooleanWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_boolean\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tNull: ({ testid }) => (\n\t\t<span className=\"json_editor_null\" data-testid={testid} />\n\t),\n\tDeleteIcon: () => (\n\t\t<span className=\"json_editor_icon json_editor_delete\">x</span>\n\t),\n\tMissingPropertyWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_missing_property\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n\tKeyWrapper: ({ children, testid }) => (\n\t\t<span className=\"json_editor_key\" data-testid={testid}>\n\t\t\t{children}\n\t\t</span>\n\t),\n}\n","import type { Json, JsonTypes } from \"atom.io/json\"\nimport type { CSSProperties, FC, ReactElement } from \"react\"\n\nimport type { JsonEditorComponents } from \"./default-components\"\nimport { DEFAULT_JSON_EDITOR_COMPONENTS } from \"./default-components\"\nimport { ArrayEditor } from \"./editors-by-type/array-editor\"\nimport { ObjectEditor } from \"./editors-by-type/object-editor\"\nimport {\n\tBooleanEditor,\n\tNullEditor,\n\tNumberEditor,\n\tStringEditor,\n} from \"./editors-by-type/primitive-editors\"\nimport type { JsonEditorProps_INTERNAL } from \"./json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"./json-editor-internal\"\n\nexport const SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n> = {\n\tarray: ArrayEditor,\n\tboolean: BooleanEditor,\n\tnull: NullEditor,\n\tnumber: NumberEditor,\n\tobject: ObjectEditor,\n\tstring: StringEditor,\n}\n\nexport type JsonEditorProps<T> = {\n\tdata: T\n\tset: (valOrUpdater: T | ((currVal: T) => T)) => void\n\tname?: string | undefined\n\trename?: ((newKey: string) => void) | undefined\n\tremove?: (() => void) | undefined\n\tpath?: ReadonlyArray<number | string>\n\tisReadonly?: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden?: (path: ReadonlyArray<number | string>) => boolean\n\tclassName?: string\n\tstyle?: CSSProperties\n\tHeader?: FC<{ data: T }>\n\tComponents?: Partial<JsonEditorComponents>\n\ttestid?: string | undefined\n}\n\nexport const JsonEditor = <T,>({\n\tdata,\n\tset,\n\tname,\n\trename,\n\tremove,\n\tisReadonly = () => false,\n\tisHidden = () => false,\n\tclassName,\n\tHeader,\n\tstyle,\n\tComponents: CustomComponents = {},\n\ttestid,\n}: JsonEditorProps<T>): ReactElement => {\n\tconst Components = {\n\t\t...DEFAULT_JSON_EDITOR_COMPONENTS,\n\t\t...CustomComponents,\n\t}\n\n\treturn (\n\t\t<JsonEditor_INTERNAL\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\tname={name}\n\t\t\trename={rename}\n\t\t\tremove={remove}\n\t\t\tpath={[]}\n\t\t\tisReadonly={isReadonly}\n\t\t\tisHidden={isHidden}\n\t\t\tclassName={className}\n\t\t\tHeader={Header}\n\t\t\tstyle={style}\n\t\t\tComponents={Components}\n\t\t\ttestid={testid}\n\t\t/>\n\t)\n}\n","import type { JsonTypes } from \"atom.io/json\"\nimport type { FC } from \"react\"\n\nimport { ArrayEditor } from \"./editors-by-type/array-editor\"\nimport { ObjectEditor } from \"./editors-by-type/object-editor\"\nimport {\n\tBooleanEditor,\n\tNullEditor,\n\tNumberEditor,\n\tStringEditor,\n} from \"./editors-by-type/primitive-editors\"\nimport type { JsonEditorProps_INTERNAL } from \"./json-editor-internal\"\n\nexport * from \"./default-components\"\nexport * from \"./developer-interface\"\nexport * from \"./editors-by-type/utilities/cast-to-json\"\n\nexport type SetterOrUpdater<T> = <New extends T>(\n\tnext: New | ((old: T) => New),\n) => void\n\nexport const SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n> = {\n\tarray: ArrayEditor,\n\tboolean: BooleanEditor,\n\tnull: NullEditor,\n\tnumber: NumberEditor,\n\tobject: ObjectEditor,\n\tstring: StringEditor,\n}\n","import type {\n\tReadonlyPureSelectorToken,\n\tReadonlySelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport { useI, useO } from \"atom.io/react\"\nimport type { FC } from \"react\"\n\nimport { JsonEditor } from \"./json-editor\"\n\nexport const StateEditor: FC<{\n\ttoken: WritableToken<unknown>\n}> = ({ token }) => {\n\tconst set = useI(token)\n\tconst data = useO(token)\n\treturn (\n\t\t<JsonEditor testid={`${token.key}-state-editor`} data={data} set={set} />\n\t)\n}\n\nexport const ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}> = ({ token }) => {\n\tconst data = useO(token)\n\treturn (\n\t\t<JsonEditor\n\t\t\ttestid={`${token.key}-state-editor`}\n\t\t\tdata={data}\n\t\t\tset={() => null}\n\t\t\tisReadonly={() => true}\n\t\t/>\n\t)\n}\n\nexport const StoreEditor: FC<{\n\ttoken: ReadonlySelectorToken<unknown> | WritableToken<unknown>\n}> = ({ token }) => {\n\tswitch (token.type) {\n\t\tcase `readonly_pure_selector`:\n\t\tcase `readonly_held_selector`:\n\t\t\treturn <ReadonlySelectorViewer token={token} />\n\t\tcase `writable_pure_selector`:\n\t\tcase `writable_held_selector`:\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\t\treturn <StateEditor token={token} />\n\t}\n}\n","import type { RegularAtomFamilyToken, RegularAtomToken } from \"atom.io\"\nimport {\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n\tIMPLICIT,\n\ttype Store,\n} from \"atom.io/internal\"\nimport type { IntrospectionStates } from \"atom.io/introspection\"\nimport { attachIntrospectionStates } from \"atom.io/introspection\"\nimport { persistSync } from \"atom.io/web\"\nimport type { Context } from \"react\"\nimport { createContext } from \"react\"\n\ntype DevtoolsView = `atoms` | `selectors` | `timelines` | `transactions`\n\nexport type DevtoolsStates = {\n\tdevtoolsAreOpenState: RegularAtomToken<boolean>\n\tdevtoolsViewSelectionState: RegularAtomToken<DevtoolsView>\n\tdevtoolsViewOptionsState: RegularAtomToken<DevtoolsView[]>\n\tviewIsOpenAtoms: RegularAtomFamilyToken<boolean, string>\n}\n\nexport function attachDevtoolsStates(\n\tstore: Store,\n): DevtoolsStates & IntrospectionStates & { store: Store } {\n\tconst introspectionStates = attachIntrospectionStates(store)\n\n\tconst devtoolsAreOpenState = createStandaloneAtom<boolean>(store, {\n\t\tkey: `🔍 Devtools Are Open`,\n\t\tdefault: true,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `🔍 Devtools Are Open`)],\n\t})\n\n\tconst devtoolsViewSelectionState = createStandaloneAtom<DevtoolsView>(store, {\n\t\tkey: `🔍 Devtools View Selection`,\n\t\tdefault: `atoms`,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `🔍 Devtools View`)],\n\t})\n\n\tconst devtoolsViewOptionsState = createStandaloneAtom<DevtoolsView[]>(store, {\n\t\tkey: `🔍 Devtools View Options`,\n\t\tdefault: [`atoms`, `selectors`, `transactions`, `timelines`],\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `🔍 Devtools View Options`)],\n\t})\n\n\tconst viewIsOpenAtoms = createAtomFamily<boolean, string>(store, {\n\t\tkey: `🔍 Devtools View Is Open`,\n\t\tdefault: false,\n\t\teffects: (key) =>\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, key + `:view-is-open`)],\n\t})\n\n\treturn {\n\t\t...introspectionStates,\n\t\tdevtoolsAreOpenState,\n\t\tdevtoolsViewSelectionState,\n\t\tdevtoolsViewOptionsState,\n\t\tviewIsOpenAtoms,\n\t\tstore,\n\t}\n}\n\nexport const DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\n> = createContext(attachDevtoolsStates(IMPLICIT.STORE))\n","import type {\n\tReadableToken,\n\tReadonlyPureSelectorToken,\n\tRegularAtomToken,\n} from \"atom.io\"\nimport { getState } from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { FamilyNode, WritableTokenIndex } from \"atom.io/introspection\"\nimport { primitiveRefinery } from \"atom.io/introspection\"\nimport { useI, useO } from \"atom.io/react\"\nimport { type FC, useContext } from \"react\"\n\nimport { button } from \"./Button\"\nimport { StoreEditor } from \"./StateEditor\"\nimport { DevtoolsContext } from \"./store\"\n\n/* eslint-disable no-console */\n\nexport const StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<string>\n}> = ({ node, isOpenState, typeState }) => {\n\tconst setIsOpen = useI(isOpenState)\n\tconst isOpen = useO(isOpenState)\n\n\tconst state = useO(node)\n\tconst stateType = useO(typeState)\n\n\tconst isPrimitive = Boolean(primitiveRefinery.refine(state))\n\n\treturn (\n\t\t<>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen && !isPrimitive}\n\t\t\t\t\ttestid={`open-close-state-${node.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\tdisabled={isPrimitive}\n\t\t\t\t/>\n\t\t\t\t<main\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconsole.log(node, getState(node))\n\t\t\t\t\t}}\n\t\t\t\t\tonKeyUp={() => {\n\t\t\t\t\t\tconsole.log(node, getState(node))\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<h2>{node.family?.subKey ?? node.key}</h2>\n\t\t\t\t\t<span className=\"type detail\">({stateType})</span>\n\t\t\t\t</main>\n\t\t\t\t<StoreEditor token={node} />\n\t\t\t</header>\n\t\t\t{isOpen && !isPrimitive ? (\n\t\t\t\t<main>\n\t\t\t\t\t<StoreEditor token={node} />\n\t\t\t\t</main>\n\t\t\t) : null}\n\t\t</>\n\t)\n}\nexport const StateIndexTreeNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>>\n\tisOpenState: RegularAtomToken<boolean>\n}> = ({ node, isOpenState }) => {\n\tconst setIsOpen = useI(isOpenState)\n\tconst isOpen = useO(isOpenState)\n\n\tconst { typeSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\n\tfor (const [key, childNode] of node.familyMembers) {\n\t\tfindInStore(store, viewIsOpenAtoms, key)\n\t\tfindInStore(store, typeSelectors, childNode.key)\n\t}\n\treturn (\n\t\t<>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\ttestid={`open-close-state-family-${node.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t/>\n\t\t\t\t<main>\n\t\t\t\t\t<h2>{node.key}</h2>\n\t\t\t\t\t<span className=\"type detail\"> (family)</span>\n\t\t\t\t</main>\n\t\t\t</header>\n\t\t\t{isOpen\n\t\t\t\t? [...node.familyMembers.entries()].map(([key, childNode]) => (\n\t\t\t\t\t\t<StateIndexNode\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tnode={childNode}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, childNode.key)}\n\t\t\t\t\t\t\ttypeState={findInStore(store, typeSelectors, childNode.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))\n\t\t\t\t: null}\n\t\t</>\n\t)\n}\n\nexport const StateIndexNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown>> | ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<string>\n}> = ({ node, isOpenState, typeState }) => {\n\treturn (\n\t\t<section className=\"node state\" data-testid={`state-${node.key}`}>\n\t\t\t{`type` in node ? (\n\t\t\t\t<StateIndexLeafNode\n\t\t\t\t\tnode={node}\n\t\t\t\t\tisOpenState={isOpenState}\n\t\t\t\t\ttypeState={typeState}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<StateIndexTreeNode node={node} isOpenState={isOpenState} />\n\t\t\t)}\n\t\t</section>\n\t)\n}\n\nexport const StateIndex: FC<{\n\ttokenIndex: ReadonlyPureSelectorToken<\n\t\tWritableTokenIndex<ReadableToken<unknown>>\n\t>\n}> = ({ tokenIndex }) => {\n\tconst tokenIds = useO(tokenIndex)\n\n\tconst { typeSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\n\treturn (\n\t\t<article className=\"index state_index\" data-testid=\"state-index\">\n\t\t\t{[...tokenIds.entries()]\n\t\t\t\t.filter(([key]) => !key.startsWith(`👁‍🗨`))\n\t\t\t\t.sort()\n\t\t\t\t.map(([key, node]) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<StateIndexNode\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tnode={node}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, node.key)}\n\t\t\t\t\t\t\ttypeState={findInStore(store, typeSelectors, node.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</article>\n\t)\n}\n","import type {\n\tKeyedStateUpdate,\n\tTimelineUpdate,\n\tTransactionUpdate,\n} from \"atom.io\"\nimport type { Func } from \"atom.io/internal\"\nimport { discoverType, prettyJson } from \"atom.io/introspection\"\nimport { stringifyJson } from \"atom.io/json\"\nimport * as React from \"react\"\n\n/* eslint-disable no-console */\n\nconst AtomUpdateFC: React.FC<{\n\tserialNumber: number\n\tatomUpdate: KeyedStateUpdate<unknown>\n}> = ({ atomUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tkey={atomUpdate.key}\n\t\t\tclassName=\"node atom_update\"\n\t\t\tonClick={() => {\n\t\t\t\tconsole.log(atomUpdate)\n\t\t\t}}\n\t\t\tonKeyUp={() => {\n\t\t\t\tconsole.log(atomUpdate)\n\t\t\t}}\n\t\t>\n\t\t\t<span className=\"detail\">{atomUpdate.key}: </span>\n\t\t\t<span>\n\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t{prettyJson.diff(atomUpdate.oldValue, atomUpdate.newValue).summary}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</article>\n\t)\n}\n\nconst TransactionUpdateFC: React.FC<{\n\tserialNumber: number\n\ttransactionUpdate: TransactionUpdate<Func>\n}> = ({ serialNumber, transactionUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tclassName=\"node transaction_update\"\n\t\t\tdata-testid={`transaction-update-${transactionUpdate.key}-${serialNumber}`}\n\t\t>\n\t\t\t<header>\n\t\t\t\t<h4>{serialNumber}</h4>\n\t\t\t</header>\n\t\t\t<main>\n\t\t\t\t<section className=\"transaction_params\">\n\t\t\t\t\t<span className=\"detail\">params: </span>\n\t\t\t\t\t{transactionUpdate.params.map((param, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<article\n\t\t\t\t\t\t\t\tkey={`param` + index}\n\t\t\t\t\t\t\t\tclassName=\"node transaction_param\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tconsole.log(transactionUpdate)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyUp={() => {\n\t\t\t\t\t\t\t\t\tconsole.log(transactionUpdate)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"detail\">{discoverType(param)}: </span>\n\t\t\t\t\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t\t\t\t\t{typeof param === `object` &&\n\t\t\t\t\t\t\t\t\tparam !== null &&\n\t\t\t\t\t\t\t\t\t`type` in param &&\n\t\t\t\t\t\t\t\t\t`target` in param ? (\n\t\t\t\t\t\t\t\t\t\t<>{JSON.stringify(param.type)}</>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<>{JSON.stringify(param)}</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</article>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</section>\n\t\t\t\t<section className=\"node transaction_output\">\n\t\t\t\t\t<span className=\"detail\">output: </span>\n\t\t\t\t\t<span className=\"detail\">\n\t\t\t\t\t\t{discoverType(transactionUpdate.output)}\n\t\t\t\t\t</span>\n\t\t\t\t\t{transactionUpdate.output ? (\n\t\t\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t\t\t: {JSON.stringify(transactionUpdate.output)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</section>\n\t\t\t\t<section className=\"transaction_impact\">\n\t\t\t\t\t<span className=\"detail\">impact: </span>\n\t\t\t\t\t{transactionUpdate.updates\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(token) =>\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!token.key.startsWith(`👁‍🗨`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((update, index) => {\n\t\t\t\t\t\t\tswitch (update.type) {\n\t\t\t\t\t\t\t\tcase `atom_update`:\n\t\t\t\t\t\t\t\tcase `selector_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\t\t\t\t\t\tkey={`${transactionUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\tatomUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `transaction_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TransactionUpdateFC\n\t\t\t\t\t\t\t\t\t\t\tkey={`${transactionUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\ttransactionUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `molecule_creation`:\n\t\t\t\t\t\t\t\tcase `molecule_disposal`:\n\t\t\t\t\t\t\t\tcase `molecule_transfer`:\n\t\t\t\t\t\t\t\tcase `state_creation`:\n\t\t\t\t\t\t\t\tcase `state_disposal`:\n\t\t\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})}\n\t\t\t\t</section>\n\t\t\t</main>\n\t\t</article>\n\t)\n}\n\nexport const TimelineUpdateFC: React.FC<{\n\ttimelineUpdate: TimelineUpdate<any>\n\tserialNumber: number\n}> = ({ timelineUpdate, serialNumber }) => {\n\treturn `key` in timelineUpdate ? (\n\t\t<article\n\t\t\tclassName=\"node timeline_update\"\n\t\t\tdata-testid={`timeline-update-${typeof timelineUpdate.key === `string` ? timelineUpdate.key : stringifyJson(timelineUpdate.key)}-${serialNumber}`}\n\t\t>\n\t\t\t<header>\n\t\t\t\t<h4>\n\t\t\t\t\t{timelineUpdate.timestamp}: {timelineUpdate.type} ({timelineUpdate.key}\n\t\t\t\t\t)\n\t\t\t\t</h4>\n\t\t\t</header>\n\t\t\t<main>\n\t\t\t\t{timelineUpdate.type === `transaction_update` ? (\n\t\t\t\t\ttimelineUpdate.updates\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(token) =>\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\ttoken.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_creation` &&\n\t\t\t\t\t\t\t\ttoken.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!token.key.startsWith(`👁‍🗨`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((update, index) => {\n\t\t\t\t\t\t\tswitch (update.type) {\n\t\t\t\t\t\t\t\tcase `atom_update`:\n\t\t\t\t\t\t\t\tcase `selector_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\t\t\t\t\t\tkey={`${timelineUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\tatomUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `transaction_update`:\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TransactionUpdateFC\n\t\t\t\t\t\t\t\t\t\t\tkey={`${timelineUpdate.key}:${index}:${update.key}`}\n\t\t\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\t\t\ttransactionUpdate={update}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tcase `molecule_creation`:\n\t\t\t\t\t\t\t\tcase `molecule_disposal`:\n\t\t\t\t\t\t\t\tcase `molecule_transfer`:\n\t\t\t\t\t\t\t\tcase `state_creation`:\n\t\t\t\t\t\t\t\tcase `state_disposal`:\n\t\t\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t) : timelineUpdate.type === `selector_update` ? (\n\t\t\t\t\ttimelineUpdate.atomUpdates\n\t\t\t\t\t\t.filter((token) => !token.key.startsWith(`👁‍🗨`))\n\t\t\t\t\t\t.map((atomUpdate, index) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\t\t\t\tkey={`${timelineUpdate.key}:${index}:${atomUpdate.key}`}\n\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t\tatomUpdate={atomUpdate}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})\n\t\t\t\t) : timelineUpdate.type === `atom_update` ? (\n\t\t\t\t\t<article.AtomUpdate\n\t\t\t\t\t\tserialNumber={timelineUpdate.timestamp}\n\t\t\t\t\t\tatomUpdate={timelineUpdate}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</main>\n\t\t</article>\n\t) : null\n}\n\nexport const article: {\n\tAtomUpdate: typeof AtomUpdateFC\n\tTransactionUpdate: typeof TransactionUpdateFC\n\tTimelineUpdate: typeof TimelineUpdateFC\n} = {\n\tAtomUpdate: AtomUpdateFC,\n\tTransactionUpdate: TransactionUpdateFC,\n\tTimelineUpdate: TimelineUpdateFC,\n}\n","import type {\n\tReadonlyPureSelectorToken,\n\tRegularAtomToken,\n\tTimelineToken,\n} from \"atom.io\"\nimport { redo, undo } from \"atom.io\"\nimport { findInStore, type Timeline } from \"atom.io/internal\"\nimport { useI, useO } from \"atom.io/react\"\nimport { type FC, Fragment, useContext } from \"react\"\n\nimport { button } from \"./Button\"\nimport { DevtoolsContext } from \"./store\"\nimport { article } from \"./Updates\"\n\nexport const YouAreHere: FC = () => {\n\treturn <span className=\"you_are_here\">you are here</span>\n}\n\nexport const TimelineLog: FC<{\n\ttoken: TimelineToken<any>\n\tisOpenState: RegularAtomToken<boolean>\n\ttimelineState: ReadonlyPureSelectorToken<Timeline<any>>\n}> = ({ token, isOpenState, timelineState }) => {\n\tconst timeline = useO(timelineState)\n\tconst isOpen = useO(isOpenState)\n\tconst setIsOpen = useI(isOpenState)\n\n\treturn (\n\t\t<section className=\"node timeline_log\" data-testid={`timeline-${token.key}`}>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\ttestid={`open-close-timeline-${token.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t/>\n\t\t\t\t<main>\n\t\t\t\t\t<h2>{token.key}</h2>\n\t\t\t\t\t<span className=\"detail length\">\n\t\t\t\t\t\t({timeline.at}/{timeline.history.length})\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"gap\" />\n\t\t\t\t\t<nav>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tundo(token)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={timeline.at === 0}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tundo\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tredo(token)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={timeline.at === timeline.history.length}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tredo\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</nav>\n\t\t\t\t</main>\n\t\t\t</header>\n\t\t\t{isOpen ? (\n\t\t\t\t<main>\n\t\t\t\t\t{timeline.history.map((update, index) =>\n\t\t\t\t\t\tupdate.type !== `molecule_creation` &&\n\t\t\t\t\t\tupdate.type !== `molecule_disposal` &&\n\t\t\t\t\t\tupdate.type !== `state_creation` &&\n\t\t\t\t\t\tupdate.type !== `state_disposal` ? (\n\t\t\t\t\t\t\t<Fragment key={update.key + index + timeline.at}>\n\t\t\t\t\t\t\t\t{index === timeline.at ? <YouAreHere /> : null}\n\t\t\t\t\t\t\t\t<article.TimelineUpdate\n\t\t\t\t\t\t\t\t\ttimelineUpdate={update}\n\t\t\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{index === timeline.history.length - 1 &&\n\t\t\t\t\t\t\t\ttimeline.at === timeline.history.length ? (\n\t\t\t\t\t\t\t\t\t<YouAreHere />\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t) : null,\n\t\t\t\t\t)}\n\t\t\t\t</main>\n\t\t\t) : null}\n\t\t</section>\n\t)\n}\n\nexport const TimelineIndex: FC = () => {\n\tconst { timelineIndex, timelineSelectors, viewIsOpenAtoms, store } =\n\t\tuseContext(DevtoolsContext)\n\n\tconst tokenIds = useO(timelineIndex)\n\n\treturn (\n\t\t<article className=\"index timeline_index\" data-testid=\"timeline-index\">\n\t\t\t{tokenIds\n\t\t\t\t.filter((token) => !token.key.startsWith(`👁‍🗨`))\n\t\t\t\t.map((token) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TimelineLog\n\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, token.key)}\n\t\t\t\t\t\t\ttimelineState={findInStore(store, timelineSelectors, token.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</article>\n\t)\n}\n","import type {\n\tReadonlyPureSelectorToken,\n\tRegularAtomToken,\n\tTransactionToken,\n\tTransactionUpdate,\n} from \"atom.io\"\nimport { findInStore, type Func } from \"atom.io/internal\"\nimport { useI, useO } from \"atom.io/react\"\nimport { type FC, useContext } from \"react\"\n\nimport { button } from \"./Button\"\nimport { DevtoolsContext } from \"./store\"\nimport { article } from \"./Updates\"\n\nexport const TransactionLog: FC<{\n\ttoken: TransactionToken<Func>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<TransactionUpdate<Func>[]>\n}> = ({ token, isOpenState, logState }) => {\n\tconst log = useO(logState)\n\tconst isOpen = useO(isOpenState)\n\tconst setIsOpen = useI(isOpenState)\n\n\treturn (\n\t\t<section\n\t\t\tclassName=\"node transaction_log\"\n\t\t\tdata-testid={`transaction-${token.key}`}\n\t\t>\n\t\t\t<header>\n\t\t\t\t<button.OpenClose\n\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\ttestid={`open-close-transaction-${token.key}`}\n\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t/>\n\t\t\t\t<main>\n\t\t\t\t\t<h2>{token.key}</h2>\n\t\t\t\t\t<span className=\"detail length\">({log.length})</span>\n\t\t\t\t</main>\n\t\t\t</header>\n\t\t\t{isOpen ? (\n\t\t\t\t<main>\n\t\t\t\t\t{log.map((update, index) => (\n\t\t\t\t\t\t<article.TransactionUpdate\n\t\t\t\t\t\t\tkey={update.key + index}\n\t\t\t\t\t\t\tserialNumber={index}\n\t\t\t\t\t\t\ttransactionUpdate={update}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</main>\n\t\t\t) : null}\n\t\t</section>\n\t)\n}\n\nexport const TransactionIndex: FC = () => {\n\tconst { transactionIndex, transactionLogSelectors, viewIsOpenAtoms, store } =\n\t\tuseContext(DevtoolsContext)\n\n\tconst tokenIds = useO(transactionIndex)\n\treturn (\n\t\t<article className=\"index transaction_index\" data-testid=\"transaction-index\">\n\t\t\t{tokenIds\n\t\t\t\t.filter((token) => !token.key.startsWith(`🔍`))\n\t\t\t\t.map((token) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TransactionLog\n\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, token.key)}\n\t\t\t\t\t\t\tlogState={findInStore(store, transactionLogSelectors, token.key)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t</article>\n\t)\n}\n","import \"./devtools.css\"\n\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport { LayoutGroup, motion, spring } from \"motion/react\"\nimport { useContext, useRef } from \"react\"\n\nimport { StateIndex } from \"./StateIndex\"\nimport { attachDevtoolsStates, DevtoolsContext } from \"./store\"\nimport { TimelineIndex } from \"./TimelineIndex\"\nimport { TransactionIndex } from \"./TransactionIndex\"\n\nexport const AtomIODevtools: React.FC = () => {\n\tconst store = useContext(StoreContext)\n\treturn (\n\t\t<DevtoolsContext.Provider value={attachDevtoolsStates(store)}>\n\t\t\t<AtomIODevtoolsInternal />\n\t\t</DevtoolsContext.Provider>\n\t)\n}\n\nconst AtomIODevtoolsInternal = (): React.ReactNode => {\n\tconst constraintsRef = useRef(null)\n\n\tconst {\n\t\tatomIndex,\n\t\tselectorIndex,\n\t\tdevtoolsAreOpenState,\n\t\tdevtoolsViewSelectionState,\n\t\tdevtoolsViewOptionsState,\n\t} = useContext(DevtoolsContext)\n\n\tconst setDevtoolsAreOpen = useI(devtoolsAreOpenState)\n\tconst devtoolsAreOpen = useO(devtoolsAreOpenState)\n\tconst setDevtoolsView = useI(devtoolsViewSelectionState)\n\tconst devtoolsView = useO(devtoolsViewSelectionState)\n\tconst devtoolsViewOptions = useO(devtoolsViewOptionsState)\n\n\tconst mouseHasMoved = useRef(false)\n\n\treturn (\n\t\t<span\n\t\t\tstyle={{\n\t\t\t\tposition: `fixed`,\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0,\n\t\t\t}}\n\t\t>\n\t\t\t<motion.span\n\t\t\t\tref={constraintsRef}\n\t\t\t\tdata-css=\"atom_io_devtools_zone\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: `fixed`,\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tpointerEvents: `none`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<motion.main\n\t\t\t\tdrag\n\t\t\t\tdragConstraints={constraintsRef}\n\t\t\t\tdata-css=\"atom_io_devtools\"\n\t\t\t\ttransition={spring}\n\t\t\t\tstyle={\n\t\t\t\t\tdevtoolsAreOpen\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tbackgroundColor: `#0000`,\n\t\t\t\t\t\t\t\tborderColor: `#0000`,\n\t\t\t\t\t\t\t\tmaxHeight: 28,\n\t\t\t\t\t\t\t\tmaxWidth: 33,\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{devtoolsAreOpen ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<motion.header>\n\t\t\t\t\t\t\t<h1>atom.io</h1>\n\t\t\t\t\t\t\t<nav>\n\t\t\t\t\t\t\t\t{devtoolsViewOptions.map((viewOption) => (\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tkey={viewOption}\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tdata-testid={`view-${viewOption}`}\n\t\t\t\t\t\t\t\t\t\tclassName={viewOption === devtoolsView ? `active` : ``}\n\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\tsetDevtoolsView(viewOption)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdisabled={viewOption === devtoolsView}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{viewOption}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t</motion.header>\n\t\t\t\t\t\t<motion.main>\n\t\t\t\t\t\t\t<LayoutGroup>\n\t\t\t\t\t\t\t\t{devtoolsView === `atoms` ? (\n\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={atomIndex} />\n\t\t\t\t\t\t\t\t) : devtoolsView === `selectors` ? (\n\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={selectorIndex} />\n\t\t\t\t\t\t\t\t) : devtoolsView === `transactions` ? (\n\t\t\t\t\t\t\t\t\t<TransactionIndex />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<TimelineIndex />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</LayoutGroup>\n\t\t\t\t\t\t</motion.main>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t<footer>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonMouseDown={() => (mouseHasMoved.current = false)}\n\t\t\t\t\t\tonMouseMove={() => (mouseHasMoved.current = true)}\n\t\t\t\t\t\tonMouseUp={() => {\n\t\t\t\t\t\t\tif (!mouseHasMoved.current) {\n\t\t\t\t\t\t\t\tsetDevtoolsAreOpen((open) => !open)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t🔍\n\t\t\t\t\t</button>\n\t\t\t\t</footer>\n\t\t\t</motion.main>\n\t\t</span>\n\t)\n}\n"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { Canonical } from "atom.io/json";
2
- import { AtomFamilyToken, AtomToken, JoinToken, MutableAtomToken, ReadableFamilyToken, ReadableToken, ReadonlySelectorFamilyToken, TokenType, TransactionToken } from "atom.io";
2
+ import { AtomFamilyToken, AtomToken, JoinToken, MutableAtomToken, ReadableFamilyToken, ReadableToken, ReadonlyPureSelectorFamilyToken, TokenType, TransactionToken } from "atom.io";
3
3
  import { SetRTX, SetRTXJson } from "atom.io/transceivers/set-rtx";
4
4
  import { UserKey } from "atom.io/realtime-server";
5
5
 
6
6
  //#region src/realtime/realtime-continuity.d.ts
7
+ /* eslint-disable no-console */
7
8
  declare class InvariantMap<K, V> extends Map<K, V> {
8
9
  set(key: K, value: V): this;
9
10
  clear(): void;
@@ -48,7 +49,7 @@ type UserInRoomMeta = {
48
49
  };
49
50
  declare const DEFAULT_USER_IN_ROOM_META: UserInRoomMeta;
50
51
  declare const usersInRooms: JoinToken<`room`, string, `user`, string, `1:n`, UserInRoomMeta>;
51
- declare const usersInMyRoomView: ReadonlySelectorFamilyToken<MutableAtomToken<SetRTX<string>, SetRTXJson<string>>[], string>;
52
+ declare const usersInMyRoomView: ReadonlyPureSelectorFamilyToken<MutableAtomToken<SetRTX<string>, SetRTXJson<string>>[], string>;
52
53
 
53
54
  //#endregion
54
55
  export { ContinuityOptions, ContinuityToken, DEFAULT_USER_IN_ROOM_META, InvariantMap, PerspectiveToken, SyncGroup, UserInRoomMeta, continuity, roomIndex, usersInMyRoomView, usersInRooms, usersInThisRoomIndex };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["key: K","value: V","key: string","builder: (group: SyncGroup) => SyncGroup","group: SyncGroup","family: AtomFamilyToken<T, any>","index: ReadableFamilyToken<Iterable<AtomToken<T>>, string>","options: ContinuityOptions","usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","DEFAULT_USER_IN_ROOM_META: UserInRoomMeta","usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n>","usersInMyRoomView: ReadonlySelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>"],"sources":["../../src/realtime/realtime-continuity.ts","../../src/realtime/shared-room-store.ts"],"sourcesContent":null,"mappings":";;;;;;cAkBa,kBAAb,SAAwC,GAA3B,CAA+B,CAA/B,EAAkC,CAAlC,CAAA,CAAA;EAAA,GAAA,CAAA,GAAA,EACI,CADJ,EAAA,KAAA,EACc,CADd,CAAA,EAAA,IAAA;EAAA,KAAA,CAAA,CAA+B,EAAA,IAAA;;AAC3B,KAgBL,gBAhBK,CAAA,UAgBsB,eAhBtB,CAAA,GAAA,CAAA,CAAA,GAAA;EAAA,IAAA,EAAU,sBAAA;EAAA,aADa,EAmBxB,CAnBwB;EAAA,SAAA,EAoB5B,mBApB4B,CAoBR,aApBQ,CAoBM,SApBN,CAoBgB,CApBhB,CAAA,CAAA,EAAA,EAoBuB,OApBvB,CAAA;AAiBxC,CAAA;AAAY,KAMA,eAAA,GANA;EAAA,SAA2B,IAAA,EAAA,YAAA;EAAA,SAEvB,GAAA,EAAA,MAAA;EAAA,SACwC,OAAA,EAMrC,SANqC,CAAA,GAAA,CAAA,EAAA;EAAA,SAAV,OAAA,EAO3B,gBAP2B,CAAA,GAAA,CAAA,EAAA;EAAA,SAAd,YAAA,EAQR,gBARQ,CAQS,eART,CAAA,GAAA,EAQ8B,SAR9B,CAAA,CAAA,EAAA;CAAA;AAApB,cAWC,SAAA,CAXD;EAAA,IAAA,EAAA,YAAA;EAGZ,UAAY,OAAA,EAWQ,SAXR,CAAA,GAAA,CAAA,EAAA;EAAA,UAAA,OAAA,EAYQ,gBAZR,CAAA,GAAA,CAAA,EAAA;EAAA,UAGO,YAAA,EAUM,gBAVN,CAAA,GAAA,CAAA,EAAA;EAAA,mBACA,GAAA,EAAA,MAAA;EAAA,UAC2C,WAAA,CAAA,GAAA,EAAA,MAAA;EAAA,OAArB,QAAA,EAehB,YAfgB,CAAA,MAAA,EAeK,eAfL,CAAA;EAAA,OAAjB,MAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,KAAA,EAmBL,SAnBK,EAAA,GAmBS,SAnBT,CAAA,EAoBpB,eApBoB;EAAA,GAAA,CAAA,GAAA,KAAA,EA4BF,SA5BE,CAAA,GAAA,CAAA,EAAA,CAAA,EA4BiB,SA5BjB;EAGxB,GAAa,CAAA,GAAA,IAAA,EA0BQ,gBA1BR,CAAA,GAAA,CAAA,EAAA,CAAA,EA0BkC,SA1BlC;EAAA,GAAA,CAAA,UA4BD,eAzBQ,CAAA,GAAA,CAAA,EAAA,WA0BR,CAzBQ,SAyBE,eAzBF,CAAA,KAAA,EAAA,CAAA,GAyB6B,CAzB7B,GAAA,KAAA,EAAA,CAAA,MACK,EA0Bf,eA1Be,CA0BC,CA1BD,EAAA,GAAA,CAAA,EAAA,KAAA,EA2BhB,mBA3BgB,CA2BI,QA3BJ,CA2Ba,SA3Bb,CA2BuB,CA3BvB,CAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EA4BrB,SA5BqB;;AAOA,KAyDb,iBAAA,GAzDa;EAAA,GAAA,EAAA,MAIN;EAAA,MAAc,EAAA,CAAA,KAAA,EAuDhB,SAvDgB,EAAA,GAuDF,SAvDE;CAAA;AASX,iBAiDN,UAAA,CAjDM,OAAA,EAiDc,iBAjDd,CAAA,EAiDkC,eAjDlC;;;;cC9DTQ,sBAAsB,iBAClC,gBACA;cASYC,WAAW,iBACvB,gBACA;KASW,cAAA;EDhBZ,cAAa,EAAA,MAAA;CAAA;AAA+B,cCmB/BC,yBDnB+B,ECmBJ,cDnBI;AAAG,cCsBlCC,YDtBkC,ECsBpB,SDtBoB,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EC4B9C,cD5B8C,CAAA;AAC9B,cCuCJC,iBDvCI,ECuCe,2BDvCf,CCwChB,gBDxCgB,CCwCC,MDxCD,CAAA,MAAA,CAAA,ECwCiB,UDxCjB,CAAA,MAAA,CAAA,CAAA,EAAA,EAAA,MAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":["key: K","value: V","key: string","builder: (group: SyncGroup) => SyncGroup","group: SyncGroup","family: AtomFamilyToken<T, any>","index: ReadableFamilyToken<Iterable<AtomToken<T>>, string>","options: ContinuityOptions","usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","DEFAULT_USER_IN_ROOM_META: UserInRoomMeta","usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n>","usersInMyRoomView: ReadonlyPureSelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>"],"sources":["../../src/realtime/realtime-continuity.ts","../../src/realtime/shared-room-store.ts"],"sourcesContent":[],"mappings":";;;;;;;cAkBa,gBAAb,CAAA,CAAa,SAA2B,GAA3B,CAA+B,CAA/B,EAAkC,CAAlC,CAAA,CAAA;EAAA,GAAA,CAAA,GAA+B,EAC3B,CAD2B,EAAA,KAAA,EACjB,CADiB,CAAA,EAAA,IAAA;EAAA,KAAA,CAAA,CAAG,EAAA,IAAA;;AACpB,KAgBf,gBAhBe,CAAA,UAgBY,eAhBZ,CAAA,GAAA,CAAA,CAAA,GAAA;EAAA,IAAA,EADa,sBAAA;EAAA,aAAA,EAmBxB,CAnBwB;EAiBxC,SAAY,EAGA,mBAHA,CAGoB,aAHpB,CAGkC,SAHlC,CAG4C,CAH5C,CAAA,CAAA,EAAA,EAGmD,OAHnD,CAAA;CAAA;AAA2B,KAM3B,eAAA,GAN2B;EAAA,SAEvB,IAAA,EAAA,YAAA;EAAA,SACwC,GAAA,EAAA,MAAA;EAAA,SAAV,OAAA,EAM3B,SAN2B,CAAA,GAAA,CAAA,EAAA;EAAA,SAAd,OAAA,EAOb,gBAPa,CAAA,GAAA,CAAA,EAAA;EAAA,SAA+B,YAAA,EAQvC,gBARuC,CAQtB,eARsB,CAAA,GAAA,EAQD,SARC,CAAA,CAAA,EAAA;CAAA;AAAnD,cAWC,SAAA,CAXD;EAGZ,IAAY,EAAA,YAAA;EAAA,UAAA,OAAA,EAWQ,SAXR,CAAA,GAAA,CAAA,EAAA;EAAA,UAGO,OAAA,EASC,gBATD,CAAA,GAAA,CAAA,EAAA;EAAA,UACA,YAAA,EASM,gBATN,CAAA,GAAA,CAAA,EAAA;EAAA,mBAC2C,GAAA,EAAA,MAAA;EAAA,UAArB,WAAA,CAAA,GAAA,EAAA,MAAA;EAAA,OAAjB,QAAA,EAeC,YAfD,CAAA,MAAA,EAesB,eAftB,CAAA;EAAA,OAAA,MAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,KAAA,EAmBL,SAnBK,EAAA,GAmBS,SAnBT,CAAA,EAoBpB,eApBoB;EAGxB,GAAa,CAAA,GAAA,KAAA,EAyBS,SAzBT,CAAA,GAAA,CAAA,EAAA,CAAA,EAyB4B,SAzB5B;EAAA,GAAA,CAAA,GAAA,IAAA,EA0BQ,gBA1BR,CAAA,GAAA,CAAA,EAAA,CAAA,EA0BkC,SA1BlC;EAAA,GAAA,CAGO,UAyBR,eAxBQ,CAAA,GAAA,CAAA,EAAA,WAyBR,CAxBa,SAwBH,eAxBG,CAAA,KAAA,EAAA,CAAA,GAwBwB,CAxBxB,GAAA,KAAA,EAAA,CAAA,MAOqB,EAmBpC,eAnBoC,CAmBpB,CAnBoB,EAAA,GAAA,CAAA,EAAA,KAAA,EAoBrC,mBApBqC,CAoBjB,QApBiB,CAoBR,SApBQ,CAoBE,CApBF,CAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EAqB1C,SArB0C;;AAI3B,KAqDP,iBAAA,GArDO;EAAA,GAAA,EAAA,MAAc;EAAA,MAC7B,EAAA,CAAA,KAAA,EAsDa,SAtDb,EAAA,GAsD2B,SAtD3B;CAAA;AAQqC,iBAiDzB,UAAA,CAjDyB,OAAA,EAiDL,iBAjDK,CAAA,EAiDe,eAjDf;;;;cC9D5BQ,sBAAsB,iBAClC,gBACA;cASYC,WAAW,iBACvB,gBACA;KASW,cAAA;EDhBZ,cAAa,EAAA,MAAA;CAAA;AAA+B,cCmB/BC,yBDnB+B,ECmBJ,cDnBI;AAAG,cCsBlCC,YDtBkC,ECsBpB,SDtBoB,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EC4B9C,cD5B8C,CAAA;AAC9B,cCuCJC,iBDvCI,ECuCe,+BDvCf,CCwChB,gBDxCgB,CCwCC,MDxCD,CAAA,MAAA,CAAA,ECwCiB,UDxCjB,CAAA,MAAA,CAAA,CAAA,EAAA,EAAA,MAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["key: K","value: V","key: string","builder: (group: SyncGroup) => SyncGroup","options: ContinuityOptions","usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","DEFAULT_USER_IN_ROOM_META: UserInRoomMeta","usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n>","usersInMyRoomView: ReadonlySelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>"],"sources":["../../src/realtime/realtime-continuity.ts","../../src/realtime/shared-room-store.ts"],"sourcesContent":["import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tTokenType,\n\tTransactionToken,\n} from \"atom.io\"\nimport {\n\tassignTransactionToContinuity,\n\tIMPLICIT,\n\tsetEpochNumberOfContinuity,\n} from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport type { UserKey } from \"atom.io/realtime-server\"\n\n/* eslint-disable no-console */\n\nexport class InvariantMap<K, V> extends Map<K, V> {\n\tpublic set(key: K, value: V): this {\n\t\tif (this.has(key)) {\n\t\t\tconsole.warn(`Tried to set a key that already exists in an InvariantMap`, {\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\treturn this\n\t\t}\n\t\treturn super.set(key, value)\n\t}\n\n\tpublic clear(): void {\n\t\tthrow new Error(`Cannot clear an InvariantMap`)\n\t}\n}\n\nexport type PerspectiveToken<F extends AtomFamilyToken<any>> = {\n\ttype: `realtime_perspective`\n\tresourceAtoms: F\n\tviewAtoms: ReadableFamilyToken<ReadableToken<TokenType<F>>[], UserKey>\n}\n\nexport type ContinuityToken = {\n\treadonly type: `continuity`\n\treadonly key: string\n\treadonly globals: AtomToken<any>[]\n\treadonly actions: TransactionToken<any>[]\n\treadonly perspectives: PerspectiveToken<AtomFamilyToken<any, Canonical>>[]\n}\n\nexport class SyncGroup {\n\tpublic type = `continuity` as const\n\n\tprotected globals: AtomToken<any>[] = []\n\tprotected actions: TransactionToken<any>[] = []\n\tprotected perspectives: PerspectiveToken<any>[] = []\n\tprotected readonly key: string\n\n\tprotected constructor(key: string) {\n\t\tthis.key = key\n\t}\n\n\tpublic static existing: InvariantMap<string, ContinuityToken> =\n\t\tnew InvariantMap()\n\tpublic static create(\n\t\tkey: string,\n\t\tbuilder: (group: SyncGroup) => SyncGroup,\n\t): ContinuityToken {\n\t\tconst group = new SyncGroup(key)\n\t\tconst { type, globals, actions, perspectives } = builder(group)\n\t\tconst token = { type, key, globals, actions, perspectives }\n\t\tSyncGroup.existing.set(key, token)\n\t\treturn token\n\t}\n\n\tpublic add(...atoms: AtomToken<any>[]): SyncGroup\n\tpublic add(...args: TransactionToken<any>[]): SyncGroup\n\tpublic add<\n\t\tF extends AtomFamilyToken<any>,\n\t\tT extends F extends AtomFamilyToken<infer U> ? U : never,\n\t>(\n\t\tfamily: AtomFamilyToken<T, any>,\n\t\tindex: ReadableFamilyToken<Iterable<AtomToken<T>>, string>,\n\t): SyncGroup\n\tpublic add(\n\t\t...args:\n\t\t\t| readonly AtomToken<any>[]\n\t\t\t| readonly TransactionToken<any>[]\n\t\t\t| [AtomFamilyToken<any, any>, ReadableFamilyToken<Iterable<any>, string>]\n\t): this {\n\t\tconst zeroth = args[0]\n\t\tswitch (zeroth.type) {\n\t\t\tcase `atom`:\n\t\t\tcase `mutable_atom`:\n\t\t\t\tthis.globals.push(...(args as AtomToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `transaction`:\n\t\t\t\tthis.actions.push(...(args as TransactionToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `atom_family`:\n\t\t\tcase `mutable_atom_family`:\n\t\t\t\t{\n\t\t\t\t\tconst [family, index] = args as [\n\t\t\t\t\t\tAtomFamilyToken<any, any>,\n\t\t\t\t\t\tReadableFamilyToken<ReadableToken<any>[], UserKey>,\n\t\t\t\t\t]\n\t\t\t\t\tthis.perspectives.push({\n\t\t\t\t\t\ttype: `realtime_perspective`,\n\t\t\t\t\t\tresourceAtoms: family,\n\t\t\t\t\t\tviewAtoms: index,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn this\n\t}\n}\n\nexport type ContinuityOptions = {\n\tkey: string\n\tconfig: (group: SyncGroup) => SyncGroup\n}\n\nexport function continuity(options: ContinuityOptions): ContinuityToken {\n\tconst { key, config } = options\n\tconst token = SyncGroup.create(key, config)\n\tconst { actions } = token\n\tfor (const action of actions) {\n\t\tassignTransactionToContinuity(IMPLICIT.STORE, key, action.key)\n\t}\n\tsetEpochNumberOfContinuity(IMPLICIT.STORE, key, -1)\n\treturn token\n}\n\n// const counterStates = atomFamily<number, { c: string }>({\n// \tkey: `counter`,\n// \tdefault: 0,\n// })\n// const counterIndices = atomFamily<{ c: string }[], string>({\n// \tkey: `counterIndex`,\n// \tdefault: [],\n// })\n// const nameStates = atomFamily<number, { n: string }>({\n// \tkey: `name`,\n// \tdefault: 0,\n// })\n// const nameIndices = atomFamily<{ n: string }[], string>({\n// \tkey: `nameIndex`,\n// \tdefault: [],\n// })\n\n// const counterContinuity = continuity({\n// \tkey: `counter`,\n// \tconfig: (group) =>\n// \t\tgroup\n// \t\t\t.add(counterStates, counterIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices),\n// })\n","import type {\n\tAtomToken,\n\tJoinToken,\n\tMutableAtomToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n} from \"atom.io\"\nimport { atom, getInternalRelations, join, selectorFamily } from \"atom.io\"\nimport { Join } from \"atom.io/internal\"\nimport type { SetRTXJson } from \"atom.io/transceivers/set-rtx\"\nimport { SetRTX } from \"atom.io/transceivers/set-rtx\"\n\nexport const usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n> = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `usersInRoomIndex`,\n\tmutable: true,\n\tdefault: () => new SetRTX<string>(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport const roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n> = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `roomIndex`,\n\tdefault: () => new SetRTX<string>(),\n\tmutable: true,\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport type UserInRoomMeta = {\n\tenteredAtEpoch: number\n}\nexport const DEFAULT_USER_IN_ROOM_META: UserInRoomMeta = {\n\tenteredAtEpoch: 0,\n}\nexport const usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n> = join(\n\t{\n\t\tkey: `usersInRooms`,\n\t\tbetween: [`room`, `user`],\n\t\tcardinality: `1:n`,\n\t\tisAType: (input): input is string => typeof input === `string`,\n\t\tisBType: (input): input is string => typeof input === `string`,\n\t},\n\tDEFAULT_USER_IN_ROOM_META,\n)\n\nexport const usersInMyRoomView: ReadonlySelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n> = selectorFamily<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>({\n\tkey: `usersInMyRoomView`,\n\tget:\n\t\t(myUsername) =>\n\t\t({ find }) => {\n\t\t\tconst usersInRoomsAtoms = getInternalRelations(usersInRooms)\n\t\t\tconst myRoomIndex = find(usersInRoomsAtoms, myUsername)\n\t\t\treturn [myRoomIndex]\n\t\t},\n})\n"],"mappings":";;;;;AAkBA,IAAa,eAAb,cAAwC,IAAU;CACjD,AAAO,IAAIA,KAAQC,OAAgB;AAClC,MAAI,KAAK,IAAI,IAAI,EAAE;AAClB,WAAQ,MAAM,4DAA4D;IACzE;IACA;GACA,EAAC;AACF,UAAO;EACP;AACD,SAAO,MAAM,IAAI,KAAK,MAAM;CAC5B;CAED,AAAO,QAAc;AACpB,QAAM,IAAI,OAAO;CACjB;AACD;AAgBD,IAAa,YAAb,MAAa,UAAU;CACtB,AAAO,QAAQ;CAEf,AAAU,UAA4B,CAAE;CACxC,AAAU,UAAmC,CAAE;CAC/C,AAAU,eAAwC,CAAE;CACpD,AAAmB;CAEnB,AAAU,YAAYC,KAAa;AAClC,OAAK,MAAM;CACX;CAED,OAAc,WACb,IAAI;CACL,OAAc,OACbA,KACAC,SACkB;EAClB,MAAM,QAAQ,IAAI,UAAU;EAC5B,MAAM,EAAE,MAAM,SAAS,SAAS,cAAc,GAAG,QAAQ,MAAM;EAC/D,MAAM,QAAQ;GAAE;GAAM;GAAK;GAAS;GAAS;EAAc;AAC3D,YAAU,SAAS,IAAI,KAAK,MAAM;AAClC,SAAO;CACP;CAWD,AAAO,IACN,GAAG,MAII;EACP,MAAM,SAAS,KAAK;AACpB,UAAQ,OAAO,MAAf;GACC,MAAM;GACN,MAAM;AACL,SAAK,QAAQ,KAAK,GAAI,KAA0B;AAChD;GACD,MAAM;AACL,SAAK,QAAQ,KAAK,GAAI,KAAiC;AACvD;GACD,MAAM;GACN,MAAM;IACL;KACC,MAAM,CAAC,QAAQ,MAAM,GAAG;AAIxB,UAAK,aAAa,KAAK;MACtB,OAAO;MACP,eAAe;MACf,WAAW;KACX,EAAC;IACF;AACD;EACD;AAED,SAAO;CACP;AACD;AAOD,SAAgB,WAAWC,SAA6C;CACvE,MAAM,EAAE,KAAK,QAAQ,GAAG;CACxB,MAAM,QAAQ,UAAU,OAAO,KAAK,OAAO;CAC3C,MAAM,EAAE,SAAS,GAAG;AACpB,MAAK,MAAM,UAAU,QACpB,+BAA8B,SAAS,OAAO,KAAK,OAAO,IAAI;AAE/D,4BAA2B,SAAS,OAAO,KAAK,GAAG;AACnD,QAAO;AACP;;;;ACxHD,MAAaC,uBAGT,KAAyC;CAC5C,MAAM;CACN,SAAS;CACT,SAAS,MAAM,IAAI;CACnB,QAAQ,CAAC,QAAQ,IAAI,QAAQ;CAC7B,UAAU,CAAC,SAAS,OAAO,SAAS,KAAK;AACzC,EAAC;AAEF,MAAaC,YAGT,KAAyC;CAC5C,MAAM;CACN,SAAS,MAAM,IAAI;CACnB,SAAS;CACT,QAAQ,CAAC,QAAQ,IAAI,QAAQ;CAC7B,UAAU,CAAC,SAAS,OAAO,SAAS,KAAK;AACzC,EAAC;AAKF,MAAaC,4BAA4C,EACxD,gBAAgB,EAChB;AACD,MAAaC,eAOT,KACH;CACC,MAAM;CACN,SAAS,EAAE,QAAQ,KAAM;CACzB,cAAc;CACd,SAAS,CAAC,iBAAkC,WAAW;CACvD,SAAS,CAAC,iBAAkC,WAAW;AACvD,GACD,0BACA;AAED,MAAaC,oBAGT,eAGF;CACD,MAAM;CACN,KACC,CAAC,eACD,CAAC,EAAE,MAAM,KAAK;EACb,MAAM,oBAAoB,qBAAqB,aAAa;EAC5D,MAAM,cAAc,KAAK,mBAAmB,WAAW;AACvD,SAAO,CAAC,WAAY;CACpB;AACF,EAAC"}
1
+ {"version":3,"file":"index.js","names":["key: K","value: V","key: string","builder: (group: SyncGroup) => SyncGroup","options: ContinuityOptions","usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","DEFAULT_USER_IN_ROOM_META: UserInRoomMeta","usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n>","usersInMyRoomView: ReadonlyPureSelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>"],"sources":["../../src/realtime/realtime-continuity.ts","../../src/realtime/shared-room-store.ts"],"sourcesContent":["import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tTokenType,\n\tTransactionToken,\n} from \"atom.io\"\nimport {\n\tassignTransactionToContinuity,\n\tIMPLICIT,\n\tsetEpochNumberOfContinuity,\n} from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport type { UserKey } from \"atom.io/realtime-server\"\n\n/* eslint-disable no-console */\n\nexport class InvariantMap<K, V> extends Map<K, V> {\n\tpublic set(key: K, value: V): this {\n\t\tif (this.has(key)) {\n\t\t\tconsole.warn(`Tried to set a key that already exists in an InvariantMap`, {\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\treturn this\n\t\t}\n\t\treturn super.set(key, value)\n\t}\n\n\tpublic clear(): void {\n\t\tthrow new Error(`Cannot clear an InvariantMap`)\n\t}\n}\n\nexport type PerspectiveToken<F extends AtomFamilyToken<any>> = {\n\ttype: `realtime_perspective`\n\tresourceAtoms: F\n\tviewAtoms: ReadableFamilyToken<ReadableToken<TokenType<F>>[], UserKey>\n}\n\nexport type ContinuityToken = {\n\treadonly type: `continuity`\n\treadonly key: string\n\treadonly globals: AtomToken<any>[]\n\treadonly actions: TransactionToken<any>[]\n\treadonly perspectives: PerspectiveToken<AtomFamilyToken<any, Canonical>>[]\n}\n\nexport class SyncGroup {\n\tpublic type = `continuity` as const\n\n\tprotected globals: AtomToken<any>[] = []\n\tprotected actions: TransactionToken<any>[] = []\n\tprotected perspectives: PerspectiveToken<any>[] = []\n\tprotected readonly key: string\n\n\tprotected constructor(key: string) {\n\t\tthis.key = key\n\t}\n\n\tpublic static existing: InvariantMap<string, ContinuityToken> =\n\t\tnew InvariantMap()\n\tpublic static create(\n\t\tkey: string,\n\t\tbuilder: (group: SyncGroup) => SyncGroup,\n\t): ContinuityToken {\n\t\tconst group = new SyncGroup(key)\n\t\tconst { type, globals, actions, perspectives } = builder(group)\n\t\tconst token = { type, key, globals, actions, perspectives }\n\t\tSyncGroup.existing.set(key, token)\n\t\treturn token\n\t}\n\n\tpublic add(...atoms: AtomToken<any>[]): SyncGroup\n\tpublic add(...args: TransactionToken<any>[]): SyncGroup\n\tpublic add<\n\t\tF extends AtomFamilyToken<any>,\n\t\tT extends F extends AtomFamilyToken<infer U> ? U : never,\n\t>(\n\t\tfamily: AtomFamilyToken<T, any>,\n\t\tindex: ReadableFamilyToken<Iterable<AtomToken<T>>, string>,\n\t): SyncGroup\n\tpublic add(\n\t\t...args:\n\t\t\t| readonly AtomToken<any>[]\n\t\t\t| readonly TransactionToken<any>[]\n\t\t\t| [AtomFamilyToken<any, any>, ReadableFamilyToken<Iterable<any>, string>]\n\t): this {\n\t\tconst zeroth = args[0]\n\t\tswitch (zeroth.type) {\n\t\t\tcase `atom`:\n\t\t\tcase `mutable_atom`:\n\t\t\t\tthis.globals.push(...(args as AtomToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `transaction`:\n\t\t\t\tthis.actions.push(...(args as TransactionToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `atom_family`:\n\t\t\tcase `mutable_atom_family`:\n\t\t\t\t{\n\t\t\t\t\tconst [family, index] = args as [\n\t\t\t\t\t\tAtomFamilyToken<any, any>,\n\t\t\t\t\t\tReadableFamilyToken<ReadableToken<any>[], UserKey>,\n\t\t\t\t\t]\n\t\t\t\t\tthis.perspectives.push({\n\t\t\t\t\t\ttype: `realtime_perspective`,\n\t\t\t\t\t\tresourceAtoms: family,\n\t\t\t\t\t\tviewAtoms: index,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn this\n\t}\n}\n\nexport type ContinuityOptions = {\n\tkey: string\n\tconfig: (group: SyncGroup) => SyncGroup\n}\n\nexport function continuity(options: ContinuityOptions): ContinuityToken {\n\tconst { key, config } = options\n\tconst token = SyncGroup.create(key, config)\n\tconst { actions } = token\n\tfor (const action of actions) {\n\t\tassignTransactionToContinuity(IMPLICIT.STORE, key, action.key)\n\t}\n\tsetEpochNumberOfContinuity(IMPLICIT.STORE, key, -1)\n\treturn token\n}\n\n// const counterStates = atomFamily<number, { c: string }>({\n// \tkey: `counter`,\n// \tdefault: 0,\n// })\n// const counterIndices = atomFamily<{ c: string }[], string>({\n// \tkey: `counterIndex`,\n// \tdefault: [],\n// })\n// const nameStates = atomFamily<number, { n: string }>({\n// \tkey: `name`,\n// \tdefault: 0,\n// })\n// const nameIndices = atomFamily<{ n: string }[], string>({\n// \tkey: `nameIndex`,\n// \tdefault: [],\n// })\n\n// const counterContinuity = continuity({\n// \tkey: `counter`,\n// \tconfig: (group) =>\n// \t\tgroup\n// \t\t\t.add(counterStates, counterIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices),\n// })\n","import type {\n\tAtomToken,\n\tJoinToken,\n\tMutableAtomToken,\n\tReadonlyPureSelectorFamilyToken,\n\tReadonlyPureSelectorToken,\n} from \"atom.io\"\nimport { atom, getInternalRelations, join, selectorFamily } from \"atom.io\"\nimport { Join } from \"atom.io/internal\"\nimport type { SetRTXJson } from \"atom.io/transceivers/set-rtx\"\nimport { SetRTX } from \"atom.io/transceivers/set-rtx\"\n\nexport const usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n> = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `usersInRoomIndex`,\n\tmutable: true,\n\tdefault: () => new SetRTX<string>(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport const roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n> = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `roomIndex`,\n\tdefault: () => new SetRTX<string>(),\n\tmutable: true,\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport type UserInRoomMeta = {\n\tenteredAtEpoch: number\n}\nexport const DEFAULT_USER_IN_ROOM_META: UserInRoomMeta = {\n\tenteredAtEpoch: 0,\n}\nexport const usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n> = join(\n\t{\n\t\tkey: `usersInRooms`,\n\t\tbetween: [`room`, `user`],\n\t\tcardinality: `1:n`,\n\t\tisAType: (input): input is string => typeof input === `string`,\n\t\tisBType: (input): input is string => typeof input === `string`,\n\t},\n\tDEFAULT_USER_IN_ROOM_META,\n)\n\nexport const usersInMyRoomView: ReadonlyPureSelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n> = selectorFamily<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>({\n\tkey: `usersInMyRoomView`,\n\tget:\n\t\t(myUsername) =>\n\t\t({ find }) => {\n\t\t\tconst usersInRoomsAtoms = getInternalRelations(usersInRooms)\n\t\t\tconst myRoomIndex = find(usersInRoomsAtoms, myUsername)\n\t\t\treturn [myRoomIndex]\n\t\t},\n})\n"],"mappings":";;;;;AAkBA,IAAa,eAAb,cAAwC,IAAU;CACjD,AAAO,IAAIA,KAAQC,OAAgB;AAClC,MAAI,KAAK,IAAI,IAAI,EAAE;AAClB,WAAQ,MAAM,4DAA4D;IACzE;IACA;GACA,EAAC;AACF,UAAO;EACP;AACD,SAAO,MAAM,IAAI,KAAK,MAAM;CAC5B;CAED,AAAO,QAAc;AACpB,QAAM,IAAI,OAAO;CACjB;AACD;AAgBD,IAAa,YAAb,MAAa,UAAU;CACtB,AAAO,QAAQ;CAEf,AAAU,UAA4B,CAAE;CACxC,AAAU,UAAmC,CAAE;CAC/C,AAAU,eAAwC,CAAE;CACpD,AAAmB;CAEnB,AAAU,YAAYC,KAAa;AAClC,OAAK,MAAM;CACX;CAED,OAAc,WACb,IAAI;CACL,OAAc,OACbA,KACAC,SACkB;EAClB,MAAM,QAAQ,IAAI,UAAU;EAC5B,MAAM,EAAE,MAAM,SAAS,SAAS,cAAc,GAAG,QAAQ,MAAM;EAC/D,MAAM,QAAQ;GAAE;GAAM;GAAK;GAAS;GAAS;EAAc;AAC3D,YAAU,SAAS,IAAI,KAAK,MAAM;AAClC,SAAO;CACP;CAWD,AAAO,IACN,GAAG,MAII;EACP,MAAM,SAAS,KAAK;AACpB,UAAQ,OAAO,MAAf;GACC,MAAM;GACN,MAAM;AACL,SAAK,QAAQ,KAAK,GAAI,KAA0B;AAChD;GACD,MAAM;AACL,SAAK,QAAQ,KAAK,GAAI,KAAiC;AACvD;GACD,MAAM;GACN,MAAM;IACL;KACC,MAAM,CAAC,QAAQ,MAAM,GAAG;AAIxB,UAAK,aAAa,KAAK;MACtB,OAAO;MACP,eAAe;MACf,WAAW;KACX,EAAC;IACF;AACD;EACD;AAED,SAAO;CACP;AACD;AAOD,SAAgB,WAAWC,SAA6C;CACvE,MAAM,EAAE,KAAK,QAAQ,GAAG;CACxB,MAAM,QAAQ,UAAU,OAAO,KAAK,OAAO;CAC3C,MAAM,EAAE,SAAS,GAAG;AACpB,MAAK,MAAM,UAAU,QACpB,+BAA8B,SAAS,OAAO,KAAK,OAAO,IAAI;AAE/D,4BAA2B,SAAS,OAAO,KAAK,GAAG;AACnD,QAAO;AACP;;;;ACxHD,MAAaC,uBAGT,KAAyC;CAC5C,MAAM;CACN,SAAS;CACT,SAAS,MAAM,IAAI;CACnB,QAAQ,CAAC,QAAQ,IAAI,QAAQ;CAC7B,UAAU,CAAC,SAAS,OAAO,SAAS,KAAK;AACzC,EAAC;AAEF,MAAaC,YAGT,KAAyC;CAC5C,MAAM;CACN,SAAS,MAAM,IAAI;CACnB,SAAS;CACT,QAAQ,CAAC,QAAQ,IAAI,QAAQ;CAC7B,UAAU,CAAC,SAAS,OAAO,SAAS,KAAK;AACzC,EAAC;AAKF,MAAaC,4BAA4C,EACxD,gBAAgB,EAChB;AACD,MAAaC,eAOT,KACH;CACC,MAAM;CACN,SAAS,EAAE,QAAQ,KAAM;CACzB,cAAc;CACd,SAAS,CAAC,iBAAkC,WAAW;CACvD,SAAS,CAAC,iBAAkC,WAAW;AACvD,GACD,0BACA;AAED,MAAaC,oBAGT,eAGF;CACD,MAAM;CACN,KACC,CAAC,eACD,CAAC,EAAE,MAAM,KAAK;EACb,MAAM,oBAAoB,qBAAqB,aAAa;EAC5D,MAAM,cAAc,KAAK,mBAAmB,WAAW;AACvD,SAAO,CAAC,WAAY;CACpB;AACF,EAAC"}
@@ -35,6 +35,7 @@ declare function pullAtom<J extends Json.Serializable>(store: Store, socket: Soc
35
35
 
36
36
  //#endregion
37
37
  //#region src/realtime-client/pull-atom-family-member.d.ts
38
+ /* eslint-disable no-console */
38
39
  declare function pullAtomFamilyMember<J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO$8.RegularAtomToken<J>): () => void;
39
40
 
40
41
  //#endregion
@@ -43,6 +44,7 @@ declare function pullMutableAtom<T extends Transceiver<any>, J extends Json.Seri
43
44
 
44
45
  //#endregion
45
46
  //#region src/realtime-client/pull-mutable-atom-family-member.d.ts
47
+ /* eslint-disable no-console */
46
48
  declare function pullMutableAtomFamilyMember<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO$6.MutableAtomToken<T, J>): () => void;
47
49
 
48
50
  //#endregion
@@ -51,6 +53,7 @@ declare function pullSelector<T>(store: Store, socket: Socket$1, token: AtomIO$5
51
53
 
52
54
  //#endregion
53
55
  //#region src/realtime-client/pull-selector-family-member.d.ts
56
+ /* eslint-disable no-console */
54
57
  declare function pullSelectorFamilyMember<T>(store: Store, socket: Socket$1, token: AtomIO$4.SelectorToken<T>): () => void;
55
58
 
56
59
  //#endregion
@@ -60,7 +63,7 @@ declare function pushState<J extends Json.Serializable>(store: Internal$1.Store,
60
63
  //#endregion
61
64
  //#region src/realtime-client/realtime-client-stores/client-main-store.d.ts
62
65
  declare const myIdState__INTERNAL: AtomIO$2.RegularAtomToken<string | undefined>;
63
- declare const myIdState: AtomIO$2.ReadonlySelectorToken<string | undefined>;
66
+ declare const myIdState: AtomIO$2.ReadonlyPureSelectorToken<string | undefined>;
64
67
  declare const myUsernameState: AtomIO$2.RegularAtomToken<string | null>;
65
68
 
66
69
  //#endregion