react-state-inspector-devtools 1.1.22 → 1.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -53,7 +53,7 @@ function styleInject(css, { insertAt } = {}) {
53
53
  }
54
54
 
55
55
  // src/index.css
56
- styleInject('@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";\n[data-rsi-root],\n[data-rsi-root] *,\n[data-rsi-root] *::before,\n[data-rsi-root] *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n font-weight: 400;\n font-style: normal;\n font-variant: normal;\n line-height: 1.5;\n letter-spacing: normal;\n text-align: left;\n text-decoration: none;\n text-indent: 0;\n text-shadow: none;\n text-transform: none;\n word-spacing: normal;\n white-space: normal;\n background: transparent;\n color: inherit;\n outline: none;\n vertical-align: baseline;\n visibility: visible;\n opacity: 1;\n transform: none;\n transform-origin: 50% 50% 0;\n animation: none;\n transition: none;\n list-style: none;\n border-collapse: collapse;\n border-spacing: 0;\n float: none;\n clear: none;\n cursor: auto;\n}\n[data-rsi-root] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #fff;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n[data-rsi-floating-button] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n[data-rsi-root] button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n margin: 0;\n}\n[data-rsi-root] input,\n[data-rsi-root] textarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n margin: 0;\n resize: none;\n}\n[data-rsi-root] input::placeholder,\n[data-rsi-root] textarea::placeholder {\n color: inherit;\n opacity: 0.5;\n}\n[data-rsi-root] a {\n color: inherit;\n text-decoration: none;\n}\n[data-rsi-root] img,\n[data-rsi-root] svg {\n display: block;\n max-width: 100%;\n}\n[data-rsi-root] h1,\n[data-rsi-root] h2,\n[data-rsi-root] h3,\n[data-rsi-root] h4,\n[data-rsi-root] h5,\n[data-rsi-root] h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n[data-rsi-root] ::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n[data-rsi-root] ::-webkit-scrollbar-track {\n background: transparent;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2);\n border-radius: 3px;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n[data-rsi-root] ::selection {\n background: rgba(99, 102, 241, 0.4);\n color: #fff;\n}\n[data-rsi-root] :focus-visible {\n outline: 2px solid rgba(99, 102, 241, 0.6);\n outline-offset: 2px;\n}\n');
56
+ styleInject('@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";\n[data-rsi-root],\n[data-rsi-root] *,\n[data-rsi-root] *::before,\n[data-rsi-root] *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n font-weight: 400;\n font-style: normal;\n font-variant: normal;\n line-height: 1.5;\n letter-spacing: normal;\n text-align: left;\n text-decoration: none;\n text-indent: 0;\n text-shadow: none;\n text-transform: none;\n word-spacing: normal;\n white-space: normal;\n background: transparent;\n color: inherit;\n outline: none;\n vertical-align: baseline;\n visibility: visible;\n opacity: 1;\n transform: none;\n transform-origin: 50% 50% 0;\n animation: none;\n transition: none;\n list-style: none;\n border-collapse: collapse;\n border-spacing: 0;\n float: none;\n clear: none;\n cursor: auto;\n}\n[data-rsi-root] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #fff;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n[data-rsi-floating-button] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n[data-rsi-root] button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n margin: 0;\n border-radius: 8px;\n}\n[data-rsi-root] input,\n[data-rsi-root] textarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n margin: 0;\n resize: none;\n}\n[data-rsi-root] input::placeholder,\n[data-rsi-root] textarea::placeholder {\n color: inherit;\n opacity: 0.5;\n}\n[data-rsi-root] a {\n color: inherit;\n text-decoration: none;\n}\n[data-rsi-root] img,\n[data-rsi-root] svg {\n display: block;\n max-width: 100%;\n}\n[data-rsi-root] h1,\n[data-rsi-root] h2,\n[data-rsi-root] h3,\n[data-rsi-root] h4,\n[data-rsi-root] h5,\n[data-rsi-root] h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n[data-rsi-root] ::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n[data-rsi-root] ::-webkit-scrollbar-track {\n background: transparent;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2);\n border-radius: 3px;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n[data-rsi-root] ::selection {\n background: rgba(99, 102, 241, 0.4);\n color: #fff;\n}\n[data-rsi-root] :focus-visible {\n outline: 2px solid rgba(99, 102, 241, 0.6);\n outline-offset: 2px;\n}\n');
57
57
 
58
58
  // src/provider.tsx
