atom.io 0.33.18 → 0.33.20
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.
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +6 -0
- package/dist/internal/index.js.map +1 -1
- package/dist/main/index.d.ts +4 -0
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js.map +1 -1
- package/dist/react-devtools/index.js +2 -2
- package/dist/react-devtools/index.js.map +1 -1
- package/package.json +3 -3
- package/src/internal/atom/create-regular-atom.ts +4 -1
- package/src/internal/mutable/create-mutable-atom.ts +4 -1
- package/src/internal/set-state/reset-atom-or-selector.ts +2 -1
- package/src/main/atom.ts +4 -0
- package/src/react-devtools/store.ts +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen?: ((next: Modify<boolean> | boolean) => void) | undefined\n\tonShiftClick?: (\n\t\tevent: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n\t) => boolean\n\tdisabled?: boolean\n\ttestid: string\n}>","button: {\n\tOpenClose: typeof OpenClose\n}","DefaultFallback: FC<FallbackProps>","props: ErrorBoundaryProps","error: Error","errorInfo: ErrorInfo","DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents","store: Store","openCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>","states:\n\t\t\t\t| WritableTokenIndex<AtomToken<unknown>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown>>","value: unknown","segments: (number | string)[]","DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\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","next: T","newType: JsonTypeName","sortFn?: (a: string, b: string) => number","useO","useI","key: keyof T","SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n>","StateEditor: FC<{\n\ttoken: WritableToken<unknown>\n}>","useI","useO","ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}>","StoreEditor: FC<{\n\ttoken: ReadonlySelectorToken<unknown> | WritableToken<unknown>\n}>","StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<Loadable<string>>\n\tdispose?: (() => void) | undefined\n}>","useI","useO","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<Loadable<string>>\n\tdispose?: () => void\n}>","StateIndex: FC<{\n\ttokenIndex: AtomToken<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: ReadonlyPureSelectorToken<Timeline<any>>\n}>","useO","useI","TimelineIndex: FC","TransactionLog: FC<{\n\ttoken: TransactionToken<Func>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<TransactionUpdate<Func>[]>\n}>","useO","useI","TransactionIndex: FC","AtomIODevtools: React.FC<{ hideByDefault?: boolean }>","useO","useI"],"sources":["../../src/react-devtools/Button.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/store.ts","../../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/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/array-editor.tsx","../../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/json-editor/developer-interface.tsx","../../src/react-devtools/StateEditor.tsx","../../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) | undefined\n\tonShiftClick?: (\n\t\tevent: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n\t) => boolean\n\tdisabled?: boolean\n\ttestid: string\n}> = ({ isOpen, setIsOpen, onShiftClick, 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={(event) => {\n\t\t\t\tif (onShiftClick && event.shiftKey) {\n\t\t\t\t\tif (!onShiftClick(event)) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetIsOpen?.((prev) => !prev)\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t<span className=\"json_editor_icon json_editor_carat\">▶</span>\n\t\t</button>\n\t)\n}\n\nexport const button: {\n\tOpenClose: typeof OpenClose\n} = {\n\tOpenClose,\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\tresetErrorState?: () => 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\tAddIcon: 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\">×</span>\n\t),\n\t// big plus\n\tAddIcon: () => <span className=\"json_editor_icon json_editor_add\">+</span>,\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 {\n\tAtomToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorToken,\n\tTransactionToken,\n} from \"atom.io\"\nimport {\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n\tcreateTransaction,\n\tIMPLICIT,\n\ttype Store,\n} from \"atom.io/internal\"\nimport type {\n\tIntrospectionStates,\n\tWritableTokenIndex,\n} from \"atom.io/introspection\"\nimport { attachIntrospectionStates, isPlainObject } 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\tdevtoolsAreHiddenAtom: RegularAtomToken<boolean>\n\tdevtoolsAreOpenAtom: RegularAtomToken<boolean>\n\tdevtoolsViewSelectionAtom: RegularAtomToken<DevtoolsView>\n\tdevtoolsViewOptionsAtom: RegularAtomToken<DevtoolsView[]>\n\tviewIsOpenAtoms: RegularAtomFamilyToken<boolean, readonly (number | string)[]>\n\topenCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>\n}\n\nexport function attachDevtoolsStates(\n\tstore: Store,\n\thideByDefault = false,\n): DevtoolsStates & IntrospectionStates & { store: Store } {\n\tconst introspectionStates = attachIntrospectionStates(store)\n\n\tconst devtoolsAreHiddenAtom = createStandaloneAtom<boolean>(store, {\n\t\tkey: `🔍 Devtools Are Hidden`,\n\t\tdefault: hideByDefault,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\tpersistSync(window.localStorage, JSON, `🔍 Devtools Are Hidden`),\n\t\t\t\t\t\t({ setSelf }) => {\n\t\t\t\t\t\t\twindow.addEventListener(`keydown`, (e) => {\n\t\t\t\t\t\t\t\tif (e.ctrlKey && e.shiftKey && e.key.toLowerCase() === `a`) {\n\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\tsetSelf((state) => !state)\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\t],\n\t})\n\n\tconst devtoolsAreOpenAtom = 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 devtoolsViewSelectionAtom = 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 devtoolsViewOptionsAtom = 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<\n\t\tboolean,\n\t\treadonly (number | string)[]\n\t>(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, `view-is-open:${key.join()}`)],\n\t})\n\n\tconst openCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t> = createTransaction<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>(store, {\n\t\tkey: `🔍 Open Close All`,\n\t\tdo: ({ get, set }, path, current) => {\n\t\t\tconst currentView = get(devtoolsViewSelectionAtom)\n\t\t\tlet states:\n\t\t\t\t| WritableTokenIndex<AtomToken<unknown>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown>>\n\t\t\tswitch (currentView) {\n\t\t\t\tcase `atoms`:\n\t\t\t\t\tstates = get(introspectionStates.atomIndex)\n\t\t\t\t\tbreak\n\t\t\t\tcase `selectors`:\n\t\t\t\t\tstates = get(introspectionStates.selectorIndex)\n\t\t\t\t\tbreak\n\t\t\t\tcase `transactions`:\n\t\t\t\tcase `timelines`:\n\t\t\t\t\treturn\n\t\t\t}\n\n\t\t\tswitch (path.length) {\n\t\t\t\tcase 1:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (const [key] of states) {\n\t\t\t\t\t\t\tset(viewIsOpenAtoms, [key], !current)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\tdefault: {\n\t\t\t\t\tconst item = states.get(path[0] as string)\n\t\t\t\t\tlet value: unknown\n\t\t\t\t\tlet segments: (number | string)[]\n\t\t\t\t\tif (item) {\n\t\t\t\t\t\tif (`familyMembers` in item) {\n\t\t\t\t\t\t\tif (path.length === 2) {\n\t\t\t\t\t\t\t\tfor (const [subKey] of item.familyMembers) {\n\t\t\t\t\t\t\t\t\tset(viewIsOpenAtoms, [path[0], subKey], !current)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: fine here\n\t\t\t\t\t\t\tconst token = item.familyMembers.get(path[1] as string)!\n\t\t\t\t\t\t\tvalue = get(token)\n\t\t\t\t\t\t\tsegments = path.slice(2, -1)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue = get(item)\n\t\t\t\t\t\t\tsegments = path.slice(1, -1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const segment of segments) {\n\t\t\t\t\t\t\tif (value && typeof value === `object`) {\n\t\t\t\t\t\t\t\tvalue = value[segment as keyof typeof value]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst head = path.slice(0, -1)\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t\t\t\t\tset(viewIsOpenAtoms, [...head, i], !current)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isPlainObject(value)) {\n\t\t\t\t\t\t\t\tfor (const key of Object.keys(value)) {\n\t\t\t\t\t\t\t\t\tset(viewIsOpenAtoms, [...head, key], !current)\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\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t})\n\n\treturn {\n\t\t...introspectionStates,\n\t\tdevtoolsAreHiddenAtom,\n\t\tdevtoolsAreOpenAtom,\n\t\tdevtoolsViewSelectionAtom,\n\t\tdevtoolsViewOptionsAtom,\n\t\tviewIsOpenAtoms,\n\t\topenCloseAllTX,\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\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 { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { jsonRefinery } from \"atom.io/introspection\"\nimport type { JsonTypes } from \"atom.io/json\"\nimport { isJson } from \"atom.io/json\"\nimport {\n\ttype CSSProperties,\n\ttype FC,\n\ttype ReactElement,\n\tuseContext,\n} from \"react\"\n\nimport { button } from \"../Button\"\nimport { ElasticInput } from \"../elastic-input\"\nimport { DevtoolsContext } from \"../store\"\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\tisOpen?: boolean\n\tsetIsOpen?: (newValue: boolean) => void\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\tComponents,\n\tisOpen,\n\tsetIsOpen,\n\ttestid,\n}: JsonEditorProps_INTERNAL<T>): ReactElement | null => {\n\tconst { openCloseAllTX, store } = useContext(DevtoolsContext)\n\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\tconst dataIsTree = refined.type === `array` || refined.type === `object`\n\tconst dataIsExpandable = dataIsTree && isOpen !== undefined && setIsOpen\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<header>\n\t\t\t\t\t<main>\n\t\t\t\t\t\t{remove || dataIsExpandable ? (\n\t\t\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\t\t\tisOpen={isOpen ?? false}\n\t\t\t\t\t\t\t\ttestid={`${testid}-open-close`}\n\t\t\t\t\t\t\t\tonShiftClick={() => {\n\t\t\t\t\t\t\t\t\tactUponStore(store, openCloseAllTX, arbitrary())(path, isOpen)\n\t\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t\t\t\tdisabled={!dataIsExpandable}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{rename && (\n\t\t\t\t\t\t\t<Components.KeyWrapper>\n\t\t\t\t\t\t\t\t<ElasticInput\n\t\t\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\t\trename(e.target.value)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tdata-testid={`${testid}-rename`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Components.KeyWrapper>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{dataIsTree ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{isOpen !== undefined && setIsOpen ? (\n\t\t\t\t\t\t\t\t\t<span className=\"json_viewer\">{JSON.stringify(data)}</span>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t{recast ? (\n\t\t\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\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\t}}\n\t\t\t\t\t\t\t\t\t\tvalue={refined.type}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tdata-testid={`${testid}-recast`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{Object.keys(SubEditors).map((type) => (\n\t\t\t\t\t\t\t\t\t\t\t<option key={type} value={type}>\n\t\t\t\t\t\t\t\t\t\t\t\t{type}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<SubEditor\n\t\t\t\t\t\t\t\t\tdata={refined.data as never}\n\t\t\t\t\t\t\t\t\tset={set}\n\t\t\t\t\t\t\t\t\tremove={remove}\n\t\t\t\t\t\t\t\t\trename={rename}\n\t\t\t\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{recast && dataIsJson ? (\n\t\t\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t: (e) => {\n\t\t\t\t\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\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tvalue={refined.type}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tdata-testid={`${testid}-recast`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{Object.keys(SubEditors).map((type) => (\n\t\t\t\t\t\t\t\t\t\t\t<option key={type} value={type}>\n\t\t\t\t\t\t\t\t\t\t\t\t{type}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</main>\n\t\t\t\t\t{remove ? (\n\t\t\t\t\t\t<Components.Button\n\t\t\t\t\t\t\tdisabled={disabled}\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\ttestid={`${testid}-delete`}\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) : null}\n\t\t\t\t</header>\n\n\t\t\t\t{dataIsTree && isOpen !== false ? (\n\t\t\t\t\t<SubEditor\n\t\t\t\t\t\tdata={refined.data as never}\n\t\t\t\t\t\tset={set}\n\t\t\t\t\t\tremove={remove}\n\t\t\t\t\t\trename={rename}\n\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t/>\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\"\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 (_) {\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 = <\n\tT extends Json.Tree.Array | Json.Tree.Object,\n>(\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\tlet next: T\n\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\tconst copy = [...data]\n\t\t\t\t\t\tcopy.splice(key as number, 1)\n\t\t\t\t\t\tnext = copy as unknown as T\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst { [key]: _, ...rest } = data\n\t\t\t\t\t\tnext = rest as T\n\t\t\t\t\t}\n\t\t\t\t\treturn next\n\t\t\t\t})\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRecasters = <\n\tT extends Json.Tree.Array | Json.Tree.Object,\n>(\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\tlet next: T\n\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\tconst copy = [...data]\n\t\t\t\t\t\tcopy[key as number] = castToJson(value)[newType]\n\t\t\t\t\t\tnext = copy as unknown as T\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext = {\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\t[key]: castToJson(value)[newType],\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn next\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 { RegularAtomToken } from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Json, JsonTypes } from \"atom.io/json\"\nimport { JSON_DEFAULTS } from \"atom.io/json\"\nimport { useI, useO } from \"atom.io/react\"\nimport { DevtoolsContext } from \"atom.io/react-devtools/store\"\nimport { type ReactElement, useContext } from \"react\"\n\nimport type { JsonEditorComponents, SetterOrUpdater } from \"..\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\nimport { makeElementSetters } from \"./utilities/array-elements\"\nimport {\n\tmakePropertyRecasters,\n\tmakePropertyRemovers,\n} from \"./utilities/object-properties\"\n\ntype ArrayElementProps = {\n\tpath: ReadonlyArray<number | string>\n\tisReadonly: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden: (path: ReadonlyArray<number | string>) => boolean\n\tdata: unknown\n\tset: SetterOrUpdater<Json.Tree.Array>\n\tremove: (() => void) | undefined\n\trecast: (newType: keyof JsonTypes) => void\n\tComponents: JsonEditorComponents\n\ttestid?: string | undefined\n\tviewIsOpenAtom: RegularAtomToken<boolean, readonly (number | string)[]>\n}\nconst ArrayElement = ({\n\tpath,\n\tisReadonly,\n\tisHidden,\n\tdata,\n\tset,\n\tremove,\n\trecast,\n\tComponents,\n\ttestid,\n\tviewIsOpenAtom,\n}: ArrayElementProps): ReactElement => {\n\tconst index = path[path.length - 1]\n\tconst viewIsOpen = useO(viewIsOpenAtom)\n\tconst setViewIsOpen = useI(viewIsOpenAtom)\n\n\treturn (\n\t\t<JsonEditor_INTERNAL\n\t\t\tpath={path}\n\t\t\tname={`${index}`}\n\t\t\tisReadonly={isReadonly}\n\t\t\tisHidden={isHidden}\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\tremove={remove}\n\t\t\trecast={recast}\n\t\t\tclassName=\"json_editor_element\"\n\t\t\tComponents={Components}\n\t\t\tisOpen={viewIsOpen}\n\t\t\tsetIsOpen={setViewIsOpen}\n\t\t\ttestid={`${testid}-element-${index}`}\n\t\t/>\n\t)\n}\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 { viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\tconst disabled = isReadonly(path)\n\n\tconst setElement = makeElementSetters(data, set)\n\tconst removeElement = makePropertyRemovers(data, set)\n\tconst recastElement = makePropertyRecasters(data, set)\n\n\treturn (\n\t\t<Components.ArrayWrapper>\n\t\t\t<main className={`json_editor_elements${disabled ? ` readonly` : ``}`}>\n\t\t\t\t{data.map((element, index) => {\n\t\t\t\t\tconst elementPath = [...path, index]\n\t\t\t\t\tconst pathKey = elementPath.join(`,`)\n\t\t\t\t\tconst viewIsOpenAtom = findInStore(store, viewIsOpenAtoms, [\n\t\t\t\t\t\t...path,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t])\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ArrayElement\n\t\t\t\t\t\t\tkey={pathKey}\n\t\t\t\t\t\t\tpath={elementPath}\n\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\tdata={element}\n\t\t\t\t\t\t\tset={setElement[index]}\n\t\t\t\t\t\t\tremove={removeElement[index]}\n\t\t\t\t\t\t\trecast={recastElement[index]}\n\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t\t\tviewIsOpenAtom={viewIsOpenAtom}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</main>\n\t\t\t{!disabled ? (\n\t\t\t\t<footer>\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\ttestid={`${testid}-add-element`}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tset((current) => {\n\t\t\t\t\t\t\t\tconst newData = [...current, JSON_DEFAULTS.string]\n\t\t\t\t\t\t\t\treturn newData\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<Components.AddIcon />\n\t\t\t\t\t</Components.Button>\n\t\t\t\t</footer>\n\t\t\t) : null}\n\t\t</Components.ArrayWrapper>\n\t)\n}\n","import type { RegularAtomToken } from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Json, JsonTypes } from \"atom.io/json\"\nimport { useI } from \"atom.io/react/use-i\"\nimport { useO } from \"atom.io/react/use-o\"\nimport { DevtoolsContext } from \"atom.io/react-devtools/store\"\nimport type { FC, ReactElement } from \"react\"\nimport { useContext, useRef } from \"react\"\n\nimport { ElasticInput } from \"../../elastic-input\"\nimport type { SetterOrUpdater } from \"..\"\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\ntype ObjectPropertyProps = {\n\tpath: ReadonlyArray<number | string>\n\tisReadonly: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden: (path: ReadonlyArray<number | string>) => boolean\n\tdata: unknown\n\tset: SetterOrUpdater<Json.Tree.Object>\n\trename: (newKey: string) => void\n\tremove: (() => void) | undefined\n\trecast: (newType: keyof JsonTypes) => void\n\tComponents: JsonEditorComponents\n\ttestid?: string | undefined\n\tviewIsOpenAtom: RegularAtomToken<boolean, readonly (number | string)[]>\n}\nconst ObjectProperty = ({\n\tpath,\n\tisReadonly,\n\tisHidden,\n\tdata,\n\tset,\n\trename,\n\tremove,\n\trecast,\n\tComponents,\n\ttestid,\n\tviewIsOpenAtom,\n}: ObjectPropertyProps): ReactElement => {\n\tconst key = path[path.length - 1]\n\tconst viewIsOpen = useO(viewIsOpenAtom)\n\tconst setViewIsOpen = useI(viewIsOpenAtom)\n\n\treturn (\n\t\t<JsonEditor_INTERNAL\n\t\t\tpath={path}\n\t\t\tname={`${key}`}\n\t\t\tisReadonly={isReadonly}\n\t\t\tisHidden={isHidden}\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\trename={rename}\n\t\t\tremove={remove}\n\t\t\trecast={recast}\n\t\t\tclassName=\"json_editor_property\"\n\t\t\tComponents={Components}\n\t\t\tisOpen={viewIsOpen}\n\t\t\tsetIsOpen={setViewIsOpen}\n\t\t\ttestid={`${testid}-property-${key}`}\n\t\t/>\n\t)\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 { viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\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<Components.ObjectWrapper>\n\t\t\t<div className={`json_editor_properties${disabled ? ` readonly` : ``}`}>\n\t\t\t\t{Object.keys(data).map((key) => {\n\t\t\t\t\tconst originalKey = stableKeyMap.current[key]\n\t\t\t\t\tconst propertyPath = [...path, key]\n\t\t\t\t\tconst originalPropertyPath = [...path, originalKey]\n\t\t\t\t\tconst stablePathKey = originalPropertyPath.join(`.`)\n\t\t\t\t\tconst viewIsOpenAtom = findInStore(store, viewIsOpenAtoms, [\n\t\t\t\t\t\t...path,\n\t\t\t\t\t\tkey,\n\t\t\t\t\t])\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ObjectProperty\n\t\t\t\t\t\t\tkey={stablePathKey}\n\t\t\t\t\t\t\tpath={propertyPath}\n\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\tdata={data[key]}\n\t\t\t\t\t\t\tset={setProperty[key]}\n\t\t\t\t\t\t\trename={renameProperty[key]}\n\t\t\t\t\t\t\tremove={removeProperty[key]}\n\t\t\t\t\t\t\trecast={recastProperty[key]}\n\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t\t\tviewIsOpenAtom={viewIsOpenAtom}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t{disabled ? null : (\n\t\t\t\t<footer>\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\tdisabled={disabled}\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<Components.AddIcon />\n\t\t\t\t\t</Components.Button>\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\ttestid={`${testid}-sort-properties`}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsortProperties()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\tSort\n\t\t\t\t\t</Components.Button>\n\t\t\t\t</footer>\n\t\t\t)}\n\t\t</Components.ObjectWrapper>\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\tpath = [],\n\tisReadonly = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<boolean>): ReactElement => (\n\t<Components.BooleanWrapper>\n\t\t<input\n\t\t\tdisabled={isReadonly(path)}\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\tdisabled={isReadonly(path)}\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\treadOnly={isReadonly(path)}\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 { 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\tpath = [],\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={path}\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 { 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\tconst metaPath = token.family\n\t\t? [token.family.key, token.family.subKey]\n\t\t: [token.key]\n\treturn (\n\t\t<JsonEditor\n\t\t\ttestid={`${token.key}-state-editor`}\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\tpath={metaPath}\n\t\t/>\n\t)\n}\n\nexport const ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}> = ({ token }) => {\n\tconst data = useO(token)\n\tconst metaPath = token.family\n\t\t? [token.family.key, token.family.subKey]\n\t\t: [token.key]\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\tpath={metaPath}\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 {\n\tAtomToken,\n\tLoadable,\n\tReadableToken,\n\tReadonlyPureSelectorToken,\n\tRegularAtomToken,\n} from \"atom.io\"\nimport {\n\tactUponStore,\n\tarbitrary,\n\tdisposeFromStore,\n\tfindInStore,\n\tgetFromStore,\n} 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 { DEFAULT_JSON_EDITOR_COMPONENTS } from \"./json-editor\"\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<Loadable<string>>\n\tdispose?: (() => void) | undefined\n}> = ({ node, isOpenState, typeState, dispose }) => {\n\tconst { openCloseAllTX, store } = useContext(DevtoolsContext)\n\n\tconst setIsOpen = useI(isOpenState)\n\tconst isOpen = useO(isOpenState)\n\n\tconst state = useO(node)\n\tconst stateTypeLoadable = useO(typeState)\n\tconst stateType =\n\t\tstateTypeLoadable instanceof Promise ? `Promise` : stateTypeLoadable\n\n\tconst isPrimitive = Boolean(primitiveRefinery.refine(state))\n\n\tconst path = node.family ? [node.family.key, node.family.subKey] : [node.key]\n\n\treturn (\n\t\t<>\n\t\t\t<header>\n\t\t\t\t<main\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconsole.log(node, getFromStore(store, node))\n\t\t\t\t\t}}\n\t\t\t\t\tonKeyUp={() => {\n\t\t\t\t\t\tconsole.log(node, getFromStore(store, node))\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\tisOpen={isOpen && !isPrimitive}\n\t\t\t\t\t\ttestid={`open-close-state-${node.key}`}\n\t\t\t\t\t\tonShiftClick={() => {\n\t\t\t\t\t\t\tactUponStore(store, openCloseAllTX, arbitrary())(path, isOpen)\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t\tdisabled={isPrimitive}\n\t\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<footer>\n\t\t\t\t\t{isPrimitive ? (\n\t\t\t\t\t\t<StoreEditor token={node} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"json_viewer\">{JSON.stringify(state)}</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{dispose ? (\n\t\t\t\t\t\t<DEFAULT_JSON_EDITOR_COMPONENTS.Button\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tdispose?.()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttestid={`${node.key}-dispose`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DEFAULT_JSON_EDITOR_COMPONENTS.DeleteIcon />\n\t\t\t\t\t\t</DEFAULT_JSON_EDITOR_COMPONENTS.Button>\n\t\t\t\t\t) : null}\n\t\t\t\t</footer>\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, openCloseAllTX, store } =\n\t\tuseContext(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<main>\n\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\t\ttestid={`open-close-state-family-${node.key}`}\n\t\t\t\t\t\tonShiftClick={() => {\n\t\t\t\t\t\t\tactUponStore(\n\t\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\t\topenCloseAllTX,\n\t\t\t\t\t\t\t\tarbitrary(),\n\t\t\t\t\t\t\t)([node.key], isOpen)\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t/>\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, [node.key, key])}\n\t\t\t\t\t\t\ttypeState={findInStore(store, typeSelectors, childNode.key)}\n\t\t\t\t\t\t\tdispose={() => {\n\t\t\t\t\t\t\t\tdisposeFromStore(store, childNode)\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: 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<Loadable<string>>\n\tdispose?: () => void\n}> = ({ node, isOpenState, typeState, dispose }) => {\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\tdispose={dispose}\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: AtomToken<WritableTokenIndex<ReadableToken<unknown>>>\n}> = ({ tokenIndex }) => {\n\tconst tokenIds = useO(tokenIndex)\n\n\tconst { typeSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\tconst statesName = tokenIndex.key.includes(`Atom`) ? `atoms` : `selectors`\n\n\treturn (\n\t\t<article className=\"index state_index\" data-testid=\"state-index\">\n\t\t\t{tokenIds.size === 0 ? (\n\t\t\t\t<p className=\"index-empty-state\">(no {statesName})</p>\n\t\t\t) : (\n\t\t\t\t[...tokenIds.entries()].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\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\t: JSON.stringify(param)}\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.length === 0 ? (\n\t\t\t\t<p className=\"index-empty-state\">(no timelines)</p>\n\t\t\t) : (\n\t\t\t\ttokenIds\n\t\t\t\t\t.filter((token) => !token.key.startsWith(`👁🗨`))\n\t\t\t\t\t.map((token) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TimelineLog\n\t\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, [token.key])}\n\t\t\t\t\t\t\t\ttimelineState={findInStore(store, timelineSelectors, token.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)}\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<main>\n\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\t\ttestid={`open-close-transaction-${token.key}`}\n\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t/>\n\t\t\t\t\t<h2>{token.key}</h2>\n\t\t\t\t</main>\n\t\t\t\t<span className=\"detail length\">({log.length})</span>\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.length === 0 ? (\n\t\t\t\t<p className=\"index-empty-state\">(no transactions)</p>\n\t\t\t) : (\n\t\t\t\ttokenIds\n\t\t\t\t\t.filter((token) => !token.key.startsWith(`🔍`))\n\t\t\t\t\t.map((token) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TransactionLog\n\t\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, [token.key])}\n\t\t\t\t\t\t\t\tlogState={findInStore(store, transactionLogSelectors, token.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)}\n\t\t</article>\n\t)\n}\n","import \"./devtools.css\"\n\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport { LayoutGroup, motion } 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<{ hideByDefault?: boolean }> = ({\n\thideByDefault = false,\n}) => {\n\tconst store = useContext(StoreContext)\n\treturn (\n\t\t<DevtoolsContext.Provider value={attachDevtoolsStates(store, hideByDefault)}>\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\tdevtoolsAreHiddenAtom,\n\t\tdevtoolsAreOpenAtom,\n\t\tdevtoolsViewSelectionAtom,\n\t\tdevtoolsViewOptionsAtom,\n\t} = useContext(DevtoolsContext)\n\n\tconst devtoolsAreHidden = useO(devtoolsAreHiddenAtom)\n\n\tconst setDevtoolsAreOpen = useI(devtoolsAreOpenAtom)\n\tconst devtoolsAreOpen = useO(devtoolsAreOpenAtom)\n\tconst setDevtoolsView = useI(devtoolsViewSelectionAtom)\n\tconst devtoolsView = useO(devtoolsViewSelectionAtom)\n\tconst devtoolsViewOptions = useO(devtoolsViewOptionsAtom)\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\tpointerEvents: `none`,\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{devtoolsAreHidden ? null : (\n\t\t\t\t<motion.main\n\t\t\t\t\tdrag\n\t\t\t\t\tdragConstraints={constraintsRef}\n\t\t\t\t\tdata-css=\"atom_io_devtools\"\n\t\t\t\t\tdata-testid=\"devtools\"\n\t\t\t\t\ttransition={{ type: `spring`, bounce: 0.25 }}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\tdevtoolsAreOpen\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tbackgroundColor: `#0000`,\n\t\t\t\t\t\t\t\t\tborderColor: `#0000`,\n\t\t\t\t\t\t\t\t\tmaxHeight: 28,\n\t\t\t\t\t\t\t\t\tmaxWidth: 33,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{devtoolsAreOpen ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<motion.header>\n\t\t\t\t\t\t\t\t<h1>atom.io</h1>\n\t\t\t\t\t\t\t\t<nav>\n\t\t\t\t\t\t\t\t\t{devtoolsViewOptions.map((viewOption) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={viewOption}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-testid={`view-${viewOption}`}\n\t\t\t\t\t\t\t\t\t\t\tclassName={viewOption === devtoolsView ? `active` : ``}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetDevtoolsView(viewOption)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={viewOption === devtoolsView}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{viewOption}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t</motion.header>\n\t\t\t\t\t\t\t<motion.main>\n\t\t\t\t\t\t\t\t<LayoutGroup>\n\t\t\t\t\t\t\t\t\t{devtoolsView === `atoms` ? (\n\t\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={atomIndex} />\n\t\t\t\t\t\t\t\t\t) : devtoolsView === `selectors` ? (\n\t\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={selectorIndex} />\n\t\t\t\t\t\t\t\t\t) : devtoolsView === `transactions` ? (\n\t\t\t\t\t\t\t\t\t\t<TransactionIndex />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<TimelineIndex />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</LayoutGroup>\n\t\t\t\t\t\t\t</motion.main>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<footer>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonMouseDown={() => (mouseHasMoved.current = false)}\n\t\t\t\t\t\t\tonMouseMove={() => (mouseHasMoved.current = true)}\n\t\t\t\t\t\t\tonMouseUp={() => {\n\t\t\t\t\t\t\t\tif (!mouseHasMoved.current) {\n\t\t\t\t\t\t\t\t\tsetDevtoolsAreOpen((open) => !open)\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\t\t\t🔍\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</footer>\n\t\t\t\t</motion.main>\n\t\t\t)}\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) | undefined\n\tonShiftClick?: (\n\t\tevent: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n\t) => boolean\n\tdisabled?: boolean\n\ttestid: string\n}>","button: {\n\tOpenClose: typeof OpenClose\n}","DefaultFallback: FC<FallbackProps>","props: ErrorBoundaryProps","error: Error","errorInfo: ErrorInfo","DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents","store: Store","openCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>","states:\n\t\t\t\t| WritableTokenIndex<AtomToken<unknown>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown>>","value: unknown","segments: (number | string)[]","DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\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","next: T","newType: JsonTypeName","sortFn?: (a: string, b: string) => number","useO","useI","key: keyof T","SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n>","StateEditor: FC<{\n\ttoken: WritableToken<unknown>\n}>","useI","useO","ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}>","StoreEditor: FC<{\n\ttoken: ReadonlySelectorToken<unknown> | WritableToken<unknown>\n}>","StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<Loadable<string>>\n\tdispose?: (() => void) | undefined\n}>","useI","useO","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<Loadable<string>>\n\tdispose?: () => void\n}>","StateIndex: FC<{\n\ttokenIndex: AtomToken<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: ReadonlyPureSelectorToken<Timeline<any>>\n}>","useO","useI","TimelineIndex: FC","TransactionLog: FC<{\n\ttoken: TransactionToken<Func>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<TransactionUpdate<Func>[]>\n}>","useO","useI","TransactionIndex: FC","AtomIODevtools: React.FC<{ hideByDefault?: boolean }>","useO","useI"],"sources":["../../src/react-devtools/Button.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/store.ts","../../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/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/array-editor.tsx","../../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/json-editor/developer-interface.tsx","../../src/react-devtools/StateEditor.tsx","../../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) | undefined\n\tonShiftClick?: (\n\t\tevent: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n\t) => boolean\n\tdisabled?: boolean\n\ttestid: string\n}> = ({ isOpen, setIsOpen, onShiftClick, 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={(event) => {\n\t\t\t\tif (onShiftClick && event.shiftKey) {\n\t\t\t\t\tif (!onShiftClick(event)) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetIsOpen?.((prev) => !prev)\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t>\n\t\t\t<span className=\"json_editor_icon json_editor_carat\">▶</span>\n\t\t</button>\n\t)\n}\n\nexport const button: {\n\tOpenClose: typeof OpenClose\n} = {\n\tOpenClose,\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\tresetErrorState?: () => 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\tAddIcon: 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\">×</span>\n\t),\n\t// big plus\n\tAddIcon: () => <span className=\"json_editor_icon json_editor_add\">+</span>,\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 {\n\tAtomToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorToken,\n\tTransactionToken,\n} from \"atom.io\"\nimport {\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n\tcreateTransaction,\n\ttype Store,\n} from \"atom.io/internal\"\nimport type {\n\tIntrospectionStates,\n\tWritableTokenIndex,\n} from \"atom.io/introspection\"\nimport { attachIntrospectionStates, isPlainObject } 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\tdevtoolsAreHiddenAtom: RegularAtomToken<boolean>\n\tdevtoolsAreOpenAtom: RegularAtomToken<boolean>\n\tdevtoolsViewSelectionAtom: RegularAtomToken<DevtoolsView>\n\tdevtoolsViewOptionsAtom: RegularAtomToken<DevtoolsView[]>\n\tviewIsOpenAtoms: RegularAtomFamilyToken<boolean, readonly (number | string)[]>\n\topenCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>\n}\n\nexport function attachDevtoolsStates(\n\tstore: Store,\n\thideByDefault = false,\n): DevtoolsStates & IntrospectionStates & { store: Store } {\n\tconst introspectionStates = attachIntrospectionStates(store)\n\n\tconst devtoolsAreHiddenAtom = createStandaloneAtom<boolean>(store, {\n\t\tkey: `🔍 Devtools Are Hidden`,\n\t\tdefault: hideByDefault,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\tpersistSync(window.localStorage, JSON, `🔍 Devtools Are Hidden`),\n\t\t\t\t\t\t({ setSelf }) => {\n\t\t\t\t\t\t\twindow.addEventListener(`keydown`, (e) => {\n\t\t\t\t\t\t\t\tif (e.ctrlKey && e.shiftKey && e.key.toLowerCase() === `a`) {\n\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\tsetSelf((state) => !state)\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\t],\n\t})\n\n\tconst devtoolsAreOpenAtom = 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 devtoolsViewSelectionAtom = 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 devtoolsViewOptionsAtom = 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<\n\t\tboolean,\n\t\treadonly (number | string)[]\n\t>(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, `view-is-open:${key.join()}`)],\n\t})\n\n\tconst openCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t> = createTransaction<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>(store, {\n\t\tkey: `🔍 Open Close All`,\n\t\tdo: ({ get, set }, path, current) => {\n\t\t\tconst currentView = get(devtoolsViewSelectionAtom)\n\t\t\tlet states:\n\t\t\t\t| WritableTokenIndex<AtomToken<unknown>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown>>\n\t\t\tswitch (currentView) {\n\t\t\t\tcase `atoms`:\n\t\t\t\t\tstates = get(introspectionStates.atomIndex)\n\t\t\t\t\tbreak\n\t\t\t\tcase `selectors`:\n\t\t\t\t\tstates = get(introspectionStates.selectorIndex)\n\t\t\t\t\tbreak\n\t\t\t\tcase `transactions`:\n\t\t\t\tcase `timelines`:\n\t\t\t\t\treturn\n\t\t\t}\n\n\t\t\tswitch (path.length) {\n\t\t\t\tcase 1:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (const [key] of states) {\n\t\t\t\t\t\t\tset(viewIsOpenAtoms, [key], !current)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\tdefault: {\n\t\t\t\t\tconst item = states.get(path[0] as string)\n\t\t\t\t\tlet value: unknown\n\t\t\t\t\tlet segments: (number | string)[]\n\t\t\t\t\tif (item) {\n\t\t\t\t\t\tif (`familyMembers` in item) {\n\t\t\t\t\t\t\tif (path.length === 2) {\n\t\t\t\t\t\t\t\tfor (const [subKey] of item.familyMembers) {\n\t\t\t\t\t\t\t\t\tset(viewIsOpenAtoms, [path[0], subKey], !current)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: fine here\n\t\t\t\t\t\t\tconst token = item.familyMembers.get(path[1] as string)!\n\t\t\t\t\t\t\tvalue = get(token)\n\t\t\t\t\t\t\tsegments = path.slice(2, -1)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue = get(item)\n\t\t\t\t\t\t\tsegments = path.slice(1, -1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const segment of segments) {\n\t\t\t\t\t\t\tif (value && typeof value === `object`) {\n\t\t\t\t\t\t\t\tvalue = value[segment as keyof typeof value]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst head = path.slice(0, -1)\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t\t\t\t\tset(viewIsOpenAtoms, [...head, i], !current)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isPlainObject(value)) {\n\t\t\t\t\t\t\t\tfor (const key of Object.keys(value)) {\n\t\t\t\t\t\t\t\t\tset(viewIsOpenAtoms, [...head, key], !current)\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\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t})\n\n\treturn {\n\t\t...introspectionStates,\n\t\tdevtoolsAreHiddenAtom,\n\t\tdevtoolsAreOpenAtom,\n\t\tdevtoolsViewSelectionAtom,\n\t\tdevtoolsViewOptionsAtom,\n\t\tviewIsOpenAtoms,\n\t\topenCloseAllTX,\n\t\tstore,\n\t}\n}\n\nexport const DevtoolsContext: Context<\n\tDevtoolsStates & IntrospectionStates & { store: Store }\n> = createContext({})\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 { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { jsonRefinery } from \"atom.io/introspection\"\nimport type { JsonTypes } from \"atom.io/json\"\nimport { isJson } from \"atom.io/json\"\nimport {\n\ttype CSSProperties,\n\ttype FC,\n\ttype ReactElement,\n\tuseContext,\n} from \"react\"\n\nimport { button } from \"../Button\"\nimport { ElasticInput } from \"../elastic-input\"\nimport { DevtoolsContext } from \"../store\"\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\tisOpen?: boolean\n\tsetIsOpen?: (newValue: boolean) => void\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\tComponents,\n\tisOpen,\n\tsetIsOpen,\n\ttestid,\n}: JsonEditorProps_INTERNAL<T>): ReactElement | null => {\n\tconst { openCloseAllTX, store } = useContext(DevtoolsContext)\n\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\tconst dataIsTree = refined.type === `array` || refined.type === `object`\n\tconst dataIsExpandable = dataIsTree && isOpen !== undefined && setIsOpen\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<header>\n\t\t\t\t\t<main>\n\t\t\t\t\t\t{remove || dataIsExpandable ? (\n\t\t\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\t\t\tisOpen={isOpen ?? false}\n\t\t\t\t\t\t\t\ttestid={`${testid}-open-close`}\n\t\t\t\t\t\t\t\tonShiftClick={() => {\n\t\t\t\t\t\t\t\t\tactUponStore(store, openCloseAllTX, arbitrary())(path, isOpen)\n\t\t\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t\t\t\tdisabled={!dataIsExpandable}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{rename && (\n\t\t\t\t\t\t\t<Components.KeyWrapper>\n\t\t\t\t\t\t\t\t<ElasticInput\n\t\t\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\t\trename(e.target.value)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tdata-testid={`${testid}-rename`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Components.KeyWrapper>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{dataIsTree ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{isOpen !== undefined && setIsOpen ? (\n\t\t\t\t\t\t\t\t\t<span className=\"json_viewer\">{JSON.stringify(data)}</span>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t{recast ? (\n\t\t\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\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\t}}\n\t\t\t\t\t\t\t\t\t\tvalue={refined.type}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tdata-testid={`${testid}-recast`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{Object.keys(SubEditors).map((type) => (\n\t\t\t\t\t\t\t\t\t\t\t<option key={type} value={type}>\n\t\t\t\t\t\t\t\t\t\t\t\t{type}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<SubEditor\n\t\t\t\t\t\t\t\t\tdata={refined.data as never}\n\t\t\t\t\t\t\t\t\tset={set}\n\t\t\t\t\t\t\t\t\tremove={remove}\n\t\t\t\t\t\t\t\t\trename={rename}\n\t\t\t\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{recast && dataIsJson ? (\n\t\t\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t: (e) => {\n\t\t\t\t\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\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tvalue={refined.type}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tdata-testid={`${testid}-recast`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{Object.keys(SubEditors).map((type) => (\n\t\t\t\t\t\t\t\t\t\t\t<option key={type} value={type}>\n\t\t\t\t\t\t\t\t\t\t\t\t{type}\n\t\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</main>\n\t\t\t\t\t{remove ? (\n\t\t\t\t\t\t<Components.Button\n\t\t\t\t\t\t\tdisabled={disabled}\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\ttestid={`${testid}-delete`}\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) : null}\n\t\t\t\t</header>\n\n\t\t\t\t{dataIsTree && isOpen !== false ? (\n\t\t\t\t\t<SubEditor\n\t\t\t\t\t\tdata={refined.data as never}\n\t\t\t\t\t\tset={set}\n\t\t\t\t\t\tremove={remove}\n\t\t\t\t\t\trename={rename}\n\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t/>\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\"\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 (_) {\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 = <\n\tT extends Json.Tree.Array | Json.Tree.Object,\n>(\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\tlet next: T\n\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\tconst copy = [...data]\n\t\t\t\t\t\tcopy.splice(key as number, 1)\n\t\t\t\t\t\tnext = copy as unknown as T\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst { [key]: _, ...rest } = data\n\t\t\t\t\t\tnext = rest as T\n\t\t\t\t\t}\n\t\t\t\t\treturn next\n\t\t\t\t})\n\t\t\t},\n\t\t]),\n\t)\n\nexport const makePropertyRecasters = <\n\tT extends Json.Tree.Array | Json.Tree.Object,\n>(\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\tlet next: T\n\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\tconst copy = [...data]\n\t\t\t\t\t\tcopy[key as number] = castToJson(value)[newType]\n\t\t\t\t\t\tnext = copy as unknown as T\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext = {\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\t[key]: castToJson(value)[newType],\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn next\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 { RegularAtomToken } from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Json, JsonTypes } from \"atom.io/json\"\nimport { JSON_DEFAULTS } from \"atom.io/json\"\nimport { useI, useO } from \"atom.io/react\"\nimport { DevtoolsContext } from \"atom.io/react-devtools/store\"\nimport { type ReactElement, useContext } from \"react\"\n\nimport type { JsonEditorComponents, SetterOrUpdater } from \"..\"\nimport type { JsonEditorProps_INTERNAL } from \"../json-editor-internal\"\nimport { JsonEditor_INTERNAL } from \"../json-editor-internal\"\nimport { makeElementSetters } from \"./utilities/array-elements\"\nimport {\n\tmakePropertyRecasters,\n\tmakePropertyRemovers,\n} from \"./utilities/object-properties\"\n\ntype ArrayElementProps = {\n\tpath: ReadonlyArray<number | string>\n\tisReadonly: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden: (path: ReadonlyArray<number | string>) => boolean\n\tdata: unknown\n\tset: SetterOrUpdater<Json.Tree.Array>\n\tremove: (() => void) | undefined\n\trecast: (newType: keyof JsonTypes) => void\n\tComponents: JsonEditorComponents\n\ttestid?: string | undefined\n\tviewIsOpenAtom: RegularAtomToken<boolean, readonly (number | string)[]>\n}\nconst ArrayElement = ({\n\tpath,\n\tisReadonly,\n\tisHidden,\n\tdata,\n\tset,\n\tremove,\n\trecast,\n\tComponents,\n\ttestid,\n\tviewIsOpenAtom,\n}: ArrayElementProps): ReactElement => {\n\tconst index = path[path.length - 1]\n\tconst viewIsOpen = useO(viewIsOpenAtom)\n\tconst setViewIsOpen = useI(viewIsOpenAtom)\n\n\treturn (\n\t\t<JsonEditor_INTERNAL\n\t\t\tpath={path}\n\t\t\tname={`${index}`}\n\t\t\tisReadonly={isReadonly}\n\t\t\tisHidden={isHidden}\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\tremove={remove}\n\t\t\trecast={recast}\n\t\t\tclassName=\"json_editor_element\"\n\t\t\tComponents={Components}\n\t\t\tisOpen={viewIsOpen}\n\t\t\tsetIsOpen={setViewIsOpen}\n\t\t\ttestid={`${testid}-element-${index}`}\n\t\t/>\n\t)\n}\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 { viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\tconst disabled = isReadonly(path)\n\n\tconst setElement = makeElementSetters(data, set)\n\tconst removeElement = makePropertyRemovers(data, set)\n\tconst recastElement = makePropertyRecasters(data, set)\n\n\treturn (\n\t\t<Components.ArrayWrapper>\n\t\t\t<main className={`json_editor_elements${disabled ? ` readonly` : ``}`}>\n\t\t\t\t{data.map((element, index) => {\n\t\t\t\t\tconst elementPath = [...path, index]\n\t\t\t\t\tconst pathKey = elementPath.join(`,`)\n\t\t\t\t\tconst viewIsOpenAtom = findInStore(store, viewIsOpenAtoms, [\n\t\t\t\t\t\t...path,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t])\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ArrayElement\n\t\t\t\t\t\t\tkey={pathKey}\n\t\t\t\t\t\t\tpath={elementPath}\n\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\tdata={element}\n\t\t\t\t\t\t\tset={setElement[index]}\n\t\t\t\t\t\t\tremove={removeElement[index]}\n\t\t\t\t\t\t\trecast={recastElement[index]}\n\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t\t\tviewIsOpenAtom={viewIsOpenAtom}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</main>\n\t\t\t{!disabled ? (\n\t\t\t\t<footer>\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\ttestid={`${testid}-add-element`}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tset((current) => {\n\t\t\t\t\t\t\t\tconst newData = [...current, JSON_DEFAULTS.string]\n\t\t\t\t\t\t\t\treturn newData\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<Components.AddIcon />\n\t\t\t\t\t</Components.Button>\n\t\t\t\t</footer>\n\t\t\t) : null}\n\t\t</Components.ArrayWrapper>\n\t)\n}\n","import type { RegularAtomToken } from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Json, JsonTypes } from \"atom.io/json\"\nimport { useI } from \"atom.io/react/use-i\"\nimport { useO } from \"atom.io/react/use-o\"\nimport { DevtoolsContext } from \"atom.io/react-devtools/store\"\nimport type { FC, ReactElement } from \"react\"\nimport { useContext, useRef } from \"react\"\n\nimport { ElasticInput } from \"../../elastic-input\"\nimport type { SetterOrUpdater } from \"..\"\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\ntype ObjectPropertyProps = {\n\tpath: ReadonlyArray<number | string>\n\tisReadonly: (path: ReadonlyArray<number | string>) => boolean\n\tisHidden: (path: ReadonlyArray<number | string>) => boolean\n\tdata: unknown\n\tset: SetterOrUpdater<Json.Tree.Object>\n\trename: (newKey: string) => void\n\tremove: (() => void) | undefined\n\trecast: (newType: keyof JsonTypes) => void\n\tComponents: JsonEditorComponents\n\ttestid?: string | undefined\n\tviewIsOpenAtom: RegularAtomToken<boolean, readonly (number | string)[]>\n}\nconst ObjectProperty = ({\n\tpath,\n\tisReadonly,\n\tisHidden,\n\tdata,\n\tset,\n\trename,\n\tremove,\n\trecast,\n\tComponents,\n\ttestid,\n\tviewIsOpenAtom,\n}: ObjectPropertyProps): ReactElement => {\n\tconst key = path[path.length - 1]\n\tconst viewIsOpen = useO(viewIsOpenAtom)\n\tconst setViewIsOpen = useI(viewIsOpenAtom)\n\n\treturn (\n\t\t<JsonEditor_INTERNAL\n\t\t\tpath={path}\n\t\t\tname={`${key}`}\n\t\t\tisReadonly={isReadonly}\n\t\t\tisHidden={isHidden}\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\trename={rename}\n\t\t\tremove={remove}\n\t\t\trecast={recast}\n\t\t\tclassName=\"json_editor_property\"\n\t\t\tComponents={Components}\n\t\t\tisOpen={viewIsOpen}\n\t\t\tsetIsOpen={setViewIsOpen}\n\t\t\ttestid={`${testid}-property-${key}`}\n\t\t/>\n\t)\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 { viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\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<Components.ObjectWrapper>\n\t\t\t<div className={`json_editor_properties${disabled ? ` readonly` : ``}`}>\n\t\t\t\t{Object.keys(data).map((key) => {\n\t\t\t\t\tconst originalKey = stableKeyMap.current[key]\n\t\t\t\t\tconst propertyPath = [...path, key]\n\t\t\t\t\tconst originalPropertyPath = [...path, originalKey]\n\t\t\t\t\tconst stablePathKey = originalPropertyPath.join(`.`)\n\t\t\t\t\tconst viewIsOpenAtom = findInStore(store, viewIsOpenAtoms, [\n\t\t\t\t\t\t...path,\n\t\t\t\t\t\tkey,\n\t\t\t\t\t])\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ObjectProperty\n\t\t\t\t\t\t\tkey={stablePathKey}\n\t\t\t\t\t\t\tpath={propertyPath}\n\t\t\t\t\t\t\tisReadonly={isReadonly}\n\t\t\t\t\t\t\tisHidden={isHidden}\n\t\t\t\t\t\t\tdata={data[key]}\n\t\t\t\t\t\t\tset={setProperty[key]}\n\t\t\t\t\t\t\trename={renameProperty[key]}\n\t\t\t\t\t\t\tremove={removeProperty[key]}\n\t\t\t\t\t\t\trecast={recastProperty[key]}\n\t\t\t\t\t\t\tComponents={Components}\n\t\t\t\t\t\t\ttestid={testid}\n\t\t\t\t\t\t\tviewIsOpenAtom={viewIsOpenAtom}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t{disabled ? null : (\n\t\t\t\t<footer>\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\tdisabled={disabled}\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<Components.AddIcon />\n\t\t\t\t\t</Components.Button>\n\t\t\t\t\t<Components.Button\n\t\t\t\t\t\ttestid={`${testid}-sort-properties`}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsortProperties()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\tSort\n\t\t\t\t\t</Components.Button>\n\t\t\t\t</footer>\n\t\t\t)}\n\t\t</Components.ObjectWrapper>\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\tpath = [],\n\tisReadonly = () => false,\n\tdata,\n\tset,\n\tComponents,\n\ttestid,\n}: JsonEditorProps_INTERNAL<boolean>): ReactElement => (\n\t<Components.BooleanWrapper>\n\t\t<input\n\t\t\tdisabled={isReadonly(path)}\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\tdisabled={isReadonly(path)}\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\treadOnly={isReadonly(path)}\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 { 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\tpath = [],\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={path}\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 { 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\tconst metaPath = token.family\n\t\t? [token.family.key, token.family.subKey]\n\t\t: [token.key]\n\treturn (\n\t\t<JsonEditor\n\t\t\ttestid={`${token.key}-state-editor`}\n\t\t\tdata={data}\n\t\t\tset={set}\n\t\t\tpath={metaPath}\n\t\t/>\n\t)\n}\n\nexport const ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown>\n}> = ({ token }) => {\n\tconst data = useO(token)\n\tconst metaPath = token.family\n\t\t? [token.family.key, token.family.subKey]\n\t\t: [token.key]\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\tpath={metaPath}\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 {\n\tAtomToken,\n\tLoadable,\n\tReadableToken,\n\tReadonlyPureSelectorToken,\n\tRegularAtomToken,\n} from \"atom.io\"\nimport {\n\tactUponStore,\n\tarbitrary,\n\tdisposeFromStore,\n\tfindInStore,\n\tgetFromStore,\n} 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 { DEFAULT_JSON_EDITOR_COMPONENTS } from \"./json-editor\"\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<Loadable<string>>\n\tdispose?: (() => void) | undefined\n}> = ({ node, isOpenState, typeState, dispose }) => {\n\tconst { openCloseAllTX, store } = useContext(DevtoolsContext)\n\n\tconst setIsOpen = useI(isOpenState)\n\tconst isOpen = useO(isOpenState)\n\n\tconst state = useO(node)\n\tconst stateTypeLoadable = useO(typeState)\n\tconst stateType =\n\t\tstateTypeLoadable instanceof Promise ? `Promise` : stateTypeLoadable\n\n\tconst isPrimitive = Boolean(primitiveRefinery.refine(state))\n\n\tconst path = node.family ? [node.family.key, node.family.subKey] : [node.key]\n\n\treturn (\n\t\t<>\n\t\t\t<header>\n\t\t\t\t<main\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconsole.log(node, getFromStore(store, node))\n\t\t\t\t\t}}\n\t\t\t\t\tonKeyUp={() => {\n\t\t\t\t\t\tconsole.log(node, getFromStore(store, node))\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\tisOpen={isOpen && !isPrimitive}\n\t\t\t\t\t\ttestid={`open-close-state-${node.key}`}\n\t\t\t\t\t\tonShiftClick={() => {\n\t\t\t\t\t\t\tactUponStore(store, openCloseAllTX, arbitrary())(path, isOpen)\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t\tdisabled={isPrimitive}\n\t\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<footer>\n\t\t\t\t\t{isPrimitive ? (\n\t\t\t\t\t\t<StoreEditor token={node} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"json_viewer\">{JSON.stringify(state)}</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{dispose ? (\n\t\t\t\t\t\t<DEFAULT_JSON_EDITOR_COMPONENTS.Button\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tdispose?.()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttestid={`${node.key}-dispose`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DEFAULT_JSON_EDITOR_COMPONENTS.DeleteIcon />\n\t\t\t\t\t\t</DEFAULT_JSON_EDITOR_COMPONENTS.Button>\n\t\t\t\t\t) : null}\n\t\t\t\t</footer>\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, openCloseAllTX, store } =\n\t\tuseContext(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<main>\n\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\t\ttestid={`open-close-state-family-${node.key}`}\n\t\t\t\t\t\tonShiftClick={() => {\n\t\t\t\t\t\t\tactUponStore(\n\t\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\t\topenCloseAllTX,\n\t\t\t\t\t\t\t\tarbitrary(),\n\t\t\t\t\t\t\t)([node.key], isOpen)\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t/>\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, [node.key, key])}\n\t\t\t\t\t\t\ttypeState={findInStore(store, typeSelectors, childNode.key)}\n\t\t\t\t\t\t\tdispose={() => {\n\t\t\t\t\t\t\t\tdisposeFromStore(store, childNode)\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: 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<Loadable<string>>\n\tdispose?: () => void\n}> = ({ node, isOpenState, typeState, dispose }) => {\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\tdispose={dispose}\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: AtomToken<WritableTokenIndex<ReadableToken<unknown>>>\n}> = ({ tokenIndex }) => {\n\tconst tokenIds = useO(tokenIndex)\n\n\tconst { typeSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext)\n\tconst statesName = tokenIndex.key.includes(`Atom`) ? `atoms` : `selectors`\n\n\treturn (\n\t\t<article className=\"index state_index\" data-testid=\"state-index\">\n\t\t\t{tokenIds.size === 0 ? (\n\t\t\t\t<p className=\"index-empty-state\">(no {statesName})</p>\n\t\t\t) : (\n\t\t\t\t[...tokenIds.entries()].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\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\t: JSON.stringify(param)}\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.length === 0 ? (\n\t\t\t\t<p className=\"index-empty-state\">(no timelines)</p>\n\t\t\t) : (\n\t\t\t\ttokenIds\n\t\t\t\t\t.filter((token) => !token.key.startsWith(`👁🗨`))\n\t\t\t\t\t.map((token) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TimelineLog\n\t\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, [token.key])}\n\t\t\t\t\t\t\t\ttimelineState={findInStore(store, timelineSelectors, token.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)}\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<main>\n\t\t\t\t\t<button.OpenClose\n\t\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\t\ttestid={`open-close-transaction-${token.key}`}\n\t\t\t\t\t\tsetIsOpen={setIsOpen}\n\t\t\t\t\t/>\n\t\t\t\t\t<h2>{token.key}</h2>\n\t\t\t\t</main>\n\t\t\t\t<span className=\"detail length\">({log.length})</span>\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.length === 0 ? (\n\t\t\t\t<p className=\"index-empty-state\">(no transactions)</p>\n\t\t\t) : (\n\t\t\t\ttokenIds\n\t\t\t\t\t.filter((token) => !token.key.startsWith(`🔍`))\n\t\t\t\t\t.map((token) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TransactionLog\n\t\t\t\t\t\t\t\tkey={token.key}\n\t\t\t\t\t\t\t\ttoken={token}\n\t\t\t\t\t\t\t\tisOpenState={findInStore(store, viewIsOpenAtoms, [token.key])}\n\t\t\t\t\t\t\t\tlogState={findInStore(store, transactionLogSelectors, token.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)}\n\t\t</article>\n\t)\n}\n","import \"./devtools.css\"\n\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport { LayoutGroup, motion } 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<{ hideByDefault?: boolean }> = ({\n\thideByDefault = false,\n}) => {\n\tconst store = useContext(StoreContext)\n\treturn (\n\t\t<DevtoolsContext.Provider value={attachDevtoolsStates(store, hideByDefault)}>\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\tdevtoolsAreHiddenAtom,\n\t\tdevtoolsAreOpenAtom,\n\t\tdevtoolsViewSelectionAtom,\n\t\tdevtoolsViewOptionsAtom,\n\t} = useContext(DevtoolsContext)\n\n\tconst devtoolsAreHidden = useO(devtoolsAreHiddenAtom)\n\n\tconst setDevtoolsAreOpen = useI(devtoolsAreOpenAtom)\n\tconst devtoolsAreOpen = useO(devtoolsAreOpenAtom)\n\tconst setDevtoolsView = useI(devtoolsViewSelectionAtom)\n\tconst devtoolsView = useO(devtoolsViewSelectionAtom)\n\tconst devtoolsViewOptions = useO(devtoolsViewOptionsAtom)\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\tpointerEvents: `none`,\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{devtoolsAreHidden ? null : (\n\t\t\t\t<motion.main\n\t\t\t\t\tdrag\n\t\t\t\t\tdragConstraints={constraintsRef}\n\t\t\t\t\tdata-css=\"atom_io_devtools\"\n\t\t\t\t\tdata-testid=\"devtools\"\n\t\t\t\t\ttransition={{ type: `spring`, bounce: 0.25 }}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\tdevtoolsAreOpen\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tbackgroundColor: `#0000`,\n\t\t\t\t\t\t\t\t\tborderColor: `#0000`,\n\t\t\t\t\t\t\t\t\tmaxHeight: 28,\n\t\t\t\t\t\t\t\t\tmaxWidth: 33,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{devtoolsAreOpen ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<motion.header>\n\t\t\t\t\t\t\t\t<h1>atom.io</h1>\n\t\t\t\t\t\t\t\t<nav>\n\t\t\t\t\t\t\t\t\t{devtoolsViewOptions.map((viewOption) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={viewOption}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-testid={`view-${viewOption}`}\n\t\t\t\t\t\t\t\t\t\t\tclassName={viewOption === devtoolsView ? `active` : ``}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetDevtoolsView(viewOption)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={viewOption === devtoolsView}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{viewOption}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t</motion.header>\n\t\t\t\t\t\t\t<motion.main>\n\t\t\t\t\t\t\t\t<LayoutGroup>\n\t\t\t\t\t\t\t\t\t{devtoolsView === `atoms` ? (\n\t\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={atomIndex} />\n\t\t\t\t\t\t\t\t\t) : devtoolsView === `selectors` ? (\n\t\t\t\t\t\t\t\t\t\t<StateIndex tokenIndex={selectorIndex} />\n\t\t\t\t\t\t\t\t\t) : devtoolsView === `transactions` ? (\n\t\t\t\t\t\t\t\t\t\t<TransactionIndex />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<TimelineIndex />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</LayoutGroup>\n\t\t\t\t\t\t\t</motion.main>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<footer>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonMouseDown={() => (mouseHasMoved.current = false)}\n\t\t\t\t\t\t\tonMouseMove={() => (mouseHasMoved.current = true)}\n\t\t\t\t\t\t\tonMouseUp={() => {\n\t\t\t\t\t\t\t\tif (!mouseHasMoved.current) {\n\t\t\t\t\t\t\t\t\tsetDevtoolsAreOpen((open) => !open)\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\t\t\t🔍\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</footer>\n\t\t\t\t</motion.main>\n\t\t\t)}\n\t\t</span>\n\t)\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atom.io",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.20",
|
|
4
4
|
"description": "Composable and testable reactive data library.",
|
|
5
5
|
"homepage": "https://atom.io.fyi",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"@types/estree": "1.0.8",
|
|
71
71
|
"@types/http-proxy": "1.17.16",
|
|
72
72
|
"@types/npmlog": "7.0.0",
|
|
73
|
-
"@types/react": "19.1.
|
|
73
|
+
"@types/react": "19.1.9",
|
|
74
74
|
"@types/tmp": "0.2.6",
|
|
75
75
|
"@typescript-eslint/parser": "8.38.0",
|
|
76
76
|
"@typescript-eslint/rule-tester": "8.38.0",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"@vitest/ui": "3.2.4",
|
|
80
80
|
"concurrently": "9.2.0",
|
|
81
81
|
"drizzle-kit": "0.31.4",
|
|
82
|
-
"drizzle-orm": "0.44.
|
|
82
|
+
"drizzle-orm": "0.44.4",
|
|
83
83
|
"eslint": "9.32.0",
|
|
84
84
|
"happy-dom": "18.0.1",
|
|
85
85
|
"http-proxy": "1.18.1",
|