atom.io 0.40.6 ā 0.40.8
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/README.md +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/data/index.js +1 -2
- package/dist/data/index.js.map +1 -1
- package/dist/employ-socket-D6wgByWh.js +12 -0
- package/dist/employ-socket-D6wgByWh.js.map +1 -0
- package/dist/eslint-plugin/index.js.map +1 -1
- package/dist/has-role-CMlaUlaf.js +1133 -0
- package/dist/has-role-CMlaUlaf.js.map +1 -0
- package/dist/internal/index.d.ts +248 -248
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +590 -1803
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +1 -1
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/introspection/index.js +13 -32
- package/dist/introspection/index.js.map +1 -1
- package/dist/is-fn-DY1wZ-md.js +10 -0
- package/dist/is-fn-DY1wZ-md.js.map +1 -0
- package/dist/json/index.d.ts.map +1 -1
- package/dist/json/index.js.map +1 -1
- package/dist/main/index.d.ts +33 -33
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +3 -4
- package/dist/main/index.js.map +1 -1
- package/dist/mutex-store-CSvxY9i3.js +11 -0
- package/dist/mutex-store-CSvxY9i3.js.map +1 -0
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.d.ts.map +1 -1
- package/dist/react-devtools/index.js +9 -11
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime/index.d.ts +7 -15
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +4 -35
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +6 -9
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +96 -88
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +17 -13
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +39 -50
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +83 -84
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +604 -543
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/realtime-testing/index.d.ts +5 -4
- package/dist/realtime-testing/index.d.ts.map +1 -1
- package/dist/realtime-testing/index.js +35 -22
- package/dist/realtime-testing/index.js.map +1 -1
- package/dist/shared-room-store-BfW3nWif.js +31 -0
- package/dist/shared-room-store-BfW3nWif.js.map +1 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
- package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
- package/dist/transceivers/set-rtx/index.js +4 -8
- package/dist/transceivers/set-rtx/index.js.map +1 -1
- package/dist/web/index.d.ts +3 -3
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +4 -3
- package/dist/web/index.js.map +1 -1
- package/package.json +13 -13
- package/src/internal/atom/create-regular-atom.ts +5 -4
- package/src/internal/atom/dispose-atom.ts +7 -2
- package/src/internal/atom/has-role.ts +3 -3
- package/src/internal/caching.ts +4 -2
- package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
- package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
- package/src/internal/families/create-regular-atom-family.ts +2 -1
- package/src/internal/families/create-writable-held-selector-family.ts +2 -1
- package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
- package/src/internal/families/dispose-from-store.ts +4 -4
- package/src/internal/families/find-in-store.ts +10 -10
- package/src/internal/families/get-family-of-token.ts +2 -2
- package/src/internal/families/index.ts +1 -0
- package/src/internal/families/mint-in-store.ts +54 -19
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/get-fallback.ts +2 -2
- package/src/internal/get-state/get-from-store.ts +5 -5
- package/src/internal/get-state/read-or-compute-value.ts +1 -1
- package/src/internal/get-state/reduce-reference.ts +8 -6
- package/src/internal/index.ts +2 -220
- package/src/internal/molecule.ts +1 -2
- package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
- package/src/internal/mutable/create-mutable-atom.ts +4 -2
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +2 -1
- package/src/internal/mutable/tracker.ts +71 -59
- package/src/internal/safe-compute.ts +1 -1
- package/src/internal/selector/create-readonly-held-selector.ts +2 -1
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
- package/src/internal/selector/create-writable-held-selector.ts +2 -1
- package/src/internal/selector/create-writable-pure-selector.ts +2 -1
- package/src/internal/selector/dispose-selector.ts +3 -2
- package/src/internal/selector/register-selector.ts +8 -5
- package/src/internal/selector/trace-selector-atoms.ts +2 -1
- package/src/internal/set-state/dispatch-state-update.ts +3 -2
- package/src/internal/set-state/evict-downstream.ts +1 -1
- package/src/internal/set-state/operate-on-store.ts +16 -22
- package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
- package/src/internal/set-state/reset-in-store.ts +5 -5
- package/src/internal/set-state/set-atom-or-selector.ts +2 -2
- package/src/internal/set-state/set-atom.ts +4 -2
- package/src/internal/set-state/set-into-store.ts +21 -39
- package/src/internal/set-state/set-selector.ts +3 -2
- package/src/internal/state-types.ts +228 -0
- package/src/internal/store/deposit.ts +4 -4
- package/src/internal/store/index.ts +0 -1
- package/src/internal/store/store.ts +9 -9
- package/src/internal/store/withdraw.ts +4 -4
- package/src/internal/subscribe/recall-state.ts +1 -1
- package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
- package/src/internal/subscribe/subscribe-to-state.ts +9 -0
- package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
- package/src/internal/transaction/build-transaction.ts +3 -2
- package/src/internal/transaction/index.ts +1 -23
- package/src/internal/transaction/is-root-store.ts +4 -1
- package/src/internal/transaction/transaction-meta-progress.ts +22 -0
- package/src/main/atom.ts +1 -2
- package/src/main/find-state.ts +5 -5
- package/src/main/get-state.ts +4 -4
- package/src/main/realm.ts +2 -2
- package/src/main/set-state.ts +10 -10
- package/src/react/parse-state-overloads.ts +3 -3
- package/src/react/use-i.ts +6 -4
- package/src/react/use-loadable.ts +4 -10
- package/src/react/use-o.ts +6 -4
- package/src/react-devtools/store.ts +6 -6
- package/src/realtime/index.ts +1 -0
- package/src/realtime/mutex-store.ts +11 -0
- package/src/realtime/realtime-continuity.ts +1 -5
- package/src/realtime-client/index.ts +0 -1
- package/src/realtime-client/pull-atom-family-member.ts +14 -17
- package/src/realtime-client/pull-atom.ts +1 -1
- package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
- package/src/realtime-client/pull-selector-family-member.ts +8 -35
- package/src/realtime-client/pull-selector-roots.ts +90 -0
- package/src/realtime-client/pull-selector.ts +2 -27
- package/src/realtime-client/push-state.ts +33 -5
- package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
- package/src/realtime-react/index.ts +2 -2
- package/src/realtime-react/realtime-context.tsx +9 -5
- package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
- package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
- package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
- package/src/realtime-react/use-push.ts +7 -3
- package/src/realtime-react/use-realtime-service.ts +11 -11
- package/src/realtime-react/use-single-effect.ts +11 -14
- package/src/realtime-server/{realtime-server-stores/server-sync-store.ts ā continuity/continuity-store.ts} +2 -27
- package/src/realtime-server/continuity/provide-continuity.ts +50 -0
- package/src/realtime-server/continuity/{subscribe-to-continuity-actions.ts ā provide-outcomes.ts} +15 -13
- package/src/realtime-server/continuity/{subscribe-to-continuity-perpectives.ts ā provide-perspectives.ts} +10 -8
- package/src/realtime-server/continuity/{prepare-to-send-initial-payload.ts ā provide-startup-payloads.ts} +6 -4
- package/src/realtime-server/continuity/receive-action-requests.ts +68 -0
- package/src/realtime-server/continuity/track-acknowledgements.ts +46 -0
- package/src/realtime-server/employ-socket.ts +14 -0
- package/src/realtime-server/index.ts +3 -22
- package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
- package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
- package/src/realtime-server/ipc-sockets/parent-socket.ts +98 -69
- package/src/realtime-server/realtime-family-provider.ts +78 -29
- package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
- package/src/realtime-server/realtime-mutable-provider.ts +30 -22
- package/src/realtime-server/realtime-server-stores/index.ts +0 -2
- package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
- package/src/realtime-server/realtime-state-provider.ts +30 -29
- package/src/realtime-server/realtime-state-receiver.ts +62 -16
- package/src/realtime-server/server-config.ts +8 -0
- package/src/realtime-server/socket-interface.ts +14 -0
- package/src/realtime-testing/setup-realtime-test.tsx +70 -31
- package/src/web/index.ts +1 -1
- package/src/web/{persist-sync.ts ā storage-sync.ts} +5 -2
- package/src/internal/store/mint-or-counterfeit.ts +0 -108
- package/src/realtime-client/server-action.ts +0 -23
- package/src/realtime-react/on-mount.ts +0 -5
- package/src/realtime-react/use-server-action.ts +0 -19
- package/src/realtime-server/continuity/prepare-to-serve-transaction-request.ts +0 -59
- package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +0 -145
- package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +0 -41
- package/src/realtime-server/realtime-action-receiver.ts +0 -40
- package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen?:\n\t\t| ((next: boolean | ((prev: boolean) => boolean)) => void)\n\t\t| 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>","DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents","openCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>","states:\n\t\t\t\t| WritableTokenIndex<AtomToken<unknown, any, any>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown, any, any>>","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>","VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n\tRecord<ValidNonNumber, number | null>\n>","DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints","NumberInput: FC<NumberInputProps>","TextInput: FC<TextInputProps>","NonJsonEditor: React.FC<JsonEditorProps<never>>","next: T","SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n>","StateEditor: FC<{\n\ttoken: WritableToken<unknown, any, unknown>\n}>","ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown, any, unknown>\n}>","StoreEditor: FC<{\n\ttoken:\n\t\t| ReadonlySelectorToken<unknown, any, unknown>\n\t\t| WritableToken<unknown, any, unknown>\n}>","StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown, any, unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<Loadable<string>>\n\tdispose?: (() => void) | undefined\n}>","StateIndexTreeNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown, any, unknown>>\n\tisOpenState: RegularAtomToken<boolean>\n}>","StateIndexNode: FC<{\n\tnode:\n\t\t| FamilyNode<ReadableToken<unknown, any, unknown>>\n\t\t| ReadableToken<unknown, any, unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<Loadable<string>>\n\tdispose?: () => void\n}>","StateIndex: FC<{\n\ttokenIndex: AtomToken<WritableTokenIndex<ReadableToken<unknown, any, unknown>>>\n}>","AtomUpdateFC: React.FC<{\n\tserialNumber: number\n\tatomUpdate: AtomUpdateEvent<AtomToken<unknown, any, any>>\n}>","TransactionUpdateFC: React.FC<{\n\tserialNumber: number\n\ttransactionUpdate: TransactionOutcomeEvent<TransactionToken<any>>\n}>","TimelineUpdateFC: React.FC<{\n\ttimelineUpdate: TimelineEvent<any>\n\tserialNumber: number\n}>","article: {\n\tAtomUpdate: typeof AtomUpdateFC\n\tTransactionUpdate: typeof TransactionUpdateFC\n\tTimelineUpdate: typeof TimelineUpdateFC\n}","YouAreHere: FC","TimelineLog: FC<{\n\ttoken: TimelineToken<any>\n\tisOpenState: RegularAtomToken<boolean>\n\ttimelineState: ReadonlyPureSelectorToken<Timeline<any>>\n}>","TimelineIndex: FC","TransactionLog: FC<{\n\ttoken: TransactionToken<Fn>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[]\n\t>\n}>","TransactionIndex: FC","AtomIODevtools: React.FC<{ hideByDefault?: boolean }>"],"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 { FC } from \"react\"\n\nexport const OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen?:\n\t\t| ((next: boolean | ((prev: boolean) => boolean)) => void)\n\t\t| 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 type { RootStore, Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tcreateRegularAtomFamily,\n\tcreateTransaction,\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: RootStore,\n\thideByDefault = false,\n): DevtoolsStates & IntrospectionStates & { store: Store } {\n\tconst introspectionStates = attachIntrospectionStates(store)\n\n\tconst devtoolsAreHiddenAtom = createRegularAtom<boolean, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools Are Hidden`,\n\t\t\tdefault: hideByDefault,\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [\n\t\t\t\t\t\t\tpersistSync(window.localStorage, JSON, `š Devtools Are Hidden`),\n\t\t\t\t\t\t\t({ setSelf }) => {\n\t\t\t\t\t\t\t\twindow.addEventListener(`keydown`, (e) => {\n\t\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\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t\tsetSelf((state) => !state)\n\t\t\t\t\t\t\t\t\t}\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},\n\t\tundefined,\n\t)\n\n\tconst devtoolsAreOpenAtom = createRegularAtom<boolean, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools Are Open`,\n\t\t\tdefault: true,\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [persistSync(window.localStorage, JSON, `š Devtools Are Open`)],\n\t\t},\n\t\tundefined,\n\t)\n\n\tconst devtoolsViewSelectionAtom = createRegularAtom<\n\t\tDevtoolsView,\n\t\tnever,\n\t\tnever\n\t>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools View Selection`,\n\t\t\tdefault: `atoms`,\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [persistSync(window.localStorage, JSON, `š Devtools View`)],\n\t\t},\n\t\tundefined,\n\t)\n\n\tconst devtoolsViewOptionsAtom = createRegularAtom<\n\t\tDevtoolsView[],\n\t\tnever,\n\t\tnever\n\t>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools View Options`,\n\t\t\tdefault: [`atoms`, `selectors`, `transactions`, `timelines`],\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [persistSync(window.localStorage, JSON, `š Devtools View Options`)],\n\t\t},\n\t\tundefined,\n\t)\n\n\tconst viewIsOpenAtoms = createRegularAtomFamily<\n\t\tboolean,\n\t\treadonly (number | string)[],\n\t\tnever\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, any, any>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown, any, any>>\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 { type ReactElement, useContext } from \"react\"\n\nimport { DevtoolsContext } from \"../../store\"\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, useO } from \"atom.io/react\"\nimport type { FC, ReactElement } from \"react\"\nimport { useContext, useRef } from \"react\"\n\nimport { ElasticInput } from \"../../elastic-input\"\nimport { DevtoolsContext } from \"../../store\"\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, any, 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, any, 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:\n\t\t| ReadonlySelectorToken<unknown, any, unknown>\n\t\t| WritableToken<unknown, any, 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, any, 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, any, 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:\n\t\t| FamilyNode<ReadableToken<unknown, any, unknown>>\n\t\t| ReadableToken<unknown, any, 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, any, 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\tAtomToken,\n\tAtomUpdateEvent,\n\tTimelineEvent,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\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: AtomUpdateEvent<AtomToken<unknown, any, any>>\n}> = ({ atomUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tkey={atomUpdate.token.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.token.key}: </span>\n\t\t\t<span>\n\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t{\n\t\t\t\t\t\tprettyJson.diff(\n\t\t\t\t\t\t\tatomUpdate.update.oldValue,\n\t\t\t\t\t\t\tatomUpdate.update.newValue,\n\t\t\t\t\t\t).summary\n\t\t\t\t\t}\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: TransactionOutcomeEvent<TransactionToken<any>>\n}> = ({ serialNumber, transactionUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tclassName=\"node transaction_update\"\n\t\t\tdata-testid={`transaction-update-${transactionUpdate.token.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.subEvents\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(txSubEvent) =>\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `state_creation` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!txSubEvent.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\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.token.key}:${index}:${update.token.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_outcome`:\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.token.key}:${index}:${update.token.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: TimelineEvent<any>\n\tserialNumber: number\n}> = ({ timelineUpdate, serialNumber }) => {\n\treturn timelineUpdate.type === `atom_update` ||\n\t\ttimelineUpdate.type === `selector_update` ||\n\t\ttimelineUpdate.type === `transaction_outcome` ? (\n\t\t<article\n\t\t\tclassName=\"node timeline_update\"\n\t\t\tdata-testid={`timeline-update-${typeof timelineUpdate.token.key === `string` ? timelineUpdate.token.key : stringifyJson(timelineUpdate.token.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} (\n\t\t\t\t\t{timelineUpdate.token.key})\n\t\t\t\t</h4>\n\t\t\t</header>\n\t\t\t<main>\n\t\t\t\t{timelineUpdate.type === `transaction_outcome` ? (\n\t\t\t\t\ttimelineUpdate.subEvents\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(subEvent) =>\n\t\t\t\t\t\t\t\tsubEvent.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `state_creation` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!subEvent.token.key.startsWith(`šāšØ`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((subEvent, index) => {\n\t\t\t\t\t\t\tswitch (subEvent.type) {\n\t\t\t\t\t\t\t\tcase `atom_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.token.key}:${index}:${subEvent.token.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={subEvent}\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_outcome`:\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.token.key}:${index}:${subEvent.token.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={subEvent}\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.subEvents\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(atomUpdateEvent) => !atomUpdateEvent.token.key.startsWith(`šāšØ`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((event, index) => {\n\t\t\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\t\t\tcase `atom_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.token.key}:${index}:${event.token.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={event}\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 `state_creation`:\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 === `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 !== `state_creation` &&\n\t\t\t\t\t\tupdate.type !== `state_disposal` ? (\n\t\t\t\t\t\t\t<Fragment key={update.token.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\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport { findInStore, type Fn } 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<Fn>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[]\n\t>\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.token.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?:\n\t\t| ((next: boolean | ((prev: boolean) => boolean)) => void)\n\t\t| 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>","DEFAULT_JSON_EDITOR_COMPONENTS: JsonEditorComponents","openCloseAllTX: TransactionToken<\n\t\t(path: readonly (number | string)[], current?: boolean) => void\n\t>","states:\n\t\t\t\t| WritableTokenIndex<AtomToken<unknown, any, any>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown, any, any>>","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>","VALID_NON_NUMBER_INTERPRETATIONS: Readonly<\n\tRecord<ValidNonNumber, number | null>\n>","DEFAULT_NUMBER_CONSTRAINTS: NumberConstraints","NumberInput: FC<NumberInputProps>","TextInput: FC<TextInputProps>","NonJsonEditor: React.FC<JsonEditorProps<never>>","next: T","SubEditors: Record<\n\tkeyof JsonTypes,\n\tFC<JsonEditorProps_INTERNAL<any>>\n>","StateEditor: FC<{\n\ttoken: WritableToken<unknown, any, unknown>\n}>","ReadonlySelectorViewer: FC<{\n\ttoken: ReadonlySelectorToken<unknown, any, unknown>\n}>","StoreEditor: FC<{\n\ttoken:\n\t\t| ReadonlySelectorToken<unknown, any, unknown>\n\t\t| WritableToken<unknown, any, unknown>\n}>","StateIndexLeafNode: FC<{\n\tnode: ReadableToken<unknown, any, unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<Loadable<string>>\n\tdispose?: (() => void) | undefined\n}>","StateIndexTreeNode: FC<{\n\tnode: FamilyNode<ReadableToken<unknown, any, unknown>>\n\tisOpenState: RegularAtomToken<boolean>\n}>","StateIndexNode: FC<{\n\tnode:\n\t\t| FamilyNode<ReadableToken<unknown, any, unknown>>\n\t\t| ReadableToken<unknown, any, unknown>\n\tisOpenState: RegularAtomToken<boolean>\n\ttypeState: ReadonlyPureSelectorToken<Loadable<string>>\n\tdispose?: () => void\n}>","StateIndex: FC<{\n\ttokenIndex: AtomToken<WritableTokenIndex<ReadableToken<unknown, any, unknown>>>\n}>","AtomUpdateFC: React.FC<{\n\tserialNumber: number\n\tatomUpdate: AtomUpdateEvent<AtomToken<unknown, any, any>>\n}>","TransactionUpdateFC: React.FC<{\n\tserialNumber: number\n\ttransactionUpdate: TransactionOutcomeEvent<TransactionToken<any>>\n}>","TimelineUpdateFC: React.FC<{\n\ttimelineUpdate: TimelineEvent<any>\n\tserialNumber: number\n}>","article: {\n\tAtomUpdate: typeof AtomUpdateFC\n\tTransactionUpdate: typeof TransactionUpdateFC\n\tTimelineUpdate: typeof TimelineUpdateFC\n}","YouAreHere: FC","TimelineLog: FC<{\n\ttoken: TimelineToken<any>\n\tisOpenState: RegularAtomToken<boolean>\n\ttimelineState: ReadonlyPureSelectorToken<Timeline<any>>\n}>","TimelineIndex: FC","TransactionLog: FC<{\n\ttoken: TransactionToken<Fn>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[]\n\t>\n}>","TransactionIndex: FC","AtomIODevtools: React.FC<{ hideByDefault?: boolean }>"],"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 { FC } from \"react\"\n\nexport const OpenClose: FC<{\n\tisOpen: boolean\n\tsetIsOpen?:\n\t\t| ((next: boolean | ((prev: boolean) => boolean)) => void)\n\t\t| 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 type { RootStore, Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tcreateRegularAtomFamily,\n\tcreateTransaction,\n} from \"atom.io/internal\"\nimport type {\n\tIntrospectionStates,\n\tWritableTokenIndex,\n} from \"atom.io/introspection\"\nimport { attachIntrospectionStates, isPlainObject } from \"atom.io/introspection\"\nimport { storageSync } 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: RootStore,\n\thideByDefault = false,\n): DevtoolsStates & IntrospectionStates & { store: Store } {\n\tconst introspectionStates = attachIntrospectionStates(store)\n\n\tconst devtoolsAreHiddenAtom = createRegularAtom<boolean, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools Are Hidden`,\n\t\t\tdefault: hideByDefault,\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [\n\t\t\t\t\t\t\tstorageSync(window.localStorage, JSON, `š Devtools Are Hidden`),\n\t\t\t\t\t\t\t({ setSelf }) => {\n\t\t\t\t\t\t\t\twindow.addEventListener(`keydown`, (e) => {\n\t\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\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t\tsetSelf((state) => !state)\n\t\t\t\t\t\t\t\t\t}\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},\n\t\tundefined,\n\t)\n\n\tconst devtoolsAreOpenAtom = createRegularAtom<boolean, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools Are Open`,\n\t\t\tdefault: true,\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [storageSync(window.localStorage, JSON, `š Devtools Are Open`)],\n\t\t},\n\t\tundefined,\n\t)\n\n\tconst devtoolsViewSelectionAtom = createRegularAtom<\n\t\tDevtoolsView,\n\t\tnever,\n\t\tnever\n\t>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools View Selection`,\n\t\t\tdefault: `atoms`,\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [storageSync(window.localStorage, JSON, `š Devtools View`)],\n\t\t},\n\t\tundefined,\n\t)\n\n\tconst devtoolsViewOptionsAtom = createRegularAtom<\n\t\tDevtoolsView[],\n\t\tnever,\n\t\tnever\n\t>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `š Devtools View Options`,\n\t\t\tdefault: [`atoms`, `selectors`, `transactions`, `timelines`],\n\t\t\teffects:\n\t\t\t\ttypeof window === `undefined`\n\t\t\t\t\t? []\n\t\t\t\t\t: [storageSync(window.localStorage, JSON, `š Devtools View Options`)],\n\t\t},\n\t\tundefined,\n\t)\n\n\tconst viewIsOpenAtoms = createRegularAtomFamily<\n\t\tboolean,\n\t\treadonly (number | string)[],\n\t\tnever\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: [storageSync(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, any, any>>\n\t\t\t\t| WritableTokenIndex<SelectorToken<unknown, any, any>>\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 { type ReactElement, useContext } from \"react\"\n\nimport { DevtoolsContext } from \"../../store\"\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, useO } from \"atom.io/react\"\nimport type { FC, ReactElement } from \"react\"\nimport { useContext, useRef } from \"react\"\n\nimport { ElasticInput } from \"../../elastic-input\"\nimport { DevtoolsContext } from \"../../store\"\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, any, 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, any, 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:\n\t\t| ReadonlySelectorToken<unknown, any, unknown>\n\t\t| WritableToken<unknown, any, 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, any, 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, any, 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:\n\t\t| FamilyNode<ReadableToken<unknown, any, unknown>>\n\t\t| ReadableToken<unknown, any, 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, any, 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\tAtomToken,\n\tAtomUpdateEvent,\n\tTimelineEvent,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\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: AtomUpdateEvent<AtomToken<unknown, any, any>>\n}> = ({ atomUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tkey={atomUpdate.token.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.token.key}: </span>\n\t\t\t<span>\n\t\t\t\t<span className=\"summary\">\n\t\t\t\t\t{\n\t\t\t\t\t\tprettyJson.diff(\n\t\t\t\t\t\t\tatomUpdate.update.oldValue,\n\t\t\t\t\t\t\tatomUpdate.update.newValue,\n\t\t\t\t\t\t).summary\n\t\t\t\t\t}\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: TransactionOutcomeEvent<TransactionToken<any>>\n}> = ({ serialNumber, transactionUpdate }) => {\n\treturn (\n\t\t<article\n\t\t\tclassName=\"node transaction_update\"\n\t\t\tdata-testid={`transaction-update-${transactionUpdate.token.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.subEvents\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(txSubEvent) =>\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `state_creation` &&\n\t\t\t\t\t\t\t\ttxSubEvent.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!txSubEvent.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\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.token.key}:${index}:${update.token.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_outcome`:\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.token.key}:${index}:${update.token.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: TimelineEvent<any>\n\tserialNumber: number\n}> = ({ timelineUpdate, serialNumber }) => {\n\treturn timelineUpdate.type === `atom_update` ||\n\t\ttimelineUpdate.type === `selector_update` ||\n\t\ttimelineUpdate.type === `transaction_outcome` ? (\n\t\t<article\n\t\t\tclassName=\"node timeline_update\"\n\t\t\tdata-testid={`timeline-update-${typeof timelineUpdate.token.key === `string` ? timelineUpdate.token.key : stringifyJson(timelineUpdate.token.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} (\n\t\t\t\t\t{timelineUpdate.token.key})\n\t\t\t\t</h4>\n\t\t\t</header>\n\t\t\t<main>\n\t\t\t\t{timelineUpdate.type === `transaction_outcome` ? (\n\t\t\t\t\ttimelineUpdate.subEvents\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(subEvent) =>\n\t\t\t\t\t\t\t\tsubEvent.type !== `molecule_creation` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `molecule_disposal` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `molecule_transfer` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `state_creation` &&\n\t\t\t\t\t\t\t\tsubEvent.type !== `state_disposal` &&\n\t\t\t\t\t\t\t\t!subEvent.token.key.startsWith(`šāšØ`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((subEvent, index) => {\n\t\t\t\t\t\t\tswitch (subEvent.type) {\n\t\t\t\t\t\t\t\tcase `atom_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.token.key}:${index}:${subEvent.token.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={subEvent}\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_outcome`:\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.token.key}:${index}:${subEvent.token.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={subEvent}\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.subEvents\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(atomUpdateEvent) => !atomUpdateEvent.token.key.startsWith(`šāšØ`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((event, index) => {\n\t\t\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\t\t\tcase `atom_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.token.key}:${index}:${event.token.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={event}\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 `state_creation`:\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 === `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 !== `state_creation` &&\n\t\t\t\t\t\tupdate.type !== `state_disposal` ? (\n\t\t\t\t\t\t\t<Fragment key={update.token.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\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport { findInStore, type Fn } 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<Fn>\n\tisOpenState: RegularAtomToken<boolean>\n\tlogState: ReadonlyPureSelectorToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[]\n\t>\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.token.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":";;;;;;;;;;;AAEA,MAAaA,aAUP,EAAE,QAAQ,WAAW,cAAc,UAAU,aAAa;AAC/D,QACC,oBAAC;EACA,MAAK;EACL,eAAa;EACb,WAAW,SAAS,SAAS,SAAS;EACtC,UAAU,UAAU;AACnB,OAAI,gBAAgB,MAAM,UACzB;QAAI,CAAC,aAAa,MAAM,CACvB;;AAGF,gBAAa,SAAS,CAAC,KAAK;;EAEnB;YAEV,oBAAC;GAAK,WAAU;aAAqC;IAAQ;GACrD;;AAIX,MAAaC,SAET,EACH,WACA;;;;AC9BD,MAAaC,mBAAsC,EAAE,OAAO,gBAAgB;CAC3E,MAAM,YAAY,WAAW,gBAAgB,MAAM,IAAI,CAAC,OAAO,QAAQ,CAAC;CACxE,MAAM,UACL,OAAO,UAAU,IAAI,WAAW,kBAAkB;AACnD,QACC,oBAAC;EACA,eAAY;EACZ,OAAO;GACN,MAAM;GACN,YAAY;GACZ,iBAAiB;GACjB,oBAAoB;GAEpB,gBAAgB;GAChB;YAGD,oBAAC;GACA,OAAO;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,QAAQ;IACR;aAED,qBAAC;IACA,OAAO;KACN,YAAY;KACZ,OAAO;KACP,SAAS;KACT,YAAY;KACZ;;KAEA;KACD,oBAAC;MAAK,OAAO;OAAE,OAAO;OAAQ,YAAY;OAAK;gBAAG;OAAiB;KAClE;KACA;;KACK;IACF;GACD;;;;;ACpBR,IAAa,gBAAb,cAAmC,UAGjC;CACD,AAAO,YAAY,OAA2B;AAC7C,QAAM,MAAM;AACZ,OAAK,QAAQ,EAAE;;CAKhB,AAAgB,kBAAkB,OAAc,WAA4B;AAC3E,OAAK,MAAM,UAAU,OAAO,UAAU;AACtC,OAAK,SAAS;GACb;GACA;GACA,CAAC;;CAGH,AAAgB,SAAoB;EACnC,MAAM,EAAE,OAAO,cAAc,KAAK;EAClC,MAAM,EAAE,UAAU,WAAW,oBAAoB,KAAK;AAEtD,SAAO,YACN,oBAAC;GAAgB;GAAkB;IAAa,GAEhD;;;;;;ACbH,MAAaC,iCAAuD;CACnE,gBAAgB,EAAE,eAAe,oBAAC,iBAAe,WAAyB;CAC1E,SAAS,EAAE,SAAS,UAAU,UAAU,aACvC,oBAAC;EACA,MAAK;EACL,WAAU;EACD;EACC;EACV,eAAa;EAEZ;GACO;CAEV,gBAAgB,EAAE,UAAU,WAAW,aACtC,oBAAC;EACA,WAAW,iBAAiB,YAAY,IAAI,cAAc;EAC1D,eAAa;EAEZ;GACI;CAEP,eAAe,EAAE,UAAU,aAC1B,oBAAC;EAAI,WAAU;EAAoB,eAAa;EAC9C;GACI;CAEP,gBAAgB,EAAE,UAAU,aAC3B,oBAAC;EAAI,WAAU;EAAqB,eAAa;EAC/C;GACI;CAEP,gBAAgB,EAAE,UAAU,aAC3B,oBAAC;EAAK,WAAU;EAAqB,eAAa;EAChD;GACK;CAER,gBAAgB,EAAE,UAAU,aAC3B,oBAAC;EAAK,WAAU;EAAqB,eAAa;EAChD;GACK;CAER,iBAAiB,EAAE,UAAU,aAC5B,oBAAC;EAAK,WAAU;EAAsB,eAAa;EACjD;GACK;CAER,OAAO,EAAE,aACR,oBAAC;EAAK,WAAU;EAAmB,eAAa;GAAU;CAE3D,kBACC,oBAAC;EAAK,WAAU;YAAsC;GAAQ;CAG/D,eAAe,oBAAC;EAAK,WAAU;YAAmC;GAAQ;CAC1E,yBAAyB,EAAE,UAAU,aACpC,oBAAC;EAAK,WAAU;EAA+B,eAAa;EAC1D;GACK;CAER,aAAa,EAAE,UAAU,aACxB,oBAAC;EAAK,WAAU;EAAkB,eAAa;EAC7C;GACK;CAER;;;;ACpED,SAAgB,qBACf,OACA,gBAAgB,OAC0C;CAC1D,MAAM,sBAAsB,0BAA0B,MAAM;CAE5D,MAAM,wBAAwB,kBAC7B,OACA;EACC,KAAK;EACL,SAAS;EACT,SACC,OAAO,WAAW,cACf,EAAE,GACF,CACA,YAAY,OAAO,cAAc,MAAM,yBAAyB,GAC/D,EAAE,cAAc;AAChB,UAAO,iBAAiB,YAAY,MAAM;AACzC,QAAI,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,aAAa,KAAK,KAAK;AAC3D,OAAE,gBAAgB;AAClB,cAAS,UAAU,CAAC,MAAM;;KAE1B;IAEH;EACJ,EACD,OACA;CAED,MAAM,sBAAsB,kBAC3B,OACA;EACC,KAAK;EACL,SAAS;EACT,SACC,OAAO,WAAW,cACf,EAAE,GACF,CAAC,YAAY,OAAO,cAAc,MAAM,uBAAuB,CAAC;EACpE,EACD,OACA;CAED,MAAM,4BAA4B,kBAKjC,OACA;EACC,KAAK;EACL,SAAS;EACT,SACC,OAAO,WAAW,cACf,EAAE,GACF,CAAC,YAAY,OAAO,cAAc,MAAM,mBAAmB,CAAC;EAChE,EACD,OACA;CAED,MAAM,0BAA0B,kBAK/B,OACA;EACC,KAAK;EACL,SAAS;GAAC;GAAS;GAAa;GAAgB;GAAY;EAC5D,SACC,OAAO,WAAW,cACf,EAAE,GACF,CAAC,YAAY,OAAO,cAAc,MAAM,2BAA2B,CAAC;EACxE,EACD,OACA;CAED,MAAM,kBAAkB,wBAItB,OAAO;EACR,KAAK;EACL,SAAS;EACT,UAAU,QACT,OAAO,WAAW,cACf,EAAE,GACF,CAAC,YAAY,OAAO,cAAc,MAAM,gBAAgB,IAAI,MAAM,GAAG,CAAC;EAC1E,CAAC;CAEF,MAAMC,iBAEF,kBAEF,OAAO;EACR,KAAK;EACL,KAAK,EAAE,KAAK,OAAO,MAAM,YAAY;GACpC,MAAM,cAAc,IAAI,0BAA0B;GAClD,IAAIC;AAGJ,WAAQ,aAAR;IACC,KAAK;AACJ,cAAS,IAAI,oBAAoB,UAAU;AAC3C;IACD,KAAK;AACJ,cAAS,IAAI,oBAAoB,cAAc;AAC/C;IACD,KAAK;IACL,KAAK,YACJ;;AAGF,WAAQ,KAAK,QAAb;IACC,KAAK;AAEH,UAAK,MAAM,CAAC,QAAQ,OACnB,KAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC,QAAQ;AAGvC;IACD,SAAS;KACR,MAAM,OAAO,OAAO,IAAI,KAAK,GAAa;KAC1C,IAAIC;KACJ,IAAIC;AACJ,SAAI,MAAM;AACT,UAAI,mBAAmB,MAAM;AAC5B,WAAI,KAAK,WAAW,GAAG;AACtB,aAAK,MAAM,CAAC,WAAW,KAAK,cAC3B,KAAI,iBAAiB,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,QAAQ;AAElD;;OAGD,MAAM,QAAQ,KAAK,cAAc,IAAI,KAAK,GAAa;AACvD,eAAQ,IAAI,MAAM;AAClB,kBAAW,KAAK,MAAM,GAAG,GAAG;aACtB;AACN,eAAQ,IAAI,KAAK;AACjB,kBAAW,KAAK,MAAM,GAAG,GAAG;;AAE7B,WAAK,MAAM,WAAW,SACrB,KAAI,SAAS,OAAO,UAAU,SAC7B,SAAQ,MAAM;MAGhB,MAAM,OAAO,KAAK,MAAM,GAAG,GAAG;AAC9B,UAAI,MAAM,QAAQ,MAAM,CACvB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IACjC,KAAI,iBAAiB,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,QAAQ;eAGzC,cAAc,MAAM,CACvB,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CACnC,KAAI,iBAAiB,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC,QAAQ;;;;;EAQrD,CAAC;AAEF,QAAO;EACN,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,MAAaC,kBAET,cAAc,EAAE,CAAC;;;;AChMrB,MAAaC,eAIT,WAAW,SAAS,eAAe,OAAO,KAAK;CAClD,MAAM,WAAW,OAAyB,KAAK;CAC/C,MAAM,UAAU,OAAwB,KAAK;CAC7C,MAAM,CAAC,YAAY,iBAAiB,SAAS,OAAO;AAEpD,qBACC,YACO,EACN,aAAa;AACZ,WAAS,SAAS,OAAO;IAE1B,EACD;CAED,MAAM,aAAa,MAAM,SAAS,WAAW,KAAK;AAElD,uBAAsB;AACrB,MAAI,QAAQ,SAAS;AACpB,iBAAc,GAAG,QAAQ,QAAQ,cAAc,WAAW,IAAI;GAC9D,MAAM,WAAW,kBAAkB;AAClC,QAAI,QAAQ,QACX,eAAc,GAAG,QAAQ,QAAQ,cAAc,WAAW,IAAI;MAE7D,IAAK;AACR,gBAAa;AACZ,kBAAc,SAAS;;;IAGvB,CAAC,SAAS,SAAS,OAAO,MAAM,MAAM,CAAC;AAE1C,QACC,qBAAC;EAAI,OAAO;GAAE,SAAS;GAAgB,UAAU;GAAY;aAC5D,oBAAC;GACA,GAAI;GACJ,KAAK;GACL,OAAO;IACN,SAAS;IACT,cAAc;IACd,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,OAAO;IACP,GAAG,MAAM;IACT;IACA,EACF,oBAAC;GACA,KAAK;GACL,OAAO;IACN,SAAS,MAAM,OAAO;IACtB,UAAU;IACV,YAAY;IAEZ,YAAY;IACZ,YAAY,MAAM,OAAO,cAAc;IACvC,UAAU,MAAM,OAAO,YAAY;IACnC;aAEA,MAAM;IACD;GACF;EAEN;;;;AChFF,SAAgB,UAAU,KAAa,KAAa;AACnD,SAAQ,UACP,QAAQ,MAAM,MAAM,QAAQ,MAAM,MAAM;;AAE1C,SAAS,MAAM,OAAe,eAAgC;AAC7D,KAAI,kBAAkB,OAAW,QAAO;CACxC,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,QAAQ,OAAO,GAAG;;AAQrC,MAAa,oBAAoB;CAAC;CAAI;CAAK;CAAK;CAAK;AAErD,MAAa,oBAAoB,UAChC,kBAAkB,SAAS,MAAwB;AACpD,MAAaC,mCAET;CACH,IAAI;CACJ,KAAK;CACL,KAAK;CACL,MAAM;CACN;AAED,MAAa,uBAAuB,UACnC,UAAU,OAAQ,CAAC,OAAO,MAAM,OAAO,MAAM,CAAC,IAAI,MAAM,SAAS,IAAI;AAEtE,MAAM,eAAe,OAAe,iBAAyC;AAC5E,KAAI,iBAAiB,MAAM,CAAE,QAAO,iCAAiC;AACrE,QAAO,eACJ,OAAO,WAAW,MAAM,GACxB,KAAK,MAAM,OAAO,WAAW,MAAM,CAAC;;AASxC,MAAaC,6BAAgD;CAC5D,KAAK,OAAO;CACZ,KAAK,OAAO;CACZ,eAAe;CACf,UAAU;CACV;AAED,MAAM,gBAEJ,iBAGA,UAGY;AACZ,KAAI,UAAU,QAAQ,YAAY,aAAa,KAC9C,QAAO;CAIR,MAAM,EAAE,KAAK,KAAK,kBAAkB;EACnC,GAAG;EACH,GAAG;EACH;CACD,IAAI,cAAc,UAAU,KAAK,IAAI,CAAC,SAAS,EAAE;AACjD,KAAI,cACH,eAAc,MAAM,aAAa,cAAc;AAEhD,QAAO;;AAGT,MAAM,eAAe,iBAAwC;AAC5D,KAAI,iBAAiB,QAAQ,iBAAiB,OAC7C,QAAO;AAER,QAAO,aAAa,UAAU;;AAiB/B,MAAaC,eAAqC,EACjD,WAAW,OACX,eACA,WAAW,OACX,OACA,KACA,KACA,MACA,UACA,SACA,cAAc,IACd,YAAY,MACZ,QACA,QAAQ,WACH;CACL,MAAM,SAAS,OAAO;CACtB,MAAM,CAAC,gBAAgB,qBAAqB,SAE1C,KAAK;CACP,MAAM,8BAA8B,OAAgB,MAAM;CAE1D,MAAM,SAAS,aAAa;EAAE;EAAK;EAAK;EAAe,UAAU;EAAM,CAAC;CAExE,MAAM,eAAe,kBAAkB,UAAa,gBAAgB;CAEpE,MAAM,mBAAmB;AACxB,MAAI,4BAA4B,SAAS;AACxC,OAAI,OAAO,SAAS,KAAK,CAAC;AAC1B,qBAAkB,KAAK;;AAExB,8BAA4B,UAAU;;CAGvC,MAAM,gBAAgB,UAA+C;AACpE,MAAI,SAAU,UAAS,MAAM;AAC7B,MAAI,QAAQ,OAAW;AACvB,8BAA4B,UAAU;EACtC,MAAM,QAAQ,MAAM,OAAO;AAC3B,MAAI,iBAAiB,MAAM,IAAI,oBAAoB,MAAM,EAAE;AAC1D,qBAAkB,MAAM;GACxB,MAAM,qBAAqB,oBAAoB,MAAM,GAClD,QACC,KAAK,UAAU,IAAI;GACvB,MAAM,WAAW,YAAY,oBAAoB,aAAa;AAC9D,OAAI,OAAO,SAAS,CAAC;AACrB;;AAED,oBAAkB,KAAK;EACvB,MAAM,iBACJ,CAAC,OAAO,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,IAAI,IACpD,gBAAgB,UAAU,OAC1B,gBAAgB,UAAU,QAC3B,UAAU,MACV,UAAU;EACX,MAAM,eAAe,YAAY,OAAO,aAAa;AAErD,MAAI,eACH,KAAI,OAAO,aAAa,CAAC;;CAI3B,MAAM,eACL,kBAAkB,YAAY,QAAQ,OAAO,MAAM,GAAG,MAAM;AAE7D,QACC,qBAAC,qBACC,QAAQ,oBAAC;EAAM,SAAS;YAAS;GAAc,GAAG,MAClD,WACA,oBAAC;EACA,MAAK;EACL,OAAO;EACP,aAAa,eAAe;EAC5B,UAAU;EACV,QAAQ;EACE;EACV,MAAM,QAAQ;EACd,IAAI;EACK;EACT,eAAa;GACZ,GAEF,oBAAC;EACA,MAAK;EACL,OAAO;EACP,aAAa,eAAe;EAC5B,UAAU;EACV,QAAQ;EACE;EACV,MAAM,QAAQ;EACd,IAAI;EACK;EACT,eAAa;GACZ,IAEG;;;;;ACtLT,MAAaC,aAAiC,EAC7C,OACA,KACA,OACA,aACA,WAAW,OACX,aACK;CACL,MAAM,SAAS,OAAO;AACtB,QACC,qBAAC,qBACC,QAAQ,oBAAC;EAAM,SAAS;YAAS;GAAc,GAAG,MAClD,WACA,oBAAC;EACA,IAAI;EACJ,MAAK;EACE;EACP,WAAW,MAAM,MAAM,EAAE,OAAO,MAAM;EACtC,UAAU,QAAQ;EACL;EACb,eAAa;GACZ,GAEF,oBAAC;EACA,IAAI;EACJ,MAAK;EACE;EACP,WAAW,MAAM,MAAM,EAAE,OAAO,MAAM;EACtC,UAAU,QAAQ;EACL;EACb,eAAa;GACZ,IAEG;;;;;AC5CT,MAAaC,iBAAmD,EAC/D,MACA,aACK;AACL,QAAO,SAAS,SACf,oBAAC;EACA;EACA,OAAM;EACN,eAAa,GAAG,OAAO;GACtB,GAEF,oBAAC;EACA;EACA,OACC,OAAO,eAAe,KAAK,CAAC,YAAY,OAAO,MAAM,KAAK,UAAU,KAAK;EAE1E,eAAa,GAAG,OAAO,YAAY,OAAO,eAAe,KAAK,CAAC,YAAY;GAC1E;;;;;ACkBJ,MAAa,uBAA2B,EACvC,MACA,KACA,MACA,QACA,QACA,QACA,OAAO,EAAE,EACT,mBAAmB,OACnB,iBAAiB,OACjB,WACA,OACA,YACA,QACA,WACA,aACuD;CACvD,MAAM,EAAE,gBAAgB,UAAU,WAAW,gBAAgB;CAE7D,MAAM,aAAa,OAAO,KAAK;CAC/B,MAAM,UAAU,aAAa,OAAgB,KAAK,IAAI;EACrD,MAAM;EACN;EACA;CACD,MAAM,YAAY,aACf,WAAW,QAAQ,QACnB;CAEH,MAAM,WAAW,WAAW,KAAK;CAEjC,MAAM,aAAa,QAAQ,SAAS,WAAW,QAAQ,SAAS;CAChE,MAAM,mBAAmB,cAAc,WAAW,UAAa;AAE/D,QAAO,SAAS,KAAK,GAAG,OACvB,oBAAC,WAAW,2BACX,qBAAC,WAAW;EACA;EACJ;EACC;aAER,qBAAC,uBACA,qBAAC;GACC,UAAU,mBACV,oBAAC,OAAO;IACP,QAAQ,UAAU;IAClB,QAAQ,GAAG,OAAO;IAClB,oBAAoB;AACnB,kBAAa,OAAO,gBAAgB,WAAW,CAAC,CAAC,MAAM,OAAO;AAC9D,YAAO;;IAEG;IACX,UAAU,CAAC;KACV,GACC;GACH,UACA,oBAAC,WAAW,wBACX,oBAAC;IACA,OAAO;IACP,WAAW,MAAM;AAChB,YAAO,EAAE,OAAO,MAAM;;IAEb;IACV,eAAa,GAAG,OAAO;KACtB,GACqB;GAExB,aACA,8CACE,WAAW,UAAa,YACxB,oBAAC;IAAK,WAAU;cAAe,KAAK,UAAU,KAAK;KAAQ,GACxD,MACH,SACA,oBAAC;IACA,WAAW,MAAM;AAChB,YAAO,EAAE,OAAO,MAAyB;;IAE1C,OAAO,QAAQ;IACL;IACV,eAAa,GAAG,OAAO;cAEtB,OAAO,KAAK,WAAW,CAAC,KAAK,SAC7B,oBAAC;KAAkB,OAAO;eACxB;OADW,KAEJ,CACR;KACM,GACN,QACF,GAEH,8CACC,oBAAC;IACA,MAAM,QAAQ;IACT;IACG;IACA;IACF;IACM;IACF;IACE;IACJ;KACP,EACD,UAAU,aACV,oBAAC;IACA,UACC,WACG,UACC,MAAM;AACP,YAAO,EAAE,OAAO,MAAyB;;IAG7C,OAAO,QAAQ;IACL;IACV,eAAa,GAAG,OAAO;cAEtB,OAAO,KAAK,WAAW,CAAC,KAAK,SAC7B,oBAAC;KAAkB,OAAO;eACxB;OADW,KAEJ,CACR;KACM,GACN,QACF;MAEE,EACN,SACA,oBAAC,WAAW;GACD;GACV,eAAe;AACd,YAAQ;;GAET,QAAQ,GAAG,OAAO;aAElB,oBAAC,WAAW,eAAa;IACN,GACjB,QACI,EAER,cAAc,WAAW,QACzB,oBAAC;GACA,MAAM,QAAQ;GACT;GACG;GACA;GACF;GACM;GACF;GACE;GACJ;IACP,GACC;GACsB,GACD;;;;;ACxL7B,MAAa,sBACZ,MACA,QAEA,KAAK,KAAK,OAAO,WAAW,aAAa;AACxC,WAAa;EACZ,MAAM,UAAU,CAAC,GAAG,KAAK;AACzB,UAAQ,SAAS,OAAO,UAAU,MAAM;AACxC,SAAO;GACN;EACD;;;;ACbH,MAAa,mBAAmB,QAAyB,QAAQ;AACjE,MAAa,kBAAkB,QAAwB,OAAO,IAAI;AAClE,MAAa,iBAAiB,QAA0B,IAAI,MAAM,IAAI;AACtE,MAAa,kBAAkB,QAAkC;AAChE,KAAI;AACH,SAAO,KAAK,MAAM,IAAI;UACd,GAAG;AACX,SAAO,GAAG,MAAM,KAAK;;;AAIvB,MAAa,kBAAkB,QAC9B,KAAK,UAAU,IAAI;AACpB,MAAa,mBAAmB,QAC/B,IAAI,YAAY;AACjB,MAAa,kBAAkB,QAC9B,OAAO,IAAI,aAAa,IAAI,WAAW,IAAI,YAAY,EAAE;AAC1D,MAAa,iBACZ,QAC+B,OAAO,QAAQ,IAAI;AAEnD,MAAa,mBAAmB,SAA0B,KAAK,UAAU;AACzE,MAAa,mBAAmB,SAA0B,CAAC;AAC3D,MAAa,mBAAmB,UAAqC,GACnE,KAAK,UAAU,GAAG,MACnB;AACD,MAAa,kBAAkB,SAA6B,CAAC,KAAK;AAElE,MAAa,kBAAkB,QAAwB,IAAI,UAAU;AACrE,MAAa,mBAAmB,QAAyB,QAAQ;AACjE,MAAa,kBAAkB,SAAmC,EACjE,QAAQ,KACR;AACD,MAAa,iBAAiB,QAAwB,MAAM,IAAI,CAAC,KAAK,KAAK;AAE3E,MAAa,iBAAiB,QAAiC,IAAI,KAAK,IAAI;AAC5E,MAAa,iBAAiB,QAAiC,IAAI;AACnE,MAAa,kBAAkB,QAC9B,OAAO,IAAI,OAAO,YAAY,IAAI,KAAK,IAAI,SAAS;AACrD,MAAa,iBACZ,QAEA,IAAI,QACF,KAAK,KAAK,QAAQ;AAClB,KAAI,GAAG,SAAS;AAChB,QAAO;GAER,EAAE,CACF;AAEF,MAAa,qBAA6B;AAC1C,MAAa,qBAA6B;AAC1C,MAAa,sBAA+B;AAC5C,MAAa,oBAAqC,EAAE;AACpD,MAAa,sBAAwC,EAAE;;;;ACnDvD,MAAa,cACZ,UAQI;CACJ,MAAM,UAAU,aAAa,OAAO,MAAM;AAC1C,SAAQ,SAAS,MAAjB;EACC,KAAK,SAAS;GACb,MAAM,OAAO,QAAQ;AACrB,UAAO;IACN,IAAI,QAAQ;AACX,YAAO;;IAER,IAAI,UAAU;AACb,2BAA2B,KAAK;;IAEjC,IAAI,SAAS;AACZ,0BAA0B,KAAK;;IAEhC,IAAI,SAAS;AACZ,0BAA0B,KAAK;;IAEhC,IAAI,SAAS;AACZ,0BAA0B,KAAK;;IAEhC,IAAI,OAAO;AACV,YAAO;;IAER;;EAEF,KAAK,WAAW;GACf,MAAM,OAAO,QAAQ;AACrB,UAAO;IACN,IAAI,QAAQ;AACX,2BAA2B,KAAK;;IAEjC,IAAI,UAAU;AACb,YAAO;;IAER,IAAI,SAAS;AACZ,4BAA4B,KAAK;;IAElC,IAAI,SAAS;AACZ,4BAA4B,KAAK;;IAElC,IAAI,SAAS;AACZ,4BAA4B,KAAK;;IAElC,IAAI,OAAO;AACV,YAAO;;IAER;;EAEF,KAAK,UAAU;GACd,MAAM,OAAO,QAAQ;AACrB,UAAO;IACN,IAAI,QAAQ;AACX,0BAA0B,KAAK;;IAEhC,IAAI,UAAU;AACb,4BAA4B,KAAK;;IAElC,IAAI,SAAS;AACZ,YAAO;;IAER,IAAI,SAAS;AACZ,2BAA2B,KAAK;;IAEjC,IAAI,SAAS;AACZ,2BAA2B,KAAK;;IAEjC,IAAI,OAAO;AACV,YAAO;;IAER;;EAEF,KAAK,UAAU;GACd,MAAM,OAAO,QAAQ;AACrB,UAAO;IACN,IAAI,QAAQ;AACX,0BAA0B,KAAK;;IAEhC,IAAI,UAAU;AACb,4BAA4B,KAAK;;IAElC,IAAI,SAAS;AACZ,2BAA2B,KAAK;;IAEjC,IAAI,SAAS;AACZ,YAAO;;IAER,IAAI,SAAS;AACZ,2BAA2B,KAAK;;IAEjC,IAAI,OAAO;AACV,YAAO;;IAER;;EAEF,KAAK,UAAU;GACd,MAAM,OAAO,QAAQ;AACrB,UAAO;IACN,IAAI,QAAQ;AACX,0BAA0B,KAAK;;IAEhC,IAAI,UAAU;AACb,4BAA4B,KAAK;;IAElC,IAAI,SAAS;AACZ,2BAA2B,KAAK;;IAEjC,IAAI,SAAS;AACZ,2BAA2B,KAAK;;IAEjC,IAAI,SAAS;AACZ,YAAO;;IAER,IAAI,OAAO;AACV,YAAO;;IAER;;EAEF,KAAK;EACL,KAAK,OACJ,QAAO;GACN,IAAI,QAAQ;AACX,wBAAyB;;GAE1B,IAAI,UAAU;AACb,0BAA2B;;GAE5B,IAAI,SAAS;AACZ,yBAA0B;;GAE3B,IAAI,SAAS;AACZ,yBAA0B;;GAE3B,IAAI,SAAS;AACZ,yBAA0B;;GAE3B,IAAI,OAAO;AACV,WAAO;;GAER;;;;;;ACjJJ,MAAa,uBACZ,MACA,QAEA,YACC,UAAU,KAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CACrC,MACC,aAAsB;AACtB,KAAI;EAAE,GAAG;GAAO,MAAM,OAAO,UAAU,MAAM;EAAE,CAAC;EAEjD,CAAC,CACF;AAEF,MAAa,wBACZ,MACA,KACA,oBAEA,YACC,UAAU,KAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CACrC,MACC,WAAmB;AACnB,KAAI,CAAC,OAAO,OAAO,MAAM,OAAO,CAC/B,WAAU;EACT,MAAM,UAAU,OAAO,QAAQ,KAAK;EACpC,MAAM,QAAQ,QAAQ,WAAW,CAAC,OAAO,MAAM,IAAI;AACnD,UAAQ,SAAS,CAAC,QAAQ,MAAM;EAChC,MAAM,eAAe,gBAAgB;AACrC,kBAAgB,UAAU;GACzB,GAAG;IACF,SAAS,aAAa;GACvB;AACD,SAAO,OAAO,YAAY,QAAQ;GACjC;EAGJ,CAAC,CACF;AAEF,MAAa,wBAGZ,MACA,QAEA,YACC,UAAU,KAAK,CAAC,KAAK,CAAC,SAAS,CAC9B,WACM;AACL,WAAU;EACT,IAAIC;AACJ,MAAI,MAAM,QAAQ,KAAK,EAAE;GACxB,MAAM,OAAO,CAAC,GAAG,KAAK;AACtB,QAAK,OAAO,KAAe,EAAE;AAC7B,UAAO;SACD;GACN,MAAM,GAAG,MAAM,EAAG,GAAG,SAAS;AAC9B,UAAO;;AAER,SAAO;GACN;EAEH,CAAC,CACF;AAEF,MAAa,yBAGZ,MACA,QAEA,YACC,UAAU,KAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CACrC,MACC,YAA0B;AAC1B,WAAU;EACT,IAAIA;AACJ,MAAI,MAAM,QAAQ,KAAK,EAAE;GACxB,MAAM,OAAO,CAAC,GAAG,KAAK;AACtB,QAAK,OAAiB,WAAW,MAAM,CAAC;AACxC,UAAO;QAEP,QAAO;GACN,GAAG;IACF,MAAM,WAAW,MAAM,CAAC;GACzB;AAEF,SAAO;GACN;EAEH,CAAC,CACF;AAEF,MAAa,iCAEX,MACA,SAKA,KAAK,UACL,UAAU;AACV,KAAI;EAAE,GAAG;GAAO,MAAM,SAAS,cAAc;EAAO,CAAC;;AAGvD,MAAa,sBAEX,MACA,KACA,iBAEK;CACL,MAAM,aAAa,OAAO,KAAK,KAAK,CAAC,KAAK,OAAO;CACjD,MAAM,YAAY,EAAE;AACpB,MAAK,MAAM,OAAO,WACjB,WAAU,OAAO,KAAK;AAEvB,KAAI,UAAe;;;;;ACjGrB,MAAM,gBAAgB,EACrB,MACA,YACA,UACA,MACA,KACA,QACA,QACA,YACA,QACA,qBACsC;CACtC,MAAM,QAAQ,KAAK,KAAK,SAAS;CACjC,MAAM,aAAa,KAAK,eAAe;CACvC,MAAM,gBAAgB,KAAK,eAAe;AAE1C,QACC,oBAAC;EACM;EACN,MAAM,GAAG;EACG;EACF;EACJ;EACD;EACG;EACA;EACR,WAAU;EACE;EACZ,QAAQ;EACR,WAAW;EACX,QAAQ,GAAG,OAAO,WAAW;GAC5B;;AAIJ,MAAa,eAAe,EAC3B,OAAO,EAAE,EACT,mBAAmB,OACnB,iBAAiB,OACjB,MACA,KACA,YACA,aAC8D;CAC9D,MAAM,EAAE,iBAAiB,UAAU,WAAW,gBAAgB;CAC9D,MAAM,WAAW,WAAW,KAAK;CAEjC,MAAM,aAAa,mBAAmB,MAAM,IAAI;CAChD,MAAM,gBAAgB,qBAAqB,MAAM,IAAI;CACrD,MAAM,gBAAgB,sBAAsB,MAAM,IAAI;AAEtD,QACC,qBAAC,WAAW,2BACX,oBAAC;EAAK,WAAW,uBAAuB,WAAW,cAAc;YAC/D,KAAK,KAAK,SAAS,UAAU;GAC7B,MAAM,cAAc,CAAC,GAAG,MAAM,MAAM;GACpC,MAAM,UAAU,YAAY,KAAK,IAAI;GACrC,MAAM,iBAAiB,YAAY,OAAO,iBAAiB,CAC1D,GAAG,MACH,MACA,CAAC;AACF,UACC,oBAAC;IAEA,MAAM;IACM;IACF;IACV,MAAM;IACN,KAAK,WAAW;IAChB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACV;IACJ;IACQ;MAVX,QAWJ;IAEF;GACI,EACN,CAAC,WACD,oBAAC,sBACA,oBAAC,WAAW;EACX,QAAQ,GAAG,OAAO;EACR;EACV,eAAe;AACd,QAAK,YAAY;AAEhB,WADgB,CAAC,GAAG,SAAS,cAAc,OAAO;KAEjD;;YAGH,oBAAC,WAAW,YAAU;GACH,GACZ,GACN,QACqB;;;;;AC5D5B,MAAM,kBAAkB,EACvB,MACA,YACA,UACA,MACA,KACA,QACA,QACA,QACA,YACA,QACA,qBACwC;CACxC,MAAM,MAAM,KAAK,KAAK,SAAS;CAC/B,MAAM,aAAa,KAAK,eAAe;CACvC,MAAM,gBAAgB,KAAK,eAAe;AAE1C,QACC,oBAAC;EACM;EACN,MAAM,GAAG;EACG;EACF;EACJ;EACD;EACG;EACA;EACA;EACR,WAAU;EACE;EACZ,QAAQ;EACR,WAAW;EACX,QAAQ,GAAG,OAAO,YAAY;GAC7B;;AAIJ,MAAa,gBAA4C,EACxD,OAAO,EAAE,EACT,mBAAmB,OACnB,iBAAiB,OACjB,MACA,KACA,YACA,aACgD;CAChD,MAAM,EAAE,iBAAiB,UAAU,WAAW,gBAAgB;CAE9D,MAAM,WAAW,WAAW,KAAK;CAEjC,MAAM,eAAe,OACpB,OAAO,KAAK,KAAK,CAAC,QAChB,KAAK,QAAiB;AACtB,MAAI,OAAO;AACX,SAAO;IAER,EAAE,CACF,CACD;CAED,MAAM,cAAc,oBAAoB,MAAM,IAAI;CAClD,MAAM,iBAAiB,qBAAqB,MAAM,KAAK,aAAa;CACpE,MAAM,iBAAiB,qBAAqB,MAAM,IAAI;CACtD,MAAM,iBAAiB,sBAAsB,MAAM,IAAI;CACvD,MAAM,iBAAiB,mBAAmB,MAAM,IAAI;CACpD,MAAM,oBAAoB,8BAA8B,MAAM,IAAI;AAElE,QACC,qBAAC,WAAW,4BACX,oBAAC;EAAI,WAAW,yBAAyB,WAAW,cAAc;YAChE,OAAO,KAAK,KAAK,CAAC,KAAK,QAAQ;GAC/B,MAAM,cAAc,aAAa,QAAQ;GACzC,MAAM,eAAe,CAAC,GAAG,MAAM,IAAI;GAEnC,MAAM,gBADuB,CAAC,GAAG,MAAM,YAAY,CACR,KAAK,IAAI;GACpD,MAAM,iBAAiB,YAAY,OAAO,iBAAiB,CAC1D,GAAG,MACH,IACA,CAAC;AAEF,UACC,oBAAC;IAEA,MAAM;IACM;IACF;IACV,MAAM,KAAK;IACX,KAAK,YAAY;IACjB,QAAQ,eAAe;IACvB,QAAQ,eAAe;IACvB,QAAQ,eAAe;IACX;IACJ;IACQ;MAXX,cAYJ;IAEF;GACG,EACL,WAAW,OACX,qBAAC,uBACA,oBAAC,WAAW;EACD;EACV,QAAQ,GAAG,OAAO;EAClB,eAAe;AACd,qBAAkB,gBAAgB,SAAS,EAAE;;YAG9C,oBAAC,WAAW,YAAU;GACH,EACpB,oBAAC,WAAW;EACX,QAAQ,GAAG,OAAO;EAClB,eAAe;AACd,mBAAgB;;EAEP;YACV;GAEmB,IACZ,IAEgB;;;;;AClL7B,MAAa,iBAAiB,EAC7B,OAAO,EAAE,EACT,mBAAmB,OACnB,MACA,KACA,YACA,aAEA,oBAAC,WAAW,4BACX,oBAAC;CACA,UAAU,WAAW,KAAK;CAC1B,eAAa,GAAG,OAAO;CACvB,MAAK;CACL,SAAS;CACT,WAAW,UAAU;AACpB,MAAI,MAAM,OAAO,QAAQ;;EAEzB,GACyB;AAG7B,MAAa,cAAc,EAC1B,YACA,aAEA,oBAAC,WAAW,QAAK,QAAQ,GAAG,OAAO,SAAU;AAG9C,MAAa,gBAAgB,EAC5B,OAAO,EAAE,EACT,mBAAmB,OACnB,MACA,KACA,YACA,aAEA,oBAAC,WAAW,2BACX,oBAAC;CACA,UAAU,WAAW,KAAK;CAC1B,QAAQ,GAAG,OAAO;CAClB,OAAO;CACP,KACC,WAAW,KAAK,GACb,UACC,aAAa;AACd,MAAI,OAAO,SAAS,CAAC;;CAGzB,UAAU;EACT,GACwB;AAG5B,MAAa,gBAAgB,EAC5B,OAAO,EAAE,EACT,mBAAmB,OACnB,MACA,KACA,YACA,aACqD;AACrD,QACC,oBAAC,WAAW,2BACX,oBAAC;EACA,UAAU,WAAW,KAAK;EAC1B,QAAQ,GAAG,OAAO;EAClB,OAAO;EACP,KAAK,WAAW,KAAK,GAAG,SAAY;EACpC,UAAU;GACT,GACwB;;;;;AC3D7B,MAAaC,aAGT;CACH,OAAO;CACP,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR;AAkBD,MAAa,cAAkB,EAC9B,MACA,KACA,MACA,QACA,QACA,OAAO,EAAE,EACT,mBAAmB,OACnB,iBAAiB,OACjB,WACA,QACA,OACA,YAAY,mBAAmB,EAAE,EACjC,aACuC;CACvC,MAAM,aAAa;EAClB,GAAG;EACH,GAAG;EACH;AAED,QACC,oBAAC;EACM;EACD;EACC;EACE;EACA;EACF;EACM;EACF;EACC;EACH;EACD;EACK;EACJ;GACP;;;;;ACzEJ,MAAaC,eAEP,EAAE,YAAY;CACnB,MAAM,MAAM,KAAK,MAAM;CACvB,MAAM,OAAO,KAAK,MAAM;CACxB,MAAM,WAAW,MAAM,SACpB,CAAC,MAAM,OAAO,KAAK,MAAM,OAAO,OAAO,GACvC,CAAC,MAAM,IAAI;AACd,QACC,oBAAC;EACA,QAAQ,GAAG,MAAM,IAAI;EACf;EACD;EACL,MAAM;GACL;;AAIJ,MAAaC,0BAEP,EAAE,YAAY;CACnB,MAAM,OAAO,KAAK,MAAM;CACxB,MAAM,WAAW,MAAM,SACpB,CAAC,MAAM,OAAO,KAAK,MAAM,OAAO,OAAO,GACvC,CAAC,MAAM,IAAI;AACd,QACC,oBAAC;EACA,QAAQ,GAAG,MAAM,IAAI;EACf;EACN,WAAW;EACX,kBAAkB;EAClB,MAAM;GACL;;AAIJ,MAAaC,eAIP,EAAE,YAAY;AACnB,SAAQ,MAAM,MAAd;EACC,KAAK;EACL,KAAK,yBACJ,QAAO,oBAAC,0BAA8B,QAAS;EAChD,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,eACJ,QAAO,oBAAC,eAAmB,QAAS;;;;;;AC7BvC,MAAaC,sBAKP,EAAE,MAAM,aAAa,WAAW,cAAc;CACnD,MAAM,EAAE,gBAAgB,UAAU,WAAW,gBAAgB;CAE7D,MAAM,YAAY,KAAK,YAAY;CACnC,MAAM,SAAS,KAAK,YAAY;CAEhC,MAAM,QAAQ,KAAK,KAAK;CACxB,MAAM,oBAAoB,KAAK,UAAU;CACzC,MAAM,YACL,6BAA6B,UAAU,YAAY;CAEpD,MAAM,cAAc,QAAQ,kBAAkB,OAAO,MAAM,CAAC;CAE5D,MAAM,OAAO,KAAK,SAAS,CAAC,KAAK,OAAO,KAAK,KAAK,OAAO,OAAO,GAAG,CAAC,KAAK,IAAI;AAE7E,QACC,8CACC,qBAAC,uBACA,qBAAC;EACA,eAAe;AACd,WAAQ,IAAI,MAAM,aAAa,OAAO,KAAK,CAAC;;EAE7C,eAAe;AACd,WAAQ,IAAI,MAAM,aAAa,OAAO,KAAK,CAAC;;;GAG7C,oBAAC,OAAO;IACP,QAAQ,UAAU,CAAC;IACnB,QAAQ,oBAAoB,KAAK;IACjC,oBAAoB;AACnB,kBAAa,OAAO,gBAAgB,WAAW,CAAC,CAAC,MAAM,OAAO;AAC9D,YAAO;;IAEG;IACX,UAAU;KACT;GACF,oBAAC,kBAAI,KAAK,QAAQ,UAAU,KAAK,MAAS;GAC1C,qBAAC;IAAK,WAAU;;KAAc;KAAE;KAAU;;KAAQ;;GAC5C,EACP,qBAAC,uBACC,cACA,oBAAC,eAAY,OAAO,OAAQ,GAE5B,oBAAC;EAAI,WAAU;YAAe,KAAK,UAAU,MAAM;GAAO,EAE1D,UACA,oBAAC,+BAA+B;EAC/B,eAAe;AACd,cAAW;;EAEZ,QAAQ,GAAG,KAAK,IAAI;YAEpB,oBAAC,+BAA+B,eAAa;GACN,GACrC,QACI,IACD,EACR,UAAU,CAAC,cACX,oBAAC,oBACA,oBAAC,eAAY,OAAO,OAAQ,GACtB,GACJ,QACF;;AAGL,MAAaC,sBAGP,EAAE,MAAM,kBAAkB;CAC/B,MAAM,YAAY,KAAK,YAAY;CACnC,MAAM,SAAS,KAAK,YAAY;CAEhC,MAAM,EAAE,eAAe,iBAAiB,gBAAgB,UACvD,WAAW,gBAAgB;AAE5B,MAAK,MAAM,CAAC,KAAK,cAAc,KAAK,eAAe;AAClD,cAAY,OAAO,iBAAiB,CAAC,IAAI,CAAC;AAC1C,cAAY,OAAO,eAAe,UAAU,IAAI;;AAEjD,QACC,8CACC,oBAAC,sBACA,qBAAC;EACA,oBAAC,OAAO;GACC;GACR,QAAQ,2BAA2B,KAAK;GACxC,oBAAoB;AACnB,iBACC,OACA,gBACA,WAAW,CACX,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO;AACrB,WAAO;;GAEG;IACV;EACF,oBAAC,kBAAI,KAAK,MAAS;EACnB,oBAAC;GAAK,WAAU;aAAc;IAAgB;KACxC,GACC,EACR,SACE,CAAC,GAAG,KAAK,cAAc,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,eAC7C,oBAAC;EAEA,MAAM;EACN,aAAa,YAAY,OAAO,iBAAiB,CAAC,KAAK,KAAK,IAAI,CAAC;EACjE,WAAW,YAAY,OAAO,eAAe,UAAU,IAAI;EAC3D,eAAe;AACd,oBAAiB,OAAO,UAAU;;IAL9B,IAOJ,CACD,GACD,QACD;;AAIL,MAAaC,kBAOP,EAAE,MAAM,aAAa,WAAW,cAAc;AACnD,QACC,oBAAC;EAAQ,WAAU;EAAa,eAAa,SAAS,KAAK;YACzD,UAAU,OACV,oBAAC;GACM;GACO;GACF;GACF;IACR,GAEF,oBAAC;GAAyB;GAAmB;IAAe;GAEpD;;AAIZ,MAAaC,cAEP,EAAE,iBAAiB;CACxB,MAAM,WAAW,KAAK,WAAW;CAEjC,MAAM,EAAE,eAAe,iBAAiB,UAAU,WAAW,gBAAgB;CAC7E,MAAM,aAAa,WAAW,IAAI,SAAS,OAAO,GAAG,UAAU;AAE/D,QACC,oBAAC;EAAQ,WAAU;EAAoB,eAAY;YACjD,SAAS,SAAS,IAClB,qBAAC;GAAE,WAAU;;IAAoB;IAAK;IAAW;;IAAK,GAEtD,CAAC,GAAG,SAAS,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU;AAC5C,UACC,oBAAC;IAEM;IACN,aAAa,YAAY,OAAO,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC5D,WAAW,YAAY,OAAO,eAAe,KAAK,IAAI;MAHjD,IAIJ;IAEF;GAEM;;;;;ACvLZ,MAAMC,gBAGA,EAAE,iBAAiB;AACxB,QACC,qBAAC;EAEA,WAAU;EACV,eAAe;AACd,WAAQ,IAAI,WAAW;;EAExB,eAAe;AACd,WAAQ,IAAI,WAAW;;aAGxB,qBAAC;GAAK,WAAU;cAAU,WAAW,MAAM,KAAI;IAAS,EACxD,oBAAC,oBACA,oBAAC;GAAK,WAAU;aAEd,WAAW,KACV,WAAW,OAAO,UAClB,WAAW,OAAO,SAClB,CAAC;IAEG,GACD;IAnBF,WAAW,MAAM,IAoBb;;AAIZ,MAAMC,uBAGA,EAAE,cAAc,wBAAwB;AAC7C,QACC,qBAAC;EACA,WAAU;EACV,eAAa,sBAAsB,kBAAkB,MAAM,IAAI,GAAG;aAElE,oBAAC,sBACA,oBAAC,kBAAI,eAAkB,GACf,EACT,qBAAC;GACA,qBAAC;IAAQ,WAAU;eAClB,oBAAC;KAAK,WAAU;eAAS;MAAe,EACvC,kBAAkB,OAAO,KAAK,OAAO,UAAU;AAC/C,YACC,qBAAC;MAEA,WAAU;MACV,eAAe;AACd,eAAQ,IAAI,kBAAkB;;MAE/B,eAAe;AACd,eAAQ,IAAI,kBAAkB;;iBAG/B,qBAAC;OAAK,WAAU;kBAAU,aAAa,MAAM,EAAC;QAAS,EACvD,oBAAC;OAAK,WAAU;iBACd,OAAO,UAAU,YAClB,UAAU,QACV,UAAU,SACV,YAAY,QACT,KAAK,UAAU,MAAM,KAAK,GAC1B,KAAK,UAAU,MAAM;QAClB;QAjBF,UAAU,MAkBN;MAEV;KACO;GACV,qBAAC;IAAQ,WAAU;;KAClB,oBAAC;MAAK,WAAU;gBAAS;OAAe;KACxC,oBAAC;MAAK,WAAU;gBACd,aAAa,kBAAkB,OAAO;OACjC;KACN,kBAAkB,SAClB,qBAAC;MAAK,WAAU;iBAAU,MACtB,KAAK,UAAU,kBAAkB,OAAO;OACrC,GACJ;;KACK;GACV,qBAAC;IAAQ,WAAU;eAClB,oBAAC;KAAK,WAAU;eAAS;MAAe,EACvC,kBAAkB,UACjB,QACC,eACA,WAAW,SAAS,uBACpB,WAAW,SAAS,uBACpB,WAAW,SAAS,uBACpB,WAAW,SAAS,oBACpB,WAAW,SAAS,oBACpB,CAAC,WAAW,MAAM,IAAI,WAAW,QAAQ,CAC1C,CACA,KAAK,QAAQ,UAAU;AACvB,aAAQ,OAAO,MAAf;MACC,KAAK,cACJ,QACC,oBAAC,QAAQ;OAER,cAAc;OACd,YAAY;SAFP,GAAG,kBAAkB,MAAM,IAAI,GAAG,MAAM,GAAG,OAAO,MAAM,MAG5D;MAEJ,KAAK,sBACJ,QACC,oBAAC;OAEA,cAAc;OACd,mBAAmB;SAFd,GAAG,kBAAkB,MAAM,IAAI,GAAG,MAAM,GAAG,OAAO,MAAM,MAG5D;MAEJ,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK,iBACJ,QAAO;;MAER;KACM;MACJ;GACE;;AAIZ,MAAaC,oBAGP,EAAE,gBAAgB,mBAAmB;AAC1C,QAAO,eAAe,SAAS,iBAC9B,eAAe,SAAS,qBACxB,eAAe,SAAS,wBACxB,qBAAC;EACA,WAAU;EACV,eAAa,mBAAmB,OAAO,eAAe,MAAM,QAAQ,WAAW,eAAe,MAAM,MAAM,cAAc,eAAe,MAAM,IAAI,CAAC,GAAG;aAErJ,oBAAC,sBACA,qBAAC;GACC,eAAe;GAAU;GAAG,eAAe;GAAK;GAChD,eAAe,MAAM;GAAI;MACtB,GACG,EACT,oBAAC,oBACC,eAAe,SAAS,wBACxB,eAAe,UACb,QACC,aACA,SAAS,SAAS,uBAClB,SAAS,SAAS,uBAClB,SAAS,SAAS,uBAClB,SAAS,SAAS,oBAClB,SAAS,SAAS,oBAClB,CAAC,SAAS,MAAM,IAAI,WAAW,QAAQ,CACxC,CACA,KAAK,UAAU,UAAU;AACzB,WAAQ,SAAS,MAAjB;IACC,KAAK,cACJ,QACC,oBAAC,QAAQ;KAER,cAAc;KACd,YAAY;OAFP,GAAG,eAAe,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,MAAM,MAG3D;IAEJ,KAAK,sBACJ,QACC,oBAAC;KAEA,cAAc;KACd,mBAAmB;OAFd,GAAG,eAAe,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,MAAM,MAG3D;IAEJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK,iBACJ,QAAO;;IAER,GACA,eAAe,SAAS,oBAC3B,eAAe,UACb,QACC,oBAAoB,CAAC,gBAAgB,MAAM,IAAI,WAAW,QAAQ,CACnE,CACA,KAAK,OAAO,UAAU;AACtB,WAAQ,MAAM,MAAd;IACC,KAAK,cACJ,QACC,oBAAC,QAAQ;KAER,cAAc;KACd,YAAY;OAFP,GAAG,eAAe,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,MAAM,MAGxD;IAEJ,KAAK,iBACJ,QAAO;;IAER,GACA,eAAe,SAAS,gBAC3B,oBAAC,QAAQ;GACR,cAAc,eAAe;GAC7B,YAAY;IACX,GACC,OACE;GACE,GACP;;AAGL,MAAaC,UAIT;CACH,YAAY;CACZ,mBAAmB;CACnB,gBAAgB;CAChB;;;;ACzND,MAAaC,mBAAuB;AACnC,QAAO,oBAAC;EAAK,WAAU;YAAe;GAAmB;;AAG1D,MAAaC,eAIP,EAAE,OAAO,aAAa,oBAAoB;CAC/C,MAAM,WAAW,KAAK,cAAc;CACpC,MAAM,SAAS,KAAK,YAAY;CAChC,MAAM,YAAY,KAAK,YAAY;AAEnC,QACC,qBAAC;EAAQ,WAAU;EAAoB,eAAa,YAAY,MAAM;aACrE,qBAAC,uBACA,oBAAC,OAAO;GACC;GACR,QAAQ,uBAAuB,MAAM;GAC1B;IACV,EACF,qBAAC;GACA,oBAAC,kBAAI,MAAM,MAAS;GACpB,qBAAC;IAAK,WAAU;;KAAgB;KAC7B,SAAS;KAAG;KAAE,SAAS,QAAQ;KAAO;;KAClC;GACP,oBAAC,UAAK,WAAU,QAAQ;GACxB,qBAAC,oBACA,oBAAC;IACA,MAAK;IACL,eAAe;AACd,UAAK,MAAM;;IAEZ,UAAU,SAAS,OAAO;cAC1B;KAEQ,EACT,oBAAC;IACA,MAAK;IACL,eAAe;AACd,UAAK,MAAM;;IAEZ,UAAU,SAAS,OAAO,SAAS,QAAQ;cAC3C;KAEQ,IACJ;MACA,IACC,EACR,SACA,oBAAC,oBACC,SAAS,QAAQ,KAAK,QAAQ,UAC9B,OAAO,SAAS,oBAChB,OAAO,SAAS,mBACf,qBAAC;GACC,UAAU,SAAS,KAAK,oBAAC,eAAa,GAAG;GAC1C,oBAAC,QAAQ;IACR,gBAAgB;IAChB,cAAc;KACb;GACD,UAAU,SAAS,QAAQ,SAAS,KACrC,SAAS,OAAO,SAAS,QAAQ,SAChC,oBAAC,eAAa,GACX;OATU,OAAO,MAAM,MAAM,QAAQ,SAAS,GAUxC,GACR,KACJ,GACK,GACJ;GACK;;AAIZ,MAAaC,sBAA0B;CACtC,MAAM,EAAE,eAAe,mBAAmB,iBAAiB,UAC1D,WAAW,gBAAgB;CAE5B,MAAM,WAAW,KAAK,cAAc;AAEpC,QACC,oBAAC;EAAQ,WAAU;EAAuB,eAAY;YACpD,SAAS,WAAW,IACpB,oBAAC;GAAE,WAAU;aAAoB;IAAkB,GAEnD,SACE,QAAQ,UAAU,CAAC,MAAM,IAAI,WAAW,QAAQ,CAAC,CACjD,KAAK,UAAU;AACf,UACC,oBAAC;IAEO;IACP,aAAa,YAAY,OAAO,iBAAiB,CAAC,MAAM,IAAI,CAAC;IAC7D,eAAe,YAAY,OAAO,mBAAmB,MAAM,IAAI;MAH1D,MAAM,IAIV;IAEF;GAEK;;;;;ACjGZ,MAAaC,kBAMP,EAAE,OAAO,aAAa,eAAe;CAC1C,MAAM,MAAM,KAAK,SAAS;CAC1B,MAAM,SAAS,KAAK,YAAY;CAChC,MAAM,YAAY,KAAK,YAAY;AAEnC,QACC,qBAAC;EACA,WAAU;EACV,eAAa,eAAe,MAAM;aAElC,qBAAC,uBACA,qBAAC,qBACA,oBAAC,OAAO;GACC;GACR,QAAQ,0BAA0B,MAAM;GAC7B;IACV,EACF,oBAAC,kBAAI,MAAM,MAAS,IACd,EACP,qBAAC;GAAK,WAAU;;IAAgB;IAAE,IAAI;IAAO;;IAAQ,IAC7C,EACR,SACA,oBAAC,oBACC,IAAI,KAAK,QAAQ,UACjB,oBAAC,QAAQ;GAER,cAAc;GACd,mBAAmB;KAFd,OAAO,MAAM,MAAM,MAGvB,CACD,GACI,GACJ;GACK;;AAIZ,MAAaC,yBAA6B;CACzC,MAAM,EAAE,kBAAkB,yBAAyB,iBAAiB,UACnE,WAAW,gBAAgB;CAE5B,MAAM,WAAW,KAAK,iBAAiB;AACvC,QACC,oBAAC;EAAQ,WAAU;EAA0B,eAAY;YACvD,SAAS,WAAW,IACpB,oBAAC;GAAE,WAAU;aAAoB;IAAqB,GAEtD,SACE,QAAQ,UAAU,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC,CAC9C,KAAK,UAAU;AACf,UACC,oBAAC;IAEO;IACP,aAAa,YAAY,OAAO,iBAAiB,CAAC,MAAM,IAAI,CAAC;IAC7D,UAAU,YAAY,OAAO,yBAAyB,MAAM,IAAI;MAH3D,MAAM,IAIV;IAEF;GAEK;;;;;ACpEZ,MAAaC,kBAAyD,EACrE,gBAAgB,YACX;CACL,MAAM,QAAQ,WAAW,aAAa;AACtC,QACC,oBAAC,gBAAgB;EAAS,OAAO,qBAAqB,OAAO,cAAc;YAC1E,oBAAC,2BAAyB;GACA;;AAI7B,MAAM,+BAAgD;CACrD,MAAM,iBAAiB,OAAO,KAAK;CAEnC,MAAM,EACL,WACA,eACA,uBACA,qBACA,2BACA,4BACG,WAAW,gBAAgB;CAE/B,MAAM,oBAAoB,KAAK,sBAAsB;CAErD,MAAM,qBAAqB,KAAK,oBAAoB;CACpD,MAAM,kBAAkB,KAAK,oBAAoB;CACjD,MAAM,kBAAkB,KAAK,0BAA0B;CACvD,MAAM,eAAe,KAAK,0BAA0B;CACpD,MAAM,sBAAsB,KAAK,wBAAwB;CAEzD,MAAM,gBAAgB,OAAO,MAAM;AAEnC,QACC,qBAAC;EACA,OAAO;GACN,UAAU;GACV,KAAK;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,eAAe;GACf;aAED,oBAAC,OAAO;GACP,KAAK;GACL,YAAS;GACT,OAAO;IACN,UAAU;IACV,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,eAAe;IACf;IACA,EACD,oBAAoB,OACpB,qBAAC,OAAO;GACP;GACA,iBAAiB;GACjB,YAAS;GACT,eAAY;GACZ,YAAY;IAAE,MAAM;IAAU,QAAQ;IAAM;GAC5C,OACC,kBACG,EAAE,GACF;IACA,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,UAAU;IACV;cAGH,kBACA,8CACC,qBAAC,OAAO,qBACP,oBAAC,kBAAG,YAAY,EAChB,oBAAC,mBACC,oBAAoB,KAAK,eACzB,oBAAC;IAEA,MAAK;IACL,eAAa,QAAQ;IACrB,WAAW,eAAe,eAAe,WAAW;IACpD,eAAe;AACd,qBAAgB,WAAW;;IAE5B,UAAU,eAAe;cAExB;MATI,WAUG,CACR,GACG,IACS,EAChB,oBAAC,OAAO,kBACP,oBAAC,yBACC,iBAAiB,UACjB,oBAAC,cAAW,YAAY,YAAa,GAClC,iBAAiB,cACpB,oBAAC,cAAW,YAAY,gBAAiB,GACtC,iBAAiB,iBACpB,oBAAC,qBAAmB,GAEpB,oBAAC,kBAAgB,GAEL,GACD,IACZ,GACA,MACJ,oBAAC,sBACA,oBAAC;IACA,MAAK;IACL,mBAAoB,cAAc,UAAU;IAC5C,mBAAoB,cAAc,UAAU;IAC5C,iBAAiB;AAChB,SAAI,CAAC,cAAc,QAClB,qBAAoB,SAAS,CAAC,KAAK;;cAGrC;KAEQ,GACD;IACI;GAET"}
|
package/dist/realtime/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { DEFAULT_USER_IN_ROOM_META, UserInRoomMeta, roomIndex, usersInMyRoomView, usersInRooms, usersInThisRoomIndex } from "../shared-room-store-D2o4ZLjC.js";
|
|
2
|
+
import { AtomFamilyToken, AtomToken, ReadableFamilyToken, ReadableToken, TokenType, TransactionToken } from "atom.io";
|
|
1
3
|
import { Canonical } from "atom.io/json";
|
|
2
|
-
import { AtomFamilyToken, AtomToken, JoinToken, MutableAtomToken, ReadableFamilyToken, ReadableToken, ReadonlyPureSelectorFamilyToken, TokenType, TransactionToken } from "atom.io";
|
|
3
|
-
import { SetRTX } from "atom.io/transceivers/set-rtx";
|
|
4
4
|
import { UserKey } from "atom.io/realtime-server";
|
|
5
5
|
|
|
6
|
+
//#region src/realtime/mutex-store.d.ts
|
|
7
|
+
declare const mutexAtoms: AtomFamilyToken<boolean, Canonical>;
|
|
8
|
+
//#endregion
|
|
6
9
|
//#region src/realtime/realtime-continuity.d.ts
|
|
7
|
-
declare class InvariantMap<K, V> extends Map<K, V> {
|
|
10
|
+
declare class InvariantMap<K, V> extends Map<K, V> implements ReadonlyMap<K, V> {
|
|
8
11
|
set(key: K, value: V): this;
|
|
9
|
-
clear(): void;
|
|
10
12
|
}
|
|
11
13
|
type PerspectiveToken<F extends AtomFamilyToken<any>> = {
|
|
12
14
|
type: `realtime_perspective`;
|
|
@@ -39,15 +41,5 @@ type ContinuityOptions = {
|
|
|
39
41
|
};
|
|
40
42
|
declare function continuity(options: ContinuityOptions): ContinuityToken;
|
|
41
43
|
//#endregion
|
|
42
|
-
|
|
43
|
-
declare const usersInThisRoomIndex: MutableAtomToken<SetRTX<string>>;
|
|
44
|
-
declare const roomIndex: MutableAtomToken<SetRTX<string>>;
|
|
45
|
-
type UserInRoomMeta = {
|
|
46
|
-
enteredAtEpoch: number;
|
|
47
|
-
};
|
|
48
|
-
declare const DEFAULT_USER_IN_ROOM_META: UserInRoomMeta;
|
|
49
|
-
declare const usersInRooms: JoinToken<`room`, string, `user`, string, `1:n`, UserInRoomMeta>;
|
|
50
|
-
declare const usersInMyRoomView: ReadonlyPureSelectorFamilyToken<MutableAtomToken<SetRTX<string>>[], string>;
|
|
51
|
-
//#endregion
|
|
52
|
-
export { ContinuityOptions, ContinuityToken, DEFAULT_USER_IN_ROOM_META, InvariantMap, PerspectiveToken, SyncGroup, UserInRoomMeta, continuity, roomIndex, usersInMyRoomView, usersInRooms, usersInThisRoomIndex };
|
|
44
|
+
export { ContinuityOptions, ContinuityToken, DEFAULT_USER_IN_ROOM_META, InvariantMap, PerspectiveToken, SyncGroup, UserInRoomMeta, continuity, mutexAtoms, roomIndex, usersInMyRoomView, usersInRooms, usersInThisRoomIndex };
|
|
53
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["mutexAtoms: AtomFamilyToken<boolean, Canonical>"],"sources":["../../src/realtime/mutex-store.ts","../../src/realtime/realtime-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;cAIaA,YAAY,yBAAyB;;;cCcrC,kBDdb,SCcwC,GDd3BA,CCc+B,CDd/BA,ECckC,CDdG,CAAA,YCcW,WDdX,CCcuB,CDdvB,ECc0B,CDd1B,CAAA,CAAA;EAAA,GAAA,CAAA,GAAA,ECejC,CDfiC,EAAA,KAAA,ECevB,CDfuB,CAAA,EAAA,IAAA;;AAAzB,KC2Bb,gBD3Ba,CAAA,UC2Bc,eD3Bd,CAAA,GAAA,CAAA,CAAA,GAAA;EAAA,IAAA,EAAA,sBAAA;iBC6BT;aACJ,oBAAoB,cAAc,UAAU,OAAO;;AAhBlD,KAmBD,eAAA,GAnBC;EAAA,SAAA,IAAA,EAAA,YAAA;WAA+B,GAAA,EAAA,MAAA;WAAG,OAAA,EAsB5B,SAtB4B,CAAA,GAAA,CAAA,EAAA;WAA0B,OAAA,EAuBtD,gBAvBsD,CAAA,GAAA,CAAA,EAAA;WAAG,YAAA,EAwBpD,gBAxBoD,CAwBnC,eAxBmC,CAAA,GAAA,EAwBd,SAxBc,CAAA,CAAA,EAAA;;AACjD,cA0Bd,SAAA,CA1Bc;QADa,YAAA;YAAqB,OAAA,EA8BzC,SA9ByC,CAAA,GAAA,CAAA,EAAA;EAAA,UAAA,OAAA,EA+BzC,gBA/ByC,CAAA,GAAA,CAAA,EAAA;EAa7D,UAAY,YAAA,EAmBa,gBAnBb,CAAA,GAAA,CAAA,EAAA;EAAA,mBAAA,GAAA,EAAA,MAAA;YAA2B,WAAA,CAAA,GAAA,EAAA,MAAA;SAEvB,QAAA,EAwBS,YAxBT,CAAA,MAAA,EAwB8B,eAxB9B,CAAA;SACwC,MAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,KAAA,EA2BrC,SA3BqC,EAAA,GA2BvB,SA3BuB,CAAA,EA4BpD,eA5BoD;SAAV,KAAA,EAoCxB,SApCwB,CAAA,GAAA,CAAA,EAAA,CAAA,EAoCL,SApCK;SAAd,IAAA,EAqCX,gBArCW,CAAA,GAAA,CAAA,EAAA,CAAA,EAqCe,SArCf;gBAuCpB,eAvCA,CAAA,GAAA,CAAA,EAAA,WAwCA,CAxCA,SAwCU,eAxCV,CAAA,KAAA,EAAA,CAAA,GAwCqC,CAxCrC,GAAA,KAAA,EAGZ,CAAA,MAAY,EAuCF,eAvCE,CAuCc,CAvCd,EAAA,GAAA,CAAA,EAAA,KAAA,EAwCH,mBAxCG,CAwCiB,QAxCjB,CAwC0B,SAxC1B,CAwCoC,CAxCpC,CAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EAyCR,SAzCQ;;AAGO,KA0EP,iBAAA,GA1EO;aACA;QAC2C,EAAA,CAAA,KAAA,EA0E7C,SA1E6C,EAAA,GA0E/B,SA1E+B;;AAAtC,iBA6ER,UAAA,CA7EQ,OAAA,EA6EY,iBA7EZ,CAAA,EA6EgC,eA7EhC"}
|