59
59
  var import_react = require("react");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/index.css","../src/provider.tsx","../src/store.ts","../src/hooks.ts","../src/StateInspectorUI.tsx","../src/ui/constants.ts","../src/ui/utils.ts","../src/ui/icons/DevtoolsIcon.tsx","../src/ui/components/FloatingButton.tsx","../src/ui/components/DockPreviewOverlay.tsx","../src/ui/components/ResizeHandle.tsx","../src/ui/components/SidebarResizer.tsx","../src/ui/components/DragHandle.tsx","../src/ui/styles.ts","../src/ui/components/SearchInput.tsx","../src/ui/components/ComponentList.tsx","../src/ui/components/StatePanelHeader.tsx","../src/ui/components/JsonEditor.tsx","../src/ui/components/StateEditor.tsx","../src/ui/components/StateCard.tsx","../src/ui/components/StateEditorPanel.tsx","../src/ui/icons/DragIcon.tsx","../src/ui/icons/CloseIcon.tsx","../src/ui/components/DockHeader.tsx"],"sourcesContent":["import \"./index.css\";\n\nexport * from \"./provider\";\nexport * from \"./store\";\nexport * from \"./hooks\";\nexport * from \"./StateInspectorUI\";\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"@import \\\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\\\";\\n[data-rsi-root],\\n[data-rsi-root] *,\\n[data-rsi-root] *::before,\\n[data-rsi-root] *::after {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n font-style: normal;\\n font-variant: normal;\\n line-height: 1.5;\\n letter-spacing: normal;\\n text-align: left;\\n text-decoration: none;\\n text-indent: 0;\\n text-shadow: none;\\n text-transform: none;\\n word-spacing: normal;\\n white-space: normal;\\n background: transparent;\\n color: inherit;\\n outline: none;\\n vertical-align: baseline;\\n visibility: visible;\\n opacity: 1;\\n transform: none;\\n transform-origin: 50% 50% 0;\\n animation: none;\\n transition: none;\\n list-style: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n float: none;\\n clear: none;\\n cursor: auto;\\n}\\n[data-rsi-root] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n line-height: 1.5;\\n color: #fff;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n text-rendering: optimizeLegibility;\\n}\\n[data-rsi-floating-button] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n[data-rsi-root] button {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n cursor: pointer;\\n background: transparent;\\n border: none;\\n padding: 0;\\n margin: 0;\\n}\\n[data-rsi-root] input,\\n[data-rsi-root] textarea {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n background: transparent;\\n border: none;\\n outline: none;\\n padding: 0;\\n margin: 0;\\n resize: none;\\n}\\n[data-rsi-root] input::placeholder,\\n[data-rsi-root] textarea::placeholder {\\n color: inherit;\\n opacity: 0.5;\\n}\\n[data-rsi-root] a {\\n color: inherit;\\n text-decoration: none;\\n}\\n[data-rsi-root] img,\\n[data-rsi-root] svg {\\n display: block;\\n max-width: 100%;\\n}\\n[data-rsi-root] h1,\\n[data-rsi-root] h2,\\n[data-rsi-root] h3,\\n[data-rsi-root] h4,\\n[data-rsi-root] h5,\\n[data-rsi-root] h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n[data-rsi-root] ::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb {\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 3px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\\n background: rgba(255, 255, 255, 0.3);\\n}\\n[data-rsi-root] ::selection {\\n background: rgba(99, 102, 241, 0.4);\\n color: #fff;\\n}\\n[data-rsi-root] :focus-visible {\\n outline: 2px solid rgba(99, 102, 241, 0.6);\\n outline-offset: 2px;\\n}\\n\")","import React, { createContext, useContext, useEffect, useId, useMemo } from \"react\";\nimport { createInspectorStore, InspectorComponentRef, InspectorStore } from \"./store\";\n\nconst InspectorContext = createContext<InspectorStore | null>(null);\n\nconst storeRef = { current: null as InspectorStore | null };\n\nfunction getStore(): InspectorStore {\n if (!storeRef.current) {\n storeRef.current = createInspectorStore();\n }\n return storeRef.current;\n}\n\nexport function StateInspectorProvider({\n enabled = true,\n children,\n}: {\n enabled?: boolean;\n children: React.ReactNode;\n}) {\n const store = useMemo(() => getStore(), []);\n\n useEffect(() => {\n storeRef.current!.enabled = enabled;\n }, [enabled]);\n\n return <InspectorContext.Provider value={store}>{children}</InspectorContext.Provider>;\n}\n\nexport function useInspectorStore(): InspectorStore {\n const ctx = useContext(InspectorContext);\n if (!ctx) {\n throw new Error(\"useInspectorStore must be used inside StateInspectorProvider\");\n }\n return ctx;\n}\n\nexport function useInspectorComponent(label?: string): InspectorComponentRef {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n\n store.registerComponent(componentId, label?.trim());\n return () => {\n store.unregisterComponent(componentId);\n };\n }, [store, componentId, label]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label?.trim();\n if (trimmed) store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n console.log({ id: componentId });\n\n return useMemo(() => ({ id: componentId }), [componentId]);\n}\n","export type ComponentId = string;\n\nexport type InspectableMeta =\n | { type: \"boolean\" }\n | { type: \"text\"; placeholder?: string }\n | { type: \"number\"; min?: number; max?: number; step?: number }\n | { type: \"select\"; options: Array<string | { label: string; value: string }> }\n | { type: \"json\" }\n | { type: \"custom\"; renderId: string };\n\nexport interface InspectableStateEntry {\n key: string;\n value: unknown;\n setValue: (next: unknown) => void;\n meta?: InspectableMeta;\n}\n\nexport interface ComponentEntry {\n id: ComponentId;\n label: string;\n mounted: boolean;\n states: Map<string, InspectableStateEntry>;\n}\n\nexport interface InspectorSnapshot {\n enabled: boolean;\n components: Array<{\n id: ComponentId;\n label: string;\n mounted: boolean;\n stateKeys: string[];\n }>;\n}\n\ntype Listener = () => void;\n\nexport interface InspectorComponentRef {\n id: string;\n}\n\nexport interface InspectorStore {\n enabled: boolean;\n\n // internal registry\n components: Map<ComponentId, ComponentEntry>;\n\n // subscriptions\n subscribe: (listener: Listener) => () => void;\n getSnapshot: () => InspectorSnapshot;\n\n // component lifecycle\n registerComponent: (id: ComponentId, label?: string) => void;\n setComponentLabel: (id: ComponentId, label: string) => void;\n unregisterComponent: (id: ComponentId) => void;\n\n // state lifecycle\n upsertState: (componentId: ComponentId, entry: InspectableStateEntry) => void;\n\n updateStateValue: (componentId: ComponentId, key: string, value: unknown) => void;\n removeState: (componentId: ComponentId, key: string) => void;\n}\n\nexport function createInspectorStore(): InspectorStore {\n const components = new Map<ComponentId, ComponentEntry>();\n const listeners = new Set<Listener>();\n\n function emit() {\n for (const l of listeners) l();\n }\n\n function getOrCreateComponent(id: ComponentId): ComponentEntry {\n const existing = components.get(id);\n if (existing) return existing;\n\n const created: ComponentEntry = {\n id,\n label: \"Unknown\",\n mounted: true,\n states: new Map(),\n };\n components.set(id, created);\n return created;\n }\n\n const store: InspectorStore = {\n enabled: true,\n components,\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n\n getSnapshot() {\n return {\n enabled: store.enabled,\n components: Array.from(components.values()).map((c) => ({\n id: c.id,\n label: c.label,\n mounted: c.mounted,\n stateKeys: Array.from(c.states.keys()),\n })),\n };\n },\n\n registerComponent(id, label) {\n const c = getOrCreateComponent(id);\n c.mounted = true;\n if (label && label.trim()) c.label = label.trim();\n emit();\n },\n\n setComponentLabel(id, label) {\n const c = getOrCreateComponent(id);\n c.label = label.trim() || \"Unknown\";\n emit();\n },\n\n unregisterComponent(id) {\n const c = components.get(id);\n if (!c) return;\n\n // StrictMode double-unmount safe:\n // we mark as unmounted; UI can choose to hide unmounted entries.\n c.mounted = false;\n\n // Optional: immediate cleanup if you prefer:\n // components.delete(id);\n\n emit();\n },\n\n upsertState(componentId, entry) {\n const c = getOrCreateComponent(componentId);\n c.states.set(entry.key, entry);\n emit();\n },\n\n updateStateValue(componentId, key, value) {\n const c = components.get(componentId);\n if (!c) return;\n const s = c.states.get(key);\n if (!s) return;\n s.value = value;\n emit();\n },\n\n removeState(componentId, key) {\n const c = components.get(componentId);\n if (!c) return;\n if (!c.states.has(key)) return;\n c.states.delete(key);\n emit();\n },\n };\n\n return store;\n}\n","import React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { useInspectorStore } from \"./provider\";\nimport type { InspectableMeta, InspectorComponentRef } from \"./store\";\n\nfunction stableKey(input: string): string {\n return input.trim();\n}\n\nfunction inferMeta(value: unknown): InspectableMeta | undefined {\n const t = typeof value;\n if (t === \"boolean\") return { type: \"boolean\" };\n if (t === \"number\") return { type: \"number\" };\n if (t === \"string\") return { type: \"text\" };\n if (value && t === \"object\") return { type: \"json\" };\n return undefined;\n}\n\n/**\n * Registers a piece of state to the inspector registry.\n * Opt-in by replacing useState with useInspectableState.\n */\nexport function useInspectableState<T>(\n component: InspectorComponentRef,\n key: string,\n initial: T | (() => T),\n meta?: InspectableMeta,\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const store = useInspectorStore();\n const componentId = component.id;\n\n const stateKey = useMemo(() => stableKey(key), [key]);\n\n const [value, setValue] = useState<T>(initial);\n\n // Keep latest setter stable for registry consumers\n const setValueRef = useRef<(next: unknown) => void>(() => {});\n setValueRef.current = (next: unknown) => {\n setValue(next as T);\n };\n\n // Register component + state entry\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n\n return () => {\n store.removeState(componentId, stateKey);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [store, componentId, stateKey]);\n\n // Sync updates on each render when value/meta changes\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n }, [store, componentId, stateKey, value, meta]);\n\n return [value, setValue];\n}\n\n/**\n * Optional helper to give the current component instance a human label.\n */\nexport function useComponentLabel(label: string) {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label.trim();\n if (!trimmed) return;\n store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useInspectorStore } from \"./provider\";\n\n// UI imports\nimport { LS_LAYOUT, LS_KEY, LS_SIZE, LS_LEFT_W, isMac } from \"./ui/constants\";\n\nimport type { DockMode, DockPreview, PanelPosition, PanelSize } from \"./ui/types\";\n\nimport { computePreview, previewRectStyle } from \"./ui/utils\";\n\nimport {\n FloatingButton,\n DockPreviewOverlay,\n ResizeHandle,\n SidebarResizer,\n ComponentList,\n StateEditorPanel,\n} from \"./ui/components\";\nimport DockHeader from \"./ui/components/DockHeader\";\n\nexport function StateInspectorUI() {\n const store = useInspectorStore();\n const [query, setQuery] = useState<string>(\"\");\n const [leftCollapsed, setLeftCollapsed] = useState(false);\n\n const [layout, setLayout] = useState<DockMode>(\"floating\");\n const [preview, setPreview] = useState<DockPreview>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [open, setOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [tick, force] = useState(0);\n\n const searchRef = useRef<HTMLInputElement | null>(null);\n\n // Persisted panel position\n const [pos, setPos] = useState<PanelPosition>(() => {\n try {\n const raw = localStorage.getItem(LS_KEY);\n return raw ? JSON.parse(raw) : { right: 16, bottom: 72 };\n } catch {\n return { right: 16, bottom: 72 };\n }\n });\n\n // Persisted sidebar width\n const [leftWidth, setLeftWidth] = useState(() => {\n try {\n const raw = localStorage.getItem(LS_LEFT_W);\n return raw ? Number(raw) : 280;\n } catch {\n return 280;\n }\n });\n\n // Persisted panel size\n const [size, setSize] = useState<PanelSize>(() => {\n try {\n const raw = localStorage.getItem(LS_SIZE);\n return raw ? JSON.parse(raw) : { width: 720, height: 420 };\n } catch {\n return { width: 720, height: 420 };\n }\n });\n\n // Persist layout to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LAYOUT, layout);\n } catch (e) {\n console.error(e);\n }\n }, [layout]);\n\n // Persist position to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_KEY, JSON.stringify(pos));\n } catch (e) {\n console.error(e);\n }\n }, [pos]);\n\n // Persist sidebar width to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LEFT_W, String(leftWidth));\n } catch (e) {\n console.error(e);\n }\n }, [leftWidth]);\n\n // Persist size to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_SIZE, JSON.stringify(size));\n } catch (e) {\n console.error(e);\n }\n }, [size]);\n\n // Auto-collapse sidebar when too narrow\n useEffect(() => {\n const shouldCollapse = leftWidth <= 200 || (size.width ?? 720) - leftWidth < 320;\n setLeftCollapsed(shouldCollapse);\n }, [leftWidth, size.width]);\n\n // Subscribe to store changes\n useEffect(() => store.subscribe(() => force((x) => x + 1)), [store]);\n\n // Get mounted components\n const snapshot = useMemo(() => store.getSnapshot(), [store, tick]);\n\n const components = useMemo(\n () => snapshot.components.filter((c) => c.mounted),\n [snapshot.components],\n );\n\n // Filter components by search query\n const q = query.trim().toLowerCase();\n const filtered = useMemo(\n () =>\n q\n ? components.filter((c) => {\n const labelHit = c.label.toLowerCase().includes(q);\n const keyHit = c.stateKeys.some((k) => k.toLowerCase().includes(q));\n return labelHit || keyHit;\n })\n : components,\n [q, components],\n );\n\n // Keep a valid selection\n useEffect(() => {\n if (!open) return;\n\n if (components.length === 0) {\n setSelectedId(null);\n return;\n }\n\n if (!selectedId || !components.some((c) => c.id === selectedId)) {\n setSelectedId(components[0]!.id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, components.length]);\n\n // Keyboard shortcuts\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n const mod = isMac ? e.metaKey : e.ctrlKey;\n\n // Cmd/Ctrl + Shift + I → toggle inspector\n if (mod && e.shiftKey && e.key.toLowerCase() === \"i\") {\n e.preventDefault();\n setOpen((o) => !o);\n return;\n }\n\n if (!open) return;\n\n // Esc → close\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n\n // \"/\" → focus search\n if (e.key === \"/\") {\n e.preventDefault();\n searchRef.current?.focus();\n return;\n }\n\n // Arrow navigation\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const list = filtered;\n if (!list.length) return;\n\n const idx = list.findIndex((c) => c.id === selectedId);\n const next =\n e.key === \"ArrowDown\"\n ? list[(Math.max(-1, idx) + 1) % list.length]!.id\n : list[idx <= 0 ? list.length - 1 : idx - 1]!.id;\n\n setSelectedId(next);\n setTimeout(() => {\n document.getElementById(`rsi-comp-${next}`)?.scrollIntoView({ block: \"nearest\" });\n }, 0);\n }\n }\n\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, filtered, selectedId]);\n\n // Get selected component\n const selected = useMemo(() => {\n if (!selectedId) return null;\n return store.components.get(selectedId) ?? null;\n }, [store, selectedId]);\n\n // Drag end handler - apply dock or reset preview\n const handleDragEnd = () => {\n if (preview) {\n setLayout(preview);\n setIsTransitioning(true);\n\n const rects = previewRectStyle(preview);\n setSize({ width: rects.width as number, height: rects.height as number });\n setPos({\n left: rects.left as number,\n right: rects.right as number,\n top: rects.top as number,\n bottom: rects.bottom as number,\n });\n setPreview(null);\n\n setTimeout(() => setIsTransitioning(false), 300);\n return;\n }\n setPreview(null);\n };\n\n // Drag start handler - initiate panel movement\n const handleDragStart = (e: React.PointerEvent<HTMLDivElement>) => {\n const startX = e.clientX;\n const startY = e.clientY;\n const start = pos;\n\n setLayout(\"floating\");\n setIsTransitioning(true);\n setSize({ width: 720, height: 420 });\n setTimeout(() => setIsTransitioning(false), 300);\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n const nextPreview = computePreview(ev.clientX, ev.clientY);\n\n setPreview((p) => (p === nextPreview ? p : nextPreview));\n\n const newPos: PanelPosition = {};\n if (start.left !== undefined) {\n newPos.left = Math.max(8, start.left + dx);\n } else {\n newPos.right = Math.max(8, (start.right ?? 16) - dx);\n }\n if (start.top !== undefined) {\n newPos.top = Math.max(8, start.top + dy);\n } else {\n newPos.bottom = Math.max(8, (start.bottom ?? 72) - dy);\n }\n setPos(newPos);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n };\n\n // Handle panel resize\n const handlePanelResize =\n (startSize: PanelSize, startPos: PanelPosition) =>\n (\n delta: { dx: number; dy: number },\n direction:\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\",\n ) => {\n const isLeft = direction === \"left\" || direction.endsWith(\"left\");\n const isTop = direction === \"top\" || direction.startsWith(\"top\");\n const isHorizontal = direction !== \"top\" && direction !== \"bottom\";\n const isVertical = direction !== \"left\" && direction !== \"right\";\n\n const currentWidth = startSize.width ?? 720;\n const currentHeight = startSize.height ?? 420;\n\n // Calculate new dimensions\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n\n if (isHorizontal) {\n if (isLeft) {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth - delta.dx));\n } else {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth + delta.dx));\n }\n }\n\n if (isVertical) {\n if (isTop) {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight - delta.dy));\n } else {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight + delta.dy));\n }\n }\n\n setSize({ width: newWidth, height: newHeight });\n\n // Update position for left/top edges\n const newPos: PanelPosition = { ...startPos };\n\n if (isLeft && startPos.left !== undefined) {\n const widthDelta = newWidth - currentWidth;\n newPos.left = Math.max(8, startPos.left - widthDelta);\n } else if (isLeft && startPos.right !== undefined) {\n // If positioned from right, adjust right position\n const widthDelta = newWidth - currentWidth;\n newPos.right = Math.max(8, startPos.right - widthDelta);\n }\n\n if (isTop && startPos.top !== undefined) {\n const heightDelta = newHeight - currentHeight;\n newPos.top = Math.max(8, startPos.top - heightDelta);\n } else if (isTop && startPos.bottom !== undefined) {\n // If positioned from bottom, adjust bottom position\n const heightDelta = newHeight - currentHeight;\n newPos.bottom = Math.max(8, startPos.bottom - heightDelta);\n }\n\n setPos(newPos);\n };\n\n if (!store.enabled) return null;\n\n return createPortal(\n <>\n <FloatingButton onClick={() => setOpen((o) => !o)} isActive={open} />\n <DockPreviewOverlay preview={preview} />\n\n {open && (\n <div\n data-rsi-root\n style={{\n position: \"fixed\",\n left: pos.left,\n right: pos.right,\n top: pos.top,\n bottom: pos.bottom,\n width: size.width || \"calc(100dvw - 24px)\",\n maxWidth: \"calc(100vw - 24px)\",\n height: size.height || \"calc(100dvh - 24px)\",\n maxHeight: \"calc(100vh - 24px)\",\n background: \"#1c1c1c\",\n color: \"#fff\",\n borderRadius: 12,\n border: \"1px solid #333\",\n zIndex: 999999,\n overflow: \"hidden\",\n transition: isTransitioning ? \"all 0.3s ease\" : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <DockHeader\n setOpen={setOpen}\n handleDragStart={handleDragStart}\n handleDragEnd={handleDragEnd}\n />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: leftCollapsed ? \"auto\" : `${leftWidth}px 14px auto`,\n height: \"100%\",\n }}\n >\n <ResizeHandle onResize={handlePanelResize(size, pos)} />\n\n <ComponentList\n query={query}\n onQueryChange={setQuery}\n searchRef={searchRef}\n components={filtered}\n selectedId={selectedId}\n onSelect={setSelectedId}\n hidden={leftCollapsed}\n />\n\n <SidebarResizer\n leftWidth={leftWidth}\n onWidthChange={setLeftWidth}\n hidden={leftCollapsed}\n />\n\n <StateEditorPanel\n selected={selected}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={() => setLeftCollapsed((v) => !v)}\n />\n </div>\n </div>\n )}\n </>,\n document.body,\n );\n}\n","// LocalStorage keys\nexport const LS_LAYOUT = \"rsi:panel-layout\";\nexport const LS_KEY = \"rsi:panel-pos\";\nexport const LS_SIZE = \"rsi:panel-size\";\nexport const LS_LEFT_W = \"rsi:left-width\";\n\n// Dock settings\nexport const SNAP = 100; // distance in px to trigger dock preview\nexport const DOCK_W = 420; // left/right dock width\nexport const DOCK_H = 320; // top/bottom dock height\nexport const MARGIN = 12; // dock margin\n\n// Sidebar settings\nexport const LEFT_MIN = 180;\nexport const LEFT_MAX = 420;\n\n// Platform detection\nexport const isMac =\n typeof navigator !== \"undefined\" ? navigator.platform.toUpperCase().includes(\"MAC\") : false;\n","import type React from \"react\";\nimport { SNAP, DOCK_W, DOCK_H, MARGIN } from \"./constants\";\nimport type { DockPreview } from \"./types\";\n\n/**\n * Type guard for select option objects\n */\nexport function isOptionObject(\n opt: string | { label: string; value: string },\n): opt is { label: string; value: string } {\n return typeof opt === \"object\" && opt !== null && \"value\" in opt;\n}\n\n/**\n * Compute dock preview based on cursor position\n */\nexport function computePreview(x: number, y: number): DockPreview {\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const nearLeft = x <= SNAP;\n const nearRight = x >= w - SNAP;\n const nearTop = y <= SNAP;\n const nearBottom = y >= h - SNAP;\n\n // Priority: horizontal edges take precedence over vertical\n if (nearLeft) return \"dock-left\";\n if (nearRight) return \"dock-right\";\n if (nearTop) return \"dock-top\";\n if (nearBottom) return \"dock-bottom\";\n return null;\n}\n\n/**\n * Get CSS properties for dock preview rectangle\n */\nexport function previewRectStyle(p: DockPreview): React.CSSProperties {\n const base: React.CSSProperties = {\n position: \"fixed\",\n border: \"1px dashed #555\",\n background: \"rgba(255,255,255,0.06)\",\n borderRadius: 12,\n };\n\n if (p === \"dock-left\") {\n return { ...base, left: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-right\") {\n return { ...base, right: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-top\") {\n return { ...base, left: MARGIN, right: MARGIN, top: MARGIN, height: DOCK_H };\n }\n // dock-bottom\n return { ...base, left: MARGIN, right: MARGIN, bottom: MARGIN, height: DOCK_H };\n}\n\n/**\n * Safely stringify a value to JSON\n */\nexport function safeStringify(v: unknown): string {\n try {\n return JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DevtoolsIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_1_13)\">\n <path\n d=\"M2 7.00002C1.90538 7.00034 1.81262 6.97381 1.73248 6.92351C1.65234 6.87321 1.58812 6.8012 1.54727 6.71585C1.50643 6.6305 1.49065 6.53531 1.50175 6.44135C1.51285 6.34739 1.55039 6.2585 1.61 6.18502L6.56 1.08502C6.59713 1.04216 6.64773 1.0132 6.70349 1.00289C6.75925 0.992575 6.81686 1.00153 6.86687 1.02827C6.91687 1.05502 6.95629 1.09797 6.97867 1.15007C7.00104 1.20218 7.00504 1.26034 6.99 1.31502L6.03 4.32502C6.00169 4.40078 5.99219 4.48228 6.0023 4.56252C6.01241 4.64277 6.04183 4.71936 6.08805 4.78573C6.13426 4.85211 6.19589 4.90628 6.26764 4.9436C6.33939 4.98092 6.41912 5.00028 6.5 5.00002H10C10.0946 4.9997 10.1874 5.02623 10.2675 5.07653C10.3477 5.12683 10.4119 5.19884 10.4527 5.28419C10.4936 5.36954 10.5094 5.46473 10.4983 5.55869C10.4871 5.65266 10.4496 5.74154 10.39 5.81502L5.44 10.915C5.40287 10.9579 5.35227 10.9868 5.29651 10.9972C5.24075 11.0075 5.18314 10.9985 5.13313 10.9718C5.08313 10.945 5.04371 10.9021 5.02133 10.85C4.99896 10.7979 4.99496 10.7397 5.01 10.685L5.97 7.67502C5.99831 7.59926 6.00781 7.51776 5.9977 7.43752C5.98759 7.35727 5.95817 7.28068 5.91195 7.21431C5.86574 7.14793 5.80411 7.09376 5.73236 7.05644C5.66061 7.01912 5.58088 6.99976 5.5 7.00002H2Z\"\n fill=\"inherit\"\n stroke=\"inherit\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1_13\">\n <rect width=\"12\" height=\"12\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default DevtoolsIcon;\n","import DevtoolsIcon from \"../icons/DevtoolsIcon\";\n\ninterface FloatingButtonProps {\n onClick: () => void;\n isActive: boolean;\n}\n\nexport function FloatingButton({ onClick, isActive }: FloatingButtonProps) {\n return (\n <button\n data-rsi-floating-button\n title=\"State Inspector (⌘⇧I / Ctrl⇧I)\"\n onClick={onClick}\n style={{\n position: \"fixed\",\n right: 16,\n bottom: 16,\n width: 48,\n height: 48,\n borderRadius: 24,\n border: \"none\",\n background: isActive ? \"#155DFC\" : \"#111\",\n color: \"#fff\",\n cursor: \"pointer\",\n zIndex: 999999,\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n aria-label=\"Toggle State Inspector\"\n >\n <DevtoolsIcon fill={isActive ? \"#FFF\" : undefined} stroke=\"#FFF\" height={20} width={20} />\n </button>\n );\n}\n","import type { DockPreview } from \"../types\";\nimport { previewRectStyle } from \"../utils\";\n\ninterface DockPreviewOverlayProps {\n preview: DockPreview;\n}\n\nexport function DockPreviewOverlay({ preview }: DockPreviewOverlayProps) {\n if (!preview) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n pointerEvents: \"none\",\n zIndex: 999998,\n }}\n >\n <div style={previewRectStyle(preview)} />\n </div>\n );\n}\n","export type ResizeDirection =\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\ninterface ResizeHandleProps {\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}\n\nconst EDGE_SIZE = 6;\nconst CORNER_SIZE = 12;\n\ntype HandleConfig = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n width?: number | string;\n height?: number | string;\n cursor: string;\n};\n\nconst handleConfigs: Record<ResizeDirection, HandleConfig> = {\n // Edges\n top: { top: 0, left: CORNER_SIZE, right: CORNER_SIZE, height: EDGE_SIZE, cursor: \"ns-resize\" },\n bottom: {\n bottom: 0,\n left: CORNER_SIZE,\n right: CORNER_SIZE,\n height: EDGE_SIZE,\n cursor: \"ns-resize\",\n },\n left: { left: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n right: { right: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n // Corners\n \"top-left\": { top: 0, left: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nwse-resize\" },\n \"top-right\": { top: 0, right: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nesw-resize\" },\n \"bottom-left\": {\n bottom: 0,\n left: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nesw-resize\",\n },\n \"bottom-right\": {\n bottom: 0,\n right: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nwse-resize\",\n },\n};\n\nfunction Handle({\n direction,\n onResize,\n}: {\n direction: ResizeDirection;\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}) {\n const config = handleConfigs[direction];\n\n return (\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n const startX = e.clientX;\n const startY = e.clientY;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n onResize(\n {\n dx: ev.clientX - startX,\n dy: ev.clientY - startY,\n },\n direction,\n );\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n position: \"absolute\",\n top: config.top,\n right: config.right,\n bottom: config.bottom,\n left: config.left,\n width: config.width,\n height: config.height,\n cursor: config.cursor,\n background: \"transparent\",\n zIndex: 10,\n }}\n />\n );\n}\n\nconst directions: ResizeDirection[] = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n];\n\nexport function ResizeHandle({ onResize }: ResizeHandleProps) {\n return (\n <>\n {directions.map((dir) => (\n <Handle key={dir} direction={dir} onResize={onResize} />\n ))}\n </>\n );\n}\n","import { LEFT_MIN, LEFT_MAX } from \"../constants\";\n\ninterface SidebarResizerProps {\n leftWidth: number;\n onWidthChange: (width: number) => void;\n hidden: boolean;\n}\n\nexport function SidebarResizer({ leftWidth, onWidthChange, hidden }: SidebarResizerProps) {\n if (hidden) return null;\n\n return (\n <div\n onPointerDown={(e) => {\n e.preventDefault();\n const startX = e.clientX;\n const startW = leftWidth;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const next = Math.max(LEFT_MIN, Math.min(LEFT_MAX, startW + dx));\n onWidthChange(next);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n width: 8,\n cursor: \"col-resize\",\n background: \"transparent\",\n borderLeft: \"1px solid #2a2a2a\",\n borderRight: \"1px solid #2a2a2a\",\n }}\n title=\"Resize sidebar\"\n />\n );\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\n\ninterface DragHandleProps {\n children: React.ReactNode;\n onDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n style?: React.CSSProperties;\n}\n\nexport function DragHandle({ children, onDragStart, onDragEnd, style }: DragHandleProps) {\n const [isDragging, setIsDragging] = useState(false);\n\n return (\n <div\n style={{ cursor: isDragging ? \"grabbing\" : \"grab\", userSelect: \"none\", ...style }}\n onPointerDown={(e) => {\n const target = e.target as HTMLElement | null;\n try {\n if (\n target &&\n typeof target.closest === \"function\" &&\n target.closest('button, input, textarea, a, [role=\"button\"], [data-no-drag]')\n ) {\n return;\n }\n } catch (e) {\n console.error(e);\n }\n\n setIsDragging(true);\n onDragStart(e);\n }}\n onPointerUp={() => {\n if (isDragging) {\n setIsDragging(false);\n onDragEnd();\n }\n }}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\n\nexport const inputStyle: React.CSSProperties = {\n padding: \"8px 10px\",\n borderRadius: 4,\n border: \"none\",\n background: \"#18181B\",\n color: \"#fff\",\n minWidth: 120,\n};\n\nexport const cardStyle: React.CSSProperties = {\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n borderRadius: 12,\n padding: 10,\n};\n\nexport const buttonStyle: React.CSSProperties = {\n background: \"transparent\",\n color: \"#fff\",\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n cursor: \"pointer\",\n};\n","import type React from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n inputRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function SearchInput({ value, onChange, inputRef }: SearchInputProps) {\n return (\n <input\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder=\"Filter…\"\n ref={inputRef}\n style={{\n ...inputStyle,\n outline: \"none\",\n }}\n />\n );\n}\n","import type React from \"react\";\nimport type { ComponentSummary } from \"../types\";\nimport { SearchInput } from \"./SearchInput\";\ninterface ComponentListProps {\n components: ComponentSummary[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n hidden: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function ComponentList({\n components,\n selectedId,\n onSelect,\n hidden,\n query,\n onQueryChange,\n searchRef,\n}: ComponentListProps) {\n if (hidden) return null;\n\n return (\n <div style={{ padding: 4, boxSizing: \"border-box\", backgroundColor: \"#09090B\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n paddingTop: 4,\n paddingBottom: 8,\n paddingLeft: 4,\n paddingRight: 4,\n }}\n >\n <SearchInput value={query} onChange={onQueryChange} inputRef={searchRef} />\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, overflow: \"auto\", flex: 1 }}>\n {components.map((c) => {\n const active = c.id === selectedId;\n return (\n <button\n key={c.id}\n id={`rsi-comp-${c.id}`}\n onClick={() => onSelect(c.id)}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 8,\n backgroundColor: active ? \"#27272A\" : \"transparent\",\n border: \"none\",\n }}\n >\n <div style={{ fontWeight: 500, fontSize: 12, color: active ? \"#fff\" : \"#9F9FA9\" }}>\n {c.label}\n </div>\n <div\n style={{\n fontSize: 9,\n height: 16,\n width: 16,\n color: \"#D4D4D8\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 8,\n backgroundColor: \"#3F3F47\",\n }}\n >\n {c.stateKeys.length}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type React from \"react\";\n\ninterface StatePanelHeaderProps {\n selectedLabel: string | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StatePanelHeader({\n selectedLabel,\n leftCollapsed,\n onToggleCollapse,\n}: StatePanelHeaderProps) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <button\n onClick={(e) => {\n e.preventDefault();\n onToggleCollapse();\n }}\n style={{\n padding: 4,\n marginRight: 12,\n borderRadius: 6,\n border: \"1px solid #333\",\n background: \"transparent\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 12,\n width: 24,\n height: 24,\n }}\n >\n {leftCollapsed ? \"»\" : \"«\"}\n </button>\n\n <h4 style={{ margin: 0 }}>{selectedLabel ?? \"No selection\"}</h4>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface JsonEditorProps {\n initial: string;\n onValidJson: (obj: unknown) => void;\n}\n\nexport function JsonEditor({ initial, onValidJson }: JsonEditorProps) {\n const [raw, setRaw] = useState(initial);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n setRaw(initial);\n }, [initial]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n setRaw(next);\n\n try {\n const parsed = JSON.parse(next);\n setError(null);\n onValidJson(parsed);\n } catch {\n setError(\"Invalid JSON\");\n }\n };\n\n return (\n <div style={{ display: \"grid\", gap: 6 }}>\n <textarea\n value={raw}\n onChange={handleChange}\n rows={6}\n style={{\n ...inputStyle,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n fontSize: 12,\n resize: \"vertical\",\n }}\n />\n {error && <div style={{ fontSize: 12, color: \"#ff6b6b\" }}>{error}</div>}\n </div>\n );\n}\n","import type { InspectableMeta } from \"../../store\";\nimport { inputStyle } from \"../styles\";\nimport { isOptionObject, safeStringify } from \"../utils\";\nimport { JsonEditor } from \"./JsonEditor\";\n\ninterface StateEditorProps {\n value: unknown;\n meta: InspectableMeta | undefined;\n onChange: (next: unknown) => void;\n}\n\nexport function StateEditor({ value, meta, onChange }: StateEditorProps) {\n // boolean\n if (meta?.type === \"boolean\" || typeof value === \"boolean\") {\n return (\n <label style={{ display: \"flex\", gap: 10, alignItems: \"center\" }}>\n <input\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n <span style={{ fontSize: 13, opacity: 0.8 }}>{String(Boolean(value))}</span>\n </label>\n );\n }\n\n // select\n if (meta?.type === \"select\" && Array.isArray(meta.options)) {\n const current = typeof value === \"string\" ? value : String(value ?? \"\");\n return (\n <select\n value={current}\n onChange={(e) => onChange(e.target.value)}\n style={{\n ...inputStyle,\n minWidth: 120,\n }}\n >\n {meta.options.map((opt: string | { label: string; value: string }) => {\n const o = isOptionObject(opt) ? opt : { label: String(opt), value: String(opt) };\n return (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n );\n })}\n </select>\n );\n }\n\n // number\n if (meta?.type === \"number\") {\n return (\n <input\n type=\"number\"\n value={typeof value === \"number\" ? value : Number(value ?? 0)}\n min={meta?.min}\n max={meta?.max}\n step={meta?.step}\n onChange={(e) => onChange(e.target.value === \"\" ? 0 : Number(e.target.value))}\n style={inputStyle}\n />\n );\n }\n\n // json\n if (meta?.type === \"json\" || (value && typeof value === \"object\")) {\n return <JsonEditor initial={safeStringify(value)} onValidJson={onChange} />;\n }\n\n // text (default)\n return (\n <input\n type=\"text\"\n value={typeof value === \"string\" ? value : String(value ?? \"\")}\n placeholder={meta?.type === \"text\" ? meta.placeholder : undefined}\n onChange={(e) => onChange(e.target.value)}\n style={inputStyle}\n />\n );\n}\n","import type { InspectableStateEntry } from \"../../store\";\nimport { cardStyle } from \"../styles\";\nimport { StateEditor } from \"./StateEditor\";\n\ninterface StateCardProps {\n state: InspectableStateEntry;\n}\n\nexport function StateCard({ state }: StateCardProps) {\n return (\n <div\n style={{\n ...cardStyle,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n gap: 1,\n }}\n >\n <div style={{ fontSize: 14 }}>{state.key}</div>\n <div style={{ fontSize: 12, color: \"#52525C\", textTransform: \"uppercase\" }}>\n {state.meta?.type ?? \"auto\"}\n </div>\n </div>\n\n <StateEditor\n value={state.value}\n meta={state.meta}\n onChange={(next) => state.setValue(next)}\n />\n </div>\n );\n}\n","import type React from \"react\";\nimport type { ComponentEntry } from \"../../store\";\nimport { StatePanelHeader } from \"./StatePanelHeader\";\nimport { StateCard } from \"./StateCard\";\n\ninterface StateEditorPanelProps {\n selected: ComponentEntry | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StateEditorPanel({\n selected,\n leftCollapsed,\n onToggleCollapse,\n}: StateEditorPanelProps) {\n return (\n <div\n style={{\n padding: 12,\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n backgroundColor: \"#0C0C0E\",\n }}\n >\n <StatePanelHeader\n selectedLabel={selected?.label ?? null}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={onToggleCollapse}\n />\n\n <div style={{ marginTop: 12, display: \"grid\", gap: 10 }}>\n {selected && selected.states.size === 0 && (\n <div style={{ fontSize: 13, opacity: 0.7 }}>This component has no inspectable state.</div>\n )}\n\n {!selected && <div style={{ opacity: 0.7, fontSize: 13 }}>No component selected.</div>}\n\n {selected &&\n Array.from(selected.states.values()).map((s) => <StateCard key={s.key} state={s} />)}\n </div>\n </div>\n );\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DragIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M7.99998 6.66665C8.36817 6.66665 8.66665 6.36817 8.66665 5.99998C8.66665 5.63179 8.36817 5.33331 7.99998 5.33331C7.63179 5.33331 7.33331 5.63179 7.33331 5.99998C7.33331 6.36817 7.63179 6.66665 7.99998 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 6.66665C13.0349 6.66665 13.3333 6.36817 13.3333 5.99998C13.3333 5.63179 13.0349 5.33331 12.6667 5.33331C12.2985 5.33331 12 5.63179 12 5.99998C12 6.36817 12.2985 6.66665 12.6667 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 6.66665C3.70154 6.66665 4.00002 6.36817 4.00002 5.99998C4.00002 5.63179 3.70154 5.33331 3.33335 5.33331C2.96516 5.33331 2.66669 5.63179 2.66669 5.99998C2.66669 6.36817 2.96516 6.66665 3.33335 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99998 10.6666C8.36817 10.6666 8.66665 10.3682 8.66665 9.99998C8.66665 9.63179 8.36817 9.33331 7.99998 9.33331C7.63179 9.33331 7.33331 9.63179 7.33331 9.99998C7.33331 10.3682 7.63179 10.6666 7.99998 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 10.6666C13.0349 10.6666 13.3333 10.3682 13.3333 9.99998C13.3333 9.63179 13.0349 9.33331 12.6667 9.33331C12.2985 9.33331 12 9.63179 12 9.99998C12 10.3682 12.2985 10.6666 12.6667 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 10.6666C3.70154 10.6666 4.00002 10.3682 4.00002 9.99998C4.00002 9.63179 3.70154 9.33331 3.33335 9.33331C2.96516 9.33331 2.66669 9.63179 2.66669 9.99998C2.66669 10.3682 2.96516 10.6666 3.33335 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default DragIcon;\n","import React, { SVGAttributes } from \"react\";\n\nconst CloseIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 3.5L3.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 3.5L10.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import React from \"react\";\nimport { DragHandle } from \"./DragHandle\";\nimport DevtoolsIcon from \"../icons/DevtoolsIcon\";\nimport DragIcon from \"../icons/DragIcon\";\nimport CloseIcon from \"../icons/CloseIcon\";\n\nconst DockHeader: React.FC<{\n setOpen: (open: boolean) => void;\n handleDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n handleDragEnd: () => void;\n}> = ({ setOpen, handleDragStart, handleDragEnd }) => {\n return (\n <DragHandle onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <div\n style={{\n height: 40,\n width: \"100%\",\n padding: \"9.5px 12px\",\n boxSizing: \"border-box\",\n borderBottom: \"1px solid rgba(39, 39, 42, 0.5)\",\n display: \"flex\",\n flexDirection: \"row\",\n backgroundColor: \"rgba(24, 24, 27, 0.5)\",\n }}\n >\n <div\n style={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginRight: 8,\n backgroundColor: \"#27272A\",\n borderRadius: 4,\n }}\n >\n <DevtoolsIcon fill=\"#9F9FA9\" stroke=\"#9F9FA9\" height={12} width={12} />\n </div>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: \"#E4E4E7\",\n }}\n >\n React Inspector\n </span>\n\n <div\n style={{\n marginLeft: \"auto\",\n display: \"flex\",\n flexDirection: \"row\",\n gap: 16,\n alignItems: \"center\",\n }}\n >\n <DragIcon />\n <div\n data-no-drag\n style={{\n cursor: \"pointer\",\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(false);\n }}\n >\n <CloseIcon />\n </div>\n </div>\n </div>\n </DragHandle>\n );\n};\n\nexport default DockHeader;\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","e","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/index.css","../src/provider.tsx","../src/store.ts","../src/hooks.ts","../src/StateInspectorUI.tsx","../src/ui/constants.ts","../src/ui/utils.ts","../src/ui/icons/DevtoolsIcon.tsx","../src/ui/components/FloatingButton.tsx","../src/ui/components/DockPreviewOverlay.tsx","../src/ui/components/ResizeHandle.tsx","../src/ui/components/SidebarResizer.tsx","../src/ui/components/DragHandle.tsx","../src/ui/styles.ts","../src/ui/components/SearchInput.tsx","../src/ui/components/ComponentList.tsx","../src/ui/components/StatePanelHeader.tsx","../src/ui/components/JsonEditor.tsx","../src/ui/components/StateEditor.tsx","../src/ui/components/StateCard.tsx","../src/ui/components/StateEditorPanel.tsx","../src/ui/icons/DragIcon.tsx","../src/ui/icons/CloseIcon.tsx","../src/ui/components/DockHeader.tsx"],"sourcesContent":["import \"./index.css\";\n\nexport * from \"./provider\";\nexport * from \"./store\";\nexport * from \"./hooks\";\nexport * from \"./StateInspectorUI\";\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"@import \\\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\\\";\\n[data-rsi-root],\\n[data-rsi-root] *,\\n[data-rsi-root] *::before,\\n[data-rsi-root] *::after {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n font-style: normal;\\n font-variant: normal;\\n line-height: 1.5;\\n letter-spacing: normal;\\n text-align: left;\\n text-decoration: none;\\n text-indent: 0;\\n text-shadow: none;\\n text-transform: none;\\n word-spacing: normal;\\n white-space: normal;\\n background: transparent;\\n color: inherit;\\n outline: none;\\n vertical-align: baseline;\\n visibility: visible;\\n opacity: 1;\\n transform: none;\\n transform-origin: 50% 50% 0;\\n animation: none;\\n transition: none;\\n list-style: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n float: none;\\n clear: none;\\n cursor: auto;\\n}\\n[data-rsi-root] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n line-height: 1.5;\\n color: #fff;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n text-rendering: optimizeLegibility;\\n}\\n[data-rsi-floating-button] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n[data-rsi-root] button {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n cursor: pointer;\\n background: transparent;\\n border: none;\\n padding: 0;\\n margin: 0;\\n border-radius: 8px;\\n}\\n[data-rsi-root] input,\\n[data-rsi-root] textarea {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n background: transparent;\\n border: none;\\n outline: none;\\n padding: 0;\\n margin: 0;\\n resize: none;\\n}\\n[data-rsi-root] input::placeholder,\\n[data-rsi-root] textarea::placeholder {\\n color: inherit;\\n opacity: 0.5;\\n}\\n[data-rsi-root] a {\\n color: inherit;\\n text-decoration: none;\\n}\\n[data-rsi-root] img,\\n[data-rsi-root] svg {\\n display: block;\\n max-width: 100%;\\n}\\n[data-rsi-root] h1,\\n[data-rsi-root] h2,\\n[data-rsi-root] h3,\\n[data-rsi-root] h4,\\n[data-rsi-root] h5,\\n[data-rsi-root] h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n[data-rsi-root] ::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb {\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 3px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\\n background: rgba(255, 255, 255, 0.3);\\n}\\n[data-rsi-root] ::selection {\\n background: rgba(99, 102, 241, 0.4);\\n color: #fff;\\n}\\n[data-rsi-root] :focus-visible {\\n outline: 2px solid rgba(99, 102, 241, 0.6);\\n outline-offset: 2px;\\n}\\n\")","import React, { createContext, useContext, useEffect, useId, useMemo } from \"react\";\nimport { createInspectorStore, InspectorComponentRef, InspectorStore } from \"./store\";\n\nconst InspectorContext = createContext<InspectorStore | null>(null);\n\nconst storeRef = { current: null as InspectorStore | null };\n\nfunction getStore(): InspectorStore {\n if (!storeRef.current) {\n storeRef.current = createInspectorStore();\n }\n return storeRef.current;\n}\n\nexport function StateInspectorProvider({\n enabled = true,\n children,\n}: {\n enabled?: boolean;\n children: React.ReactNode;\n}) {\n const store = useMemo(() => getStore(), []);\n\n useEffect(() => {\n storeRef.current!.enabled = enabled;\n }, [enabled]);\n\n return <InspectorContext.Provider value={store}>{children}</InspectorContext.Provider>;\n}\n\nexport function useInspectorStore(): InspectorStore {\n const ctx = useContext(InspectorContext);\n if (!ctx) {\n throw new Error(\"useInspectorStore must be used inside StateInspectorProvider\");\n }\n return ctx;\n}\n\nexport function useInspectorComponent(label?: string): InspectorComponentRef {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n\n store.registerComponent(componentId, label?.trim());\n return () => {\n store.unregisterComponent(componentId);\n };\n }, [store, componentId, label]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label?.trim();\n if (trimmed) store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n console.log({ id: componentId });\n\n return useMemo(() => ({ id: componentId }), [componentId]);\n}\n","export type ComponentId = string;\n\nexport type InspectableMeta =\n | { type: \"boolean\" }\n | { type: \"text\"; placeholder?: string }\n | { type: \"number\"; min?: number; max?: number; step?: number }\n | { type: \"select\"; options: Array<string | { label: string; value: string }> }\n | { type: \"json\" }\n | { type: \"custom\"; renderId: string };\n\nexport interface InspectableStateEntry {\n key: string;\n value: unknown;\n setValue: (next: unknown) => void;\n meta?: InspectableMeta;\n}\n\nexport interface ComponentEntry {\n id: ComponentId;\n label: string;\n mounted: boolean;\n states: Map<string, InspectableStateEntry>;\n}\n\nexport interface InspectorSnapshot {\n enabled: boolean;\n components: Array<{\n id: ComponentId;\n label: string;\n mounted: boolean;\n stateKeys: string[];\n }>;\n}\n\ntype Listener = () => void;\n\nexport interface InspectorComponentRef {\n id: string;\n}\n\nexport interface InspectorStore {\n enabled: boolean;\n\n // internal registry\n components: Map<ComponentId, ComponentEntry>;\n\n // subscriptions\n subscribe: (listener: Listener) => () => void;\n getSnapshot: () => InspectorSnapshot;\n\n // component lifecycle\n registerComponent: (id: ComponentId, label?: string) => void;\n setComponentLabel: (id: ComponentId, label: string) => void;\n unregisterComponent: (id: ComponentId) => void;\n\n // state lifecycle\n upsertState: (componentId: ComponentId, entry: InspectableStateEntry) => void;\n\n updateStateValue: (componentId: ComponentId, key: string, value: unknown) => void;\n removeState: (componentId: ComponentId, key: string) => void;\n}\n\nexport function createInspectorStore(): InspectorStore {\n const components = new Map<ComponentId, ComponentEntry>();\n const listeners = new Set<Listener>();\n\n function emit() {\n for (const l of listeners) l();\n }\n\n function getOrCreateComponent(id: ComponentId): ComponentEntry {\n const existing = components.get(id);\n if (existing) return existing;\n\n const created: ComponentEntry = {\n id,\n label: \"Unknown\",\n mounted: true,\n states: new Map(),\n };\n components.set(id, created);\n return created;\n }\n\n const store: InspectorStore = {\n enabled: true,\n components,\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n\n getSnapshot() {\n return {\n enabled: store.enabled,\n components: Array.from(components.values()).map((c) => ({\n id: c.id,\n label: c.label,\n mounted: c.mounted,\n stateKeys: Array.from(c.states.keys()),\n })),\n };\n },\n\n registerComponent(id, label) {\n const c = getOrCreateComponent(id);\n c.mounted = true;\n if (label && label.trim()) c.label = label.trim();\n emit();\n },\n\n setComponentLabel(id, label) {\n const c = getOrCreateComponent(id);\n c.label = label.trim() || \"Unknown\";\n emit();\n },\n\n unregisterComponent(id) {\n const c = components.get(id);\n if (!c) return;\n\n // StrictMode double-unmount safe:\n // we mark as unmounted; UI can choose to hide unmounted entries.\n c.mounted = false;\n\n // Optional: immediate cleanup if you prefer:\n // components.delete(id);\n\n emit();\n },\n\n upsertState(componentId, entry) {\n const c = getOrCreateComponent(componentId);\n c.states.set(entry.key, entry);\n emit();\n },\n\n updateStateValue(componentId, key, value) {\n const c = components.get(componentId);\n if (!c) return;\n const s = c.states.get(key);\n if (!s) return;\n s.value = value;\n emit();\n },\n\n removeState(componentId, key) {\n const c = components.get(componentId);\n if (!c) return;\n if (!c.states.has(key)) return;\n c.states.delete(key);\n emit();\n },\n };\n\n return store;\n}\n","import React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { useInspectorStore } from \"./provider\";\nimport type { InspectableMeta, InspectorComponentRef } from \"./store\";\n\nfunction stableKey(input: string): string {\n return input.trim();\n}\n\nfunction inferMeta(value: unknown): InspectableMeta | undefined {\n const t = typeof value;\n if (t === \"boolean\") return { type: \"boolean\" };\n if (t === \"number\") return { type: \"number\" };\n if (t === \"string\") return { type: \"text\" };\n if (value && t === \"object\") return { type: \"json\" };\n return undefined;\n}\n\n/**\n * Registers a piece of state to the inspector registry.\n * Opt-in by replacing useState with useInspectableState.\n */\nexport function useInspectableState<T>(\n component: InspectorComponentRef,\n key: string,\n initial: T | (() => T),\n meta?: InspectableMeta,\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const store = useInspectorStore();\n const componentId = component.id;\n\n const stateKey = useMemo(() => stableKey(key), [key]);\n\n const [value, setValue] = useState<T>(initial);\n\n // Keep latest setter stable for registry consumers\n const setValueRef = useRef<(next: unknown) => void>(() => {});\n setValueRef.current = (next: unknown) => {\n setValue(next as T);\n };\n\n // Register component + state entry\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n\n return () => {\n store.removeState(componentId, stateKey);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [store, componentId, stateKey]);\n\n // Sync updates on each render when value/meta changes\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n }, [store, componentId, stateKey, value, meta]);\n\n return [value, setValue];\n}\n\n/**\n * Optional helper to give the current component instance a human label.\n */\nexport function useComponentLabel(label: string) {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label.trim();\n if (!trimmed) return;\n store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useInspectorStore } from \"./provider\";\n\n// UI imports\nimport { LS_LAYOUT, LS_KEY, LS_SIZE, LS_LEFT_W, isMac } from \"./ui/constants\";\n\nimport type { DockMode, DockPreview, PanelPosition, PanelSize } from \"./ui/types\";\n\nimport { computePreview, previewRectStyle } from \"./ui/utils\";\n\nimport {\n FloatingButton,\n DockPreviewOverlay,\n ResizeHandle,\n SidebarResizer,\n ComponentList,\n StateEditorPanel,\n} from \"./ui/components\";\nimport DockHeader from \"./ui/components/DockHeader\";\n\nexport function StateInspectorUI() {\n const store = useInspectorStore();\n const [query, setQuery] = useState<string>(\"\");\n const [leftCollapsed, setLeftCollapsed] = useState(false);\n\n const [layout, setLayout] = useState<DockMode>(\"floating\");\n const [preview, setPreview] = useState<DockPreview>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [open, setOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [tick, force] = useState(0);\n\n const searchRef = useRef<HTMLInputElement | null>(null);\n\n // Persisted panel position\n const [pos, setPos] = useState<PanelPosition>(() => {\n try {\n const raw = localStorage.getItem(LS_KEY);\n return raw ? JSON.parse(raw) : { right: 16, bottom: 72 };\n } catch {\n return { right: 16, bottom: 72 };\n }\n });\n\n // Persisted sidebar width\n const [leftWidth, setLeftWidth] = useState(() => {\n try {\n const raw = localStorage.getItem(LS_LEFT_W);\n return raw ? Number(raw) : 280;\n } catch {\n return 280;\n }\n });\n\n // Persisted panel size\n const [size, setSize] = useState<PanelSize>(() => {\n try {\n const raw = localStorage.getItem(LS_SIZE);\n return raw ? JSON.parse(raw) : { width: 720, height: 420 };\n } catch {\n return { width: 720, height: 420 };\n }\n });\n\n // Persist layout to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LAYOUT, layout);\n } catch (e) {\n console.error(e);\n }\n }, [layout]);\n\n // Persist position to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_KEY, JSON.stringify(pos));\n } catch (e) {\n console.error(e);\n }\n }, [pos]);\n\n // Persist sidebar width to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LEFT_W, String(leftWidth));\n } catch (e) {\n console.error(e);\n }\n }, [leftWidth]);\n\n // Persist size to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_SIZE, JSON.stringify(size));\n } catch (e) {\n console.error(e);\n }\n }, [size]);\n\n // Auto-collapse sidebar when too narrow\n useEffect(() => {\n const shouldCollapse = leftWidth <= 200 || (size.width ?? 720) - leftWidth < 320;\n setLeftCollapsed(shouldCollapse);\n }, [leftWidth, size.width]);\n\n // Subscribe to store changes\n useEffect(() => store.subscribe(() => force((x) => x + 1)), [store]);\n\n // Get mounted components\n const snapshot = useMemo(() => store.getSnapshot(), [store, tick]);\n\n const components = useMemo(\n () => snapshot.components.filter((c) => c.mounted),\n [snapshot.components],\n );\n\n // Filter components by search query\n const q = query.trim().toLowerCase();\n const filtered = useMemo(\n () =>\n q\n ? components.filter((c) => {\n const labelHit = c.label.toLowerCase().includes(q);\n const keyHit = c.stateKeys.some((k) => k.toLowerCase().includes(q));\n return labelHit || keyHit;\n })\n : components,\n [q, components],\n );\n\n // Keep a valid selection\n useEffect(() => {\n if (!open) return;\n\n if (components.length === 0) {\n setSelectedId(null);\n return;\n }\n\n if (!selectedId || !components.some((c) => c.id === selectedId)) {\n setSelectedId(components[0]!.id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, components.length]);\n\n // Keyboard shortcuts\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n const mod = isMac ? e.metaKey : e.ctrlKey;\n\n // Cmd/Ctrl + Shift + I → toggle inspector\n if (mod && e.shiftKey && e.key.toLowerCase() === \"i\") {\n e.preventDefault();\n setOpen((o) => !o);\n return;\n }\n\n if (!open) return;\n\n // Esc → close\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n\n // \"/\" → focus search\n if (e.key === \"/\") {\n e.preventDefault();\n searchRef.current?.focus();\n return;\n }\n\n // Arrow navigation\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const list = filtered;\n if (!list.length) return;\n\n const idx = list.findIndex((c) => c.id === selectedId);\n const next =\n e.key === \"ArrowDown\"\n ? list[(Math.max(-1, idx) + 1) % list.length]!.id\n : list[idx <= 0 ? list.length - 1 : idx - 1]!.id;\n\n setSelectedId(next);\n setTimeout(() => {\n document.getElementById(`rsi-comp-${next}`)?.scrollIntoView({ block: \"nearest\" });\n }, 0);\n }\n }\n\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, filtered, selectedId]);\n\n // Get selected component\n const selected = useMemo(() => {\n if (!selectedId) return null;\n return store.components.get(selectedId) ?? null;\n }, [store, selectedId]);\n\n // Drag end handler - apply dock or reset preview\n const handleDragEnd = () => {\n if (preview) {\n setLayout(preview);\n setIsTransitioning(true);\n\n const rects = previewRectStyle(preview);\n setSize({ width: rects.width as number, height: rects.height as number });\n setPos({\n left: rects.left as number,\n right: rects.right as number,\n top: rects.top as number,\n bottom: rects.bottom as number,\n });\n setPreview(null);\n\n setTimeout(() => setIsTransitioning(false), 300);\n return;\n }\n setPreview(null);\n };\n\n // Drag start handler - initiate panel movement\n const handleDragStart = (e: React.PointerEvent<HTMLDivElement>) => {\n const startX = e.clientX;\n const startY = e.clientY;\n const start = pos;\n\n setLayout(\"floating\");\n setIsTransitioning(true);\n setSize({ width: 720, height: 420 });\n setTimeout(() => setIsTransitioning(false), 300);\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n const nextPreview = computePreview(ev.clientX, ev.clientY);\n\n setPreview((p) => (p === nextPreview ? p : nextPreview));\n\n const newPos: PanelPosition = {};\n if (start.left !== undefined) {\n newPos.left = Math.max(8, start.left + dx);\n } else {\n newPos.right = Math.max(8, (start.right ?? 16) - dx);\n }\n if (start.top !== undefined) {\n newPos.top = Math.max(8, start.top + dy);\n } else {\n newPos.bottom = Math.max(8, (start.bottom ?? 72) - dy);\n }\n setPos(newPos);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n };\n\n // Handle panel resize\n const handlePanelResize =\n (startSize: PanelSize, startPos: PanelPosition) =>\n (\n delta: { dx: number; dy: number },\n direction:\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\",\n ) => {\n const isLeft = direction === \"left\" || direction.endsWith(\"left\");\n const isTop = direction === \"top\" || direction.startsWith(\"top\");\n const isHorizontal = direction !== \"top\" && direction !== \"bottom\";\n const isVertical = direction !== \"left\" && direction !== \"right\";\n\n const currentWidth = startSize.width ?? 720;\n const currentHeight = startSize.height ?? 420;\n\n // Calculate new dimensions\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n\n if (isHorizontal) {\n if (isLeft) {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth - delta.dx));\n } else {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth + delta.dx));\n }\n }\n\n if (isVertical) {\n if (isTop) {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight - delta.dy));\n } else {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight + delta.dy));\n }\n }\n\n setSize({ width: newWidth, height: newHeight });\n\n // Update position for left/top edges\n const newPos: PanelPosition = { ...startPos };\n\n if (isLeft && startPos.left !== undefined) {\n const widthDelta = newWidth - currentWidth;\n newPos.left = Math.max(8, startPos.left - widthDelta);\n } else if (isLeft && startPos.right !== undefined) {\n // If positioned from right, adjust right position\n const widthDelta = newWidth - currentWidth;\n newPos.right = Math.max(8, startPos.right - widthDelta);\n }\n\n if (isTop && startPos.top !== undefined) {\n const heightDelta = newHeight - currentHeight;\n newPos.top = Math.max(8, startPos.top - heightDelta);\n } else if (isTop && startPos.bottom !== undefined) {\n // If positioned from bottom, adjust bottom position\n const heightDelta = newHeight - currentHeight;\n newPos.bottom = Math.max(8, startPos.bottom - heightDelta);\n }\n\n setPos(newPos);\n };\n\n if (!store.enabled) return null;\n\n return createPortal(\n <>\n <FloatingButton onClick={() => setOpen((o) => !o)} isActive={open} />\n <DockPreviewOverlay preview={preview} />\n\n {open && (\n <div\n data-rsi-root\n style={{\n position: \"fixed\",\n left: pos.left,\n right: pos.right,\n top: pos.top,\n bottom: pos.bottom,\n width: size.width || \"calc(100dvw - 24px)\",\n maxWidth: \"calc(100vw - 24px)\",\n height: size.height || \"calc(100dvh - 24px)\",\n maxHeight: \"calc(100vh - 24px)\",\n background: \"#1c1c1c\",\n color: \"#fff\",\n borderRadius: 12,\n border: \"1px solid #333\",\n zIndex: 999999,\n overflow: \"hidden\",\n transition: isTransitioning ? \"all 0.3s ease\" : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <DockHeader\n setOpen={setOpen}\n handleDragStart={handleDragStart}\n handleDragEnd={handleDragEnd}\n />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: leftCollapsed ? \"auto\" : `${leftWidth}px 14px auto`,\n height: \"100%\",\n }}\n >\n <ResizeHandle onResize={handlePanelResize(size, pos)} />\n\n <ComponentList\n query={query}\n onQueryChange={setQuery}\n searchRef={searchRef}\n components={filtered}\n selectedId={selectedId}\n onSelect={setSelectedId}\n hidden={leftCollapsed}\n />\n\n <SidebarResizer\n leftWidth={leftWidth}\n onWidthChange={setLeftWidth}\n hidden={leftCollapsed}\n />\n\n <StateEditorPanel\n selected={selected}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={() => setLeftCollapsed((v) => !v)}\n />\n </div>\n </div>\n )}\n </>,\n document.body,\n );\n}\n","// LocalStorage keys\nexport const LS_LAYOUT = \"rsi:panel-layout\";\nexport const LS_KEY = \"rsi:panel-pos\";\nexport const LS_SIZE = \"rsi:panel-size\";\nexport const LS_LEFT_W = \"rsi:left-width\";\n\n// Dock settings\nexport const SNAP = 100; // distance in px to trigger dock preview\nexport const DOCK_W = 420; // left/right dock width\nexport const DOCK_H = 320; // top/bottom dock height\nexport const MARGIN = 12; // dock margin\n\n// Sidebar settings\nexport const LEFT_MIN = 180;\nexport const LEFT_MAX = 420;\n\n// Platform detection\nexport const isMac =\n typeof navigator !== \"undefined\" ? navigator.platform.toUpperCase().includes(\"MAC\") : false;\n","import type React from \"react\";\nimport { SNAP, DOCK_W, DOCK_H, MARGIN } from \"./constants\";\nimport type { DockPreview } from \"./types\";\n\n/**\n * Type guard for select option objects\n */\nexport function isOptionObject(\n opt: string | { label: string; value: string },\n): opt is { label: string; value: string } {\n return typeof opt === \"object\" && opt !== null && \"value\" in opt;\n}\n\n/**\n * Compute dock preview based on cursor position\n */\nexport function computePreview(x: number, y: number): DockPreview {\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const nearLeft = x <= SNAP;\n const nearRight = x >= w - SNAP;\n const nearTop = y <= SNAP;\n const nearBottom = y >= h - SNAP;\n\n // Priority: horizontal edges take precedence over vertical\n if (nearLeft) return \"dock-left\";\n if (nearRight) return \"dock-right\";\n if (nearTop) return \"dock-top\";\n if (nearBottom) return \"dock-bottom\";\n return null;\n}\n\n/**\n * Get CSS properties for dock preview rectangle\n */\nexport function previewRectStyle(p: DockPreview): React.CSSProperties {\n const base: React.CSSProperties = {\n position: \"fixed\",\n border: \"1px dashed #555\",\n background: \"rgba(255,255,255,0.06)\",\n borderRadius: 12,\n };\n\n if (p === \"dock-left\") {\n return { ...base, left: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-right\") {\n return { ...base, right: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-top\") {\n return { ...base, left: MARGIN, right: MARGIN, top: MARGIN, height: DOCK_H };\n }\n // dock-bottom\n return { ...base, left: MARGIN, right: MARGIN, bottom: MARGIN, height: DOCK_H };\n}\n\n/**\n * Safely stringify a value to JSON\n */\nexport function safeStringify(v: unknown): string {\n try {\n return JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DevtoolsIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_1_13)\">\n <path\n d=\"M2 7.00002C1.90538 7.00034 1.81262 6.97381 1.73248 6.92351C1.65234 6.87321 1.58812 6.8012 1.54727 6.71585C1.50643 6.6305 1.49065 6.53531 1.50175 6.44135C1.51285 6.34739 1.55039 6.2585 1.61 6.18502L6.56 1.08502C6.59713 1.04216 6.64773 1.0132 6.70349 1.00289C6.75925 0.992575 6.81686 1.00153 6.86687 1.02827C6.91687 1.05502 6.95629 1.09797 6.97867 1.15007C7.00104 1.20218 7.00504 1.26034 6.99 1.31502L6.03 4.32502C6.00169 4.40078 5.99219 4.48228 6.0023 4.56252C6.01241 4.64277 6.04183 4.71936 6.08805 4.78573C6.13426 4.85211 6.19589 4.90628 6.26764 4.9436C6.33939 4.98092 6.41912 5.00028 6.5 5.00002H10C10.0946 4.9997 10.1874 5.02623 10.2675 5.07653C10.3477 5.12683 10.4119 5.19884 10.4527 5.28419C10.4936 5.36954 10.5094 5.46473 10.4983 5.55869C10.4871 5.65266 10.4496 5.74154 10.39 5.81502L5.44 10.915C5.40287 10.9579 5.35227 10.9868 5.29651 10.9972C5.24075 11.0075 5.18314 10.9985 5.13313 10.9718C5.08313 10.945 5.04371 10.9021 5.02133 10.85C4.99896 10.7979 4.99496 10.7397 5.01 10.685L5.97 7.67502C5.99831 7.59926 6.00781 7.51776 5.9977 7.43752C5.98759 7.35727 5.95817 7.28068 5.91195 7.21431C5.86574 7.14793 5.80411 7.09376 5.73236 7.05644C5.66061 7.01912 5.58088 6.99976 5.5 7.00002H2Z\"\n fill=\"inherit\"\n stroke=\"inherit\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1_13\">\n <rect width=\"12\" height=\"12\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default DevtoolsIcon;\n","import DevtoolsIcon from \"../icons/DevtoolsIcon\";\n\ninterface FloatingButtonProps {\n onClick: () => void;\n isActive: boolean;\n}\n\nexport function FloatingButton({ onClick, isActive }: FloatingButtonProps) {\n return (\n <button\n data-rsi-floating-button\n title=\"State Inspector (⌘⇧I / Ctrl⇧I)\"\n onClick={onClick}\n style={{\n position: \"fixed\",\n right: 16,\n bottom: 16,\n width: 48,\n height: 48,\n borderRadius: 24,\n border: \"none\",\n background: isActive ? \"#155DFC\" : \"#111\",\n color: \"#fff\",\n cursor: \"pointer\",\n zIndex: 999999,\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n aria-label=\"Toggle State Inspector\"\n >\n <DevtoolsIcon fill={isActive ? \"#FFF\" : undefined} stroke=\"#FFF\" height={20} width={20} />\n </button>\n );\n}\n","import type { DockPreview } from \"../types\";\nimport { previewRectStyle } from \"../utils\";\n\ninterface DockPreviewOverlayProps {\n preview: DockPreview;\n}\n\nexport function DockPreviewOverlay({ preview }: DockPreviewOverlayProps) {\n if (!preview) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n pointerEvents: \"none\",\n zIndex: 999998,\n }}\n >\n <div style={previewRectStyle(preview)} />\n </div>\n );\n}\n","export type ResizeDirection =\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\ninterface ResizeHandleProps {\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}\n\nconst EDGE_SIZE = 6;\nconst CORNER_SIZE = 12;\n\ntype HandleConfig = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n width?: number | string;\n height?: number | string;\n cursor: string;\n};\n\nconst handleConfigs: Record<ResizeDirection, HandleConfig> = {\n // Edges\n top: { top: 0, left: CORNER_SIZE, right: CORNER_SIZE, height: EDGE_SIZE, cursor: \"ns-resize\" },\n bottom: {\n bottom: 0,\n left: CORNER_SIZE,\n right: CORNER_SIZE,\n height: EDGE_SIZE,\n cursor: \"ns-resize\",\n },\n left: { left: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n right: { right: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n // Corners\n \"top-left\": { top: 0, left: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nwse-resize\" },\n \"top-right\": { top: 0, right: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nesw-resize\" },\n \"bottom-left\": {\n bottom: 0,\n left: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nesw-resize\",\n },\n \"bottom-right\": {\n bottom: 0,\n right: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nwse-resize\",\n },\n};\n\nfunction Handle({\n direction,\n onResize,\n}: {\n direction: ResizeDirection;\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}) {\n const config = handleConfigs[direction];\n\n return (\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n const startX = e.clientX;\n const startY = e.clientY;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n onResize(\n {\n dx: ev.clientX - startX,\n dy: ev.clientY - startY,\n },\n direction,\n );\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n position: \"absolute\",\n top: config.top,\n right: config.right,\n bottom: config.bottom,\n left: config.left,\n width: config.width,\n height: config.height,\n cursor: config.cursor,\n background: \"transparent\",\n zIndex: 10,\n }}\n />\n );\n}\n\nconst directions: ResizeDirection[] = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n];\n\nexport function ResizeHandle({ onResize }: ResizeHandleProps) {\n return (\n <>\n {directions.map((dir) => (\n <Handle key={dir} direction={dir} onResize={onResize} />\n ))}\n </>\n );\n}\n","import { LEFT_MIN, LEFT_MAX } from \"../constants\";\n\ninterface SidebarResizerProps {\n leftWidth: number;\n onWidthChange: (width: number) => void;\n hidden: boolean;\n}\n\nexport function SidebarResizer({ leftWidth, onWidthChange, hidden }: SidebarResizerProps) {\n if (hidden) return null;\n\n return (\n <div\n onPointerDown={(e) => {\n e.preventDefault();\n const startX = e.clientX;\n const startW = leftWidth;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const next = Math.max(LEFT_MIN, Math.min(LEFT_MAX, startW + dx));\n onWidthChange(next);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n width: 8,\n cursor: \"col-resize\",\n background: \"transparent\",\n borderLeft: \"1px solid #2a2a2a\",\n borderRight: \"1px solid #2a2a2a\",\n }}\n title=\"Resize sidebar\"\n />\n );\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\n\ninterface DragHandleProps {\n children: React.ReactNode;\n onDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n style?: React.CSSProperties;\n}\n\nexport function DragHandle({ children, onDragStart, onDragEnd, style }: DragHandleProps) {\n const [isDragging, setIsDragging] = useState(false);\n\n return (\n <div\n style={{ cursor: isDragging ? \"grabbing\" : \"grab\", userSelect: \"none\", ...style }}\n onPointerDown={(e) => {\n const target = e.target as HTMLElement | null;\n try {\n if (\n target &&\n typeof target.closest === \"function\" &&\n target.closest('button, input, textarea, a, [role=\"button\"], [data-no-drag]')\n ) {\n return;\n }\n } catch (e) {\n console.error(e);\n }\n\n setIsDragging(true);\n onDragStart(e);\n }}\n onPointerUp={() => {\n if (isDragging) {\n setIsDragging(false);\n onDragEnd();\n }\n }}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\n\nexport const inputStyle: React.CSSProperties = {\n padding: \"8px 10px\",\n borderRadius: 4,\n border: \"none\",\n background: \"#18181B\",\n color: \"#fff\",\n minWidth: 120,\n};\n\nexport const cardStyle: React.CSSProperties = {\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n borderRadius: 12,\n padding: 10,\n};\n\nexport const buttonStyle: React.CSSProperties = {\n background: \"transparent\",\n color: \"#fff\",\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n cursor: \"pointer\",\n};\n","import type React from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n inputRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function SearchInput({ value, onChange, inputRef }: SearchInputProps) {\n return (\n <input\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder=\"Filter…\"\n ref={inputRef}\n style={{\n ...inputStyle,\n outline: \"none\",\n }}\n />\n );\n}\n","import type React from \"react\";\nimport type { ComponentSummary } from \"../types\";\nimport { SearchInput } from \"./SearchInput\";\ninterface ComponentListProps {\n components: ComponentSummary[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n hidden: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function ComponentList({\n components,\n selectedId,\n onSelect,\n hidden,\n query,\n onQueryChange,\n searchRef,\n}: ComponentListProps) {\n if (hidden) return null;\n\n return (\n <div style={{ padding: 4, boxSizing: \"border-box\", backgroundColor: \"#09090B\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n paddingTop: 4,\n paddingBottom: 8,\n paddingLeft: 4,\n paddingRight: 4,\n }}\n >\n <SearchInput value={query} onChange={onQueryChange} inputRef={searchRef} />\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, overflow: \"auto\", flex: 1 }}>\n {components.map((c) => {\n const active = c.id === selectedId;\n return (\n <button\n key={c.id}\n id={`rsi-comp-${c.id}`}\n onClick={() => onSelect(c.id)}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 8,\n backgroundColor: active ? \"#27272A\" : \"transparent\",\n border: \"none\",\n }}\n >\n <div style={{ fontWeight: 500, fontSize: 12, color: active ? \"#fff\" : \"#9F9FA9\" }}>\n {c.label}\n </div>\n <div\n style={{\n fontSize: 9,\n height: 16,\n width: 16,\n color: \"#D4D4D8\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 8,\n backgroundColor: \"#3F3F47\",\n }}\n >\n {c.stateKeys.length}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type React from \"react\";\n\ninterface StatePanelHeaderProps {\n selectedLabel: string | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StatePanelHeader({\n selectedLabel,\n leftCollapsed,\n onToggleCollapse,\n}: StatePanelHeaderProps) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <button\n onClick={(e) => {\n e.preventDefault();\n onToggleCollapse();\n }}\n style={{\n padding: 4,\n marginRight: 12,\n borderRadius: 6,\n border: \"1px solid #333\",\n background: \"transparent\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 12,\n width: 24,\n height: 24,\n }}\n >\n {leftCollapsed ? \"»\" : \"«\"}\n </button>\n\n <h4 style={{ margin: 0 }}>{selectedLabel ?? \"No selection\"}</h4>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface JsonEditorProps {\n initial: string;\n onValidJson: (obj: unknown) => void;\n}\n\nexport function JsonEditor({ initial, onValidJson }: JsonEditorProps) {\n const [raw, setRaw] = useState(initial);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n setRaw(initial);\n }, [initial]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n setRaw(next);\n\n try {\n const parsed = JSON.parse(next);\n setError(null);\n onValidJson(parsed);\n } catch {\n setError(\"Invalid JSON\");\n }\n };\n\n return (\n <div style={{ display: \"grid\", gap: 6 }}>\n <textarea\n value={raw}\n onChange={handleChange}\n rows={6}\n style={{\n ...inputStyle,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n fontSize: 12,\n resize: \"vertical\",\n }}\n />\n {error && <div style={{ fontSize: 12, color: \"#ff6b6b\" }}>{error}</div>}\n </div>\n );\n}\n","import type { InspectableMeta } from \"../../store\";\nimport { inputStyle } from \"../styles\";\nimport { isOptionObject, safeStringify } from \"../utils\";\nimport { JsonEditor } from \"./JsonEditor\";\n\ninterface StateEditorProps {\n value: unknown;\n meta: InspectableMeta | undefined;\n onChange: (next: unknown) => void;\n}\n\nexport function StateEditor({ value, meta, onChange }: StateEditorProps) {\n // boolean\n if (meta?.type === \"boolean\" || typeof value === \"boolean\") {\n return (\n <label style={{ display: \"flex\", gap: 10, alignItems: \"center\" }}>\n <input\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n <span style={{ fontSize: 13, opacity: 0.8 }}>{String(Boolean(value))}</span>\n </label>\n );\n }\n\n // select\n if (meta?.type === \"select\" && Array.isArray(meta.options)) {\n const current = typeof value === \"string\" ? value : String(value ?? \"\");\n return (\n <select\n value={current}\n onChange={(e) => onChange(e.target.value)}\n style={{\n ...inputStyle,\n minWidth: 120,\n }}\n >\n {meta.options.map((opt: string | { label: string; value: string }) => {\n const o = isOptionObject(opt) ? opt : { label: String(opt), value: String(opt) };\n return (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n );\n })}\n </select>\n );\n }\n\n // number\n if (meta?.type === \"number\") {\n return (\n <input\n type=\"number\"\n value={typeof value === \"number\" ? value : Number(value ?? 0)}\n min={meta?.min}\n max={meta?.max}\n step={meta?.step}\n onChange={(e) => onChange(e.target.value === \"\" ? 0 : Number(e.target.value))}\n style={inputStyle}\n />\n );\n }\n\n // json\n if (meta?.type === \"json\" || (value && typeof value === \"object\")) {\n return <JsonEditor initial={safeStringify(value)} onValidJson={onChange} />;\n }\n\n // text (default)\n return (\n <input\n type=\"text\"\n value={typeof value === \"string\" ? value : String(value ?? \"\")}\n placeholder={meta?.type === \"text\" ? meta.placeholder : undefined}\n onChange={(e) => onChange(e.target.value)}\n style={inputStyle}\n />\n );\n}\n","import type { InspectableStateEntry } from \"../../store\";\nimport { cardStyle } from \"../styles\";\nimport { StateEditor } from \"./StateEditor\";\n\ninterface StateCardProps {\n state: InspectableStateEntry;\n}\n\nexport function StateCard({ state }: StateCardProps) {\n return (\n <div\n style={{\n ...cardStyle,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n gap: 1,\n }}\n >\n <div style={{ fontSize: 14 }}>{state.key}</div>\n <div style={{ fontSize: 12, color: \"#52525C\", textTransform: \"uppercase\" }}>\n {state.meta?.type ?? \"auto\"}\n </div>\n </div>\n\n <StateEditor\n value={state.value}\n meta={state.meta}\n onChange={(next) => state.setValue(next)}\n />\n </div>\n );\n}\n","import type React from \"react\";\nimport type { ComponentEntry } from \"../../store\";\nimport { StatePanelHeader } from \"./StatePanelHeader\";\nimport { StateCard } from \"./StateCard\";\n\ninterface StateEditorPanelProps {\n selected: ComponentEntry | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StateEditorPanel({\n selected,\n leftCollapsed,\n onToggleCollapse,\n}: StateEditorPanelProps) {\n return (\n <div\n style={{\n padding: 12,\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n backgroundColor: \"#0C0C0E\",\n }}\n >\n <StatePanelHeader\n selectedLabel={selected?.label ?? null}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={onToggleCollapse}\n />\n\n <div style={{ marginTop: 12, display: \"grid\", gap: 10 }}>\n {selected && selected.states.size === 0 && (\n <div style={{ fontSize: 13, opacity: 0.7 }}>This component has no inspectable state.</div>\n )}\n\n {!selected && <div style={{ opacity: 0.7, fontSize: 13 }}>No component selected.</div>}\n\n {selected &&\n Array.from(selected.states.values()).map((s) => <StateCard key={s.key} state={s} />)}\n </div>\n </div>\n );\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DragIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M7.99998 6.66665C8.36817 6.66665 8.66665 6.36817 8.66665 5.99998C8.66665 5.63179 8.36817 5.33331 7.99998 5.33331C7.63179 5.33331 7.33331 5.63179 7.33331 5.99998C7.33331 6.36817 7.63179 6.66665 7.99998 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 6.66665C13.0349 6.66665 13.3333 6.36817 13.3333 5.99998C13.3333 5.63179 13.0349 5.33331 12.6667 5.33331C12.2985 5.33331 12 5.63179 12 5.99998C12 6.36817 12.2985 6.66665 12.6667 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 6.66665C3.70154 6.66665 4.00002 6.36817 4.00002 5.99998C4.00002 5.63179 3.70154 5.33331 3.33335 5.33331C2.96516 5.33331 2.66669 5.63179 2.66669 5.99998C2.66669 6.36817 2.96516 6.66665 3.33335 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99998 10.6666C8.36817 10.6666 8.66665 10.3682 8.66665 9.99998C8.66665 9.63179 8.36817 9.33331 7.99998 9.33331C7.63179 9.33331 7.33331 9.63179 7.33331 9.99998C7.33331 10.3682 7.63179 10.6666 7.99998 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 10.6666C13.0349 10.6666 13.3333 10.3682 13.3333 9.99998C13.3333 9.63179 13.0349 9.33331 12.6667 9.33331C12.2985 9.33331 12 9.63179 12 9.99998C12 10.3682 12.2985 10.6666 12.6667 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 10.6666C3.70154 10.6666 4.00002 10.3682 4.00002 9.99998C4.00002 9.63179 3.70154 9.33331 3.33335 9.33331C2.96516 9.33331 2.66669 9.63179 2.66669 9.99998C2.66669 10.3682 2.96516 10.6666 3.33335 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default DragIcon;\n","import React, { SVGAttributes } from \"react\";\n\nconst CloseIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 3.5L3.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 3.5L10.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import React from \"react\";\nimport { DragHandle } from \"./DragHandle\";\nimport DevtoolsIcon from \"../icons/DevtoolsIcon\";\nimport DragIcon from \"../icons/DragIcon\";\nimport CloseIcon from \"../icons/CloseIcon\";\n\nconst DockHeader: React.FC<{\n setOpen: (open: boolean) => void;\n handleDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n handleDragEnd: () => void;\n}> = ({ setOpen, handleDragStart, handleDragEnd }) => {\n return (\n <DragHandle onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <div\n style={{\n height: 40,\n width: \"100%\",\n padding: \"9.5px 12px\",\n boxSizing: \"border-box\",\n borderBottom: \"1px solid rgba(39, 39, 42, 0.5)\",\n display: \"flex\",\n flexDirection: \"row\",\n backgroundColor: \"rgba(24, 24, 27, 0.5)\",\n }}\n >\n <div\n style={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginRight: 8,\n backgroundColor: \"#27272A\",\n borderRadius: 4,\n }}\n >\n <DevtoolsIcon fill=\"#9F9FA9\" stroke=\"#9F9FA9\" height={12} width={12} />\n </div>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: \"#E4E4E7\",\n }}\n >\n React Inspector\n </span>\n\n <div\n style={{\n marginLeft: \"auto\",\n display: \"flex\",\n flexDirection: \"row\",\n gap: 16,\n alignItems: \"center\",\n }}\n >\n <DragIcon />\n <div\n data-no-drag\n style={{\n cursor: \"pointer\",\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(false);\n }}\n >\n <CloseIcon />\n </div>\n </div>\n </div>\n </DragHandle>\n );\n};\n\nexport default DockHeader;\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","e","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
package/dist/index.mjs CHANGED
@@ -21,7 +21,7 @@ function styleInject(css, { insertAt } = {}) {
21
21
  }
22
22
 
23
23
  // src/index.css
24
- styleInject('@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";\n[data-rsi-root],\n[data-rsi-root] *,\n[data-rsi-root] *::before,\n[data-rsi-root] *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n font-weight: 400;\n font-style: normal;\n font-variant: normal;\n line-height: 1.5;\n letter-spacing: normal;\n text-align: left;\n text-decoration: none;\n text-indent: 0;\n text-shadow: none;\n text-transform: none;\n word-spacing: normal;\n white-space: normal;\n background: transparent;\n color: inherit;\n outline: none;\n vertical-align: baseline;\n visibility: visible;\n opacity: 1;\n transform: none;\n transform-origin: 50% 50% 0;\n animation: none;\n transition: none;\n list-style: none;\n border-collapse: collapse;\n border-spacing: 0;\n float: none;\n clear: none;\n cursor: auto;\n}\n[data-rsi-root] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #fff;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n[data-rsi-floating-button] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n[data-rsi-root] button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n margin: 0;\n}\n[data-rsi-root] input,\n[data-rsi-root] textarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n margin: 0;\n resize: none;\n}\n[data-rsi-root] input::placeholder,\n[data-rsi-root] textarea::placeholder {\n color: inherit;\n opacity: 0.5;\n}\n[data-rsi-root] a {\n color: inherit;\n text-decoration: none;\n}\n[data-rsi-root] img,\n[data-rsi-root] svg {\n display: block;\n max-width: 100%;\n}\n[data-rsi-root] h1,\n[data-rsi-root] h2,\n[data-rsi-root] h3,\n[data-rsi-root] h4,\n[data-rsi-root] h5,\n[data-rsi-root] h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n[data-rsi-root] ::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n[data-rsi-root] ::-webkit-scrollbar-track {\n background: transparent;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2);\n border-radius: 3px;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n[data-rsi-root] ::selection {\n background: rgba(99, 102, 241, 0.4);\n color: #fff;\n}\n[data-rsi-root] :focus-visible {\n outline: 2px solid rgba(99, 102, 241, 0.6);\n outline-offset: 2px;\n}\n');
24
+ styleInject('@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";\n[data-rsi-root],\n[data-rsi-root] *,\n[data-rsi-root] *::before,\n[data-rsi-root] *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n font-weight: 400;\n font-style: normal;\n font-variant: normal;\n line-height: 1.5;\n letter-spacing: normal;\n text-align: left;\n text-decoration: none;\n text-indent: 0;\n text-shadow: none;\n text-transform: none;\n word-spacing: normal;\n white-space: normal;\n background: transparent;\n color: inherit;\n outline: none;\n vertical-align: baseline;\n visibility: visible;\n opacity: 1;\n transform: none;\n transform-origin: 50% 50% 0;\n animation: none;\n transition: none;\n list-style: none;\n border-collapse: collapse;\n border-spacing: 0;\n float: none;\n clear: none;\n cursor: auto;\n}\n[data-rsi-root] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #fff;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n[data-rsi-floating-button] {\n all: initial;\n font-family:\n "Inter",\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n "Helvetica Neue",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n[data-rsi-root] button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n margin: 0;\n border-radius: 8px;\n}\n[data-rsi-root] input,\n[data-rsi-root] textarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n background: transparent;\n border: none;\n outline: none;\n padding: 0;\n margin: 0;\n resize: none;\n}\n[data-rsi-root] input::placeholder,\n[data-rsi-root] textarea::placeholder {\n color: inherit;\n opacity: 0.5;\n}\n[data-rsi-root] a {\n color: inherit;\n text-decoration: none;\n}\n[data-rsi-root] img,\n[data-rsi-root] svg {\n display: block;\n max-width: 100%;\n}\n[data-rsi-root] h1,\n[data-rsi-root] h2,\n[data-rsi-root] h3,\n[data-rsi-root] h4,\n[data-rsi-root] h5,\n[data-rsi-root] h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n[data-rsi-root] ::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n[data-rsi-root] ::-webkit-scrollbar-track {\n background: transparent;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.2);\n border-radius: 3px;\n}\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n[data-rsi-root] ::selection {\n background: rgba(99, 102, 241, 0.4);\n color: #fff;\n}\n[data-rsi-root] :focus-visible {\n outline: 2px solid rgba(99, 102, 241, 0.6);\n outline-offset: 2px;\n}\n');
25
25
 
26
26
  // src/provider.tsx
27
27
  import { createContext, useContext, useEffect, useId, useMemo } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["#style-inject:#style-inject","../src/index.css","../src/provider.tsx","../src/store.ts","../src/hooks.ts","../src/StateInspectorUI.tsx","../src/ui/constants.ts","../src/ui/utils.ts","../src/ui/icons/DevtoolsIcon.tsx","../src/ui/components/FloatingButton.tsx","../src/ui/components/DockPreviewOverlay.tsx","../src/ui/components/ResizeHandle.tsx","../src/ui/components/SidebarResizer.tsx","../src/ui/components/DragHandle.tsx","../src/ui/styles.ts","../src/ui/components/SearchInput.tsx","../src/ui/components/ComponentList.tsx","../src/ui/components/StatePanelHeader.tsx","../src/ui/components/JsonEditor.tsx","../src/ui/components/StateEditor.tsx","../src/ui/components/StateCard.tsx","../src/ui/components/StateEditorPanel.tsx","../src/ui/icons/DragIcon.tsx","../src/ui/icons/CloseIcon.tsx","../src/ui/components/DockHeader.tsx"],"sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"@import \\\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\\\";\\n[data-rsi-root],\\n[data-rsi-root] *,\\n[data-rsi-root] *::before,\\n[data-rsi-root] *::after {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n font-style: normal;\\n font-variant: normal;\\n line-height: 1.5;\\n letter-spacing: normal;\\n text-align: left;\\n text-decoration: none;\\n text-indent: 0;\\n text-shadow: none;\\n text-transform: none;\\n word-spacing: normal;\\n white-space: normal;\\n background: transparent;\\n color: inherit;\\n outline: none;\\n vertical-align: baseline;\\n visibility: visible;\\n opacity: 1;\\n transform: none;\\n transform-origin: 50% 50% 0;\\n animation: none;\\n transition: none;\\n list-style: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n float: none;\\n clear: none;\\n cursor: auto;\\n}\\n[data-rsi-root] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n line-height: 1.5;\\n color: #fff;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n text-rendering: optimizeLegibility;\\n}\\n[data-rsi-floating-button] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n[data-rsi-root] button {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n cursor: pointer;\\n background: transparent;\\n border: none;\\n padding: 0;\\n margin: 0;\\n}\\n[data-rsi-root] input,\\n[data-rsi-root] textarea {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n background: transparent;\\n border: none;\\n outline: none;\\n padding: 0;\\n margin: 0;\\n resize: none;\\n}\\n[data-rsi-root] input::placeholder,\\n[data-rsi-root] textarea::placeholder {\\n color: inherit;\\n opacity: 0.5;\\n}\\n[data-rsi-root] a {\\n color: inherit;\\n text-decoration: none;\\n}\\n[data-rsi-root] img,\\n[data-rsi-root] svg {\\n display: block;\\n max-width: 100%;\\n}\\n[data-rsi-root] h1,\\n[data-rsi-root] h2,\\n[data-rsi-root] h3,\\n[data-rsi-root] h4,\\n[data-rsi-root] h5,\\n[data-rsi-root] h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n[data-rsi-root] ::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb {\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 3px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\\n background: rgba(255, 255, 255, 0.3);\\n}\\n[data-rsi-root] ::selection {\\n background: rgba(99, 102, 241, 0.4);\\n color: #fff;\\n}\\n[data-rsi-root] :focus-visible {\\n outline: 2px solid rgba(99, 102, 241, 0.6);\\n outline-offset: 2px;\\n}\\n\")","import React, { createContext, useContext, useEffect, useId, useMemo } from \"react\";\nimport { createInspectorStore, InspectorComponentRef, InspectorStore } from \"./store\";\n\nconst InspectorContext = createContext<InspectorStore | null>(null);\n\nconst storeRef = { current: null as InspectorStore | null };\n\nfunction getStore(): InspectorStore {\n if (!storeRef.current) {\n storeRef.current = createInspectorStore();\n }\n return storeRef.current;\n}\n\nexport function StateInspectorProvider({\n enabled = true,\n children,\n}: {\n enabled?: boolean;\n children: React.ReactNode;\n}) {\n const store = useMemo(() => getStore(), []);\n\n useEffect(() => {\n storeRef.current!.enabled = enabled;\n }, [enabled]);\n\n return <InspectorContext.Provider value={store}>{children}</InspectorContext.Provider>;\n}\n\nexport function useInspectorStore(): InspectorStore {\n const ctx = useContext(InspectorContext);\n if (!ctx) {\n throw new Error(\"useInspectorStore must be used inside StateInspectorProvider\");\n }\n return ctx;\n}\n\nexport function useInspectorComponent(label?: string): InspectorComponentRef {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n\n store.registerComponent(componentId, label?.trim());\n return () => {\n store.unregisterComponent(componentId);\n };\n }, [store, componentId, label]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label?.trim();\n if (trimmed) store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n console.log({ id: componentId });\n\n return useMemo(() => ({ id: componentId }), [componentId]);\n}\n","export type ComponentId = string;\n\nexport type InspectableMeta =\n | { type: \"boolean\" }\n | { type: \"text\"; placeholder?: string }\n | { type: \"number\"; min?: number; max?: number; step?: number }\n | { type: \"select\"; options: Array<string | { label: string; value: string }> }\n | { type: \"json\" }\n | { type: \"custom\"; renderId: string };\n\nexport interface InspectableStateEntry {\n key: string;\n value: unknown;\n setValue: (next: unknown) => void;\n meta?: InspectableMeta;\n}\n\nexport interface ComponentEntry {\n id: ComponentId;\n label: string;\n mounted: boolean;\n states: Map<string, InspectableStateEntry>;\n}\n\nexport interface InspectorSnapshot {\n enabled: boolean;\n components: Array<{\n id: ComponentId;\n label: string;\n mounted: boolean;\n stateKeys: string[];\n }>;\n}\n\ntype Listener = () => void;\n\nexport interface InspectorComponentRef {\n id: string;\n}\n\nexport interface InspectorStore {\n enabled: boolean;\n\n // internal registry\n components: Map<ComponentId, ComponentEntry>;\n\n // subscriptions\n subscribe: (listener: Listener) => () => void;\n getSnapshot: () => InspectorSnapshot;\n\n // component lifecycle\n registerComponent: (id: ComponentId, label?: string) => void;\n setComponentLabel: (id: ComponentId, label: string) => void;\n unregisterComponent: (id: ComponentId) => void;\n\n // state lifecycle\n upsertState: (componentId: ComponentId, entry: InspectableStateEntry) => void;\n\n updateStateValue: (componentId: ComponentId, key: string, value: unknown) => void;\n removeState: (componentId: ComponentId, key: string) => void;\n}\n\nexport function createInspectorStore(): InspectorStore {\n const components = new Map<ComponentId, ComponentEntry>();\n const listeners = new Set<Listener>();\n\n function emit() {\n for (const l of listeners) l();\n }\n\n function getOrCreateComponent(id: ComponentId): ComponentEntry {\n const existing = components.get(id);\n if (existing) return existing;\n\n const created: ComponentEntry = {\n id,\n label: \"Unknown\",\n mounted: true,\n states: new Map(),\n };\n components.set(id, created);\n return created;\n }\n\n const store: InspectorStore = {\n enabled: true,\n components,\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n\n getSnapshot() {\n return {\n enabled: store.enabled,\n components: Array.from(components.values()).map((c) => ({\n id: c.id,\n label: c.label,\n mounted: c.mounted,\n stateKeys: Array.from(c.states.keys()),\n })),\n };\n },\n\n registerComponent(id, label) {\n const c = getOrCreateComponent(id);\n c.mounted = true;\n if (label && label.trim()) c.label = label.trim();\n emit();\n },\n\n setComponentLabel(id, label) {\n const c = getOrCreateComponent(id);\n c.label = label.trim() || \"Unknown\";\n emit();\n },\n\n unregisterComponent(id) {\n const c = components.get(id);\n if (!c) return;\n\n // StrictMode double-unmount safe:\n // we mark as unmounted; UI can choose to hide unmounted entries.\n c.mounted = false;\n\n // Optional: immediate cleanup if you prefer:\n // components.delete(id);\n\n emit();\n },\n\n upsertState(componentId, entry) {\n const c = getOrCreateComponent(componentId);\n c.states.set(entry.key, entry);\n emit();\n },\n\n updateStateValue(componentId, key, value) {\n const c = components.get(componentId);\n if (!c) return;\n const s = c.states.get(key);\n if (!s) return;\n s.value = value;\n emit();\n },\n\n removeState(componentId, key) {\n const c = components.get(componentId);\n if (!c) return;\n if (!c.states.has(key)) return;\n c.states.delete(key);\n emit();\n },\n };\n\n return store;\n}\n","import React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { useInspectorStore } from \"./provider\";\nimport type { InspectableMeta, InspectorComponentRef } from \"./store\";\n\nfunction stableKey(input: string): string {\n return input.trim();\n}\n\nfunction inferMeta(value: unknown): InspectableMeta | undefined {\n const t = typeof value;\n if (t === \"boolean\") return { type: \"boolean\" };\n if (t === \"number\") return { type: \"number\" };\n if (t === \"string\") return { type: \"text\" };\n if (value && t === \"object\") return { type: \"json\" };\n return undefined;\n}\n\n/**\n * Registers a piece of state to the inspector registry.\n * Opt-in by replacing useState with useInspectableState.\n */\nexport function useInspectableState<T>(\n component: InspectorComponentRef,\n key: string,\n initial: T | (() => T),\n meta?: InspectableMeta,\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const store = useInspectorStore();\n const componentId = component.id;\n\n const stateKey = useMemo(() => stableKey(key), [key]);\n\n const [value, setValue] = useState<T>(initial);\n\n // Keep latest setter stable for registry consumers\n const setValueRef = useRef<(next: unknown) => void>(() => {});\n setValueRef.current = (next: unknown) => {\n setValue(next as T);\n };\n\n // Register component + state entry\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n\n return () => {\n store.removeState(componentId, stateKey);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [store, componentId, stateKey]);\n\n // Sync updates on each render when value/meta changes\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n }, [store, componentId, stateKey, value, meta]);\n\n return [value, setValue];\n}\n\n/**\n * Optional helper to give the current component instance a human label.\n */\nexport function useComponentLabel(label: string) {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label.trim();\n if (!trimmed) return;\n store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useInspectorStore } from \"./provider\";\n\n// UI imports\nimport { LS_LAYOUT, LS_KEY, LS_SIZE, LS_LEFT_W, isMac } from \"./ui/constants\";\n\nimport type { DockMode, DockPreview, PanelPosition, PanelSize } from \"./ui/types\";\n\nimport { computePreview, previewRectStyle } from \"./ui/utils\";\n\nimport {\n FloatingButton,\n DockPreviewOverlay,\n ResizeHandle,\n SidebarResizer,\n ComponentList,\n StateEditorPanel,\n} from \"./ui/components\";\nimport DockHeader from \"./ui/components/DockHeader\";\n\nexport function StateInspectorUI() {\n const store = useInspectorStore();\n const [query, setQuery] = useState<string>(\"\");\n const [leftCollapsed, setLeftCollapsed] = useState(false);\n\n const [layout, setLayout] = useState<DockMode>(\"floating\");\n const [preview, setPreview] = useState<DockPreview>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [open, setOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [tick, force] = useState(0);\n\n const searchRef = useRef<HTMLInputElement | null>(null);\n\n // Persisted panel position\n const [pos, setPos] = useState<PanelPosition>(() => {\n try {\n const raw = localStorage.getItem(LS_KEY);\n return raw ? JSON.parse(raw) : { right: 16, bottom: 72 };\n } catch {\n return { right: 16, bottom: 72 };\n }\n });\n\n // Persisted sidebar width\n const [leftWidth, setLeftWidth] = useState(() => {\n try {\n const raw = localStorage.getItem(LS_LEFT_W);\n return raw ? Number(raw) : 280;\n } catch {\n return 280;\n }\n });\n\n // Persisted panel size\n const [size, setSize] = useState<PanelSize>(() => {\n try {\n const raw = localStorage.getItem(LS_SIZE);\n return raw ? JSON.parse(raw) : { width: 720, height: 420 };\n } catch {\n return { width: 720, height: 420 };\n }\n });\n\n // Persist layout to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LAYOUT, layout);\n } catch (e) {\n console.error(e);\n }\n }, [layout]);\n\n // Persist position to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_KEY, JSON.stringify(pos));\n } catch (e) {\n console.error(e);\n }\n }, [pos]);\n\n // Persist sidebar width to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LEFT_W, String(leftWidth));\n } catch (e) {\n console.error(e);\n }\n }, [leftWidth]);\n\n // Persist size to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_SIZE, JSON.stringify(size));\n } catch (e) {\n console.error(e);\n }\n }, [size]);\n\n // Auto-collapse sidebar when too narrow\n useEffect(() => {\n const shouldCollapse = leftWidth <= 200 || (size.width ?? 720) - leftWidth < 320;\n setLeftCollapsed(shouldCollapse);\n }, [leftWidth, size.width]);\n\n // Subscribe to store changes\n useEffect(() => store.subscribe(() => force((x) => x + 1)), [store]);\n\n // Get mounted components\n const snapshot = useMemo(() => store.getSnapshot(), [store, tick]);\n\n const components = useMemo(\n () => snapshot.components.filter((c) => c.mounted),\n [snapshot.components],\n );\n\n // Filter components by search query\n const q = query.trim().toLowerCase();\n const filtered = useMemo(\n () =>\n q\n ? components.filter((c) => {\n const labelHit = c.label.toLowerCase().includes(q);\n const keyHit = c.stateKeys.some((k) => k.toLowerCase().includes(q));\n return labelHit || keyHit;\n })\n : components,\n [q, components],\n );\n\n // Keep a valid selection\n useEffect(() => {\n if (!open) return;\n\n if (components.length === 0) {\n setSelectedId(null);\n return;\n }\n\n if (!selectedId || !components.some((c) => c.id === selectedId)) {\n setSelectedId(components[0]!.id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, components.length]);\n\n // Keyboard shortcuts\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n const mod = isMac ? e.metaKey : e.ctrlKey;\n\n // Cmd/Ctrl + Shift + I → toggle inspector\n if (mod && e.shiftKey && e.key.toLowerCase() === \"i\") {\n e.preventDefault();\n setOpen((o) => !o);\n return;\n }\n\n if (!open) return;\n\n // Esc → close\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n\n // \"/\" → focus search\n if (e.key === \"/\") {\n e.preventDefault();\n searchRef.current?.focus();\n return;\n }\n\n // Arrow navigation\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const list = filtered;\n if (!list.length) return;\n\n const idx = list.findIndex((c) => c.id === selectedId);\n const next =\n e.key === \"ArrowDown\"\n ? list[(Math.max(-1, idx) + 1) % list.length]!.id\n : list[idx <= 0 ? list.length - 1 : idx - 1]!.id;\n\n setSelectedId(next);\n setTimeout(() => {\n document.getElementById(`rsi-comp-${next}`)?.scrollIntoView({ block: \"nearest\" });\n }, 0);\n }\n }\n\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, filtered, selectedId]);\n\n // Get selected component\n const selected = useMemo(() => {\n if (!selectedId) return null;\n return store.components.get(selectedId) ?? null;\n }, [store, selectedId]);\n\n // Drag end handler - apply dock or reset preview\n const handleDragEnd = () => {\n if (preview) {\n setLayout(preview);\n setIsTransitioning(true);\n\n const rects = previewRectStyle(preview);\n setSize({ width: rects.width as number, height: rects.height as number });\n setPos({\n left: rects.left as number,\n right: rects.right as number,\n top: rects.top as number,\n bottom: rects.bottom as number,\n });\n setPreview(null);\n\n setTimeout(() => setIsTransitioning(false), 300);\n return;\n }\n setPreview(null);\n };\n\n // Drag start handler - initiate panel movement\n const handleDragStart = (e: React.PointerEvent<HTMLDivElement>) => {\n const startX = e.clientX;\n const startY = e.clientY;\n const start = pos;\n\n setLayout(\"floating\");\n setIsTransitioning(true);\n setSize({ width: 720, height: 420 });\n setTimeout(() => setIsTransitioning(false), 300);\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n const nextPreview = computePreview(ev.clientX, ev.clientY);\n\n setPreview((p) => (p === nextPreview ? p : nextPreview));\n\n const newPos: PanelPosition = {};\n if (start.left !== undefined) {\n newPos.left = Math.max(8, start.left + dx);\n } else {\n newPos.right = Math.max(8, (start.right ?? 16) - dx);\n }\n if (start.top !== undefined) {\n newPos.top = Math.max(8, start.top + dy);\n } else {\n newPos.bottom = Math.max(8, (start.bottom ?? 72) - dy);\n }\n setPos(newPos);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n };\n\n // Handle panel resize\n const handlePanelResize =\n (startSize: PanelSize, startPos: PanelPosition) =>\n (\n delta: { dx: number; dy: number },\n direction:\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\",\n ) => {\n const isLeft = direction === \"left\" || direction.endsWith(\"left\");\n const isTop = direction === \"top\" || direction.startsWith(\"top\");\n const isHorizontal = direction !== \"top\" && direction !== \"bottom\";\n const isVertical = direction !== \"left\" && direction !== \"right\";\n\n const currentWidth = startSize.width ?? 720;\n const currentHeight = startSize.height ?? 420;\n\n // Calculate new dimensions\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n\n if (isHorizontal) {\n if (isLeft) {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth - delta.dx));\n } else {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth + delta.dx));\n }\n }\n\n if (isVertical) {\n if (isTop) {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight - delta.dy));\n } else {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight + delta.dy));\n }\n }\n\n setSize({ width: newWidth, height: newHeight });\n\n // Update position for left/top edges\n const newPos: PanelPosition = { ...startPos };\n\n if (isLeft && startPos.left !== undefined) {\n const widthDelta = newWidth - currentWidth;\n newPos.left = Math.max(8, startPos.left - widthDelta);\n } else if (isLeft && startPos.right !== undefined) {\n // If positioned from right, adjust right position\n const widthDelta = newWidth - currentWidth;\n newPos.right = Math.max(8, startPos.right - widthDelta);\n }\n\n if (isTop && startPos.top !== undefined) {\n const heightDelta = newHeight - currentHeight;\n newPos.top = Math.max(8, startPos.top - heightDelta);\n } else if (isTop && startPos.bottom !== undefined) {\n // If positioned from bottom, adjust bottom position\n const heightDelta = newHeight - currentHeight;\n newPos.bottom = Math.max(8, startPos.bottom - heightDelta);\n }\n\n setPos(newPos);\n };\n\n if (!store.enabled) return null;\n\n return createPortal(\n <>\n <FloatingButton onClick={() => setOpen((o) => !o)} isActive={open} />\n <DockPreviewOverlay preview={preview} />\n\n {open && (\n <div\n data-rsi-root\n style={{\n position: \"fixed\",\n left: pos.left,\n right: pos.right,\n top: pos.top,\n bottom: pos.bottom,\n width: size.width || \"calc(100dvw - 24px)\",\n maxWidth: \"calc(100vw - 24px)\",\n height: size.height || \"calc(100dvh - 24px)\",\n maxHeight: \"calc(100vh - 24px)\",\n background: \"#1c1c1c\",\n color: \"#fff\",\n borderRadius: 12,\n border: \"1px solid #333\",\n zIndex: 999999,\n overflow: \"hidden\",\n transition: isTransitioning ? \"all 0.3s ease\" : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <DockHeader\n setOpen={setOpen}\n handleDragStart={handleDragStart}\n handleDragEnd={handleDragEnd}\n />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: leftCollapsed ? \"auto\" : `${leftWidth}px 14px auto`,\n height: \"100%\",\n }}\n >\n <ResizeHandle onResize={handlePanelResize(size, pos)} />\n\n <ComponentList\n query={query}\n onQueryChange={setQuery}\n searchRef={searchRef}\n components={filtered}\n selectedId={selectedId}\n onSelect={setSelectedId}\n hidden={leftCollapsed}\n />\n\n <SidebarResizer\n leftWidth={leftWidth}\n onWidthChange={setLeftWidth}\n hidden={leftCollapsed}\n />\n\n <StateEditorPanel\n selected={selected}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={() => setLeftCollapsed((v) => !v)}\n />\n </div>\n </div>\n )}\n </>,\n document.body,\n );\n}\n","// LocalStorage keys\nexport const LS_LAYOUT = \"rsi:panel-layout\";\nexport const LS_KEY = \"rsi:panel-pos\";\nexport const LS_SIZE = \"rsi:panel-size\";\nexport const LS_LEFT_W = \"rsi:left-width\";\n\n// Dock settings\nexport const SNAP = 100; // distance in px to trigger dock preview\nexport const DOCK_W = 420; // left/right dock width\nexport const DOCK_H = 320; // top/bottom dock height\nexport const MARGIN = 12; // dock margin\n\n// Sidebar settings\nexport const LEFT_MIN = 180;\nexport const LEFT_MAX = 420;\n\n// Platform detection\nexport const isMac =\n typeof navigator !== \"undefined\" ? navigator.platform.toUpperCase().includes(\"MAC\") : false;\n","import type React from \"react\";\nimport { SNAP, DOCK_W, DOCK_H, MARGIN } from \"./constants\";\nimport type { DockPreview } from \"./types\";\n\n/**\n * Type guard for select option objects\n */\nexport function isOptionObject(\n opt: string | { label: string; value: string },\n): opt is { label: string; value: string } {\n return typeof opt === \"object\" && opt !== null && \"value\" in opt;\n}\n\n/**\n * Compute dock preview based on cursor position\n */\nexport function computePreview(x: number, y: number): DockPreview {\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const nearLeft = x <= SNAP;\n const nearRight = x >= w - SNAP;\n const nearTop = y <= SNAP;\n const nearBottom = y >= h - SNAP;\n\n // Priority: horizontal edges take precedence over vertical\n if (nearLeft) return \"dock-left\";\n if (nearRight) return \"dock-right\";\n if (nearTop) return \"dock-top\";\n if (nearBottom) return \"dock-bottom\";\n return null;\n}\n\n/**\n * Get CSS properties for dock preview rectangle\n */\nexport function previewRectStyle(p: DockPreview): React.CSSProperties {\n const base: React.CSSProperties = {\n position: \"fixed\",\n border: \"1px dashed #555\",\n background: \"rgba(255,255,255,0.06)\",\n borderRadius: 12,\n };\n\n if (p === \"dock-left\") {\n return { ...base, left: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-right\") {\n return { ...base, right: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-top\") {\n return { ...base, left: MARGIN, right: MARGIN, top: MARGIN, height: DOCK_H };\n }\n // dock-bottom\n return { ...base, left: MARGIN, right: MARGIN, bottom: MARGIN, height: DOCK_H };\n}\n\n/**\n * Safely stringify a value to JSON\n */\nexport function safeStringify(v: unknown): string {\n try {\n return JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DevtoolsIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_1_13)\">\n <path\n d=\"M2 7.00002C1.90538 7.00034 1.81262 6.97381 1.73248 6.92351C1.65234 6.87321 1.58812 6.8012 1.54727 6.71585C1.50643 6.6305 1.49065 6.53531 1.50175 6.44135C1.51285 6.34739 1.55039 6.2585 1.61 6.18502L6.56 1.08502C6.59713 1.04216 6.64773 1.0132 6.70349 1.00289C6.75925 0.992575 6.81686 1.00153 6.86687 1.02827C6.91687 1.05502 6.95629 1.09797 6.97867 1.15007C7.00104 1.20218 7.00504 1.26034 6.99 1.31502L6.03 4.32502C6.00169 4.40078 5.99219 4.48228 6.0023 4.56252C6.01241 4.64277 6.04183 4.71936 6.08805 4.78573C6.13426 4.85211 6.19589 4.90628 6.26764 4.9436C6.33939 4.98092 6.41912 5.00028 6.5 5.00002H10C10.0946 4.9997 10.1874 5.02623 10.2675 5.07653C10.3477 5.12683 10.4119 5.19884 10.4527 5.28419C10.4936 5.36954 10.5094 5.46473 10.4983 5.55869C10.4871 5.65266 10.4496 5.74154 10.39 5.81502L5.44 10.915C5.40287 10.9579 5.35227 10.9868 5.29651 10.9972C5.24075 11.0075 5.18314 10.9985 5.13313 10.9718C5.08313 10.945 5.04371 10.9021 5.02133 10.85C4.99896 10.7979 4.99496 10.7397 5.01 10.685L5.97 7.67502C5.99831 7.59926 6.00781 7.51776 5.9977 7.43752C5.98759 7.35727 5.95817 7.28068 5.91195 7.21431C5.86574 7.14793 5.80411 7.09376 5.73236 7.05644C5.66061 7.01912 5.58088 6.99976 5.5 7.00002H2Z\"\n fill=\"inherit\"\n stroke=\"inherit\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1_13\">\n <rect width=\"12\" height=\"12\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default DevtoolsIcon;\n","import DevtoolsIcon from \"../icons/DevtoolsIcon\";\n\ninterface FloatingButtonProps {\n onClick: () => void;\n isActive: boolean;\n}\n\nexport function FloatingButton({ onClick, isActive }: FloatingButtonProps) {\n return (\n <button\n data-rsi-floating-button\n title=\"State Inspector (⌘⇧I / Ctrl⇧I)\"\n onClick={onClick}\n style={{\n position: \"fixed\",\n right: 16,\n bottom: 16,\n width: 48,\n height: 48,\n borderRadius: 24,\n border: \"none\",\n background: isActive ? \"#155DFC\" : \"#111\",\n color: \"#fff\",\n cursor: \"pointer\",\n zIndex: 999999,\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n aria-label=\"Toggle State Inspector\"\n >\n <DevtoolsIcon fill={isActive ? \"#FFF\" : undefined} stroke=\"#FFF\" height={20} width={20} />\n </button>\n );\n}\n","import type { DockPreview } from \"../types\";\nimport { previewRectStyle } from \"../utils\";\n\ninterface DockPreviewOverlayProps {\n preview: DockPreview;\n}\n\nexport function DockPreviewOverlay({ preview }: DockPreviewOverlayProps) {\n if (!preview) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n pointerEvents: \"none\",\n zIndex: 999998,\n }}\n >\n <div style={previewRectStyle(preview)} />\n </div>\n );\n}\n","export type ResizeDirection =\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\ninterface ResizeHandleProps {\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}\n\nconst EDGE_SIZE = 6;\nconst CORNER_SIZE = 12;\n\ntype HandleConfig = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n width?: number | string;\n height?: number | string;\n cursor: string;\n};\n\nconst handleConfigs: Record<ResizeDirection, HandleConfig> = {\n // Edges\n top: { top: 0, left: CORNER_SIZE, right: CORNER_SIZE, height: EDGE_SIZE, cursor: \"ns-resize\" },\n bottom: {\n bottom: 0,\n left: CORNER_SIZE,\n right: CORNER_SIZE,\n height: EDGE_SIZE,\n cursor: \"ns-resize\",\n },\n left: { left: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n right: { right: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n // Corners\n \"top-left\": { top: 0, left: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nwse-resize\" },\n \"top-right\": { top: 0, right: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nesw-resize\" },\n \"bottom-left\": {\n bottom: 0,\n left: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nesw-resize\",\n },\n \"bottom-right\": {\n bottom: 0,\n right: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nwse-resize\",\n },\n};\n\nfunction Handle({\n direction,\n onResize,\n}: {\n direction: ResizeDirection;\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}) {\n const config = handleConfigs[direction];\n\n return (\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n const startX = e.clientX;\n const startY = e.clientY;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n onResize(\n {\n dx: ev.clientX - startX,\n dy: ev.clientY - startY,\n },\n direction,\n );\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n position: \"absolute\",\n top: config.top,\n right: config.right,\n bottom: config.bottom,\n left: config.left,\n width: config.width,\n height: config.height,\n cursor: config.cursor,\n background: \"transparent\",\n zIndex: 10,\n }}\n />\n );\n}\n\nconst directions: ResizeDirection[] = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n];\n\nexport function ResizeHandle({ onResize }: ResizeHandleProps) {\n return (\n <>\n {directions.map((dir) => (\n <Handle key={dir} direction={dir} onResize={onResize} />\n ))}\n </>\n );\n}\n","import { LEFT_MIN, LEFT_MAX } from \"../constants\";\n\ninterface SidebarResizerProps {\n leftWidth: number;\n onWidthChange: (width: number) => void;\n hidden: boolean;\n}\n\nexport function SidebarResizer({ leftWidth, onWidthChange, hidden }: SidebarResizerProps) {\n if (hidden) return null;\n\n return (\n <div\n onPointerDown={(e) => {\n e.preventDefault();\n const startX = e.clientX;\n const startW = leftWidth;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const next = Math.max(LEFT_MIN, Math.min(LEFT_MAX, startW + dx));\n onWidthChange(next);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n width: 8,\n cursor: \"col-resize\",\n background: \"transparent\",\n borderLeft: \"1px solid #2a2a2a\",\n borderRight: \"1px solid #2a2a2a\",\n }}\n title=\"Resize sidebar\"\n />\n );\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\n\ninterface DragHandleProps {\n children: React.ReactNode;\n onDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n style?: React.CSSProperties;\n}\n\nexport function DragHandle({ children, onDragStart, onDragEnd, style }: DragHandleProps) {\n const [isDragging, setIsDragging] = useState(false);\n\n return (\n <div\n style={{ cursor: isDragging ? \"grabbing\" : \"grab\", userSelect: \"none\", ...style }}\n onPointerDown={(e) => {\n const target = e.target as HTMLElement | null;\n try {\n if (\n target &&\n typeof target.closest === \"function\" &&\n target.closest('button, input, textarea, a, [role=\"button\"], [data-no-drag]')\n ) {\n return;\n }\n } catch (e) {\n console.error(e);\n }\n\n setIsDragging(true);\n onDragStart(e);\n }}\n onPointerUp={() => {\n if (isDragging) {\n setIsDragging(false);\n onDragEnd();\n }\n }}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\n\nexport const inputStyle: React.CSSProperties = {\n padding: \"8px 10px\",\n borderRadius: 4,\n border: \"none\",\n background: \"#18181B\",\n color: \"#fff\",\n minWidth: 120,\n};\n\nexport const cardStyle: React.CSSProperties = {\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n borderRadius: 12,\n padding: 10,\n};\n\nexport const buttonStyle: React.CSSProperties = {\n background: \"transparent\",\n color: \"#fff\",\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n cursor: \"pointer\",\n};\n","import type React from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n inputRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function SearchInput({ value, onChange, inputRef }: SearchInputProps) {\n return (\n <input\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder=\"Filter…\"\n ref={inputRef}\n style={{\n ...inputStyle,\n outline: \"none\",\n }}\n />\n );\n}\n","import type React from \"react\";\nimport type { ComponentSummary } from \"../types\";\nimport { SearchInput } from \"./SearchInput\";\ninterface ComponentListProps {\n components: ComponentSummary[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n hidden: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function ComponentList({\n components,\n selectedId,\n onSelect,\n hidden,\n query,\n onQueryChange,\n searchRef,\n}: ComponentListProps) {\n if (hidden) return null;\n\n return (\n <div style={{ padding: 4, boxSizing: \"border-box\", backgroundColor: \"#09090B\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n paddingTop: 4,\n paddingBottom: 8,\n paddingLeft: 4,\n paddingRight: 4,\n }}\n >\n <SearchInput value={query} onChange={onQueryChange} inputRef={searchRef} />\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, overflow: \"auto\", flex: 1 }}>\n {components.map((c) => {\n const active = c.id === selectedId;\n return (\n <button\n key={c.id}\n id={`rsi-comp-${c.id}`}\n onClick={() => onSelect(c.id)}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 8,\n backgroundColor: active ? \"#27272A\" : \"transparent\",\n border: \"none\",\n }}\n >\n <div style={{ fontWeight: 500, fontSize: 12, color: active ? \"#fff\" : \"#9F9FA9\" }}>\n {c.label}\n </div>\n <div\n style={{\n fontSize: 9,\n height: 16,\n width: 16,\n color: \"#D4D4D8\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 8,\n backgroundColor: \"#3F3F47\",\n }}\n >\n {c.stateKeys.length}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type React from \"react\";\n\ninterface StatePanelHeaderProps {\n selectedLabel: string | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StatePanelHeader({\n selectedLabel,\n leftCollapsed,\n onToggleCollapse,\n}: StatePanelHeaderProps) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <button\n onClick={(e) => {\n e.preventDefault();\n onToggleCollapse();\n }}\n style={{\n padding: 4,\n marginRight: 12,\n borderRadius: 6,\n border: \"1px solid #333\",\n background: \"transparent\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 12,\n width: 24,\n height: 24,\n }}\n >\n {leftCollapsed ? \"»\" : \"«\"}\n </button>\n\n <h4 style={{ margin: 0 }}>{selectedLabel ?? \"No selection\"}</h4>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface JsonEditorProps {\n initial: string;\n onValidJson: (obj: unknown) => void;\n}\n\nexport function JsonEditor({ initial, onValidJson }: JsonEditorProps) {\n const [raw, setRaw] = useState(initial);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n setRaw(initial);\n }, [initial]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n setRaw(next);\n\n try {\n const parsed = JSON.parse(next);\n setError(null);\n onValidJson(parsed);\n } catch {\n setError(\"Invalid JSON\");\n }\n };\n\n return (\n <div style={{ display: \"grid\", gap: 6 }}>\n <textarea\n value={raw}\n onChange={handleChange}\n rows={6}\n style={{\n ...inputStyle,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n fontSize: 12,\n resize: \"vertical\",\n }}\n />\n {error && <div style={{ fontSize: 12, color: \"#ff6b6b\" }}>{error}</div>}\n </div>\n );\n}\n","import type { InspectableMeta } from \"../../store\";\nimport { inputStyle } from \"../styles\";\nimport { isOptionObject, safeStringify } from \"../utils\";\nimport { JsonEditor } from \"./JsonEditor\";\n\ninterface StateEditorProps {\n value: unknown;\n meta: InspectableMeta | undefined;\n onChange: (next: unknown) => void;\n}\n\nexport function StateEditor({ value, meta, onChange }: StateEditorProps) {\n // boolean\n if (meta?.type === \"boolean\" || typeof value === \"boolean\") {\n return (\n <label style={{ display: \"flex\", gap: 10, alignItems: \"center\" }}>\n <input\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n <span style={{ fontSize: 13, opacity: 0.8 }}>{String(Boolean(value))}</span>\n </label>\n );\n }\n\n // select\n if (meta?.type === \"select\" && Array.isArray(meta.options)) {\n const current = typeof value === \"string\" ? value : String(value ?? \"\");\n return (\n <select\n value={current}\n onChange={(e) => onChange(e.target.value)}\n style={{\n ...inputStyle,\n minWidth: 120,\n }}\n >\n {meta.options.map((opt: string | { label: string; value: string }) => {\n const o = isOptionObject(opt) ? opt : { label: String(opt), value: String(opt) };\n return (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n );\n })}\n </select>\n );\n }\n\n // number\n if (meta?.type === \"number\") {\n return (\n <input\n type=\"number\"\n value={typeof value === \"number\" ? value : Number(value ?? 0)}\n min={meta?.min}\n max={meta?.max}\n step={meta?.step}\n onChange={(e) => onChange(e.target.value === \"\" ? 0 : Number(e.target.value))}\n style={inputStyle}\n />\n );\n }\n\n // json\n if (meta?.type === \"json\" || (value && typeof value === \"object\")) {\n return <JsonEditor initial={safeStringify(value)} onValidJson={onChange} />;\n }\n\n // text (default)\n return (\n <input\n type=\"text\"\n value={typeof value === \"string\" ? value : String(value ?? \"\")}\n placeholder={meta?.type === \"text\" ? meta.placeholder : undefined}\n onChange={(e) => onChange(e.target.value)}\n style={inputStyle}\n />\n );\n}\n","import type { InspectableStateEntry } from \"../../store\";\nimport { cardStyle } from \"../styles\";\nimport { StateEditor } from \"./StateEditor\";\n\ninterface StateCardProps {\n state: InspectableStateEntry;\n}\n\nexport function StateCard({ state }: StateCardProps) {\n return (\n <div\n style={{\n ...cardStyle,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n gap: 1,\n }}\n >\n <div style={{ fontSize: 14 }}>{state.key}</div>\n <div style={{ fontSize: 12, color: \"#52525C\", textTransform: \"uppercase\" }}>\n {state.meta?.type ?? \"auto\"}\n </div>\n </div>\n\n <StateEditor\n value={state.value}\n meta={state.meta}\n onChange={(next) => state.setValue(next)}\n />\n </div>\n );\n}\n","import type React from \"react\";\nimport type { ComponentEntry } from \"../../store\";\nimport { StatePanelHeader } from \"./StatePanelHeader\";\nimport { StateCard } from \"./StateCard\";\n\ninterface StateEditorPanelProps {\n selected: ComponentEntry | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StateEditorPanel({\n selected,\n leftCollapsed,\n onToggleCollapse,\n}: StateEditorPanelProps) {\n return (\n <div\n style={{\n padding: 12,\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n backgroundColor: \"#0C0C0E\",\n }}\n >\n <StatePanelHeader\n selectedLabel={selected?.label ?? null}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={onToggleCollapse}\n />\n\n <div style={{ marginTop: 12, display: \"grid\", gap: 10 }}>\n {selected && selected.states.size === 0 && (\n <div style={{ fontSize: 13, opacity: 0.7 }}>This component has no inspectable state.</div>\n )}\n\n {!selected && <div style={{ opacity: 0.7, fontSize: 13 }}>No component selected.</div>}\n\n {selected &&\n Array.from(selected.states.values()).map((s) => <StateCard key={s.key} state={s} />)}\n </div>\n </div>\n );\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DragIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M7.99998 6.66665C8.36817 6.66665 8.66665 6.36817 8.66665 5.99998C8.66665 5.63179 8.36817 5.33331 7.99998 5.33331C7.63179 5.33331 7.33331 5.63179 7.33331 5.99998C7.33331 6.36817 7.63179 6.66665 7.99998 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 6.66665C13.0349 6.66665 13.3333 6.36817 13.3333 5.99998C13.3333 5.63179 13.0349 5.33331 12.6667 5.33331C12.2985 5.33331 12 5.63179 12 5.99998C12 6.36817 12.2985 6.66665 12.6667 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 6.66665C3.70154 6.66665 4.00002 6.36817 4.00002 5.99998C4.00002 5.63179 3.70154 5.33331 3.33335 5.33331C2.96516 5.33331 2.66669 5.63179 2.66669 5.99998C2.66669 6.36817 2.96516 6.66665 3.33335 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99998 10.6666C8.36817 10.6666 8.66665 10.3682 8.66665 9.99998C8.66665 9.63179 8.36817 9.33331 7.99998 9.33331C7.63179 9.33331 7.33331 9.63179 7.33331 9.99998C7.33331 10.3682 7.63179 10.6666 7.99998 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 10.6666C13.0349 10.6666 13.3333 10.3682 13.3333 9.99998C13.3333 9.63179 13.0349 9.33331 12.6667 9.33331C12.2985 9.33331 12 9.63179 12 9.99998C12 10.3682 12.2985 10.6666 12.6667 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 10.6666C3.70154 10.6666 4.00002 10.3682 4.00002 9.99998C4.00002 9.63179 3.70154 9.33331 3.33335 9.33331C2.96516 9.33331 2.66669 9.63179 2.66669 9.99998C2.66669 10.3682 2.96516 10.6666 3.33335 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default DragIcon;\n","import React, { SVGAttributes } from \"react\";\n\nconst CloseIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 3.5L3.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 3.5L10.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import React from \"react\";\nimport { DragHandle } from \"./DragHandle\";\nimport DevtoolsIcon from \"../icons/DevtoolsIcon\";\nimport DragIcon from \"../icons/DragIcon\";\nimport CloseIcon from \"../icons/CloseIcon\";\n\nconst DockHeader: React.FC<{\n setOpen: (open: boolean) => void;\n handleDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n handleDragEnd: () => void;\n}> = ({ setOpen, handleDragStart, handleDragEnd }) => {\n return (\n <DragHandle onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <div\n style={{\n height: 40,\n width: \"100%\",\n padding: \"9.5px 12px\",\n boxSizing: \"border-box\",\n borderBottom: \"1px solid rgba(39, 39, 42, 0.5)\",\n display: \"flex\",\n flexDirection: \"row\",\n backgroundColor: \"rgba(24, 24, 27, 0.5)\",\n }}\n >\n <div\n style={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginRight: 8,\n backgroundColor: \"#27272A\",\n borderRadius: 4,\n }}\n >\n <DevtoolsIcon fill=\"#9F9FA9\" stroke=\"#9F9FA9\" height={12} width={12} />\n </div>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: \"#E4E4E7\",\n }}\n >\n React Inspector\n </span>\n\n <div\n style={{\n marginLeft: \"auto\",\n display: \"flex\",\n flexDirection: \"row\",\n gap: 16,\n alignItems: \"center\",\n }}\n >\n <DragIcon />\n <div\n data-no-drag\n style={{\n cursor: \"pointer\",\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(false);\n }}\n >\n <CloseIcon />\n </div>\n </div>\n </div>\n </DragHandle>\n );\n};\n\nexport default DockHeader;\n"],"mappings":"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","names":["useEffect","useId","useMemo","useMemo","useEffect","useId","useEffect","useMemo","useRef","useState","jsx","jsx","jsx","jsx","jsx","useState","jsx","e","jsx","jsx","jsxs","jsx","jsxs","useEffect","useState","jsx","jsxs","useState","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","useEffect","useMemo"]}
1
+ {"version":3,"sources":["#style-inject:#style-inject","../src/index.css","../src/provider.tsx","../src/store.ts","../src/hooks.ts","../src/StateInspectorUI.tsx","../src/ui/constants.ts","../src/ui/utils.ts","../src/ui/icons/DevtoolsIcon.tsx","../src/ui/components/FloatingButton.tsx","../src/ui/components/DockPreviewOverlay.tsx","../src/ui/components/ResizeHandle.tsx","../src/ui/components/SidebarResizer.tsx","../src/ui/components/DragHandle.tsx","../src/ui/styles.ts","../src/ui/components/SearchInput.tsx","../src/ui/components/ComponentList.tsx","../src/ui/components/StatePanelHeader.tsx","../src/ui/components/JsonEditor.tsx","../src/ui/components/StateEditor.tsx","../src/ui/components/StateCard.tsx","../src/ui/components/StateEditorPanel.tsx","../src/ui/icons/DragIcon.tsx","../src/ui/icons/CloseIcon.tsx","../src/ui/components/DockHeader.tsx"],"sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"@import \\\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\\\";\\n[data-rsi-root],\\n[data-rsi-root] *,\\n[data-rsi-root] *::before,\\n[data-rsi-root] *::after {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: 0;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n font-style: normal;\\n font-variant: normal;\\n line-height: 1.5;\\n letter-spacing: normal;\\n text-align: left;\\n text-decoration: none;\\n text-indent: 0;\\n text-shadow: none;\\n text-transform: none;\\n word-spacing: normal;\\n white-space: normal;\\n background: transparent;\\n color: inherit;\\n outline: none;\\n vertical-align: baseline;\\n visibility: visible;\\n opacity: 1;\\n transform: none;\\n transform-origin: 50% 50% 0;\\n animation: none;\\n transition: none;\\n list-style: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n float: none;\\n clear: none;\\n cursor: auto;\\n}\\n[data-rsi-root] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n font-size: 14px;\\n line-height: 1.5;\\n color: #fff;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n text-rendering: optimizeLegibility;\\n}\\n[data-rsi-floating-button] {\\n all: initial;\\n font-family:\\n \\\"Inter\\\",\\n -apple-system,\\n BlinkMacSystemFont,\\n \\\"Segoe UI\\\",\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n \\\"Helvetica Neue\\\",\\n sans-serif;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n[data-rsi-root] button {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n cursor: pointer;\\n background: transparent;\\n border: none;\\n padding: 0;\\n margin: 0;\\n border-radius: 8px;\\n}\\n[data-rsi-root] input,\\n[data-rsi-root] textarea {\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n background: transparent;\\n border: none;\\n outline: none;\\n padding: 0;\\n margin: 0;\\n resize: none;\\n}\\n[data-rsi-root] input::placeholder,\\n[data-rsi-root] textarea::placeholder {\\n color: inherit;\\n opacity: 0.5;\\n}\\n[data-rsi-root] a {\\n color: inherit;\\n text-decoration: none;\\n}\\n[data-rsi-root] img,\\n[data-rsi-root] svg {\\n display: block;\\n max-width: 100%;\\n}\\n[data-rsi-root] h1,\\n[data-rsi-root] h2,\\n[data-rsi-root] h3,\\n[data-rsi-root] h4,\\n[data-rsi-root] h5,\\n[data-rsi-root] h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n}\\n[data-rsi-root] ::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb {\\n background: rgba(255, 255, 255, 0.2);\\n border-radius: 3px;\\n}\\n[data-rsi-root] ::-webkit-scrollbar-thumb:hover {\\n background: rgba(255, 255, 255, 0.3);\\n}\\n[data-rsi-root] ::selection {\\n background: rgba(99, 102, 241, 0.4);\\n color: #fff;\\n}\\n[data-rsi-root] :focus-visible {\\n outline: 2px solid rgba(99, 102, 241, 0.6);\\n outline-offset: 2px;\\n}\\n\")","import React, { createContext, useContext, useEffect, useId, useMemo } from \"react\";\nimport { createInspectorStore, InspectorComponentRef, InspectorStore } from \"./store\";\n\nconst InspectorContext = createContext<InspectorStore | null>(null);\n\nconst storeRef = { current: null as InspectorStore | null };\n\nfunction getStore(): InspectorStore {\n if (!storeRef.current) {\n storeRef.current = createInspectorStore();\n }\n return storeRef.current;\n}\n\nexport function StateInspectorProvider({\n enabled = true,\n children,\n}: {\n enabled?: boolean;\n children: React.ReactNode;\n}) {\n const store = useMemo(() => getStore(), []);\n\n useEffect(() => {\n storeRef.current!.enabled = enabled;\n }, [enabled]);\n\n return <InspectorContext.Provider value={store}>{children}</InspectorContext.Provider>;\n}\n\nexport function useInspectorStore(): InspectorStore {\n const ctx = useContext(InspectorContext);\n if (!ctx) {\n throw new Error(\"useInspectorStore must be used inside StateInspectorProvider\");\n }\n return ctx;\n}\n\nexport function useInspectorComponent(label?: string): InspectorComponentRef {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n\n store.registerComponent(componentId, label?.trim());\n return () => {\n store.unregisterComponent(componentId);\n };\n }, [store, componentId, label]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label?.trim();\n if (trimmed) store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n console.log({ id: componentId });\n\n return useMemo(() => ({ id: componentId }), [componentId]);\n}\n","export type ComponentId = string;\n\nexport type InspectableMeta =\n | { type: \"boolean\" }\n | { type: \"text\"; placeholder?: string }\n | { type: \"number\"; min?: number; max?: number; step?: number }\n | { type: \"select\"; options: Array<string | { label: string; value: string }> }\n | { type: \"json\" }\n | { type: \"custom\"; renderId: string };\n\nexport interface InspectableStateEntry {\n key: string;\n value: unknown;\n setValue: (next: unknown) => void;\n meta?: InspectableMeta;\n}\n\nexport interface ComponentEntry {\n id: ComponentId;\n label: string;\n mounted: boolean;\n states: Map<string, InspectableStateEntry>;\n}\n\nexport interface InspectorSnapshot {\n enabled: boolean;\n components: Array<{\n id: ComponentId;\n label: string;\n mounted: boolean;\n stateKeys: string[];\n }>;\n}\n\ntype Listener = () => void;\n\nexport interface InspectorComponentRef {\n id: string;\n}\n\nexport interface InspectorStore {\n enabled: boolean;\n\n // internal registry\n components: Map<ComponentId, ComponentEntry>;\n\n // subscriptions\n subscribe: (listener: Listener) => () => void;\n getSnapshot: () => InspectorSnapshot;\n\n // component lifecycle\n registerComponent: (id: ComponentId, label?: string) => void;\n setComponentLabel: (id: ComponentId, label: string) => void;\n unregisterComponent: (id: ComponentId) => void;\n\n // state lifecycle\n upsertState: (componentId: ComponentId, entry: InspectableStateEntry) => void;\n\n updateStateValue: (componentId: ComponentId, key: string, value: unknown) => void;\n removeState: (componentId: ComponentId, key: string) => void;\n}\n\nexport function createInspectorStore(): InspectorStore {\n const components = new Map<ComponentId, ComponentEntry>();\n const listeners = new Set<Listener>();\n\n function emit() {\n for (const l of listeners) l();\n }\n\n function getOrCreateComponent(id: ComponentId): ComponentEntry {\n const existing = components.get(id);\n if (existing) return existing;\n\n const created: ComponentEntry = {\n id,\n label: \"Unknown\",\n mounted: true,\n states: new Map(),\n };\n components.set(id, created);\n return created;\n }\n\n const store: InspectorStore = {\n enabled: true,\n components,\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n\n getSnapshot() {\n return {\n enabled: store.enabled,\n components: Array.from(components.values()).map((c) => ({\n id: c.id,\n label: c.label,\n mounted: c.mounted,\n stateKeys: Array.from(c.states.keys()),\n })),\n };\n },\n\n registerComponent(id, label) {\n const c = getOrCreateComponent(id);\n c.mounted = true;\n if (label && label.trim()) c.label = label.trim();\n emit();\n },\n\n setComponentLabel(id, label) {\n const c = getOrCreateComponent(id);\n c.label = label.trim() || \"Unknown\";\n emit();\n },\n\n unregisterComponent(id) {\n const c = components.get(id);\n if (!c) return;\n\n // StrictMode double-unmount safe:\n // we mark as unmounted; UI can choose to hide unmounted entries.\n c.mounted = false;\n\n // Optional: immediate cleanup if you prefer:\n // components.delete(id);\n\n emit();\n },\n\n upsertState(componentId, entry) {\n const c = getOrCreateComponent(componentId);\n c.states.set(entry.key, entry);\n emit();\n },\n\n updateStateValue(componentId, key, value) {\n const c = components.get(componentId);\n if (!c) return;\n const s = c.states.get(key);\n if (!s) return;\n s.value = value;\n emit();\n },\n\n removeState(componentId, key) {\n const c = components.get(componentId);\n if (!c) return;\n if (!c.states.has(key)) return;\n c.states.delete(key);\n emit();\n },\n };\n\n return store;\n}\n","import React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { useInspectorStore } from \"./provider\";\nimport type { InspectableMeta, InspectorComponentRef } from \"./store\";\n\nfunction stableKey(input: string): string {\n return input.trim();\n}\n\nfunction inferMeta(value: unknown): InspectableMeta | undefined {\n const t = typeof value;\n if (t === \"boolean\") return { type: \"boolean\" };\n if (t === \"number\") return { type: \"number\" };\n if (t === \"string\") return { type: \"text\" };\n if (value && t === \"object\") return { type: \"json\" };\n return undefined;\n}\n\n/**\n * Registers a piece of state to the inspector registry.\n * Opt-in by replacing useState with useInspectableState.\n */\nexport function useInspectableState<T>(\n component: InspectorComponentRef,\n key: string,\n initial: T | (() => T),\n meta?: InspectableMeta,\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const store = useInspectorStore();\n const componentId = component.id;\n\n const stateKey = useMemo(() => stableKey(key), [key]);\n\n const [value, setValue] = useState<T>(initial);\n\n // Keep latest setter stable for registry consumers\n const setValueRef = useRef<(next: unknown) => void>(() => {});\n setValueRef.current = (next: unknown) => {\n setValue(next as T);\n };\n\n // Register component + state entry\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n\n return () => {\n store.removeState(componentId, stateKey);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [store, componentId, stateKey]);\n\n // Sync updates on each render when value/meta changes\n useEffect(() => {\n if (!store.enabled) return;\n\n const resolvedMeta = meta ?? inferMeta(value);\n store.upsertState(componentId, {\n key: stateKey,\n value,\n setValue: (next) => setValueRef.current(next),\n ...(resolvedMeta !== undefined && { meta: resolvedMeta }),\n });\n }, [store, componentId, stateKey, value, meta]);\n\n return [value, setValue];\n}\n\n/**\n * Optional helper to give the current component instance a human label.\n */\nexport function useComponentLabel(label: string) {\n const store = useInspectorStore();\n const reactId = useId();\n const componentId = useMemo(() => `c_${reactId}`, [reactId]);\n\n useEffect(() => {\n if (!store.enabled) return;\n const trimmed = label.trim();\n if (!trimmed) return;\n store.setComponentLabel(componentId, trimmed);\n }, [store, componentId, label]);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useInspectorStore } from \"./provider\";\n\n// UI imports\nimport { LS_LAYOUT, LS_KEY, LS_SIZE, LS_LEFT_W, isMac } from \"./ui/constants\";\n\nimport type { DockMode, DockPreview, PanelPosition, PanelSize } from \"./ui/types\";\n\nimport { computePreview, previewRectStyle } from \"./ui/utils\";\n\nimport {\n FloatingButton,\n DockPreviewOverlay,\n ResizeHandle,\n SidebarResizer,\n ComponentList,\n StateEditorPanel,\n} from \"./ui/components\";\nimport DockHeader from \"./ui/components/DockHeader\";\n\nexport function StateInspectorUI() {\n const store = useInspectorStore();\n const [query, setQuery] = useState<string>(\"\");\n const [leftCollapsed, setLeftCollapsed] = useState(false);\n\n const [layout, setLayout] = useState<DockMode>(\"floating\");\n const [preview, setPreview] = useState<DockPreview>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [open, setOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [tick, force] = useState(0);\n\n const searchRef = useRef<HTMLInputElement | null>(null);\n\n // Persisted panel position\n const [pos, setPos] = useState<PanelPosition>(() => {\n try {\n const raw = localStorage.getItem(LS_KEY);\n return raw ? JSON.parse(raw) : { right: 16, bottom: 72 };\n } catch {\n return { right: 16, bottom: 72 };\n }\n });\n\n // Persisted sidebar width\n const [leftWidth, setLeftWidth] = useState(() => {\n try {\n const raw = localStorage.getItem(LS_LEFT_W);\n return raw ? Number(raw) : 280;\n } catch {\n return 280;\n }\n });\n\n // Persisted panel size\n const [size, setSize] = useState<PanelSize>(() => {\n try {\n const raw = localStorage.getItem(LS_SIZE);\n return raw ? JSON.parse(raw) : { width: 720, height: 420 };\n } catch {\n return { width: 720, height: 420 };\n }\n });\n\n // Persist layout to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LAYOUT, layout);\n } catch (e) {\n console.error(e);\n }\n }, [layout]);\n\n // Persist position to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_KEY, JSON.stringify(pos));\n } catch (e) {\n console.error(e);\n }\n }, [pos]);\n\n // Persist sidebar width to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_LEFT_W, String(leftWidth));\n } catch (e) {\n console.error(e);\n }\n }, [leftWidth]);\n\n // Persist size to localStorage\n useEffect(() => {\n try {\n localStorage.setItem(LS_SIZE, JSON.stringify(size));\n } catch (e) {\n console.error(e);\n }\n }, [size]);\n\n // Auto-collapse sidebar when too narrow\n useEffect(() => {\n const shouldCollapse = leftWidth <= 200 || (size.width ?? 720) - leftWidth < 320;\n setLeftCollapsed(shouldCollapse);\n }, [leftWidth, size.width]);\n\n // Subscribe to store changes\n useEffect(() => store.subscribe(() => force((x) => x + 1)), [store]);\n\n // Get mounted components\n const snapshot = useMemo(() => store.getSnapshot(), [store, tick]);\n\n const components = useMemo(\n () => snapshot.components.filter((c) => c.mounted),\n [snapshot.components],\n );\n\n // Filter components by search query\n const q = query.trim().toLowerCase();\n const filtered = useMemo(\n () =>\n q\n ? components.filter((c) => {\n const labelHit = c.label.toLowerCase().includes(q);\n const keyHit = c.stateKeys.some((k) => k.toLowerCase().includes(q));\n return labelHit || keyHit;\n })\n : components,\n [q, components],\n );\n\n // Keep a valid selection\n useEffect(() => {\n if (!open) return;\n\n if (components.length === 0) {\n setSelectedId(null);\n return;\n }\n\n if (!selectedId || !components.some((c) => c.id === selectedId)) {\n setSelectedId(components[0]!.id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, components.length]);\n\n // Keyboard shortcuts\n useEffect(() => {\n function onKey(e: KeyboardEvent) {\n const mod = isMac ? e.metaKey : e.ctrlKey;\n\n // Cmd/Ctrl + Shift + I → toggle inspector\n if (mod && e.shiftKey && e.key.toLowerCase() === \"i\") {\n e.preventDefault();\n setOpen((o) => !o);\n return;\n }\n\n if (!open) return;\n\n // Esc → close\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n\n // \"/\" → focus search\n if (e.key === \"/\") {\n e.preventDefault();\n searchRef.current?.focus();\n return;\n }\n\n // Arrow navigation\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const list = filtered;\n if (!list.length) return;\n\n const idx = list.findIndex((c) => c.id === selectedId);\n const next =\n e.key === \"ArrowDown\"\n ? list[(Math.max(-1, idx) + 1) % list.length]!.id\n : list[idx <= 0 ? list.length - 1 : idx - 1]!.id;\n\n setSelectedId(next);\n setTimeout(() => {\n document.getElementById(`rsi-comp-${next}`)?.scrollIntoView({ block: \"nearest\" });\n }, 0);\n }\n }\n\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, filtered, selectedId]);\n\n // Get selected component\n const selected = useMemo(() => {\n if (!selectedId) return null;\n return store.components.get(selectedId) ?? null;\n }, [store, selectedId]);\n\n // Drag end handler - apply dock or reset preview\n const handleDragEnd = () => {\n if (preview) {\n setLayout(preview);\n setIsTransitioning(true);\n\n const rects = previewRectStyle(preview);\n setSize({ width: rects.width as number, height: rects.height as number });\n setPos({\n left: rects.left as number,\n right: rects.right as number,\n top: rects.top as number,\n bottom: rects.bottom as number,\n });\n setPreview(null);\n\n setTimeout(() => setIsTransitioning(false), 300);\n return;\n }\n setPreview(null);\n };\n\n // Drag start handler - initiate panel movement\n const handleDragStart = (e: React.PointerEvent<HTMLDivElement>) => {\n const startX = e.clientX;\n const startY = e.clientY;\n const start = pos;\n\n setLayout(\"floating\");\n setIsTransitioning(true);\n setSize({ width: 720, height: 420 });\n setTimeout(() => setIsTransitioning(false), 300);\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n const nextPreview = computePreview(ev.clientX, ev.clientY);\n\n setPreview((p) => (p === nextPreview ? p : nextPreview));\n\n const newPos: PanelPosition = {};\n if (start.left !== undefined) {\n newPos.left = Math.max(8, start.left + dx);\n } else {\n newPos.right = Math.max(8, (start.right ?? 16) - dx);\n }\n if (start.top !== undefined) {\n newPos.top = Math.max(8, start.top + dy);\n } else {\n newPos.bottom = Math.max(8, (start.bottom ?? 72) - dy);\n }\n setPos(newPos);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n };\n\n // Handle panel resize\n const handlePanelResize =\n (startSize: PanelSize, startPos: PanelPosition) =>\n (\n delta: { dx: number; dy: number },\n direction:\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\",\n ) => {\n const isLeft = direction === \"left\" || direction.endsWith(\"left\");\n const isTop = direction === \"top\" || direction.startsWith(\"top\");\n const isHorizontal = direction !== \"top\" && direction !== \"bottom\";\n const isVertical = direction !== \"left\" && direction !== \"right\";\n\n const currentWidth = startSize.width ?? 720;\n const currentHeight = startSize.height ?? 420;\n\n // Calculate new dimensions\n let newWidth = currentWidth;\n let newHeight = currentHeight;\n\n if (isHorizontal) {\n if (isLeft) {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth - delta.dx));\n } else {\n newWidth = Math.min(window.innerWidth - 16, Math.max(480, currentWidth + delta.dx));\n }\n }\n\n if (isVertical) {\n if (isTop) {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight - delta.dy));\n } else {\n newHeight = Math.min(window.innerHeight - 120, Math.max(280, currentHeight + delta.dy));\n }\n }\n\n setSize({ width: newWidth, height: newHeight });\n\n // Update position for left/top edges\n const newPos: PanelPosition = { ...startPos };\n\n if (isLeft && startPos.left !== undefined) {\n const widthDelta = newWidth - currentWidth;\n newPos.left = Math.max(8, startPos.left - widthDelta);\n } else if (isLeft && startPos.right !== undefined) {\n // If positioned from right, adjust right position\n const widthDelta = newWidth - currentWidth;\n newPos.right = Math.max(8, startPos.right - widthDelta);\n }\n\n if (isTop && startPos.top !== undefined) {\n const heightDelta = newHeight - currentHeight;\n newPos.top = Math.max(8, startPos.top - heightDelta);\n } else if (isTop && startPos.bottom !== undefined) {\n // If positioned from bottom, adjust bottom position\n const heightDelta = newHeight - currentHeight;\n newPos.bottom = Math.max(8, startPos.bottom - heightDelta);\n }\n\n setPos(newPos);\n };\n\n if (!store.enabled) return null;\n\n return createPortal(\n <>\n <FloatingButton onClick={() => setOpen((o) => !o)} isActive={open} />\n <DockPreviewOverlay preview={preview} />\n\n {open && (\n <div\n data-rsi-root\n style={{\n position: \"fixed\",\n left: pos.left,\n right: pos.right,\n top: pos.top,\n bottom: pos.bottom,\n width: size.width || \"calc(100dvw - 24px)\",\n maxWidth: \"calc(100vw - 24px)\",\n height: size.height || \"calc(100dvh - 24px)\",\n maxHeight: \"calc(100vh - 24px)\",\n background: \"#1c1c1c\",\n color: \"#fff\",\n borderRadius: 12,\n border: \"1px solid #333\",\n zIndex: 999999,\n overflow: \"hidden\",\n transition: isTransitioning ? \"all 0.3s ease\" : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <DockHeader\n setOpen={setOpen}\n handleDragStart={handleDragStart}\n handleDragEnd={handleDragEnd}\n />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: leftCollapsed ? \"auto\" : `${leftWidth}px 14px auto`,\n height: \"100%\",\n }}\n >\n <ResizeHandle onResize={handlePanelResize(size, pos)} />\n\n <ComponentList\n query={query}\n onQueryChange={setQuery}\n searchRef={searchRef}\n components={filtered}\n selectedId={selectedId}\n onSelect={setSelectedId}\n hidden={leftCollapsed}\n />\n\n <SidebarResizer\n leftWidth={leftWidth}\n onWidthChange={setLeftWidth}\n hidden={leftCollapsed}\n />\n\n <StateEditorPanel\n selected={selected}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={() => setLeftCollapsed((v) => !v)}\n />\n </div>\n </div>\n )}\n </>,\n document.body,\n );\n}\n","// LocalStorage keys\nexport const LS_LAYOUT = \"rsi:panel-layout\";\nexport const LS_KEY = \"rsi:panel-pos\";\nexport const LS_SIZE = \"rsi:panel-size\";\nexport const LS_LEFT_W = \"rsi:left-width\";\n\n// Dock settings\nexport const SNAP = 100; // distance in px to trigger dock preview\nexport const DOCK_W = 420; // left/right dock width\nexport const DOCK_H = 320; // top/bottom dock height\nexport const MARGIN = 12; // dock margin\n\n// Sidebar settings\nexport const LEFT_MIN = 180;\nexport const LEFT_MAX = 420;\n\n// Platform detection\nexport const isMac =\n typeof navigator !== \"undefined\" ? navigator.platform.toUpperCase().includes(\"MAC\") : false;\n","import type React from \"react\";\nimport { SNAP, DOCK_W, DOCK_H, MARGIN } from \"./constants\";\nimport type { DockPreview } from \"./types\";\n\n/**\n * Type guard for select option objects\n */\nexport function isOptionObject(\n opt: string | { label: string; value: string },\n): opt is { label: string; value: string } {\n return typeof opt === \"object\" && opt !== null && \"value\" in opt;\n}\n\n/**\n * Compute dock preview based on cursor position\n */\nexport function computePreview(x: number, y: number): DockPreview {\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const nearLeft = x <= SNAP;\n const nearRight = x >= w - SNAP;\n const nearTop = y <= SNAP;\n const nearBottom = y >= h - SNAP;\n\n // Priority: horizontal edges take precedence over vertical\n if (nearLeft) return \"dock-left\";\n if (nearRight) return \"dock-right\";\n if (nearTop) return \"dock-top\";\n if (nearBottom) return \"dock-bottom\";\n return null;\n}\n\n/**\n * Get CSS properties for dock preview rectangle\n */\nexport function previewRectStyle(p: DockPreview): React.CSSProperties {\n const base: React.CSSProperties = {\n position: \"fixed\",\n border: \"1px dashed #555\",\n background: \"rgba(255,255,255,0.06)\",\n borderRadius: 12,\n };\n\n if (p === \"dock-left\") {\n return { ...base, left: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-right\") {\n return { ...base, right: MARGIN, top: MARGIN, bottom: MARGIN, width: DOCK_W };\n }\n if (p === \"dock-top\") {\n return { ...base, left: MARGIN, right: MARGIN, top: MARGIN, height: DOCK_H };\n }\n // dock-bottom\n return { ...base, left: MARGIN, right: MARGIN, bottom: MARGIN, height: DOCK_H };\n}\n\n/**\n * Safely stringify a value to JSON\n */\nexport function safeStringify(v: unknown): string {\n try {\n return JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DevtoolsIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_1_13)\">\n <path\n d=\"M2 7.00002C1.90538 7.00034 1.81262 6.97381 1.73248 6.92351C1.65234 6.87321 1.58812 6.8012 1.54727 6.71585C1.50643 6.6305 1.49065 6.53531 1.50175 6.44135C1.51285 6.34739 1.55039 6.2585 1.61 6.18502L6.56 1.08502C6.59713 1.04216 6.64773 1.0132 6.70349 1.00289C6.75925 0.992575 6.81686 1.00153 6.86687 1.02827C6.91687 1.05502 6.95629 1.09797 6.97867 1.15007C7.00104 1.20218 7.00504 1.26034 6.99 1.31502L6.03 4.32502C6.00169 4.40078 5.99219 4.48228 6.0023 4.56252C6.01241 4.64277 6.04183 4.71936 6.08805 4.78573C6.13426 4.85211 6.19589 4.90628 6.26764 4.9436C6.33939 4.98092 6.41912 5.00028 6.5 5.00002H10C10.0946 4.9997 10.1874 5.02623 10.2675 5.07653C10.3477 5.12683 10.4119 5.19884 10.4527 5.28419C10.4936 5.36954 10.5094 5.46473 10.4983 5.55869C10.4871 5.65266 10.4496 5.74154 10.39 5.81502L5.44 10.915C5.40287 10.9579 5.35227 10.9868 5.29651 10.9972C5.24075 11.0075 5.18314 10.9985 5.13313 10.9718C5.08313 10.945 5.04371 10.9021 5.02133 10.85C4.99896 10.7979 4.99496 10.7397 5.01 10.685L5.97 7.67502C5.99831 7.59926 6.00781 7.51776 5.9977 7.43752C5.98759 7.35727 5.95817 7.28068 5.91195 7.21431C5.86574 7.14793 5.80411 7.09376 5.73236 7.05644C5.66061 7.01912 5.58088 6.99976 5.5 7.00002H2Z\"\n fill=\"inherit\"\n stroke=\"inherit\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1_13\">\n <rect width=\"12\" height=\"12\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n\nexport default DevtoolsIcon;\n","import DevtoolsIcon from \"../icons/DevtoolsIcon\";\n\ninterface FloatingButtonProps {\n onClick: () => void;\n isActive: boolean;\n}\n\nexport function FloatingButton({ onClick, isActive }: FloatingButtonProps) {\n return (\n <button\n data-rsi-floating-button\n title=\"State Inspector (⌘⇧I / Ctrl⇧I)\"\n onClick={onClick}\n style={{\n position: \"fixed\",\n right: 16,\n bottom: 16,\n width: 48,\n height: 48,\n borderRadius: 24,\n border: \"none\",\n background: isActive ? \"#155DFC\" : \"#111\",\n color: \"#fff\",\n cursor: \"pointer\",\n zIndex: 999999,\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n aria-label=\"Toggle State Inspector\"\n >\n <DevtoolsIcon fill={isActive ? \"#FFF\" : undefined} stroke=\"#FFF\" height={20} width={20} />\n </button>\n );\n}\n","import type { DockPreview } from \"../types\";\nimport { previewRectStyle } from \"../utils\";\n\ninterface DockPreviewOverlayProps {\n preview: DockPreview;\n}\n\nexport function DockPreviewOverlay({ preview }: DockPreviewOverlayProps) {\n if (!preview) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n pointerEvents: \"none\",\n zIndex: 999998,\n }}\n >\n <div style={previewRectStyle(preview)} />\n </div>\n );\n}\n","export type ResizeDirection =\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\ninterface ResizeHandleProps {\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}\n\nconst EDGE_SIZE = 6;\nconst CORNER_SIZE = 12;\n\ntype HandleConfig = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n width?: number | string;\n height?: number | string;\n cursor: string;\n};\n\nconst handleConfigs: Record<ResizeDirection, HandleConfig> = {\n // Edges\n top: { top: 0, left: CORNER_SIZE, right: CORNER_SIZE, height: EDGE_SIZE, cursor: \"ns-resize\" },\n bottom: {\n bottom: 0,\n left: CORNER_SIZE,\n right: CORNER_SIZE,\n height: EDGE_SIZE,\n cursor: \"ns-resize\",\n },\n left: { left: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n right: { right: 0, top: CORNER_SIZE, bottom: CORNER_SIZE, width: EDGE_SIZE, cursor: \"ew-resize\" },\n // Corners\n \"top-left\": { top: 0, left: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nwse-resize\" },\n \"top-right\": { top: 0, right: 0, width: CORNER_SIZE, height: CORNER_SIZE, cursor: \"nesw-resize\" },\n \"bottom-left\": {\n bottom: 0,\n left: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nesw-resize\",\n },\n \"bottom-right\": {\n bottom: 0,\n right: 0,\n width: CORNER_SIZE,\n height: CORNER_SIZE,\n cursor: \"nwse-resize\",\n },\n};\n\nfunction Handle({\n direction,\n onResize,\n}: {\n direction: ResizeDirection;\n onResize: (delta: { dx: number; dy: number }, direction: ResizeDirection) => void;\n}) {\n const config = handleConfigs[direction];\n\n return (\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n const startX = e.clientX;\n const startY = e.clientY;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n onResize(\n {\n dx: ev.clientX - startX,\n dy: ev.clientY - startY,\n },\n direction,\n );\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n position: \"absolute\",\n top: config.top,\n right: config.right,\n bottom: config.bottom,\n left: config.left,\n width: config.width,\n height: config.height,\n cursor: config.cursor,\n background: \"transparent\",\n zIndex: 10,\n }}\n />\n );\n}\n\nconst directions: ResizeDirection[] = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n];\n\nexport function ResizeHandle({ onResize }: ResizeHandleProps) {\n return (\n <>\n {directions.map((dir) => (\n <Handle key={dir} direction={dir} onResize={onResize} />\n ))}\n </>\n );\n}\n","import { LEFT_MIN, LEFT_MAX } from \"../constants\";\n\ninterface SidebarResizerProps {\n leftWidth: number;\n onWidthChange: (width: number) => void;\n hidden: boolean;\n}\n\nexport function SidebarResizer({ leftWidth, onWidthChange, hidden }: SidebarResizerProps) {\n if (hidden) return null;\n\n return (\n <div\n onPointerDown={(e) => {\n e.preventDefault();\n const startX = e.clientX;\n const startW = leftWidth;\n\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX;\n const next = Math.max(LEFT_MIN, Math.min(LEFT_MAX, startW + dx));\n onWidthChange(next);\n };\n\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n }}\n style={{\n width: 8,\n cursor: \"col-resize\",\n background: \"transparent\",\n borderLeft: \"1px solid #2a2a2a\",\n borderRight: \"1px solid #2a2a2a\",\n }}\n title=\"Resize sidebar\"\n />\n );\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\n\ninterface DragHandleProps {\n children: React.ReactNode;\n onDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n style?: React.CSSProperties;\n}\n\nexport function DragHandle({ children, onDragStart, onDragEnd, style }: DragHandleProps) {\n const [isDragging, setIsDragging] = useState(false);\n\n return (\n <div\n style={{ cursor: isDragging ? \"grabbing\" : \"grab\", userSelect: \"none\", ...style }}\n onPointerDown={(e) => {\n const target = e.target as HTMLElement | null;\n try {\n if (\n target &&\n typeof target.closest === \"function\" &&\n target.closest('button, input, textarea, a, [role=\"button\"], [data-no-drag]')\n ) {\n return;\n }\n } catch (e) {\n console.error(e);\n }\n\n setIsDragging(true);\n onDragStart(e);\n }}\n onPointerUp={() => {\n if (isDragging) {\n setIsDragging(false);\n onDragEnd();\n }\n }}\n >\n {children}\n </div>\n );\n}\n","import type React from \"react\";\n\nexport const inputStyle: React.CSSProperties = {\n padding: \"8px 10px\",\n borderRadius: 4,\n border: \"none\",\n background: \"#18181B\",\n color: \"#fff\",\n minWidth: 120,\n};\n\nexport const cardStyle: React.CSSProperties = {\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n borderRadius: 12,\n padding: 10,\n};\n\nexport const buttonStyle: React.CSSProperties = {\n background: \"transparent\",\n color: \"#fff\",\n border: \"1px solid rgba(39, 39, 42, 0.30)\",\n cursor: \"pointer\",\n};\n","import type React from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n inputRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function SearchInput({ value, onChange, inputRef }: SearchInputProps) {\n return (\n <input\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder=\"Filter…\"\n ref={inputRef}\n style={{\n ...inputStyle,\n outline: \"none\",\n }}\n />\n );\n}\n","import type React from \"react\";\nimport type { ComponentSummary } from \"../types\";\nimport { SearchInput } from \"./SearchInput\";\ninterface ComponentListProps {\n components: ComponentSummary[];\n selectedId: string | null;\n onSelect: (id: string) => void;\n hidden: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchRef: React.RefObject<HTMLInputElement | null>;\n}\n\nexport function ComponentList({\n components,\n selectedId,\n onSelect,\n hidden,\n query,\n onQueryChange,\n searchRef,\n}: ComponentListProps) {\n if (hidden) return null;\n\n return (\n <div style={{ padding: 4, boxSizing: \"border-box\", backgroundColor: \"#09090B\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n paddingTop: 4,\n paddingBottom: 8,\n paddingLeft: 4,\n paddingRight: 4,\n }}\n >\n <SearchInput value={query} onChange={onQueryChange} inputRef={searchRef} />\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, overflow: \"auto\", flex: 1 }}>\n {components.map((c) => {\n const active = c.id === selectedId;\n return (\n <button\n key={c.id}\n id={`rsi-comp-${c.id}`}\n onClick={() => onSelect(c.id)}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 8,\n backgroundColor: active ? \"#27272A\" : \"transparent\",\n border: \"none\",\n }}\n >\n <div style={{ fontWeight: 500, fontSize: 12, color: active ? \"#fff\" : \"#9F9FA9\" }}>\n {c.label}\n </div>\n <div\n style={{\n fontSize: 9,\n height: 16,\n width: 16,\n color: \"#D4D4D8\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 8,\n backgroundColor: \"#3F3F47\",\n }}\n >\n {c.stateKeys.length}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type React from \"react\";\n\ninterface StatePanelHeaderProps {\n selectedLabel: string | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StatePanelHeader({\n selectedLabel,\n leftCollapsed,\n onToggleCollapse,\n}: StatePanelHeaderProps) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <button\n onClick={(e) => {\n e.preventDefault();\n onToggleCollapse();\n }}\n style={{\n padding: 4,\n marginRight: 12,\n borderRadius: 6,\n border: \"1px solid #333\",\n background: \"transparent\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 12,\n width: 24,\n height: 24,\n }}\n >\n {leftCollapsed ? \"»\" : \"«\"}\n </button>\n\n <h4 style={{ margin: 0 }}>{selectedLabel ?? \"No selection\"}</h4>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { inputStyle } from \"../styles\";\n\ninterface JsonEditorProps {\n initial: string;\n onValidJson: (obj: unknown) => void;\n}\n\nexport function JsonEditor({ initial, onValidJson }: JsonEditorProps) {\n const [raw, setRaw] = useState(initial);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n setRaw(initial);\n }, [initial]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n setRaw(next);\n\n try {\n const parsed = JSON.parse(next);\n setError(null);\n onValidJson(parsed);\n } catch {\n setError(\"Invalid JSON\");\n }\n };\n\n return (\n <div style={{ display: \"grid\", gap: 6 }}>\n <textarea\n value={raw}\n onChange={handleChange}\n rows={6}\n style={{\n ...inputStyle,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n fontSize: 12,\n resize: \"vertical\",\n }}\n />\n {error && <div style={{ fontSize: 12, color: \"#ff6b6b\" }}>{error}</div>}\n </div>\n );\n}\n","import type { InspectableMeta } from \"../../store\";\nimport { inputStyle } from \"../styles\";\nimport { isOptionObject, safeStringify } from \"../utils\";\nimport { JsonEditor } from \"./JsonEditor\";\n\ninterface StateEditorProps {\n value: unknown;\n meta: InspectableMeta | undefined;\n onChange: (next: unknown) => void;\n}\n\nexport function StateEditor({ value, meta, onChange }: StateEditorProps) {\n // boolean\n if (meta?.type === \"boolean\" || typeof value === \"boolean\") {\n return (\n <label style={{ display: \"flex\", gap: 10, alignItems: \"center\" }}>\n <input\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n <span style={{ fontSize: 13, opacity: 0.8 }}>{String(Boolean(value))}</span>\n </label>\n );\n }\n\n // select\n if (meta?.type === \"select\" && Array.isArray(meta.options)) {\n const current = typeof value === \"string\" ? value : String(value ?? \"\");\n return (\n <select\n value={current}\n onChange={(e) => onChange(e.target.value)}\n style={{\n ...inputStyle,\n minWidth: 120,\n }}\n >\n {meta.options.map((opt: string | { label: string; value: string }) => {\n const o = isOptionObject(opt) ? opt : { label: String(opt), value: String(opt) };\n return (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n );\n })}\n </select>\n );\n }\n\n // number\n if (meta?.type === \"number\") {\n return (\n <input\n type=\"number\"\n value={typeof value === \"number\" ? value : Number(value ?? 0)}\n min={meta?.min}\n max={meta?.max}\n step={meta?.step}\n onChange={(e) => onChange(e.target.value === \"\" ? 0 : Number(e.target.value))}\n style={inputStyle}\n />\n );\n }\n\n // json\n if (meta?.type === \"json\" || (value && typeof value === \"object\")) {\n return <JsonEditor initial={safeStringify(value)} onValidJson={onChange} />;\n }\n\n // text (default)\n return (\n <input\n type=\"text\"\n value={typeof value === \"string\" ? value : String(value ?? \"\")}\n placeholder={meta?.type === \"text\" ? meta.placeholder : undefined}\n onChange={(e) => onChange(e.target.value)}\n style={inputStyle}\n />\n );\n}\n","import type { InspectableStateEntry } from \"../../store\";\nimport { cardStyle } from \"../styles\";\nimport { StateEditor } from \"./StateEditor\";\n\ninterface StateCardProps {\n state: InspectableStateEntry;\n}\n\nexport function StateCard({ state }: StateCardProps) {\n return (\n <div\n style={{\n ...cardStyle,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n gap: 8,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n gap: 1,\n }}\n >\n <div style={{ fontSize: 14 }}>{state.key}</div>\n <div style={{ fontSize: 12, color: \"#52525C\", textTransform: \"uppercase\" }}>\n {state.meta?.type ?? \"auto\"}\n </div>\n </div>\n\n <StateEditor\n value={state.value}\n meta={state.meta}\n onChange={(next) => state.setValue(next)}\n />\n </div>\n );\n}\n","import type React from \"react\";\nimport type { ComponentEntry } from \"../../store\";\nimport { StatePanelHeader } from \"./StatePanelHeader\";\nimport { StateCard } from \"./StateCard\";\n\ninterface StateEditorPanelProps {\n selected: ComponentEntry | null;\n leftCollapsed: boolean;\n onToggleCollapse: () => void;\n}\n\nexport function StateEditorPanel({\n selected,\n leftCollapsed,\n onToggleCollapse,\n}: StateEditorPanelProps) {\n return (\n <div\n style={{\n padding: 12,\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n backgroundColor: \"#0C0C0E\",\n }}\n >\n <StatePanelHeader\n selectedLabel={selected?.label ?? null}\n leftCollapsed={leftCollapsed}\n onToggleCollapse={onToggleCollapse}\n />\n\n <div style={{ marginTop: 12, display: \"grid\", gap: 10 }}>\n {selected && selected.states.size === 0 && (\n <div style={{ fontSize: 13, opacity: 0.7 }}>This component has no inspectable state.</div>\n )}\n\n {!selected && <div style={{ opacity: 0.7, fontSize: 13 }}>No component selected.</div>}\n\n {selected &&\n Array.from(selected.states.values()).map((s) => <StateCard key={s.key} state={s} />)}\n </div>\n </div>\n );\n}\n","import React, { SVGAttributes } from \"react\";\n\nconst DragIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M7.99998 6.66665C8.36817 6.66665 8.66665 6.36817 8.66665 5.99998C8.66665 5.63179 8.36817 5.33331 7.99998 5.33331C7.63179 5.33331 7.33331 5.63179 7.33331 5.99998C7.33331 6.36817 7.63179 6.66665 7.99998 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 6.66665C13.0349 6.66665 13.3333 6.36817 13.3333 5.99998C13.3333 5.63179 13.0349 5.33331 12.6667 5.33331C12.2985 5.33331 12 5.63179 12 5.99998C12 6.36817 12.2985 6.66665 12.6667 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 6.66665C3.70154 6.66665 4.00002 6.36817 4.00002 5.99998C4.00002 5.63179 3.70154 5.33331 3.33335 5.33331C2.96516 5.33331 2.66669 5.63179 2.66669 5.99998C2.66669 6.36817 2.96516 6.66665 3.33335 6.66665Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7.99998 10.6666C8.36817 10.6666 8.66665 10.3682 8.66665 9.99998C8.66665 9.63179 8.36817 9.33331 7.99998 9.33331C7.63179 9.33331 7.33331 9.63179 7.33331 9.99998C7.33331 10.3682 7.63179 10.6666 7.99998 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6667 10.6666C13.0349 10.6666 13.3333 10.3682 13.3333 9.99998C13.3333 9.63179 13.0349 9.33331 12.6667 9.33331C12.2985 9.33331 12 9.63179 12 9.99998C12 10.3682 12.2985 10.6666 12.6667 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.33335 10.6666C3.70154 10.6666 4.00002 10.3682 4.00002 9.99998C4.00002 9.63179 3.70154 9.33331 3.33335 9.33331C2.96516 9.33331 2.66669 9.63179 2.66669 9.99998C2.66669 10.3682 2.96516 10.6666 3.33335 10.6666Z\"\n stroke=\"#3F3F46\"\n strokeWidth={1.33333}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default DragIcon;\n","import React, { SVGAttributes } from \"react\";\n\nconst CloseIcon: React.FC<SVGAttributes<SVGSVGElement>> = (props) => {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M10.5 3.5L3.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 3.5L10.5 10.5\"\n stroke=\"#71717B\"\n strokeWidth={1.16667}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default CloseIcon;\n","import React from \"react\";\nimport { DragHandle } from \"./DragHandle\";\nimport DevtoolsIcon from \"../icons/DevtoolsIcon\";\nimport DragIcon from \"../icons/DragIcon\";\nimport CloseIcon from \"../icons/CloseIcon\";\n\nconst DockHeader: React.FC<{\n setOpen: (open: boolean) => void;\n handleDragStart: (e: React.PointerEvent<HTMLDivElement>) => void;\n handleDragEnd: () => void;\n}> = ({ setOpen, handleDragStart, handleDragEnd }) => {\n return (\n <DragHandle onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <div\n style={{\n height: 40,\n width: \"100%\",\n padding: \"9.5px 12px\",\n boxSizing: \"border-box\",\n borderBottom: \"1px solid rgba(39, 39, 42, 0.5)\",\n display: \"flex\",\n flexDirection: \"row\",\n backgroundColor: \"rgba(24, 24, 27, 0.5)\",\n }}\n >\n <div\n style={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginRight: 8,\n backgroundColor: \"#27272A\",\n borderRadius: 4,\n }}\n >\n <DevtoolsIcon fill=\"#9F9FA9\" stroke=\"#9F9FA9\" height={12} width={12} />\n </div>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: \"#E4E4E7\",\n }}\n >\n React Inspector\n </span>\n\n <div\n style={{\n marginLeft: \"auto\",\n display: \"flex\",\n flexDirection: \"row\",\n gap: 16,\n alignItems: \"center\",\n }}\n >\n <DragIcon />\n <div\n data-no-drag\n style={{\n cursor: \"pointer\",\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(false);\n }}\n >\n <CloseIcon />\n </div>\n </div>\n </div>\n </DragHandle>\n );\n};\n\nexport default DockHeader;\n"],"mappings":"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","names":["useEffect","useId","useMemo","useMemo","useEffect","useId","useEffect","useMemo","useRef","useState","jsx","jsx","jsx","jsx","jsx","useState","jsx","e","jsx","jsx","jsxs","jsx","jsxs","useEffect","useState","jsx","jsxs","useState","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","useState","useRef","useEffect","useMemo"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-state-inspector-devtools",
3
- "version": "1.1.22",
3
+ "version": "1.1.24",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"