@reifydb/console 0.4.2 → 0.4.6

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
@@ -538,21 +538,21 @@ var brutalistLightTheme = {
538
538
  base: "vs",
539
539
  inherit: true,
540
540
  rules: [
541
- { token: "keyword", foreground: "0D9488", fontStyle: "bold" },
541
+ { token: "keyword", foreground: "14AD9E", fontStyle: "bold" },
542
542
  { token: "string", foreground: "16A34A" },
543
543
  { token: "string.quote", foreground: "16A34A" },
544
544
  { token: "number", foreground: "B91C1C", fontStyle: "bold" },
545
545
  { token: "comment", foreground: "6B7280", fontStyle: "italic" },
546
546
  { token: "operator", foreground: "383838" },
547
547
  { token: "identifier", foreground: "1A1A1A" },
548
- { token: "key", foreground: "0D9488", fontStyle: "bold" }
548
+ { token: "key", foreground: "14AD9E", fontStyle: "bold" }
549
549
  ],
550
550
  colors: {
551
551
  "editor.background": "#FFFFFF",
552
552
  "editor.foreground": "#1A1A1A",
553
553
  "editor.lineHighlightBackground": "#F8F8F7",
554
554
  "editor.selectionBackground": "#A7F3D0",
555
- "editorCursor.foreground": "#14B8A6",
555
+ "editorCursor.foreground": "#1DE5D2",
556
556
  "editorLineNumber.foreground": "#9CA3AF",
557
557
  "editorLineNumber.activeForeground": "#383838"
558
558
  }
@@ -561,7 +561,7 @@ var brutalistDarkTheme = {
561
561
  base: "vs-dark",
562
562
  inherit: true,
563
563
  rules: [
564
- { token: "keyword", foreground: "14B8A6", fontStyle: "bold" },
564
+ { token: "keyword", foreground: "1DE5D2", fontStyle: "bold" },
565
565
  { token: "string", foreground: "4ADE80" },
566
566
  { token: "string.quote", foreground: "4ADE80" },
567
567
  { token: "number", foreground: "F87171", fontStyle: "bold" },
@@ -575,7 +575,7 @@ var brutalistDarkTheme = {
575
575
  "editor.foreground": "#F3F4F6",
576
576
  "editor.lineHighlightBackground": "#2A2A2A",
577
577
  "editor.selectionBackground": "#1A3A36",
578
- "editorCursor.foreground": "#14B8A6",
578
+ "editorCursor.foreground": "#1DE5D2",
579
579
  "editorLineNumber.foreground": "#6B7280",
580
580
  "editorLineNumber.activeForeground": "#E5E7EB"
581
581
  }
@@ -584,21 +584,21 @@ var premiumLightTheme = {
584
584
  base: "vs",
585
585
  inherit: true,
586
586
  rules: [
587
- { token: "keyword", foreground: "0D9488", fontStyle: "bold" },
587
+ { token: "keyword", foreground: "14AD9E", fontStyle: "bold" },
588
588
  { token: "string", foreground: "059669" },
589
589
  { token: "string.quote", foreground: "059669" },
590
590
  { token: "number", foreground: "DB2777", fontStyle: "bold" },
591
591
  { token: "comment", foreground: "9CA3AF", fontStyle: "italic" },
592
592
  { token: "operator", foreground: "525252" },
593
593
  { token: "identifier", foreground: "1A1A1A" },
594
- { token: "key", foreground: "0D9488", fontStyle: "bold" }
594
+ { token: "key", foreground: "14AD9E", fontStyle: "bold" }
595
595
  ],
596
596
  colors: {
597
597
  "editor.background": "#FFFFFF",
598
598
  "editor.foreground": "#1A1A1A",
599
599
  "editor.lineHighlightBackground": "#F5F5F5",
600
600
  "editor.selectionBackground": "#99F6E4",
601
- "editorCursor.foreground": "#0D9488",
601
+ "editorCursor.foreground": "#14AD9E",
602
602
  "editorLineNumber.foreground": "#9CA3AF",
603
603
  "editorLineNumber.activeForeground": "#525252"
604
604
  }
@@ -607,21 +607,21 @@ var premiumDarkTheme = {
607
607
  base: "vs-dark",
608
608
  inherit: true,
609
609
  rules: [
610
- { token: "keyword", foreground: "14B8A6", fontStyle: "bold" },
610
+ { token: "keyword", foreground: "1DE5D2", fontStyle: "bold" },
611
611
  { token: "string", foreground: "34D399" },
612
612
  { token: "string.quote", foreground: "34D399" },
613
613
  { token: "number", foreground: "F472B6", fontStyle: "bold" },
614
614
  { token: "comment", foreground: "525252", fontStyle: "italic" },
615
615
  { token: "operator", foreground: "A3A3A3" },
616
616
  { token: "identifier", foreground: "E5E5E5" },
617
- { token: "key", foreground: "14B8A6", fontStyle: "bold" }
617
+ { token: "key", foreground: "1DE5D2", fontStyle: "bold" }
618
618
  ],
619
619
  colors: {
620
620
  "editor.background": "#1A1A1A",
621
621
  "editor.foreground": "#E5E5E5",
622
622
  "editor.lineHighlightBackground": "#252525",
623
- "editor.selectionBackground": "#14B8A640",
624
- "editorCursor.foreground": "#14B8A6",
623
+ "editor.selectionBackground": "#1DE5D240",
624
+ "editorCursor.foreground": "#1DE5D2",
625
625
  "editorLineNumber.foreground": "#525252",
626
626
  "editorLineNumber.activeForeground": "#A3A3A3"
627
627
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Console.tsx","../src/executor/ws-executor.ts","../src/state/use-console-store.tsx","../src/state/console-store.ts","../src/state/history.ts","../src/components/layout/SplitPane.tsx","../src/components/layout/TabBar.tsx","../src/components/editor/QueryEditor.tsx","../src/monaco/rql-language.ts","../src/monaco/themes.ts","../src/monaco/register.ts","../src/components/editor/EditorToolbar.tsx","../src/format/value.ts","../src/components/results/ResultsTable.tsx","../src/components/results/ResultsError.tsx","../src/components/results/ResultsEmpty.tsx","../src/components/results/ResultsStatusBar.tsx","../src/components/results/ResultsPanel.tsx","../src/components/schema/SchemaBrowser.tsx","../src/components/schema/SchemaNode.tsx","../src/components/history/HistoryPanel.tsx","../src/components/history/HistoryEntry.tsx","../src/components/connection/ConnectionPanel.tsx","../src/components/Snippet.tsx","../src/components/SnippetResults.tsx","../src/executor/wasm-executor.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Client } from '@reifydb/client';\nimport type { Executor } from '../types';\nimport { WsExecutor, type WsClient } from '../executor/ws-executor';\nimport { ConsoleProvider, useConsoleStore } from '../state/use-console-store';\nimport { loadHistory, saveHistory } from '../state/history';\nimport { SplitPane } from './layout/SplitPane';\nimport { TabBar } from './layout/TabBar';\nimport { QueryEditor } from './editor/QueryEditor';\nimport { EditorToolbar } from './editor/EditorToolbar';\nimport { ResultsPanel } from './results/ResultsPanel';\nimport { SchemaBrowser } from './schema/SchemaBrowser';\nimport { HistoryPanel } from './history/HistoryPanel';\nimport { ConnectionPanel } from './connection/ConnectionPanel';\nimport type { ConnectionMode, ConnectionStatus } from './connection/ConnectionPanel';\n\nexport type ConnectionConfig =\n | { mode: 'wasm' }\n | { mode: 'websocket'; url: string };\n\nexport type RdbTheme = 'light' | 'dark';\n\nexport interface ConsoleProps {\n executor: Executor;\n initialCode?: string;\n historyKey?: string;\n connection?: ConnectionConfig;\n theme?: RdbTheme;\n}\n\nconst TABS = [\n { id: 'results', label: 'Results' },\n { id: 'history', label: 'History' },\n { id: 'schema', label: 'Schema' },\n];\n\nconst WS_URL_STORAGE_KEY = 'rdb-console-ws-url';\n\nfunction ConsoleInner({ executor, historyKey, connection, theme = 'light' }: { executor: Executor; historyKey?: string; connection?: ConnectionConfig; theme?: RdbTheme }) {\n const { state, dispatch } = useConsoleStore();\n const connectionLocked = connection != null;\n const lockedWsUrl = connection?.mode === 'websocket' ? connection.url : null;\n\n const [connectionMode, setConnectionMode] = useState<ConnectionMode>(\n connection ? connection.mode : 'wasm',\n );\n const [wsUrl, setWsUrl] = useState(() => {\n if (connection?.mode === 'websocket') return connection.url;\n try {\n return localStorage.getItem(WS_URL_STORAGE_KEY) || 'ws://localhost:8090';\n } catch {\n return 'ws://localhost:8090';\n }\n });\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>(\n connection?.mode === 'websocket' ? 'connecting' : 'connected',\n );\n const [connectionError, setConnectionError] = useState<string | null>(null);\n const [activeExecutor, setActiveExecutor] = useState<Executor>(executor);\n const [showConnectionPanel, setShowConnectionPanel] = useState(false);\n const wsClientRef = useRef<{ disconnect(): void } | null>(null);\n const reconnectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Persist wsUrl to localStorage (only when not locked)\n useEffect(() => {\n if (connectionLocked) return;\n try {\n localStorage.setItem(WS_URL_STORAGE_KEY, wsUrl);\n } catch {\n // ignore\n }\n }, [wsUrl, connectionLocked]);\n\n // Keep activeExecutor in sync if prop changes while in wasm mode\n useEffect(() => {\n if (connectionMode === 'wasm') {\n setActiveExecutor(executor);\n }\n }, [executor, connectionMode]);\n\n // Auto-connect for locked websocket mode\n useEffect(() => {\n if (!lockedWsUrl) return;\n const url = lockedWsUrl;\n\n let cancelled = false;\n let backoff = 1000;\n const maxBackoff = 30000;\n\n async function connect() {\n if (cancelled) return;\n setConnectionStatus('connecting');\n setConnectionError(null);\n\n try {\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n\n const client = await Client.connect_ws(url, { timeoutMs: 30_000 });\n if (cancelled) {\n client.disconnect();\n return;\n }\n wsClientRef.current = client;\n const wsExecutor = new WsExecutor(client as unknown as WsClient);\n setActiveExecutor(wsExecutor);\n setConnectionStatus('connected');\n backoff = 1000; // reset backoff on success\n } catch (err) {\n if (cancelled) return;\n setConnectionStatus('error');\n setConnectionError(err instanceof Error ? err.message : String(err));\n // Auto-reconnect with backoff\n reconnectTimerRef.current = setTimeout(() => {\n connect();\n }, backoff);\n backoff = Math.min(backoff * 2, maxBackoff);\n }\n }\n\n connect();\n\n return () => {\n cancelled = true;\n if (reconnectTimerRef.current) {\n clearTimeout(reconnectTimerRef.current);\n reconnectTimerRef.current = null;\n }\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n };\n }, [lockedWsUrl]);\n\n // Load history on mount\n useEffect(() => {\n const entries = loadHistory(historyKey);\n if (entries.length > 0) {\n dispatch({ type: 'LOAD_HISTORY', entries });\n }\n }, [historyKey, dispatch]);\n\n // Save history on change\n useEffect(() => {\n saveHistory(state.history, historyKey);\n }, [state.history, historyKey]);\n\n const handleConnect = useCallback(async () => {\n if (!wsUrl.trim()) return;\n setConnectionStatus('connecting');\n setConnectionError(null);\n\n try {\n // Disconnect previous WS client if any\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n\n const client = await Client.connect_ws(wsUrl, { timeoutMs: 30_000 });\n wsClientRef.current = client;\n const wsExecutor = new WsExecutor(client as unknown as WsClient);\n setActiveExecutor(wsExecutor);\n setConnectionStatus('connected');\n } catch (err) {\n setConnectionStatus('error');\n setConnectionError(err instanceof Error ? err.message : String(err));\n }\n }, [wsUrl]);\n\n const handleDisconnect = useCallback(() => {\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n setActiveExecutor(executor);\n setConnectionMode('wasm');\n setConnectionStatus('connected');\n setConnectionError(null);\n }, [executor]);\n\n const handleModeChange = useCallback((mode: ConnectionMode) => {\n if (mode === 'wasm' && connectionMode === 'websocket') {\n // Switching back to wasm — disconnect if connected\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n setActiveExecutor(executor);\n setConnectionStatus('connected');\n setConnectionError(null);\n } else if (mode === 'websocket' && connectionMode === 'wasm') {\n // Switching to websocket mode — not connected yet\n setConnectionStatus('disconnected');\n setConnectionError(null);\n }\n setConnectionMode(mode);\n }, [connectionMode, executor]);\n\n const connectionLabel = connectionMode === 'wasm' ? 'wasm' : wsUrl;\n\n const handleRun = useCallback(async () => {\n if (state.isExecuting || !state.code.trim()) return;\n dispatch({ type: 'EXECUTE_START' });\n\n try {\n const result = await activeExecutor.execute(state.code);\n if (result.success) {\n dispatch({ type: 'EXECUTE_SUCCESS', result, query: state.code });\n } else {\n dispatch({ type: 'EXECUTE_ERROR', result, query: state.code });\n }\n } catch (err) {\n dispatch({\n type: 'EXECUTE_ERROR',\n result: {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n executionTime: 0,\n },\n query: state.code,\n });\n }\n\n }, [state.isExecuting, state.code, activeExecutor, dispatch]);\n\n const handleClear = useCallback(() => {\n dispatch({ type: 'CLEAR_RESULTS' });\n }, [dispatch]);\n\n const handleSelectHistory = useCallback((query: string) => {\n dispatch({ type: 'LOAD_QUERY', code: query });\n }, [dispatch]);\n\n const editorPane = (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <EditorToolbar\n onRun={handleRun}\n onClear={handleClear}\n isExecuting={state.isExecuting}\n connectionLabel={connectionLabel}\n connectionStatus={connectionStatus}\n connectionLocked={connectionLocked}\n onToggleConnectionPanel={() => setShowConnectionPanel((v) => !v)}\n />\n {!connectionLocked && showConnectionPanel && (\n <ConnectionPanel\n mode={connectionMode}\n wsUrl={wsUrl}\n status={connectionStatus}\n error={connectionError}\n onModeChange={handleModeChange}\n onUrlChange={setWsUrl}\n onConnect={handleConnect}\n onDisconnect={handleDisconnect}\n onClose={() => setShowConnectionPanel(false)}\n />\n )}\n </div>\n <div style={{ flex: 1, minHeight: 0 }}>\n <QueryEditor\n code={state.code}\n onChange={(code) => dispatch({ type: 'SET_CODE', code })}\n onRun={handleRun}\n theme={theme}\n />\n </div>\n </div>\n );\n\n const bottomPane = (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <TabBar\n activeTab={state.activeTab}\n tabs={TABS}\n onTabChange={(tab) => dispatch({ type: 'SET_TAB', tab: tab as 'results' | 'history' | 'schema' })}\n />\n <div style={{ flex: 1, overflow: 'auto', minHeight: 0 }}>\n {state.activeTab === 'results' ? (\n <ResultsPanel result={state.result} />\n ) : state.activeTab === 'history' ? (\n <HistoryPanel entries={state.history} onSelect={handleSelectHistory} />\n ) : (\n <SchemaBrowser executor={activeExecutor} />\n )}\n </div>\n </div>\n );\n\n return (\n <div className={`rdb-console${theme === 'light' ? ' rdb-theme-light' : ''}`}>\n <div className=\"rdb-console__main\">\n <SplitPane top={editorPane} bottom={bottomPane} initialSplit={45} />\n </div>\n </div>\n );\n}\n\nexport function Console({ executor, initialCode, historyKey, connection, theme }: ConsoleProps) {\n return (\n <ConsoleProvider initialCode={initialCode}>\n <ConsoleInner executor={executor} historyKey={historyKey} connection={connection} theme={theme} />\n </ConsoleProvider>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult, Diagnostic } from '../types';\nimport { ReifyError } from '@reifydb/core';\n\nexport interface WsClient {\n admin<const S extends readonly unknown[]>(\n statements: string | string[],\n params: unknown,\n schemas: S\n ): Promise<unknown[][]>;\n}\n\nfunction normalizeFragment(raw: unknown): Diagnostic['fragment'] {\n if (!raw || typeof raw !== 'object') return undefined;\n const obj = raw as Record<string, unknown>;\n if ('Statement' in obj && obj.Statement && typeof obj.Statement === 'object') {\n const s = obj.Statement as Record<string, unknown>;\n return { text: String(s.text ?? ''), line: s.line as number, column: s.column as number };\n }\n if ('Internal' in obj && obj.Internal && typeof obj.Internal === 'object') {\n const s = obj.Internal as Record<string, unknown>;\n return { text: String(s.text ?? '') };\n }\n if ('text' in obj) {\n return { text: String(obj.text), line: obj.line as number | undefined, column: obj.column as number | undefined };\n }\n return undefined;\n}\n\nfunction toDiagnostic(error: ReifyError): Diagnostic {\n return {\n code: error.code,\n statement: error.statement,\n message: error.message.replace(/^\\[.*?\\]\\s*/, ''),\n fragment: normalizeFragment(error.fragment),\n label: error.label,\n help: error.help,\n notes: error.notes,\n cause: error.cause,\n };\n}\n\nexport class WsExecutor implements Executor {\n private client: WsClient;\n\n constructor(client: WsClient) {\n this.client = client;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n const query = trimmed.endsWith(';') ? trimmed.slice(0, -1).trim() : trimmed;\n\n if (!query) {\n return { success: true, data: [], executionTime: 0 };\n }\n\n const startTime = performance.now();\n try {\n const frames = await this.client.admin(query, null, []);\n const executionTime = Math.round(performance.now() - startTime);\n const results = frames[0] ?? [];\n\n const data = results.map((row: unknown) => {\n if (row && typeof row === 'object') {\n const plainRow: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n plainRow[key] = value;\n }\n return plainRow;\n }\n return row as Record<string, unknown>;\n });\n\n return { success: true, data, executionTime };\n } catch (error) {\n const executionTime = Math.round(performance.now() - startTime);\n if (error instanceof ReifyError) {\n return { success: false, error: error.message, diagnostic: toDiagnostic(error), executionTime };\n }\n const errorMessage = error instanceof Error ? error.message : String(error);\n return { success: false, error: errorMessage, executionTime };\n }\n }\n\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { createContext, useContext, useReducer, type Dispatch, type ReactNode } from 'react';\nimport { consoleReducer, initialConsoleState, type ConsoleState, type ConsoleAction } from './console-store';\n\ninterface ConsoleContextValue {\n state: ConsoleState;\n dispatch: Dispatch<ConsoleAction>;\n}\n\nconst ConsoleContext = createContext<ConsoleContextValue | null>(null);\n\ninterface ConsoleProviderProps {\n children: ReactNode;\n initialCode?: string;\n}\n\nexport function ConsoleProvider({ children, initialCode }: ConsoleProviderProps) {\n const [state, dispatch] = useReducer(consoleReducer, {\n ...initialConsoleState,\n code: initialCode ?? '',\n });\n\n return (\n <ConsoleContext.Provider value={{ state, dispatch }}>\n {children}\n </ConsoleContext.Provider>\n );\n}\n\nexport function useConsoleStore(): ConsoleContextValue {\n const ctx = useContext(ConsoleContext);\n if (!ctx) {\n throw new Error('useConsoleStore must be used within a ConsoleProvider');\n }\n return ctx;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { ExecutionResult, HistoryEntry } from '../types';\n\nexport interface ConsoleState {\n code: string;\n isExecuting: boolean;\n result: ExecutionResult | null;\n history: HistoryEntry[];\n activeTab: 'results' | 'history' | 'schema';\n}\n\nexport type ConsoleAction =\n | { type: 'SET_CODE'; code: string }\n | { type: 'EXECUTE_START' }\n | { type: 'EXECUTE_SUCCESS'; result: ExecutionResult; query: string }\n | { type: 'EXECUTE_ERROR'; result: ExecutionResult; query: string }\n | { type: 'CLEAR_RESULTS' }\n | { type: 'SET_TAB'; tab: 'results' | 'history' | 'schema' }\n | { type: 'LOAD_HISTORY'; entries: HistoryEntry[] }\n | { type: 'CLEAR_HISTORY' }\n | { type: 'LOAD_QUERY'; code: string };\n\nlet nextHistoryId = 1;\n\nexport function consoleReducer(state: ConsoleState, action: ConsoleAction): ConsoleState {\n switch (action.type) {\n case 'SET_CODE':\n return { ...state, code: action.code };\n\n case 'EXECUTE_START':\n return { ...state, isExecuting: true, result: null };\n\n case 'EXECUTE_SUCCESS': {\n const entry: HistoryEntry = {\n id: String(nextHistoryId++),\n query: action.query,\n timestamp: Date.now(),\n success: true,\n rowCount: action.result.data?.length,\n executionTime: action.result.executionTime,\n };\n return {\n ...state,\n isExecuting: false,\n result: action.result,\n history: [entry, ...state.history],\n activeTab: 'results',\n };\n }\n\n case 'EXECUTE_ERROR': {\n const entry: HistoryEntry = {\n id: String(nextHistoryId++),\n query: action.query,\n timestamp: Date.now(),\n success: false,\n executionTime: action.result.executionTime,\n };\n return {\n ...state,\n isExecuting: false,\n result: action.result,\n history: [entry, ...state.history],\n activeTab: 'results',\n };\n }\n\n case 'CLEAR_RESULTS':\n return { ...state, result: null };\n\n case 'SET_TAB':\n return { ...state, activeTab: action.tab };\n\n case 'LOAD_HISTORY':\n return { ...state, history: action.entries };\n\n case 'CLEAR_HISTORY':\n return { ...state, history: [] };\n\n case 'LOAD_QUERY':\n return { ...state, code: action.code, activeTab: 'results' };\n\n default:\n return state;\n }\n}\n\nexport const initialConsoleState: ConsoleState = {\n code: '',\n isExecuting: false,\n result: null,\n history: [],\n activeTab: 'results',\n};\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { HistoryEntry } from '../types';\n\nconst DEFAULT_KEY = 'reifydb-console-history';\nconst MAX_ENTRIES = 500;\n\nexport function loadHistory(key: string = DEFAULT_KEY): HistoryEntry[] {\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return [];\n const entries = JSON.parse(raw);\n return Array.isArray(entries) ? entries : [];\n } catch {\n return [];\n }\n}\n\nexport function saveHistory(entries: HistoryEntry[], key: string = DEFAULT_KEY): void {\n try {\n const trimmed = entries.slice(0, MAX_ENTRIES);\n localStorage.setItem(key, JSON.stringify(trimmed));\n } catch {\n // localStorage may be unavailable\n }\n}\n\nexport function clearHistory(key: string = DEFAULT_KEY): void {\n try {\n localStorage.removeItem(key);\n } catch {\n // localStorage may be unavailable\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useRef, useEffect, type ReactNode } from 'react';\n\ninterface SplitPaneProps {\n top: ReactNode;\n bottom: ReactNode;\n initialSplit?: number; // percentage for top pane, default 50\n}\n\nexport function SplitPane({ top, bottom, initialSplit = 50 }: SplitPaneProps) {\n const [split, setSplit] = useState(initialSplit);\n const containerRef = useRef<HTMLDivElement>(null);\n const dragging = useRef(false);\n\n const onMouseDown = useCallback(() => {\n dragging.current = true;\n document.body.style.cursor = 'row-resize';\n document.body.style.userSelect = 'none';\n }, []);\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!dragging.current || !containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const pct = ((e.clientY - rect.top) / rect.height) * 100;\n setSplit(Math.min(Math.max(pct, 15), 85));\n };\n\n const onMouseUp = () => {\n if (dragging.current) {\n dragging.current = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n }, []);\n\n return (\n <div className=\"rdb-split\" ref={containerRef}>\n <div className=\"rdb-split__top\" style={{ height: `${split}%` }}>\n {top}\n </div>\n <div className=\"rdb-split__handle\" onMouseDown={onMouseDown} />\n <div className=\"rdb-split__bottom\">\n {bottom}\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\ninterface TabBarProps {\n activeTab: string;\n tabs: { id: string; label: string }[];\n onTabChange: (id: string) => void;\n}\n\nexport function TabBar({ activeTab, tabs, onTabChange }: TabBarProps) {\n return (\n <div className=\"rdb-tabs\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={`rdb-tabs__tab${activeTab === tab.id ? ' rdb-tabs__tab--active' : ''}`}\n onClick={() => onTabChange(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useRef } from 'react';\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport { registerRqlLanguage } from '../../monaco/register';\n\ninterface QueryEditorProps {\n code: string;\n onChange: (code: string) => void;\n onRun: () => void;\n theme?: 'light' | 'dark';\n}\n\nexport function QueryEditor({ code, onChange, onRun, theme = 'light' }: QueryEditorProps) {\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const onRunRef = useRef(onRun);\n onRunRef.current = onRun;\n\n const handleMount: OnMount = (editor, monaco) => {\n editorRef.current = editor;\n registerRqlLanguage(monaco);\n\n editor.addAction({\n id: 'run-query',\n label: 'Run Query',\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],\n run: () => {\n onRunRef.current();\n },\n });\n };\n\n const handleBeforeMount = (monaco: typeof import('monaco-editor')) => {\n registerRqlLanguage(monaco);\n };\n\n return (\n <Editor\n height=\"100%\"\n language=\"rql\"\n theme={theme === 'light' ? 'premium-light' : 'premium-dark'}\n value={code}\n onChange={(value) => onChange(value || '')}\n beforeMount={handleBeforeMount}\n onMount={handleMount}\n options={{\n minimap: { enabled: false },\n lineNumbers: 'on',\n glyphMargin: false,\n folding: true,\n lineDecorationsWidth: 16,\n lineNumbersMinChars: 3,\n scrollBeyondLastLine: false,\n scrollbar: { vertical: 'auto', horizontal: 'auto' },\n overviewRulerLanes: 0,\n hideCursorInOverviewRuler: true,\n overviewRulerBorder: false,\n renderLineHighlight: 'line',\n fontFamily: \"'IBM Plex Mono', monospace\",\n fontSize: 13,\n padding: { top: 8, bottom: 8 },\n wordWrap: 'on',\n automaticLayout: true,\n }}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { languages } from 'monaco-editor';\n\nconst KEYWORDS = [\n // Query transforms\n 'map', 'extend', 'by', 'from', 'where', 'aggregate', 'having',\n 'sort', 'distinct', 'take', 'offset',\n\n // Joins & set operations\n 'left', 'inner', 'natural', 'join', 'on', 'using', 'intersect', 'except',\n\n // DML\n 'insert', 'into', 'update', 'set', 'delete',\n\n // Control flow\n 'let', 'if', 'else', 'end', 'loop', 'while', 'break', 'continue', 'return',\n\n // Functions & casting\n 'fun', 'call', 'apply', 'cast',\n\n // DDL & schema commands\n 'describe', 'show', 'create', 'alter', 'drop', 'filter', 'gate', 'flow', 'window',\n\n // Operators & predicates\n 'in', 'between', 'like', 'is', 'with',\n\n // Object types\n 'namespace', 'sequence', 'series', 'subscription', 'table', 'ringbuffer',\n 'column', 'policy', 'property', 'view', 'deferred', 'transactional',\n\n // Index & constraints\n 'index', 'unique', 'primary', 'key', 'asc', 'desc', 'auto', 'increment', 'value',\n\n // Misc operations\n 'exists', 'replace', 'cascade', 'restrict', 'to', 'pause', 'resume',\n 'query', 'rename', 'rownum', 'dictionary', 'for', 'output', 'append',\n 'assert', 'patch',\n\n // Enums & pattern matching\n 'enum', 'match',\n\n // Procedures & events\n 'procedure', 'event', 'handler', 'dispatch', 'tag',\n\n // Testing\n 'test', 'tests', 'run',\n\n // Access control\n 'user', 'role', 'grant', 'revoke', 'password', 'require', 'execute',\n 'access', 'subscribe', 'enable', 'disable',\n\n // System objects\n 'function', 'session', 'feature',\n\n // Migrations\n 'add', 'migration', 'migrate', 'rollback', 'diff', 'version', 'current', 'pending',\n\n // Misc\n 'authentication', 'contains', 'remote', 'error',\n\n // Additional keywords (not in keyword.rs but valid RQL constructs)\n 'derive', 'group', 'union', 'as',\n\n // Word operators\n 'and', 'or', 'not', 'xor',\n];\n\nconst MODULES = ['date', 'math', 'text'];\nconst BUILTIN_FUNCTIONS = ['case'];\nconst LITERALS = ['none', 'true', 'false'];\n\nconst TYPE_KEYWORDS = [\n // Signed integers\n 'int1', 'int2', 'int4', 'int8', 'int16', 'int',\n // Unsigned integers\n 'uint1', 'uint2', 'uint4', 'uint8', 'uint16', 'uint',\n // Floating point\n 'float4', 'float8',\n // Text & binary\n 'utf8', 'blob',\n // Boolean\n 'bool', 'boolean',\n // Numeric\n 'decimal',\n // Temporal\n 'date', 'datetime', 'time', 'duration', 'interval',\n // Identifiers & UUIDs\n 'uuid4', 'uuid7', 'identityid', 'identity_id', 'dictionaryid', 'dictionary_id',\n // Special\n 'any',\n // Container types\n 'Option', 'List', 'Record', 'Tuple',\n // Alias\n 'text',\n];\n\nexport const rqlLanguageDefinition: languages.IMonarchLanguage = {\n defaultToken: '',\n ignoreCase: true,\n\n keywords: [...KEYWORDS, ...MODULES, ...BUILTIN_FUNCTIONS],\n constants: LITERALS,\n typeKeywords: TYPE_KEYWORDS,\n\n operators: ['+', '-', '*', '/', '//', '%', '=', '==', '!=', '->', '=>', '>', '<', '>=', '<=', '~=', '&&', '||', '??'],\n\n tokenizer: {\n root: [\n // Comments\n [/#.*/, 'comment'],\n\n // Namespace separator (must precede named arguments)\n [/::/, 'operator'],\n\n // Named arguments (negative lookahead prevents matching `::`)\n [/(\\w+)\\s*:(?!:)/, 'key'],\n\n // Variable references\n [/\\$[\\w$]+/, 'variable'],\n\n // Identifiers and keywords (case insensitive)\n [\n /[a-zA-Z_][\\w$]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@constants': 'constant',\n '@typeKeywords': 'type',\n '@default': 'identifier',\n },\n },\n ],\n\n // Whitespace\n { include: '@whitespace' },\n\n // Brackets\n [/[{}()[\\]]/, '@brackets'],\n\n // Numbers with underscores and scientific notation support\n [/[+-]?(?:[\\d_]+(?:\\.[\\d_]+)?|\\.[\\d_]+)(?:[eE][+-]?\\d+)?/, 'number'],\n\n // Strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, { token: 'string.quote', bracket: '@open', next: '@string' }],\n\n // Single-quoted strings\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'/, { token: 'string.quote', bracket: '@open', next: '@singlestring' }],\n\n // Operators — multi-char first for longest match\n [/<<|>>|\\.\\./, 'operator'],\n [/==|!=|->|=>|>=|<=|~=|:=/, 'operator'],\n [/&&|\\|\\||\\?\\?/, 'operator'],\n [/\\/\\//, 'operator'],\n\n // Single-char operators\n [/[+\\-*/%|.=<>!&^?]/, 'operator'],\n\n // Delimiters\n [/[;,]/, 'delimiter'],\n ],\n\n string: [\n [/[^\\\\\"]+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/\"/, { token: 'string.quote', bracket: '@close', next: '@pop' }],\n ],\n\n singlestring: [\n [/[^\\\\']+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/'/, { token: 'string.quote', bracket: '@close', next: '@pop' }],\n ],\n\n whitespace: [\n [/[ \\t\\r\\n]+/, 'white'],\n ],\n },\n};\n\nexport const rqlLanguageConfiguration: languages.LanguageConfiguration = {\n comments: {\n lineComment: '#',\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string'] },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n folding: {\n offSide: true,\n },\n};\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { editor } from 'monaco-editor';\n\nexport const brutalistLightTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '0D9488', fontStyle: 'bold' },\n { token: 'string', foreground: '16A34A' },\n { token: 'string.quote', foreground: '16A34A' },\n { token: 'number', foreground: 'B91C1C', fontStyle: 'bold' },\n { token: 'comment', foreground: '6B7280', fontStyle: 'italic' },\n { token: 'operator', foreground: '383838' },\n { token: 'identifier', foreground: '1A1A1A' },\n { token: 'key', foreground: '0D9488', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#FFFFFF',\n 'editor.foreground': '#1A1A1A',\n 'editor.lineHighlightBackground': '#F8F8F7',\n 'editor.selectionBackground': '#A7F3D0',\n 'editorCursor.foreground': '#14B8A6',\n 'editorLineNumber.foreground': '#9CA3AF',\n 'editorLineNumber.activeForeground': '#383838',\n },\n};\n\nexport const brutalistDarkTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '14B8A6', fontStyle: 'bold' },\n { token: 'string', foreground: '4ADE80' },\n { token: 'string.quote', foreground: '4ADE80' },\n { token: 'number', foreground: 'F87171', fontStyle: 'bold' },\n { token: 'comment', foreground: '9CA3AF', fontStyle: 'italic' },\n { token: 'operator', foreground: 'E5E7EB' },\n { token: 'identifier', foreground: 'F3F4F6' },\n { token: 'key', foreground: '60A5FA', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#1A1A1A',\n 'editor.foreground': '#F3F4F6',\n 'editor.lineHighlightBackground': '#2A2A2A',\n 'editor.selectionBackground': '#1A3A36',\n 'editorCursor.foreground': '#14B8A6',\n 'editorLineNumber.foreground': '#6B7280',\n 'editorLineNumber.activeForeground': '#E5E7EB',\n },\n};\n\nexport const premiumLightTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '0D9488', fontStyle: 'bold' },\n { token: 'string', foreground: '059669' },\n { token: 'string.quote', foreground: '059669' },\n { token: 'number', foreground: 'DB2777', fontStyle: 'bold' },\n { token: 'comment', foreground: '9CA3AF', fontStyle: 'italic' },\n { token: 'operator', foreground: '525252' },\n { token: 'identifier', foreground: '1A1A1A' },\n { token: 'key', foreground: '0D9488', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#FFFFFF',\n 'editor.foreground': '#1A1A1A',\n 'editor.lineHighlightBackground': '#F5F5F5',\n 'editor.selectionBackground': '#99F6E4',\n 'editorCursor.foreground': '#0D9488',\n 'editorLineNumber.foreground': '#9CA3AF',\n 'editorLineNumber.activeForeground': '#525252',\n },\n};\n\nexport const premiumDarkTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '14B8A6', fontStyle: 'bold' },\n { token: 'string', foreground: '34D399' },\n { token: 'string.quote', foreground: '34D399' },\n { token: 'number', foreground: 'F472B6', fontStyle: 'bold' },\n { token: 'comment', foreground: '525252', fontStyle: 'italic' },\n { token: 'operator', foreground: 'A3A3A3' },\n { token: 'identifier', foreground: 'E5E5E5' },\n { token: 'key', foreground: '14B8A6', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#1A1A1A',\n 'editor.foreground': '#E5E5E5',\n 'editor.lineHighlightBackground': '#252525',\n 'editor.selectionBackground': '#14B8A640',\n 'editorCursor.foreground': '#14B8A6',\n 'editorLineNumber.foreground': '#525252',\n 'editorLineNumber.activeForeground': '#A3A3A3',\n },\n};\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { rqlLanguageDefinition, rqlLanguageConfiguration } from './rql-language';\nimport { premiumDarkTheme, premiumLightTheme, brutalistDarkTheme, brutalistLightTheme } from './themes';\n\nlet registered = false;\n\nexport function registerRqlLanguage(monaco: typeof import('monaco-editor')): void {\n if (registered) return;\n\n monaco.languages.register({ id: 'rql' });\n monaco.languages.setMonarchTokensProvider('rql', rqlLanguageDefinition);\n monaco.languages.setLanguageConfiguration('rql', rqlLanguageConfiguration);\n monaco.editor.defineTheme('premium-dark', premiumDarkTheme);\n monaco.editor.defineTheme('premium-light', premiumLightTheme);\n monaco.editor.defineTheme('brutalist-dark', brutalistDarkTheme);\n monaco.editor.defineTheme('brutalist-light', brutalistLightTheme);\n\n registered = true;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { ConnectionStatus } from '../connection/ConnectionPanel';\n\ninterface EditorToolbarProps {\n onRun: () => void;\n onClear: () => void;\n isExecuting: boolean;\n connectionLabel: string;\n connectionStatus: ConnectionStatus;\n connectionLocked?: boolean;\n onToggleConnectionPanel: () => void;\n}\n\nexport function EditorToolbar({\n onRun,\n onClear,\n isExecuting,\n connectionLabel,\n connectionStatus,\n connectionLocked,\n onToggleConnectionPanel,\n}: EditorToolbarProps) {\n return (\n <div className=\"rdb-editor-toolbar\">\n <div className=\"rdb-editor-toolbar__left\">\n {connectionLocked ? (\n <span className=\"rdb-editor-toolbar__connection rdb-editor-toolbar__connection--locked\">\n <span className={`rdb-editor-toolbar__connection-dot rdb-editor-toolbar__connection-dot--${connectionStatus}`}>●</span>\n <span>[{connectionLabel}]</span>\n </span>\n ) : (\n <button\n className=\"rdb-editor-toolbar__connection\"\n onClick={onToggleConnectionPanel}\n >\n <span className={`rdb-editor-toolbar__connection-dot rdb-editor-toolbar__connection-dot--${connectionStatus}`}>●</span>\n <span>[{connectionLabel}]</span>\n </button>\n )}\n <span className=\"rdb-editor-toolbar__hint\">ctrl+enter to run</span>\n </div>\n <div className=\"rdb-editor-toolbar__actions\">\n <button\n className=\"rdb-editor-toolbar__btn rdb-editor-toolbar__btn--secondary\"\n onClick={onClear}\n disabled={isExecuting}\n >\n [clear]\n </button>\n <button\n className=\"rdb-editor-toolbar__btn\"\n onClick={onRun}\n disabled={isExecuting}\n >\n {isExecuting ? '[running...]' : '[run]'}\n </button>\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\n\nexport interface ValueStyle {\n color?: string;\n italic?: boolean;\n}\n\nexport function getValueStyle(value: unknown): ValueStyle {\n if (value === null || value === undefined) {\n return { color: 'var(--rdb-color-muted)', italic: true };\n }\n\n // Duck-type on `type` property - Value classes use `implements` (not extends),\n // so instanceof fails. Every concrete Value sets this.type in its constructor.\n const t = (value as { type?: unknown }).type;\n if (typeof t === 'string') {\n switch (t) {\n case 'None':\n return { color: 'var(--rdb-color-muted)', italic: true };\n case 'Boolean':\n return { color: 'var(--rdb-color-value-boolean)' };\n case 'Int1': case 'Int2': case 'Int4': case 'Int8': case 'Int16':\n case 'Uint1': case 'Uint2': case 'Uint4': case 'Uint8': case 'Uint16':\n case 'Float4': case 'Float8': case 'Decimal':\n return { color: 'var(--rdb-color-value-number)' };\n case 'Date': case 'DateTime': case 'Time': case 'Duration':\n return { color: 'var(--rdb-color-value-date)' };\n case 'Uuid4': case 'Uuid7': case 'IdentityId':\n return { color: 'var(--rdb-color-value-uuid)' };\n case 'Utf8':\n return { color: 'var(--rdb-color-value-string)' };\n case 'Blob':\n return { color: 'var(--rdb-color-secondary)' };\n }\n }\n\n // Fallback: color by JS typeof\n switch (typeof value) {\n case 'number':\n case 'bigint':\n return { color: 'var(--rdb-color-value-number)' };\n case 'boolean':\n return { color: 'var(--rdb-color-value-boolean)' };\n case 'string':\n return { color: 'var(--rdb-color-value-string)' };\n default:\n return {};\n }\n}\n\nexport function formatValue(value: unknown): string {\n if (value === null || value === undefined) {\n return 'none';\n }\n // Duck-type Value objects by checking for .type (same approach as getValueStyle).\n // Handles BigInt-backed types (Int8, Uint8, etc.) that crash JSON.stringify.\n if (typeof value === 'object' && typeof (value as any).type === 'string') {\n return value.toString();\n }\n if (typeof value === 'bigint') {\n return value.toString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { formatValue, getValueStyle } from '../../format/value';\n\ninterface ResultsTableProps {\n data: Record<string, unknown>[];\n}\n\nexport function ResultsTable({ data }: ResultsTableProps) {\n if (data.length === 0) return null;\n\n const columns = Object.keys(data[0]);\n\n return (\n <div className=\"rdb-results\">\n <table className=\"rdb-results__table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={col}>{col}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, i) => (\n <tr key={i}>\n {columns.map((col) => {\n const vs = getValueStyle(row[col]);\n return (\n <td\n key={col}\n style={{\n color: vs.color,\n fontStyle: vs.italic ? 'italic' : undefined,\n }}\n >\n {formatValue(row[col])}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Diagnostic } from '../../types';\n\ninterface ResultsErrorProps {\n message: string;\n diagnostic?: Diagnostic;\n}\n\nfunction getLine(source: string, line: number): string {\n return source.split('\\n')[line - 1] ?? '';\n}\n\nfunction renderFlat(d: Diagnostic): string {\n const lines: string[] = [];\n\n lines.push(`Error ${d.code}`);\n lines.push(` ${d.message}`);\n lines.push('');\n\n if (d.fragment?.line != null && d.fragment.column != null) {\n const { text: fragment, line, column } = d.fragment;\n const statement = d.statement ?? '';\n\n lines.push('LOCATION');\n lines.push(` line ${line}, column ${column}`);\n lines.push('');\n\n const lineContent = getLine(statement, line);\n\n lines.push('CODE');\n lines.push(` ${line} \\u2502 ${lineContent}`);\n const fragmentStart = lineContent.indexOf(fragment) !== -1\n ? lineContent.indexOf(fragment)\n : column;\n lines.push(` \\u2502 ${' '.repeat(fragmentStart)}${'~'.repeat(fragment.length)}`);\n lines.push(' \\u2502');\n\n const labelText = d.label ?? '';\n if (labelText) {\n const fragmentCenter = fragmentStart + Math.floor(fragment.length / 2);\n const labelHalf = Math.floor(labelText.length / 2);\n const labelOffset = labelHalf > fragmentCenter ? 0 : fragmentCenter - labelHalf;\n lines.push(` \\u2502 ${' '.repeat(labelOffset)}${labelText}`);\n }\n lines.push('');\n }\n\n if (d.help) {\n lines.push('HELP');\n lines.push(` ${d.help}`);\n lines.push('');\n }\n\n if (d.notes.length > 0) {\n lines.push('NOTES');\n for (const note of d.notes) {\n lines.push(` \\u2022 ${note}`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction renderNested(d: Diagnostic, depth: number): string {\n const lines: string[] = [];\n const indent = depth === 0 ? '' : ' ';\n const prefix = depth === 0 ? '' : '\\u21b3 ';\n\n lines.push(`${indent}${prefix}Error ${d.code}: ${d.message}`);\n\n if (d.fragment?.line != null && d.fragment.column != null) {\n const { text: fragment, line, column } = d.fragment;\n const statement = d.statement ?? '';\n\n const atText = statement ? `\"${fragment}\"` : 'unknown';\n lines.push(`${indent} at ${atText} (line ${line}, column ${column})`);\n lines.push('');\n\n const lineContent = getLine(statement, line);\n lines.push(`${indent} ${line} \\u2502 ${lineContent}`);\n const fragmentStart = lineContent.indexOf(fragment) !== -1\n ? lineContent.indexOf(fragment)\n : column;\n lines.push(`${indent} \\u2502 ${' '.repeat(fragmentStart)}${'~'.repeat(fragment.length)}`);\n\n const labelText = d.label ?? '';\n if (labelText) {\n const fragmentCenter = fragmentStart + Math.floor(fragment.length / 2);\n const labelHalf = Math.floor(labelText.length / 2);\n const labelOffset = labelHalf > fragmentCenter ? 0 : fragmentCenter - labelHalf;\n lines.push(`${indent} \\u2502 ${' '.repeat(labelOffset)}${labelText}`);\n }\n lines.push('');\n }\n\n if (d.cause) {\n lines.push(renderNested(d.cause, depth + 1));\n }\n\n if (d.help) {\n lines.push(`${indent} help: ${d.help}`);\n }\n\n if (d.notes.length > 0) {\n for (const note of d.notes) {\n lines.push(`${indent} note: ${note}`);\n }\n }\n\n if (depth > 0) {\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderDiagnostic(d: Diagnostic): string {\n if (d.cause) {\n return renderNested(d, 0);\n }\n return renderFlat(d);\n}\n\nexport function ResultsError({ message, diagnostic }: ResultsErrorProps) {\n const text = diagnostic ? renderDiagnostic(diagnostic) : `Error\\n ${message}`;\n\n return (\n <div className=\"rdb-results__error\">\n <pre>{text}</pre>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport function ResultsEmpty() {\n return (\n <div className=\"rdb-results__empty\">\n $ 0 rows returned.\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useCallback } from 'react';\nimport { formatValue } from '../../format/value';\n\ninterface ResultsStatusBarProps {\n rowCount: number;\n executionTime: number;\n data?: Record<string, unknown>[];\n}\n\nexport function ResultsStatusBar({ rowCount, executionTime, data }: ResultsStatusBarProps) {\n const copyAsCsv = useCallback(() => {\n if (!data || data.length === 0) return;\n const columns = Object.keys(data[0]);\n const header = columns.join(',');\n const rows = data.map(row =>\n columns.map(col => {\n const val = formatValue(row[col]);\n return val.includes(',') || val.includes('\"') || val.includes('\\n')\n ? `\"${val.replace(/\"/g, '\"\"')}\"`\n : val;\n }).join(',')\n );\n navigator.clipboard.writeText([header, ...rows].join('\\n'));\n }, [data]);\n\n const copyAsJson = useCallback(() => {\n if (!data || data.length === 0) return;\n const serialized = data.map(row => {\n const obj: Record<string, string> = {};\n for (const [key, val] of Object.entries(row)) {\n obj[key] = formatValue(val);\n }\n return obj;\n });\n navigator.clipboard.writeText(JSON.stringify(serialized, null, 2));\n }, [data]);\n\n return (\n <div className=\"rdb-status-bar\">\n <div className=\"rdb-status-bar__info\">\n <span>{rowCount} row{rowCount !== 1 ? 's' : ''}</span>\n <span>({executionTime}ms)</span>\n </div>\n <div className=\"rdb-status-bar__actions\">\n <button className=\"rdb-status-bar__btn\" onClick={copyAsCsv} title=\"Copy as CSV\">\n [CSV]\n </button>\n <button className=\"rdb-status-bar__btn\" onClick={copyAsJson} title=\"Copy as JSON\">\n [JSON]\n </button>\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { ExecutionResult } from '../../types';\nimport { ResultsTable } from './ResultsTable';\nimport { ResultsError } from './ResultsError';\nimport { ResultsEmpty } from './ResultsEmpty';\nimport { ResultsStatusBar } from './ResultsStatusBar';\n\ninterface ResultsPanelProps {\n result: ExecutionResult | null;\n}\n\nexport function ResultsPanel({ result }: ResultsPanelProps) {\n if (!result) {\n return (\n <div className=\"rdb-results__empty\">\n $ run a query to see results\n </div>\n );\n }\n\n if (!result.success && result.error) {\n return <ResultsError message={result.error} diagnostic={result.diagnostic} />;\n }\n\n const data = result.data ?? [];\n if (data.length === 0) {\n return <ResultsEmpty />;\n }\n\n return (\n <>\n <ResultsTable data={data} />\n <ResultsStatusBar\n rowCount={data.length}\n executionTime={result.executionTime}\n data={data}\n />\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useState } from 'react';\nimport type { Executor } from '../../types';\nimport { SchemaNode } from './SchemaNode';\n\ninterface SchemaBrowserProps {\n executor: Executor;\n}\n\ninterface ColumnInfo {\n name: string;\n type: string;\n}\n\ninterface SourceInfo {\n name: string;\n category: 'table' | 'view' | 'vtable' | 'ringbuffer' | 'procedure' | 'handler' | 'enum' | 'event' | 'dictionary' | 'migration';\n columns: ColumnInfo[];\n}\n\ninterface NamespaceInfo {\n name: string;\n sources: SourceInfo[];\n}\n\nconst TYPE_NAMES: Record<number, string> = {\n 1: 'Float4', 2: 'Float8',\n 3: 'Int1', 4: 'Int2', 5: 'Int4', 6: 'Int8', 7: 'Int16',\n 8: 'Utf8',\n 9: 'Uint1', 10: 'Uint2', 11: 'Uint4', 12: 'Uint8', 13: 'Uint16',\n 14: 'Boolean', 15: 'Date', 16: 'DateTime', 17: 'Time', 18: 'Duration',\n 19: 'IdentityId', 20: 'Uuid4', 21: 'Uuid7', 22: 'Blob',\n 23: 'Int', 24: 'Decimal', 25: 'Uint', 26: 'Any',\n 27: 'DictionaryId', 28: 'List',\n};\n\n// source_type: 1=Table, 2=View, 3=VTable, 4=RingBuffer\nconst SOURCE_TYPE_TABLE = 1;\nconst SOURCE_TYPE_VIEW = 2;\nconst SOURCE_TYPE_VTABLE = 3;\nconst SOURCE_TYPE_RINGBUFFER = 4;\n\nfunction resolveTypeName(typeId: number): string {\n const isOptional = (typeId & 0x80) !== 0;\n const baseId = typeId & 0x7f;\n const name = TYPE_NAMES[baseId] ?? `Unknown(${baseId})`;\n return isOptional ? `${name}?` : name;\n}\n\nfunction extractNum(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'bigint') return Number(value);\n if (value && typeof value === 'object' && typeof (value as { valueOf(): unknown }).valueOf === 'function') {\n const v = (value as { valueOf(): unknown }).valueOf();\n if (typeof v === 'number') return v;\n if (typeof v === 'bigint') return Number(v);\n }\n return Number(value);\n}\n\nfunction extractStr(value: unknown): string {\n if (typeof value === 'string') return value;\n if (value && typeof value === 'object' && typeof (value as { valueOf(): unknown }).valueOf === 'function') {\n const v = (value as { valueOf(): unknown }).valueOf();\n if (typeof v === 'string') return v;\n }\n return String(value);\n}\n\nasync function queryRows(executor: Executor, query: string): Promise<Record<string, unknown>[]> {\n const result = await executor.execute(query);\n return result.success && result.data ? result.data : [];\n}\n\nfunction typeColorClass(typeName: string): string | undefined {\n const base = typeName.replace(/\\?$/, '');\n switch (base) {\n case 'Float4': case 'Float8':\n case 'Int1': case 'Int2': case 'Int4': case 'Int8': case 'Int16':\n case 'Uint1': case 'Uint2': case 'Uint4': case 'Uint8': case 'Uint16':\n case 'Int': case 'Uint': case 'Decimal':\n return 'rdb-schema__node-type--numeric';\n case 'Utf8': case 'Blob':\n return 'rdb-schema__node-type--string';\n case 'Boolean':\n return 'rdb-schema__node-type--boolean';\n case 'Date': case 'DateTime': case 'Time': case 'Duration':\n return 'rdb-schema__node-type--temporal';\n case 'IdentityId': case 'Uuid4': case 'Uuid7': case 'DictionaryId':\n return 'rdb-schema__node-type--identity';\n default:\n return undefined;\n }\n}\n\nconst CATEGORY_GROUPS: { key: SourceInfo['category']; label: string }[] = [\n { key: 'table', label: 'Tables' },\n { key: 'vtable', label: 'Virtual Tables' },\n { key: 'view', label: 'Views' },\n { key: 'ringbuffer', label: 'Ring Buffers' },\n { key: 'procedure', label: 'Procedures' },\n { key: 'handler', label: 'Handlers' },\n { key: 'enum', label: 'Enums' },\n { key: 'event', label: 'Events' },\n { key: 'dictionary', label: 'Dictionaries' },\n { key: 'migration', label: 'Migrations' },\n];\n\nexport function SchemaBrowser({ executor }: SchemaBrowserProps) {\n const [namespaces, setNamespaces] = useState<NamespaceInfo[]>([]);\n const [loading, setLoading] = useState(true);\n\n const loadSchema = async () => {\n setLoading(true);\n try {\n const [nsRows, tableRows, viewRows, vtableRows, rbRows, colRows, vtableColRows, procRows, handlerRows, enumRows, eventRows, dictRows, migrationRows] = await Promise.all([\n queryRows(executor, 'FROM system::namespaces MAP { id, name }'),\n queryRows(executor, 'FROM system::tables MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::views MAP { id, namespace_id, name, kind }'),\n queryRows(executor, 'FROM system::virtual_tables MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::ringbuffers MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::columns MAP { source_id, source_type, name, type, position }'),\n queryRows(executor, 'FROM system::virtual_table_columns MAP { vtable_id, name, type, position }'),\n queryRows(executor, 'FROM system::procedures MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::handlers MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::enums MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::events MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::dictionaries MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::migrations MAP { name }'),\n ]);\n\n // Build namespace map: id → name\n const nsMap = new Map<number, string>();\n for (const row of nsRows) {\n nsMap.set(extractNum(row.id), extractStr(row.name));\n }\n\n // Build column lookup: `${source_type}:${source_id}` → columns\n const columnsBySource = new Map<string, ColumnInfo[]>();\n // First collect with position for sorting\n const rawColumns = new Map<string, { name: string; type: string; position: number }[]>();\n for (const row of colRows) {\n const key = `${extractNum(row.source_type)}:${extractNum(row.source_id)}`;\n if (!rawColumns.has(key)) rawColumns.set(key, []);\n rawColumns.get(key)!.push({\n name: extractStr(row.name),\n type: resolveTypeName(extractNum(row.type)),\n position: extractNum(row.position),\n });\n }\n for (const row of vtableColRows) {\n const key = `${SOURCE_TYPE_VTABLE}:${extractNum(row.vtable_id)}`;\n if (!rawColumns.has(key)) rawColumns.set(key, []);\n rawColumns.get(key)!.push({\n name: extractStr(row.name),\n type: resolveTypeName(extractNum(row.type)),\n position: extractNum(row.position),\n });\n }\n for (const [key, cols] of rawColumns) {\n cols.sort((a, b) => a.position - b.position);\n columnsBySource.set(key, cols.map(c => ({ name: c.name, type: c.type })));\n }\n\n // Build sources grouped by namespace\n const nsSources = new Map<number, SourceInfo[]>();\n\n const addSource = (id: number, nsId: number, name: string, category: SourceInfo['category'], sourceType: number) => {\n if (!nsSources.has(nsId)) nsSources.set(nsId, []);\n const columns = columnsBySource.get(`${sourceType}:${id}`) ?? [];\n nsSources.get(nsId)!.push({ name: extractStr(name), category, columns });\n };\n\n for (const row of tableRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'table', SOURCE_TYPE_TABLE);\n }\n for (const row of viewRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'view', SOURCE_TYPE_VIEW);\n }\n for (const row of vtableRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'vtable', SOURCE_TYPE_VTABLE);\n }\n for (const row of rbRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'ringbuffer', SOURCE_TYPE_RINGBUFFER);\n }\n\n const addLeafSource = (nsId: number, name: string, category: SourceInfo['category']) => {\n if (!nsSources.has(nsId)) nsSources.set(nsId, []);\n nsSources.get(nsId)!.push({ name: extractStr(name), category, columns: [] });\n };\n\n for (const row of procRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'procedure');\n }\n for (const row of handlerRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'handler');\n }\n for (const row of enumRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'enum');\n }\n for (const row of eventRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'event');\n }\n for (const row of dictRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'dictionary');\n }\n\n // Migrations have no namespace_id — assign to \"system\" namespace\n let systemNsId: number | undefined;\n for (const [id, name] of nsMap) {\n if (name === 'system') { systemNsId = id; break; }\n }\n if (systemNsId !== undefined) {\n for (const row of migrationRows) {\n addLeafSource(systemNsId, extractStr(row.name), 'migration');\n }\n }\n\n // Build final namespace list (include all namespaces, even empty ones)\n const result: NamespaceInfo[] = [];\n for (const [nsId, nsName] of nsMap) {\n const sources = nsSources.get(nsId) ?? [];\n sources.sort((a, b) => a.name.localeCompare(b.name));\n result.push({ name: nsName, sources });\n }\n result.sort((a, b) => a.name.localeCompare(b.name));\n\n setNamespaces(result);\n } catch {\n setNamespaces([]);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n loadSchema();\n }, [executor]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const toolbar = (\n <div className=\"rdb-schema__toolbar\">\n <button\n className=\"rdb-schema__reload-btn\"\n onClick={loadSchema}\n disabled={loading}\n >\n {loading ? '[loading...]' : '[reload]'}\n </button>\n </div>\n );\n\n if (loading) {\n return (\n <>\n {toolbar}\n <div className=\"rdb-history__empty\">$ loading schema...</div>\n </>\n );\n }\n\n if (namespaces.length === 0) {\n return (\n <>\n {toolbar}\n <div className=\"rdb-history__empty\">$ no tables found</div>\n </>\n );\n }\n\n return (\n <>\n {toolbar}\n <div>\n {namespaces.map(ns => (\n <SchemaNode key={ns.name} label={ns.name} labelClass=\"rdb-schema__node-label--namespace\">\n {CATEGORY_GROUPS.map(({ key, label }) => {\n const sources = ns.sources.filter(s => s.category === key);\n if (sources.length === 0) return null;\n return (\n <SchemaNode key={key} label={`${label} (${sources.length})`} labelClass=\"rdb-schema__node-label--category\">\n {sources.map(source => (\n <SchemaNode key={source.name} label={source.name}>\n {source.columns.length > 0\n ? source.columns.map(col => (\n <SchemaNode\n key={col.name}\n label={col.name}\n labelClass=\"rdb-schema__node-label--column\"\n type={col.type}\n typeClass={typeColorClass(col.type)}\n />\n ))\n : undefined}\n </SchemaNode>\n ))}\n </SchemaNode>\n );\n })}\n </SchemaNode>\n ))}\n </div>\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, type ReactNode } from 'react';\n\ninterface SchemaNodeProps {\n label: string;\n labelClass?: string;\n type?: string;\n typeClass?: string;\n children?: ReactNode;\n}\n\nexport function SchemaNode({ label, labelClass, type, typeClass, children }: SchemaNodeProps) {\n const [expanded, setExpanded] = useState(false);\n const hasChildren = !!children;\n\n return (\n <div className=\"rdb-schema__node\">\n <div\n className=\"rdb-schema__node-header\"\n onClick={() => hasChildren && setExpanded(!expanded)}\n >\n {hasChildren && (\n <span className=\"rdb-schema__node-toggle\">\n {expanded ? '▾' : '▸'}\n </span>\n )}\n {!hasChildren && <span className=\"rdb-schema__node-toggle\" />}\n {type && <span className={typeClass ? \"rdb-schema__node-type \" + typeClass : \"rdb-schema__node-type\"}>{type}</span>}\n <span className={`rdb-schema__node-label${labelClass ? ` ${labelClass}` : ''}`}>\n {label}\n </span>\n </div>\n {expanded && hasChildren && (\n <div className=\"rdb-schema__node-children\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState } from 'react';\nimport type { HistoryEntry } from '../../types';\nimport { HistoryEntryRow } from './HistoryEntry';\n\ninterface HistoryPanelProps {\n entries: HistoryEntry[];\n onSelect: (query: string) => void;\n}\n\nexport function HistoryPanel({ entries, onSelect }: HistoryPanelProps) {\n const [search, setSearch] = useState('');\n\n const filtered = search\n ? entries.filter(e => e.query.toLowerCase().includes(search.toLowerCase()))\n : entries;\n\n return (\n <div className=\"rdb-history\">\n <div className=\"rdb-history__search\">\n <input\n type=\"text\"\n className=\"rdb-history__search-input\"\n placeholder=\"search history...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <div className=\"rdb-history__list\">\n {filtered.length === 0 ? (\n <div className=\"rdb-history__empty\">\n {entries.length === 0 ? '$ no history yet' : '$ no matching queries'}\n </div>\n ) : (\n filtered.map((entry) => (\n <HistoryEntryRow key={entry.id} entry={entry} onClick={onSelect} />\n ))\n )}\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { HistoryEntry as HistoryEntryType } from '../../types';\n\ninterface HistoryEntryProps {\n entry: HistoryEntryType;\n onClick: (query: string) => void;\n}\n\nfunction formatTimestamp(ts: number): string {\n const d = new Date(ts);\n const hh = String(d.getHours()).padStart(2, '0');\n const mm = String(d.getMinutes()).padStart(2, '0');\n const ss = String(d.getSeconds()).padStart(2, '0');\n return `${hh}:${mm}:${ss}`;\n}\n\nexport function HistoryEntryRow({ entry, onClick }: HistoryEntryProps) {\n return (\n <div className=\"rdb-history__entry\" onClick={() => onClick(entry.query)}>\n <div className=\"rdb-history__entry-meta\">\n <span>{formatTimestamp(entry.timestamp)}</span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span>{entry.executionTime}ms</span>\n <span\n className={`rdb-history__entry-indicator ${\n entry.success\n ? 'rdb-history__entry-indicator--success'\n : 'rdb-history__entry-indicator--error'\n }`}\n />\n </div>\n </div>\n <div className=\"rdb-history__entry-query\">{entry.query}</div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useRef } from 'react';\n\nexport type ConnectionMode = 'wasm' | 'websocket';\nexport type ConnectionStatus = 'connected' | 'connecting' | 'disconnected' | 'error';\n\nexport interface ConnectionPanelProps {\n mode: ConnectionMode;\n wsUrl: string;\n status: ConnectionStatus;\n error: string | null;\n onModeChange: (mode: ConnectionMode) => void;\n onUrlChange: (url: string) => void;\n onConnect: () => void;\n onDisconnect: () => void;\n onClose: () => void;\n}\n\nexport function ConnectionPanel({\n mode,\n wsUrl,\n status,\n error,\n onModeChange,\n onUrlChange,\n onConnect,\n onDisconnect,\n onClose,\n}: ConnectionPanelProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n onClose();\n }\n }\n function handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') onClose();\n }\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [onClose]);\n\n const isWsConnected = mode === 'websocket' && status === 'connected';\n const isWsConnecting = mode === 'websocket' && status === 'connecting';\n\n return (\n <div className=\"rdb-connection-panel\" ref={panelRef}>\n <div className=\"rdb-connection-panel__header\">connection</div>\n\n <div className=\"rdb-connection-panel__modes\">\n <button\n className={`rdb-connection-panel__mode-btn ${mode === 'wasm' ? 'rdb-connection-panel__mode-btn--active' : ''}`}\n onClick={() => onModeChange('wasm')}\n >\n [wasm (in-browser)]\n </button>\n <button\n className={`rdb-connection-panel__mode-btn ${mode === 'websocket' ? 'rdb-connection-panel__mode-btn--active' : ''}`}\n onClick={() => onModeChange('websocket')}\n >\n [websocket (remote)]\n </button>\n </div>\n\n {mode === 'websocket' && (\n <>\n <div className=\"rdb-connection-panel__url-row\">\n <span className=\"rdb-connection-panel__url-label\">url:</span>\n <input\n className=\"rdb-connection-panel__url-input\"\n type=\"text\"\n value={wsUrl}\n onChange={(e) => onUrlChange(e.target.value)}\n placeholder=\"ws://localhost:8090\"\n disabled={isWsConnected || isWsConnecting}\n />\n </div>\n <div className=\"rdb-connection-panel__actions\">\n {isWsConnected ? (\n <button className=\"rdb-connection-panel__action-btn\" onClick={onDisconnect}>\n [disconnect]\n </button>\n ) : (\n <button\n className=\"rdb-connection-panel__action-btn\"\n onClick={onConnect}\n disabled={isWsConnecting || !wsUrl.trim()}\n >\n {isWsConnecting ? '[connecting...]' : '[connect]'}\n </button>\n )}\n </div>\n </>\n )}\n\n <div className=\"rdb-connection-panel__status\">\n <span className={`rdb-connection-panel__status-dot rdb-connection-panel__status-dot--${status}`}>●</span>\n <span>{status}</span>\n </div>\n\n {error && (\n <div className=\"rdb-connection-panel__error\">{error}</div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport { registerRqlLanguage } from '../monaco/register';\nimport { SnippetResults } from './SnippetResults';\nimport type { Executor, ExecutionResult } from '../types';\nimport type { RdbTheme } from './Console';\n\nexport interface SnippetProps {\n executor: Executor;\n initialCode: string;\n title?: string;\n description?: string;\n className?: string;\n theme?: RdbTheme;\n}\n\ninterface QueryResult {\n data: Record<string, unknown>[];\n error?: string;\n}\n\nexport function Snippet({\n executor,\n initialCode,\n title = 'reifydb playground',\n description,\n className,\n theme = 'light',\n}: SnippetProps) {\n const [code, setCode] = useState(initialCode);\n const [result, setResult] = useState<QueryResult | null>(null);\n const [isExecuting, setIsExecuting] = useState(false);\n const [copied, setCopied] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const handleRunRef = useRef<() => void>(() => {});\n\n const lineCount = code.split('\\n').length;\n const editorHeight = Math.max(lineCount * 20 + 16, 80);\n\n useEffect(() => {\n if (!isFullscreen) return;\n\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsFullscreen(false);\n };\n document.addEventListener('keydown', handleEsc);\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', handleEsc);\n document.body.style.overflow = '';\n };\n }, [isFullscreen]);\n\n const handleRun = useCallback(async () => {\n if (isExecuting) return;\n setResult(null);\n setIsExecuting(true);\n await new Promise(r => setTimeout(r, 0));\n\n try {\n const res: ExecutionResult = await executor.execute(code);\n if (res.success) {\n setResult({ data: res.data ?? [] });\n } else {\n setResult({ data: [], error: res.error });\n }\n } catch (err) {\n setResult({ data: [], error: err instanceof Error ? err.message : String(err) });\n } finally {\n setIsExecuting(false);\n }\n }, [code, executor, isExecuting]);\n\n handleRunRef.current = handleRun;\n\n const handleReset = useCallback(() => {\n setCode(initialCode);\n setResult(null);\n }, [initialCode]);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [code]);\n\n const handleEditorDidMount: OnMount = (editor, monaco) => {\n editorRef.current = editor;\n registerRqlLanguage(monaco);\n\n editor.addAction({\n id: 'run-query',\n label: 'Run Query',\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],\n run: () => {\n handleRunRef.current();\n },\n });\n };\n\n const handleBeforeMount = (monaco: typeof import('monaco-editor')) => {\n registerRqlLanguage(monaco);\n };\n\n const columns = result?.data && result.data.length > 0 ? Object.keys(result.data[0]) : [];\n const maxKeyLength = columns.length > 0 ? Math.max(...columns.map(c => c.length)) : 0;\n\n const content = (\n <div className={`rdb-snippet${isFullscreen ? ' rdb-snippet--fullscreen' : ''}${theme === 'light' ? ' rdb-theme-light' : ''}${className ? ` ${className}` : ''}`}>\n {/* Header */}\n <div className=\"rdb-snippet__header\">\n <div className=\"rdb-snippet__title\">\n <span className=\"rdb-snippet__title-marker\">$</span> {title}\n </div>\n <div className=\"rdb-snippet__actions\">\n <button\n onClick={() => setIsFullscreen(!isFullscreen)}\n className=\"rdb-snippet__action-btn\"\n title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n >\n {isFullscreen ? '[×]' : '[[]]'}\n </button>\n <button\n onClick={handleCopy}\n className=\"rdb-snippet__action-btn\"\n title=\"Copy code\"\n >\n {copied ? '[ok]' : '[cp]'}\n </button>\n <button\n onClick={handleReset}\n className=\"rdb-snippet__action-btn\"\n title=\"Reset code\"\n >\n [&#8634;]\n </button>\n </div>\n </div>\n\n {/* Description */}\n {description && (\n <div className=\"rdb-snippet__description\">\n <p className=\"rdb-snippet__description-text\">\n <span className=\"rdb-snippet__description-marker\">// </span>{description}\n </p>\n </div>\n )}\n\n {/* Editor */}\n <div\n className={isFullscreen ? 'rdb-snippet__editor--fullscreen' : 'rdb-snippet__editor'}\n style={isFullscreen ? undefined : { height: editorHeight }}\n >\n <Editor\n height=\"100%\"\n language=\"rql\"\n theme={theme === 'light' ? 'premium-light' : 'premium-dark'}\n value={code}\n onChange={(value) => setCode(value || '')}\n beforeMount={handleBeforeMount}\n onMount={handleEditorDidMount}\n options={{\n minimap: { enabled: false },\n lineNumbers: 'on',\n glyphMargin: false,\n folding: false,\n lineDecorationsWidth: 16,\n lineNumbersMinChars: 3,\n scrollBeyondLastLine: false,\n scrollbar: {\n vertical: isFullscreen ? 'auto' : 'hidden',\n horizontal: isFullscreen ? 'auto' : 'hidden',\n },\n overviewRulerLanes: 0,\n hideCursorInOverviewRuler: true,\n overviewRulerBorder: false,\n renderLineHighlight: 'none',\n fontFamily: \"'IBM Plex Mono', monospace\",\n fontSize: 13,\n padding: { top: 8, bottom: 8 },\n wordWrap: 'on',\n automaticLayout: true,\n }}\n />\n </div>\n\n {/* Toolbar */}\n <div className=\"rdb-snippet__toolbar\">\n <span className=\"rdb-snippet__hint\">\n {isExecuting ? '$ running...' : '$ ctrl+enter to run'}\n </span>\n <button\n onClick={handleRun}\n disabled={isExecuting}\n className={`rdb-snippet__run-btn${isExecuting ? ' rdb-snippet__run-btn--loading' : ''}`}\n >\n {isExecuting ? '[running...]' : '[run]'}\n </button>\n </div>\n\n {/* Results */}\n {result && (\n <div className={`rdb-snippet__results${isFullscreen ? ' rdb-snippet__results--fullscreen' : ''}`}>\n <div className=\"rdb-snippet__results-header\">\n <span>{result.error ? '--- error ---' : '--- output ---'}</span>\n {result.data && !result.error && (\n <span>({result.data.length} row{result.data.length !== 1 ? 's' : ''})</span>\n )}\n </div>\n\n {result.error && (\n <div className=\"rdb-snippet__error\">\n <pre className=\"rdb-snippet__error-text\">ERR: {result.error}</pre>\n </div>\n )}\n\n {result.data && result.data.length > 0 && !result.error && (\n <SnippetResults data={result.data} columns={columns} maxKeyLength={maxKeyLength} />\n )}\n\n {result.data && result.data.length === 0 && !result.error && (\n <div className=\"rdb-snippet__empty\">$ 0 rows returned.</div>\n )}\n </div>\n )}\n </div>\n );\n\n if (isFullscreen) {\n return (\n <div className=\"rdb-snippet__overlay\">\n <div className=\"rdb-snippet__overlay-inner\">\n {content}\n </div>\n </div>\n );\n }\n\n return content;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { formatValue, getValueStyle } from '../format/value';\n\ninterface SnippetResultsProps {\n data: Record<string, unknown>[];\n columns: string[];\n maxKeyLength: number;\n}\n\nexport function SnippetResults({ data, columns, maxKeyLength }: SnippetResultsProps) {\n return (\n <div className=\"rdb-snippet__rows\">\n {data.map((row, i) => (\n <div key={i} className=\"rdb-snippet__row\">\n <div className=\"rdb-snippet__row-label\">-- row {i + 1} --</div>\n {columns.map((col) => {\n const vs = getValueStyle(row[col]);\n return (\n <div key={col} className=\"rdb-snippet__field\">\n <span\n className=\"rdb-snippet__field-key\"\n style={{ minWidth: `${maxKeyLength}ch` }}\n >{` ${col.padEnd(maxKeyLength)}`}</span>\n <span className=\"rdb-snippet__field-eq\">= </span>\n <span\n className={`rdb-snippet__field-value${vs.italic ? ' rdb-snippet__field-value--italic' : ''}`}\n style={vs.color ? { color: vs.color } : undefined}\n >{formatValue(row[col])}</span>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult, Diagnostic } from '../types';\n\nexport interface WasmDB {\n admin(rql: string): Promise<unknown> | unknown;\n}\n\nexport class WasmExecutor implements Executor {\n private db: WasmDB;\n\n constructor(db: WasmDB) {\n this.db = db;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n const query = trimmed.endsWith(';') ? trimmed.slice(0, -1).trim() : trimmed;\n\n if (!query) {\n return { success: true, data: [], executionTime: 0 };\n }\n\n const startTime = performance.now();\n try {\n const results = await this.db.admin(query);\n const executionTime = Math.round(performance.now() - startTime);\n return {\n success: true,\n data: Array.isArray(results) ? results : [],\n executionTime,\n };\n } catch (error) {\n const executionTime = Math.round(performance.now() - startTime);\n let diagnostic: Diagnostic | undefined;\n if (error && typeof error === 'object' && 'code' in error) {\n const e = error as Record<string, unknown>;\n diagnostic = {\n code: String(e.code),\n message: String(e.message ?? ''),\n statement: e.statement as string | undefined,\n fragment: e.fragment as Diagnostic['fragment'],\n label: e.label as string | undefined,\n help: e.help as string | undefined,\n notes: Array.isArray(e.notes) ? e.notes.map(String) : [],\n cause: e.cause as Diagnostic | undefined,\n };\n }\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n diagnostic,\n executionTime,\n };\n }\n }\n\n}\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","jsx","jsx","useRef","jsx","useRef","jsx","jsxs","jsx","jsxs","jsx","jsx","useCallback","jsx","jsxs","useCallback","jsx","jsxs","useEffect","useState","useState","jsx","jsxs","Fragment","jsx","jsxs","useState","useEffect","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","useRef","Fragment","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","useCallback","useState","useCallback","useEffect","useRef","Editor","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","useCallback","Editor"]}
1
+ {"version":3,"sources":["../src/components/Console.tsx","../src/executor/ws-executor.ts","../src/state/use-console-store.tsx","../src/state/console-store.ts","../src/state/history.ts","../src/components/layout/SplitPane.tsx","../src/components/layout/TabBar.tsx","../src/components/editor/QueryEditor.tsx","../src/monaco/rql-language.ts","../src/monaco/themes.ts","../src/monaco/register.ts","../src/components/editor/EditorToolbar.tsx","../src/format/value.ts","../src/components/results/ResultsTable.tsx","../src/components/results/ResultsError.tsx","../src/components/results/ResultsEmpty.tsx","../src/components/results/ResultsStatusBar.tsx","../src/components/results/ResultsPanel.tsx","../src/components/schema/SchemaBrowser.tsx","../src/components/schema/SchemaNode.tsx","../src/components/history/HistoryPanel.tsx","../src/components/history/HistoryEntry.tsx","../src/components/connection/ConnectionPanel.tsx","../src/components/Snippet.tsx","../src/components/SnippetResults.tsx","../src/executor/wasm-executor.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Client } from '@reifydb/client';\nimport type { Executor } from '../types';\nimport { WsExecutor, type WsClient } from '../executor/ws-executor';\nimport { ConsoleProvider, useConsoleStore } from '../state/use-console-store';\nimport { loadHistory, saveHistory } from '../state/history';\nimport { SplitPane } from './layout/SplitPane';\nimport { TabBar } from './layout/TabBar';\nimport { QueryEditor } from './editor/QueryEditor';\nimport { EditorToolbar } from './editor/EditorToolbar';\nimport { ResultsPanel } from './results/ResultsPanel';\nimport { SchemaBrowser } from './schema/SchemaBrowser';\nimport { HistoryPanel } from './history/HistoryPanel';\nimport { ConnectionPanel } from './connection/ConnectionPanel';\nimport type { ConnectionMode, ConnectionStatus } from './connection/ConnectionPanel';\n\nexport type ConnectionConfig =\n | { mode: 'wasm' }\n | { mode: 'websocket'; url: string };\n\nexport type RdbTheme = 'light' | 'dark';\n\nexport interface ConsoleProps {\n executor: Executor;\n initialCode?: string;\n historyKey?: string;\n connection?: ConnectionConfig;\n theme?: RdbTheme;\n}\n\nconst TABS = [\n { id: 'results', label: 'Results' },\n { id: 'history', label: 'History' },\n { id: 'schema', label: 'Schema' },\n];\n\nconst WS_URL_STORAGE_KEY = 'rdb-console-ws-url';\n\nfunction ConsoleInner({ executor, historyKey, connection, theme = 'light' }: { executor: Executor; historyKey?: string; connection?: ConnectionConfig; theme?: RdbTheme }) {\n const { state, dispatch } = useConsoleStore();\n const connectionLocked = connection != null;\n const lockedWsUrl = connection?.mode === 'websocket' ? connection.url : null;\n\n const [connectionMode, setConnectionMode] = useState<ConnectionMode>(\n connection ? connection.mode : 'wasm',\n );\n const [wsUrl, setWsUrl] = useState(() => {\n if (connection?.mode === 'websocket') return connection.url;\n try {\n return localStorage.getItem(WS_URL_STORAGE_KEY) || 'ws://localhost:8090';\n } catch {\n return 'ws://localhost:8090';\n }\n });\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>(\n connection?.mode === 'websocket' ? 'connecting' : 'connected',\n );\n const [connectionError, setConnectionError] = useState<string | null>(null);\n const [activeExecutor, setActiveExecutor] = useState<Executor>(executor);\n const [showConnectionPanel, setShowConnectionPanel] = useState(false);\n const wsClientRef = useRef<{ disconnect(): void } | null>(null);\n const reconnectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Persist wsUrl to localStorage (only when not locked)\n useEffect(() => {\n if (connectionLocked) return;\n try {\n localStorage.setItem(WS_URL_STORAGE_KEY, wsUrl);\n } catch {\n // ignore\n }\n }, [wsUrl, connectionLocked]);\n\n // Keep activeExecutor in sync if prop changes while in wasm mode\n useEffect(() => {\n if (connectionMode === 'wasm') {\n setActiveExecutor(executor);\n }\n }, [executor, connectionMode]);\n\n // Auto-connect for locked websocket mode\n useEffect(() => {\n if (!lockedWsUrl) return;\n const url = lockedWsUrl;\n\n let cancelled = false;\n let backoff = 1000;\n const maxBackoff = 30000;\n\n async function connect() {\n if (cancelled) return;\n setConnectionStatus('connecting');\n setConnectionError(null);\n\n try {\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n\n const client = await Client.connect_ws(url, { timeoutMs: 30_000 });\n if (cancelled) {\n client.disconnect();\n return;\n }\n wsClientRef.current = client;\n const wsExecutor = new WsExecutor(client as unknown as WsClient);\n setActiveExecutor(wsExecutor);\n setConnectionStatus('connected');\n backoff = 1000; // reset backoff on success\n } catch (err) {\n if (cancelled) return;\n setConnectionStatus('error');\n setConnectionError(err instanceof Error ? err.message : String(err));\n // Auto-reconnect with backoff\n reconnectTimerRef.current = setTimeout(() => {\n connect();\n }, backoff);\n backoff = Math.min(backoff * 2, maxBackoff);\n }\n }\n\n connect();\n\n return () => {\n cancelled = true;\n if (reconnectTimerRef.current) {\n clearTimeout(reconnectTimerRef.current);\n reconnectTimerRef.current = null;\n }\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n };\n }, [lockedWsUrl]);\n\n // Load history on mount\n useEffect(() => {\n const entries = loadHistory(historyKey);\n if (entries.length > 0) {\n dispatch({ type: 'LOAD_HISTORY', entries });\n }\n }, [historyKey, dispatch]);\n\n // Save history on change\n useEffect(() => {\n saveHistory(state.history, historyKey);\n }, [state.history, historyKey]);\n\n const handleConnect = useCallback(async () => {\n if (!wsUrl.trim()) return;\n setConnectionStatus('connecting');\n setConnectionError(null);\n\n try {\n // Disconnect previous WS client if any\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n\n const client = await Client.connect_ws(wsUrl, { timeoutMs: 30_000 });\n wsClientRef.current = client;\n const wsExecutor = new WsExecutor(client as unknown as WsClient);\n setActiveExecutor(wsExecutor);\n setConnectionStatus('connected');\n } catch (err) {\n setConnectionStatus('error');\n setConnectionError(err instanceof Error ? err.message : String(err));\n }\n }, [wsUrl]);\n\n const handleDisconnect = useCallback(() => {\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n setActiveExecutor(executor);\n setConnectionMode('wasm');\n setConnectionStatus('connected');\n setConnectionError(null);\n }, [executor]);\n\n const handleModeChange = useCallback((mode: ConnectionMode) => {\n if (mode === 'wasm' && connectionMode === 'websocket') {\n // Switching back to wasm — disconnect if connected\n if (wsClientRef.current) {\n wsClientRef.current.disconnect();\n wsClientRef.current = null;\n }\n setActiveExecutor(executor);\n setConnectionStatus('connected');\n setConnectionError(null);\n } else if (mode === 'websocket' && connectionMode === 'wasm') {\n // Switching to websocket mode — not connected yet\n setConnectionStatus('disconnected');\n setConnectionError(null);\n }\n setConnectionMode(mode);\n }, [connectionMode, executor]);\n\n const connectionLabel = connectionMode === 'wasm' ? 'wasm' : wsUrl;\n\n const handleRun = useCallback(async () => {\n if (state.isExecuting || !state.code.trim()) return;\n dispatch({ type: 'EXECUTE_START' });\n\n try {\n const result = await activeExecutor.execute(state.code);\n if (result.success) {\n dispatch({ type: 'EXECUTE_SUCCESS', result, query: state.code });\n } else {\n dispatch({ type: 'EXECUTE_ERROR', result, query: state.code });\n }\n } catch (err) {\n dispatch({\n type: 'EXECUTE_ERROR',\n result: {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n executionTime: 0,\n },\n query: state.code,\n });\n }\n\n }, [state.isExecuting, state.code, activeExecutor, dispatch]);\n\n const handleClear = useCallback(() => {\n dispatch({ type: 'CLEAR_RESULTS' });\n }, [dispatch]);\n\n const handleSelectHistory = useCallback((query: string) => {\n dispatch({ type: 'LOAD_QUERY', code: query });\n }, [dispatch]);\n\n const editorPane = (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <div style={{ position: 'relative' }}>\n <EditorToolbar\n onRun={handleRun}\n onClear={handleClear}\n isExecuting={state.isExecuting}\n connectionLabel={connectionLabel}\n connectionStatus={connectionStatus}\n connectionLocked={connectionLocked}\n onToggleConnectionPanel={() => setShowConnectionPanel((v) => !v)}\n />\n {!connectionLocked && showConnectionPanel && (\n <ConnectionPanel\n mode={connectionMode}\n wsUrl={wsUrl}\n status={connectionStatus}\n error={connectionError}\n onModeChange={handleModeChange}\n onUrlChange={setWsUrl}\n onConnect={handleConnect}\n onDisconnect={handleDisconnect}\n onClose={() => setShowConnectionPanel(false)}\n />\n )}\n </div>\n <div style={{ flex: 1, minHeight: 0 }}>\n <QueryEditor\n code={state.code}\n onChange={(code) => dispatch({ type: 'SET_CODE', code })}\n onRun={handleRun}\n theme={theme}\n />\n </div>\n </div>\n );\n\n const bottomPane = (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n <TabBar\n activeTab={state.activeTab}\n tabs={TABS}\n onTabChange={(tab) => dispatch({ type: 'SET_TAB', tab: tab as 'results' | 'history' | 'schema' })}\n />\n <div style={{ flex: 1, overflow: 'auto', minHeight: 0 }}>\n {state.activeTab === 'results' ? (\n <ResultsPanel result={state.result} />\n ) : state.activeTab === 'history' ? (\n <HistoryPanel entries={state.history} onSelect={handleSelectHistory} />\n ) : (\n <SchemaBrowser executor={activeExecutor} />\n )}\n </div>\n </div>\n );\n\n return (\n <div className={`rdb-console${theme === 'light' ? ' rdb-theme-light' : ''}`}>\n <div className=\"rdb-console__main\">\n <SplitPane top={editorPane} bottom={bottomPane} initialSplit={45} />\n </div>\n </div>\n );\n}\n\nexport function Console({ executor, initialCode, historyKey, connection, theme }: ConsoleProps) {\n return (\n <ConsoleProvider initialCode={initialCode}>\n <ConsoleInner executor={executor} historyKey={historyKey} connection={connection} theme={theme} />\n </ConsoleProvider>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult, Diagnostic } from '../types';\nimport { ReifyError } from '@reifydb/core';\n\nexport interface WsClient {\n admin<const S extends readonly unknown[]>(\n statements: string | string[],\n params: unknown,\n schemas: S\n ): Promise<unknown[][]>;\n}\n\nfunction normalizeFragment(raw: unknown): Diagnostic['fragment'] {\n if (!raw || typeof raw !== 'object') return undefined;\n const obj = raw as Record<string, unknown>;\n if ('Statement' in obj && obj.Statement && typeof obj.Statement === 'object') {\n const s = obj.Statement as Record<string, unknown>;\n return { text: String(s.text ?? ''), line: s.line as number, column: s.column as number };\n }\n if ('Internal' in obj && obj.Internal && typeof obj.Internal === 'object') {\n const s = obj.Internal as Record<string, unknown>;\n return { text: String(s.text ?? '') };\n }\n if ('text' in obj) {\n return { text: String(obj.text), line: obj.line as number | undefined, column: obj.column as number | undefined };\n }\n return undefined;\n}\n\nfunction toDiagnostic(error: ReifyError): Diagnostic {\n return {\n code: error.code,\n statement: error.statement,\n message: error.message.replace(/^\\[.*?\\]\\s*/, ''),\n fragment: normalizeFragment(error.fragment),\n label: error.label,\n help: error.help,\n notes: error.notes,\n cause: error.cause,\n };\n}\n\nexport class WsExecutor implements Executor {\n private client: WsClient;\n\n constructor(client: WsClient) {\n this.client = client;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n const query = trimmed.endsWith(';') ? trimmed.slice(0, -1).trim() : trimmed;\n\n if (!query) {\n return { success: true, data: [], executionTime: 0 };\n }\n\n const startTime = performance.now();\n try {\n const frames = await this.client.admin(query, null, []);\n const executionTime = Math.round(performance.now() - startTime);\n const results = frames[0] ?? [];\n\n const data = results.map((row: unknown) => {\n if (row && typeof row === 'object') {\n const plainRow: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n plainRow[key] = value;\n }\n return plainRow;\n }\n return row as Record<string, unknown>;\n });\n\n return { success: true, data, executionTime };\n } catch (error) {\n const executionTime = Math.round(performance.now() - startTime);\n if (error instanceof ReifyError) {\n return { success: false, error: error.message, diagnostic: toDiagnostic(error), executionTime };\n }\n const errorMessage = error instanceof Error ? error.message : String(error);\n return { success: false, error: errorMessage, executionTime };\n }\n }\n\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { createContext, useContext, useReducer, type Dispatch, type ReactNode } from 'react';\nimport { consoleReducer, initialConsoleState, type ConsoleState, type ConsoleAction } from './console-store';\n\ninterface ConsoleContextValue {\n state: ConsoleState;\n dispatch: Dispatch<ConsoleAction>;\n}\n\nconst ConsoleContext = createContext<ConsoleContextValue | null>(null);\n\ninterface ConsoleProviderProps {\n children: ReactNode;\n initialCode?: string;\n}\n\nexport function ConsoleProvider({ children, initialCode }: ConsoleProviderProps) {\n const [state, dispatch] = useReducer(consoleReducer, {\n ...initialConsoleState,\n code: initialCode ?? '',\n });\n\n return (\n <ConsoleContext.Provider value={{ state, dispatch }}>\n {children}\n </ConsoleContext.Provider>\n );\n}\n\nexport function useConsoleStore(): ConsoleContextValue {\n const ctx = useContext(ConsoleContext);\n if (!ctx) {\n throw new Error('useConsoleStore must be used within a ConsoleProvider');\n }\n return ctx;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { ExecutionResult, HistoryEntry } from '../types';\n\nexport interface ConsoleState {\n code: string;\n isExecuting: boolean;\n result: ExecutionResult | null;\n history: HistoryEntry[];\n activeTab: 'results' | 'history' | 'schema';\n}\n\nexport type ConsoleAction =\n | { type: 'SET_CODE'; code: string }\n | { type: 'EXECUTE_START' }\n | { type: 'EXECUTE_SUCCESS'; result: ExecutionResult; query: string }\n | { type: 'EXECUTE_ERROR'; result: ExecutionResult; query: string }\n | { type: 'CLEAR_RESULTS' }\n | { type: 'SET_TAB'; tab: 'results' | 'history' | 'schema' }\n | { type: 'LOAD_HISTORY'; entries: HistoryEntry[] }\n | { type: 'CLEAR_HISTORY' }\n | { type: 'LOAD_QUERY'; code: string };\n\nlet nextHistoryId = 1;\n\nexport function consoleReducer(state: ConsoleState, action: ConsoleAction): ConsoleState {\n switch (action.type) {\n case 'SET_CODE':\n return { ...state, code: action.code };\n\n case 'EXECUTE_START':\n return { ...state, isExecuting: true, result: null };\n\n case 'EXECUTE_SUCCESS': {\n const entry: HistoryEntry = {\n id: String(nextHistoryId++),\n query: action.query,\n timestamp: Date.now(),\n success: true,\n rowCount: action.result.data?.length,\n executionTime: action.result.executionTime,\n };\n return {\n ...state,\n isExecuting: false,\n result: action.result,\n history: [entry, ...state.history],\n activeTab: 'results',\n };\n }\n\n case 'EXECUTE_ERROR': {\n const entry: HistoryEntry = {\n id: String(nextHistoryId++),\n query: action.query,\n timestamp: Date.now(),\n success: false,\n executionTime: action.result.executionTime,\n };\n return {\n ...state,\n isExecuting: false,\n result: action.result,\n history: [entry, ...state.history],\n activeTab: 'results',\n };\n }\n\n case 'CLEAR_RESULTS':\n return { ...state, result: null };\n\n case 'SET_TAB':\n return { ...state, activeTab: action.tab };\n\n case 'LOAD_HISTORY':\n return { ...state, history: action.entries };\n\n case 'CLEAR_HISTORY':\n return { ...state, history: [] };\n\n case 'LOAD_QUERY':\n return { ...state, code: action.code, activeTab: 'results' };\n\n default:\n return state;\n }\n}\n\nexport const initialConsoleState: ConsoleState = {\n code: '',\n isExecuting: false,\n result: null,\n history: [],\n activeTab: 'results',\n};\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { HistoryEntry } from '../types';\n\nconst DEFAULT_KEY = 'reifydb-console-history';\nconst MAX_ENTRIES = 500;\n\nexport function loadHistory(key: string = DEFAULT_KEY): HistoryEntry[] {\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return [];\n const entries = JSON.parse(raw);\n return Array.isArray(entries) ? entries : [];\n } catch {\n return [];\n }\n}\n\nexport function saveHistory(entries: HistoryEntry[], key: string = DEFAULT_KEY): void {\n try {\n const trimmed = entries.slice(0, MAX_ENTRIES);\n localStorage.setItem(key, JSON.stringify(trimmed));\n } catch {\n // localStorage may be unavailable\n }\n}\n\nexport function clearHistory(key: string = DEFAULT_KEY): void {\n try {\n localStorage.removeItem(key);\n } catch {\n // localStorage may be unavailable\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useRef, useEffect, type ReactNode } from 'react';\n\ninterface SplitPaneProps {\n top: ReactNode;\n bottom: ReactNode;\n initialSplit?: number; // percentage for top pane, default 50\n}\n\nexport function SplitPane({ top, bottom, initialSplit = 50 }: SplitPaneProps) {\n const [split, setSplit] = useState(initialSplit);\n const containerRef = useRef<HTMLDivElement>(null);\n const dragging = useRef(false);\n\n const onMouseDown = useCallback(() => {\n dragging.current = true;\n document.body.style.cursor = 'row-resize';\n document.body.style.userSelect = 'none';\n }, []);\n\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n if (!dragging.current || !containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const pct = ((e.clientY - rect.top) / rect.height) * 100;\n setSplit(Math.min(Math.max(pct, 15), 85));\n };\n\n const onMouseUp = () => {\n if (dragging.current) {\n dragging.current = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n }, []);\n\n return (\n <div className=\"rdb-split\" ref={containerRef}>\n <div className=\"rdb-split__top\" style={{ height: `${split}%` }}>\n {top}\n </div>\n <div className=\"rdb-split__handle\" onMouseDown={onMouseDown} />\n <div className=\"rdb-split__bottom\">\n {bottom}\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\ninterface TabBarProps {\n activeTab: string;\n tabs: { id: string; label: string }[];\n onTabChange: (id: string) => void;\n}\n\nexport function TabBar({ activeTab, tabs, onTabChange }: TabBarProps) {\n return (\n <div className=\"rdb-tabs\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={`rdb-tabs__tab${activeTab === tab.id ? ' rdb-tabs__tab--active' : ''}`}\n onClick={() => onTabChange(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useRef } from 'react';\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport { registerRqlLanguage } from '../../monaco/register';\n\ninterface QueryEditorProps {\n code: string;\n onChange: (code: string) => void;\n onRun: () => void;\n theme?: 'light' | 'dark';\n}\n\nexport function QueryEditor({ code, onChange, onRun, theme = 'light' }: QueryEditorProps) {\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const onRunRef = useRef(onRun);\n onRunRef.current = onRun;\n\n const handleMount: OnMount = (editor, monaco) => {\n editorRef.current = editor;\n registerRqlLanguage(monaco);\n\n editor.addAction({\n id: 'run-query',\n label: 'Run Query',\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],\n run: () => {\n onRunRef.current();\n },\n });\n };\n\n const handleBeforeMount = (monaco: typeof import('monaco-editor')) => {\n registerRqlLanguage(monaco);\n };\n\n return (\n <Editor\n height=\"100%\"\n language=\"rql\"\n theme={theme === 'light' ? 'premium-light' : 'premium-dark'}\n value={code}\n onChange={(value) => onChange(value || '')}\n beforeMount={handleBeforeMount}\n onMount={handleMount}\n options={{\n minimap: { enabled: false },\n lineNumbers: 'on',\n glyphMargin: false,\n folding: true,\n lineDecorationsWidth: 16,\n lineNumbersMinChars: 3,\n scrollBeyondLastLine: false,\n scrollbar: { vertical: 'auto', horizontal: 'auto' },\n overviewRulerLanes: 0,\n hideCursorInOverviewRuler: true,\n overviewRulerBorder: false,\n renderLineHighlight: 'line',\n fontFamily: \"'IBM Plex Mono', monospace\",\n fontSize: 13,\n padding: { top: 8, bottom: 8 },\n wordWrap: 'on',\n automaticLayout: true,\n }}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { languages } from 'monaco-editor';\n\nconst KEYWORDS = [\n // Query transforms\n 'map', 'extend', 'by', 'from', 'where', 'aggregate', 'having',\n 'sort', 'distinct', 'take', 'offset',\n\n // Joins & set operations\n 'left', 'inner', 'natural', 'join', 'on', 'using', 'intersect', 'except',\n\n // DML\n 'insert', 'into', 'update', 'set', 'delete',\n\n // Control flow\n 'let', 'if', 'else', 'end', 'loop', 'while', 'break', 'continue', 'return',\n\n // Functions & casting\n 'fun', 'call', 'apply', 'cast',\n\n // DDL & schema commands\n 'describe', 'show', 'create', 'alter', 'drop', 'filter', 'gate', 'flow', 'window',\n\n // Operators & predicates\n 'in', 'between', 'like', 'is', 'with',\n\n // Object types\n 'namespace', 'sequence', 'series', 'subscription', 'table', 'ringbuffer',\n 'column', 'policy', 'property', 'view', 'deferred', 'transactional',\n\n // Index & constraints\n 'index', 'unique', 'primary', 'key', 'asc', 'desc', 'auto', 'increment', 'value',\n\n // Misc operations\n 'exists', 'replace', 'cascade', 'restrict', 'to', 'pause', 'resume',\n 'query', 'rename', 'rownum', 'dictionary', 'for', 'output', 'append',\n 'assert', 'patch',\n\n // Enums & pattern matching\n 'enum', 'match',\n\n // Procedures & events\n 'procedure', 'event', 'handler', 'dispatch', 'tag',\n\n // Testing\n 'test', 'tests', 'run',\n\n // Access control\n 'user', 'role', 'grant', 'revoke', 'password', 'require', 'execute',\n 'access', 'subscribe', 'enable', 'disable',\n\n // System objects\n 'function', 'session', 'feature',\n\n // Migrations\n 'add', 'migration', 'migrate', 'rollback', 'diff', 'version', 'current', 'pending',\n\n // Misc\n 'authentication', 'contains', 'remote', 'error',\n\n // Additional keywords (not in keyword.rs but valid RQL constructs)\n 'derive', 'group', 'union', 'as',\n\n // Word operators\n 'and', 'or', 'not', 'xor',\n];\n\nconst MODULES = ['date', 'math', 'text'];\nconst BUILTIN_FUNCTIONS = ['case'];\nconst LITERALS = ['none', 'true', 'false'];\n\nconst TYPE_KEYWORDS = [\n // Signed integers\n 'int1', 'int2', 'int4', 'int8', 'int16', 'int',\n // Unsigned integers\n 'uint1', 'uint2', 'uint4', 'uint8', 'uint16', 'uint',\n // Floating point\n 'float4', 'float8',\n // Text & binary\n 'utf8', 'blob',\n // Boolean\n 'bool', 'boolean',\n // Numeric\n 'decimal',\n // Temporal\n 'date', 'datetime', 'time', 'duration', 'interval',\n // Identifiers & UUIDs\n 'uuid4', 'uuid7', 'identityid', 'identity_id', 'dictionaryid', 'dictionary_id',\n // Special\n 'any',\n // Container types\n 'Option', 'List', 'Record', 'Tuple',\n // Alias\n 'text',\n];\n\nexport const rqlLanguageDefinition: languages.IMonarchLanguage = {\n defaultToken: '',\n ignoreCase: true,\n\n keywords: [...KEYWORDS, ...MODULES, ...BUILTIN_FUNCTIONS],\n constants: LITERALS,\n typeKeywords: TYPE_KEYWORDS,\n\n operators: ['+', '-', '*', '/', '//', '%', '=', '==', '!=', '->', '=>', '>', '<', '>=', '<=', '~=', '&&', '||', '??'],\n\n tokenizer: {\n root: [\n // Comments\n [/#.*/, 'comment'],\n\n // Namespace separator (must precede named arguments)\n [/::/, 'operator'],\n\n // Named arguments (negative lookahead prevents matching `::`)\n [/(\\w+)\\s*:(?!:)/, 'key'],\n\n // Variable references\n [/\\$[\\w$]+/, 'variable'],\n\n // Identifiers and keywords (case insensitive)\n [\n /[a-zA-Z_][\\w$]*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@constants': 'constant',\n '@typeKeywords': 'type',\n '@default': 'identifier',\n },\n },\n ],\n\n // Whitespace\n { include: '@whitespace' },\n\n // Brackets\n [/[{}()[\\]]/, '@brackets'],\n\n // Numbers with underscores and scientific notation support\n [/[+-]?(?:[\\d_]+(?:\\.[\\d_]+)?|\\.[\\d_]+)(?:[eE][+-]?\\d+)?/, 'number'],\n\n // Strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, { token: 'string.quote', bracket: '@open', next: '@string' }],\n\n // Single-quoted strings\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'/, { token: 'string.quote', bracket: '@open', next: '@singlestring' }],\n\n // Operators — multi-char first for longest match\n [/<<|>>|\\.\\./, 'operator'],\n [/==|!=|->|=>|>=|<=|~=|:=/, 'operator'],\n [/&&|\\|\\||\\?\\?/, 'operator'],\n [/\\/\\//, 'operator'],\n\n // Single-char operators\n [/[+\\-*/%|.=<>!&^?]/, 'operator'],\n\n // Delimiters\n [/[;,]/, 'delimiter'],\n ],\n\n string: [\n [/[^\\\\\"]+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/\"/, { token: 'string.quote', bracket: '@close', next: '@pop' }],\n ],\n\n singlestring: [\n [/[^\\\\']+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/'/, { token: 'string.quote', bracket: '@close', next: '@pop' }],\n ],\n\n whitespace: [\n [/[ \\t\\r\\n]+/, 'white'],\n ],\n },\n};\n\nexport const rqlLanguageConfiguration: languages.LanguageConfiguration = {\n comments: {\n lineComment: '#',\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string'] },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n folding: {\n offSide: true,\n },\n};\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { editor } from 'monaco-editor';\n\nexport const brutalistLightTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '14AD9E', fontStyle: 'bold' },\n { token: 'string', foreground: '16A34A' },\n { token: 'string.quote', foreground: '16A34A' },\n { token: 'number', foreground: 'B91C1C', fontStyle: 'bold' },\n { token: 'comment', foreground: '6B7280', fontStyle: 'italic' },\n { token: 'operator', foreground: '383838' },\n { token: 'identifier', foreground: '1A1A1A' },\n { token: 'key', foreground: '14AD9E', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#FFFFFF',\n 'editor.foreground': '#1A1A1A',\n 'editor.lineHighlightBackground': '#F8F8F7',\n 'editor.selectionBackground': '#A7F3D0',\n 'editorCursor.foreground': '#1DE5D2',\n 'editorLineNumber.foreground': '#9CA3AF',\n 'editorLineNumber.activeForeground': '#383838',\n },\n};\n\nexport const brutalistDarkTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '1DE5D2', fontStyle: 'bold' },\n { token: 'string', foreground: '4ADE80' },\n { token: 'string.quote', foreground: '4ADE80' },\n { token: 'number', foreground: 'F87171', fontStyle: 'bold' },\n { token: 'comment', foreground: '9CA3AF', fontStyle: 'italic' },\n { token: 'operator', foreground: 'E5E7EB' },\n { token: 'identifier', foreground: 'F3F4F6' },\n { token: 'key', foreground: '60A5FA', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#1A1A1A',\n 'editor.foreground': '#F3F4F6',\n 'editor.lineHighlightBackground': '#2A2A2A',\n 'editor.selectionBackground': '#1A3A36',\n 'editorCursor.foreground': '#1DE5D2',\n 'editorLineNumber.foreground': '#6B7280',\n 'editorLineNumber.activeForeground': '#E5E7EB',\n },\n};\n\nexport const premiumLightTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '14AD9E', fontStyle: 'bold' },\n { token: 'string', foreground: '059669' },\n { token: 'string.quote', foreground: '059669' },\n { token: 'number', foreground: 'DB2777', fontStyle: 'bold' },\n { token: 'comment', foreground: '9CA3AF', fontStyle: 'italic' },\n { token: 'operator', foreground: '525252' },\n { token: 'identifier', foreground: '1A1A1A' },\n { token: 'key', foreground: '14AD9E', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#FFFFFF',\n 'editor.foreground': '#1A1A1A',\n 'editor.lineHighlightBackground': '#F5F5F5',\n 'editor.selectionBackground': '#99F6E4',\n 'editorCursor.foreground': '#14AD9E',\n 'editorLineNumber.foreground': '#9CA3AF',\n 'editorLineNumber.activeForeground': '#525252',\n },\n};\n\nexport const premiumDarkTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'keyword', foreground: '1DE5D2', fontStyle: 'bold' },\n { token: 'string', foreground: '34D399' },\n { token: 'string.quote', foreground: '34D399' },\n { token: 'number', foreground: 'F472B6', fontStyle: 'bold' },\n { token: 'comment', foreground: '525252', fontStyle: 'italic' },\n { token: 'operator', foreground: 'A3A3A3' },\n { token: 'identifier', foreground: 'E5E5E5' },\n { token: 'key', foreground: '1DE5D2', fontStyle: 'bold' },\n ],\n colors: {\n 'editor.background': '#1A1A1A',\n 'editor.foreground': '#E5E5E5',\n 'editor.lineHighlightBackground': '#252525',\n 'editor.selectionBackground': '#1DE5D240',\n 'editorCursor.foreground': '#1DE5D2',\n 'editorLineNumber.foreground': '#525252',\n 'editorLineNumber.activeForeground': '#A3A3A3',\n },\n};\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { rqlLanguageDefinition, rqlLanguageConfiguration } from './rql-language';\nimport { premiumDarkTheme, premiumLightTheme, brutalistDarkTheme, brutalistLightTheme } from './themes';\n\nlet registered = false;\n\nexport function registerRqlLanguage(monaco: typeof import('monaco-editor')): void {\n if (registered) return;\n\n monaco.languages.register({ id: 'rql' });\n monaco.languages.setMonarchTokensProvider('rql', rqlLanguageDefinition);\n monaco.languages.setLanguageConfiguration('rql', rqlLanguageConfiguration);\n monaco.editor.defineTheme('premium-dark', premiumDarkTheme);\n monaco.editor.defineTheme('premium-light', premiumLightTheme);\n monaco.editor.defineTheme('brutalist-dark', brutalistDarkTheme);\n monaco.editor.defineTheme('brutalist-light', brutalistLightTheme);\n\n registered = true;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { ConnectionStatus } from '../connection/ConnectionPanel';\n\ninterface EditorToolbarProps {\n onRun: () => void;\n onClear: () => void;\n isExecuting: boolean;\n connectionLabel: string;\n connectionStatus: ConnectionStatus;\n connectionLocked?: boolean;\n onToggleConnectionPanel: () => void;\n}\n\nexport function EditorToolbar({\n onRun,\n onClear,\n isExecuting,\n connectionLabel,\n connectionStatus,\n connectionLocked,\n onToggleConnectionPanel,\n}: EditorToolbarProps) {\n return (\n <div className=\"rdb-editor-toolbar\">\n <div className=\"rdb-editor-toolbar__left\">\n {connectionLocked ? (\n <span className=\"rdb-editor-toolbar__connection rdb-editor-toolbar__connection--locked\">\n <span className={`rdb-editor-toolbar__connection-dot rdb-editor-toolbar__connection-dot--${connectionStatus}`}>●</span>\n <span>[{connectionLabel}]</span>\n </span>\n ) : (\n <button\n className=\"rdb-editor-toolbar__connection\"\n onClick={onToggleConnectionPanel}\n >\n <span className={`rdb-editor-toolbar__connection-dot rdb-editor-toolbar__connection-dot--${connectionStatus}`}>●</span>\n <span>[{connectionLabel}]</span>\n </button>\n )}\n <span className=\"rdb-editor-toolbar__hint\">ctrl+enter to run</span>\n </div>\n <div className=\"rdb-editor-toolbar__actions\">\n <button\n className=\"rdb-editor-toolbar__btn rdb-editor-toolbar__btn--secondary\"\n onClick={onClear}\n disabled={isExecuting}\n >\n [clear]\n </button>\n <button\n className=\"rdb-editor-toolbar__btn\"\n onClick={onRun}\n disabled={isExecuting}\n >\n {isExecuting ? '[running...]' : '[run]'}\n </button>\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\n\nexport interface ValueStyle {\n color?: string;\n italic?: boolean;\n}\n\nexport function getValueStyle(value: unknown): ValueStyle {\n if (value === null || value === undefined) {\n return { color: 'var(--rdb-color-muted)', italic: true };\n }\n\n // Duck-type on `type` property - Value classes use `implements` (not extends),\n // so instanceof fails. Every concrete Value sets this.type in its constructor.\n const t = (value as { type?: unknown }).type;\n if (typeof t === 'string') {\n switch (t) {\n case 'None':\n return { color: 'var(--rdb-color-muted)', italic: true };\n case 'Boolean':\n return { color: 'var(--rdb-color-value-boolean)' };\n case 'Int1': case 'Int2': case 'Int4': case 'Int8': case 'Int16':\n case 'Uint1': case 'Uint2': case 'Uint4': case 'Uint8': case 'Uint16':\n case 'Float4': case 'Float8': case 'Decimal':\n return { color: 'var(--rdb-color-value-number)' };\n case 'Date': case 'DateTime': case 'Time': case 'Duration':\n return { color: 'var(--rdb-color-value-date)' };\n case 'Uuid4': case 'Uuid7': case 'IdentityId':\n return { color: 'var(--rdb-color-value-uuid)' };\n case 'Utf8':\n return { color: 'var(--rdb-color-value-string)' };\n case 'Blob':\n return { color: 'var(--rdb-color-secondary)' };\n }\n }\n\n // Fallback: color by JS typeof\n switch (typeof value) {\n case 'number':\n case 'bigint':\n return { color: 'var(--rdb-color-value-number)' };\n case 'boolean':\n return { color: 'var(--rdb-color-value-boolean)' };\n case 'string':\n return { color: 'var(--rdb-color-value-string)' };\n default:\n return {};\n }\n}\n\nexport function formatValue(value: unknown): string {\n if (value === null || value === undefined) {\n return 'none';\n }\n // Duck-type Value objects by checking for .type (same approach as getValueStyle).\n // Handles BigInt-backed types (Int8, Uint8, etc.) that crash JSON.stringify.\n if (typeof value === 'object' && typeof (value as any).type === 'string') {\n return value.toString();\n }\n if (typeof value === 'bigint') {\n return value.toString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { formatValue, getValueStyle } from '../../format/value';\n\ninterface ResultsTableProps {\n data: Record<string, unknown>[];\n}\n\nexport function ResultsTable({ data }: ResultsTableProps) {\n if (data.length === 0) return null;\n\n const columns = Object.keys(data[0]);\n\n return (\n <div className=\"rdb-results\">\n <table className=\"rdb-results__table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={col}>{col}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, i) => (\n <tr key={i}>\n {columns.map((col) => {\n const vs = getValueStyle(row[col]);\n return (\n <td\n key={col}\n style={{\n color: vs.color,\n fontStyle: vs.italic ? 'italic' : undefined,\n }}\n >\n {formatValue(row[col])}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Diagnostic } from '../../types';\n\ninterface ResultsErrorProps {\n message: string;\n diagnostic?: Diagnostic;\n}\n\nfunction getLine(source: string, line: number): string {\n return source.split('\\n')[line - 1] ?? '';\n}\n\nfunction renderFlat(d: Diagnostic): string {\n const lines: string[] = [];\n\n lines.push(`Error ${d.code}`);\n lines.push(` ${d.message}`);\n lines.push('');\n\n if (d.fragment?.line != null && d.fragment.column != null) {\n const { text: fragment, line, column } = d.fragment;\n const statement = d.statement ?? '';\n\n lines.push('LOCATION');\n lines.push(` line ${line}, column ${column}`);\n lines.push('');\n\n const lineContent = getLine(statement, line);\n\n lines.push('CODE');\n lines.push(` ${line} \\u2502 ${lineContent}`);\n const fragmentStart = lineContent.indexOf(fragment) !== -1\n ? lineContent.indexOf(fragment)\n : column;\n lines.push(` \\u2502 ${' '.repeat(fragmentStart)}${'~'.repeat(fragment.length)}`);\n lines.push(' \\u2502');\n\n const labelText = d.label ?? '';\n if (labelText) {\n const fragmentCenter = fragmentStart + Math.floor(fragment.length / 2);\n const labelHalf = Math.floor(labelText.length / 2);\n const labelOffset = labelHalf > fragmentCenter ? 0 : fragmentCenter - labelHalf;\n lines.push(` \\u2502 ${' '.repeat(labelOffset)}${labelText}`);\n }\n lines.push('');\n }\n\n if (d.help) {\n lines.push('HELP');\n lines.push(` ${d.help}`);\n lines.push('');\n }\n\n if (d.notes.length > 0) {\n lines.push('NOTES');\n for (const note of d.notes) {\n lines.push(` \\u2022 ${note}`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction renderNested(d: Diagnostic, depth: number): string {\n const lines: string[] = [];\n const indent = depth === 0 ? '' : ' ';\n const prefix = depth === 0 ? '' : '\\u21b3 ';\n\n lines.push(`${indent}${prefix}Error ${d.code}: ${d.message}`);\n\n if (d.fragment?.line != null && d.fragment.column != null) {\n const { text: fragment, line, column } = d.fragment;\n const statement = d.statement ?? '';\n\n const atText = statement ? `\"${fragment}\"` : 'unknown';\n lines.push(`${indent} at ${atText} (line ${line}, column ${column})`);\n lines.push('');\n\n const lineContent = getLine(statement, line);\n lines.push(`${indent} ${line} \\u2502 ${lineContent}`);\n const fragmentStart = lineContent.indexOf(fragment) !== -1\n ? lineContent.indexOf(fragment)\n : column;\n lines.push(`${indent} \\u2502 ${' '.repeat(fragmentStart)}${'~'.repeat(fragment.length)}`);\n\n const labelText = d.label ?? '';\n if (labelText) {\n const fragmentCenter = fragmentStart + Math.floor(fragment.length / 2);\n const labelHalf = Math.floor(labelText.length / 2);\n const labelOffset = labelHalf > fragmentCenter ? 0 : fragmentCenter - labelHalf;\n lines.push(`${indent} \\u2502 ${' '.repeat(labelOffset)}${labelText}`);\n }\n lines.push('');\n }\n\n if (d.cause) {\n lines.push(renderNested(d.cause, depth + 1));\n }\n\n if (d.help) {\n lines.push(`${indent} help: ${d.help}`);\n }\n\n if (d.notes.length > 0) {\n for (const note of d.notes) {\n lines.push(`${indent} note: ${note}`);\n }\n }\n\n if (depth > 0) {\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderDiagnostic(d: Diagnostic): string {\n if (d.cause) {\n return renderNested(d, 0);\n }\n return renderFlat(d);\n}\n\nexport function ResultsError({ message, diagnostic }: ResultsErrorProps) {\n const text = diagnostic ? renderDiagnostic(diagnostic) : `Error\\n ${message}`;\n\n return (\n <div className=\"rdb-results__error\">\n <pre>{text}</pre>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport function ResultsEmpty() {\n return (\n <div className=\"rdb-results__empty\">\n $ 0 rows returned.\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useCallback } from 'react';\nimport { formatValue } from '../../format/value';\n\ninterface ResultsStatusBarProps {\n rowCount: number;\n executionTime: number;\n data?: Record<string, unknown>[];\n}\n\nexport function ResultsStatusBar({ rowCount, executionTime, data }: ResultsStatusBarProps) {\n const copyAsCsv = useCallback(() => {\n if (!data || data.length === 0) return;\n const columns = Object.keys(data[0]);\n const header = columns.join(',');\n const rows = data.map(row =>\n columns.map(col => {\n const val = formatValue(row[col]);\n return val.includes(',') || val.includes('\"') || val.includes('\\n')\n ? `\"${val.replace(/\"/g, '\"\"')}\"`\n : val;\n }).join(',')\n );\n navigator.clipboard.writeText([header, ...rows].join('\\n'));\n }, [data]);\n\n const copyAsJson = useCallback(() => {\n if (!data || data.length === 0) return;\n const serialized = data.map(row => {\n const obj: Record<string, string> = {};\n for (const [key, val] of Object.entries(row)) {\n obj[key] = formatValue(val);\n }\n return obj;\n });\n navigator.clipboard.writeText(JSON.stringify(serialized, null, 2));\n }, [data]);\n\n return (\n <div className=\"rdb-status-bar\">\n <div className=\"rdb-status-bar__info\">\n <span>{rowCount} row{rowCount !== 1 ? 's' : ''}</span>\n <span>({executionTime}ms)</span>\n </div>\n <div className=\"rdb-status-bar__actions\">\n <button className=\"rdb-status-bar__btn\" onClick={copyAsCsv} title=\"Copy as CSV\">\n [CSV]\n </button>\n <button className=\"rdb-status-bar__btn\" onClick={copyAsJson} title=\"Copy as JSON\">\n [JSON]\n </button>\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { ExecutionResult } from '../../types';\nimport { ResultsTable } from './ResultsTable';\nimport { ResultsError } from './ResultsError';\nimport { ResultsEmpty } from './ResultsEmpty';\nimport { ResultsStatusBar } from './ResultsStatusBar';\n\ninterface ResultsPanelProps {\n result: ExecutionResult | null;\n}\n\nexport function ResultsPanel({ result }: ResultsPanelProps) {\n if (!result) {\n return (\n <div className=\"rdb-results__empty\">\n $ run a query to see results\n </div>\n );\n }\n\n if (!result.success && result.error) {\n return <ResultsError message={result.error} diagnostic={result.diagnostic} />;\n }\n\n const data = result.data ?? [];\n if (data.length === 0) {\n return <ResultsEmpty />;\n }\n\n return (\n <>\n <ResultsTable data={data} />\n <ResultsStatusBar\n rowCount={data.length}\n executionTime={result.executionTime}\n data={data}\n />\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useState } from 'react';\nimport type { Executor } from '../../types';\nimport { SchemaNode } from './SchemaNode';\n\ninterface SchemaBrowserProps {\n executor: Executor;\n}\n\ninterface ColumnInfo {\n name: string;\n type: string;\n}\n\ninterface SourceInfo {\n name: string;\n category: 'table' | 'view' | 'vtable' | 'ringbuffer' | 'procedure' | 'handler' | 'enum' | 'event' | 'dictionary' | 'migration';\n columns: ColumnInfo[];\n}\n\ninterface NamespaceInfo {\n name: string;\n sources: SourceInfo[];\n}\n\nconst TYPE_NAMES: Record<number, string> = {\n 1: 'Float4', 2: 'Float8',\n 3: 'Int1', 4: 'Int2', 5: 'Int4', 6: 'Int8', 7: 'Int16',\n 8: 'Utf8',\n 9: 'Uint1', 10: 'Uint2', 11: 'Uint4', 12: 'Uint8', 13: 'Uint16',\n 14: 'Boolean', 15: 'Date', 16: 'DateTime', 17: 'Time', 18: 'Duration',\n 19: 'IdentityId', 20: 'Uuid4', 21: 'Uuid7', 22: 'Blob',\n 23: 'Int', 24: 'Decimal', 25: 'Uint', 26: 'Any',\n 27: 'DictionaryId', 28: 'List',\n};\n\n// source_type: 1=Table, 2=View, 3=VTable, 4=RingBuffer\nconst SOURCE_TYPE_TABLE = 1;\nconst SOURCE_TYPE_VIEW = 2;\nconst SOURCE_TYPE_VTABLE = 3;\nconst SOURCE_TYPE_RINGBUFFER = 4;\n\nfunction resolveTypeName(typeId: number): string {\n const isOptional = (typeId & 0x80) !== 0;\n const baseId = typeId & 0x7f;\n const name = TYPE_NAMES[baseId] ?? `Unknown(${baseId})`;\n return isOptional ? `${name}?` : name;\n}\n\nfunction extractNum(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'bigint') return Number(value);\n if (value && typeof value === 'object' && typeof (value as { valueOf(): unknown }).valueOf === 'function') {\n const v = (value as { valueOf(): unknown }).valueOf();\n if (typeof v === 'number') return v;\n if (typeof v === 'bigint') return Number(v);\n }\n return Number(value);\n}\n\nfunction extractStr(value: unknown): string {\n if (typeof value === 'string') return value;\n if (value && typeof value === 'object' && typeof (value as { valueOf(): unknown }).valueOf === 'function') {\n const v = (value as { valueOf(): unknown }).valueOf();\n if (typeof v === 'string') return v;\n }\n return String(value);\n}\n\nasync function queryRows(executor: Executor, query: string): Promise<Record<string, unknown>[]> {\n const result = await executor.execute(query);\n return result.success && result.data ? result.data : [];\n}\n\nfunction typeColorClass(typeName: string): string | undefined {\n const base = typeName.replace(/\\?$/, '');\n switch (base) {\n case 'Float4': case 'Float8':\n case 'Int1': case 'Int2': case 'Int4': case 'Int8': case 'Int16':\n case 'Uint1': case 'Uint2': case 'Uint4': case 'Uint8': case 'Uint16':\n case 'Int': case 'Uint': case 'Decimal':\n return 'rdb-schema__node-type--numeric';\n case 'Utf8': case 'Blob':\n return 'rdb-schema__node-type--string';\n case 'Boolean':\n return 'rdb-schema__node-type--boolean';\n case 'Date': case 'DateTime': case 'Time': case 'Duration':\n return 'rdb-schema__node-type--temporal';\n case 'IdentityId': case 'Uuid4': case 'Uuid7': case 'DictionaryId':\n return 'rdb-schema__node-type--identity';\n default:\n return undefined;\n }\n}\n\nconst CATEGORY_GROUPS: { key: SourceInfo['category']; label: string }[] = [\n { key: 'table', label: 'Tables' },\n { key: 'vtable', label: 'Virtual Tables' },\n { key: 'view', label: 'Views' },\n { key: 'ringbuffer', label: 'Ring Buffers' },\n { key: 'procedure', label: 'Procedures' },\n { key: 'handler', label: 'Handlers' },\n { key: 'enum', label: 'Enums' },\n { key: 'event', label: 'Events' },\n { key: 'dictionary', label: 'Dictionaries' },\n { key: 'migration', label: 'Migrations' },\n];\n\nexport function SchemaBrowser({ executor }: SchemaBrowserProps) {\n const [namespaces, setNamespaces] = useState<NamespaceInfo[]>([]);\n const [loading, setLoading] = useState(true);\n\n const loadSchema = async () => {\n setLoading(true);\n try {\n const [nsRows, tableRows, viewRows, vtableRows, rbRows, colRows, vtableColRows, procRows, handlerRows, enumRows, eventRows, dictRows, migrationRows] = await Promise.all([\n queryRows(executor, 'FROM system::namespaces MAP { id, name }'),\n queryRows(executor, 'FROM system::tables MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::views MAP { id, namespace_id, name, kind }'),\n queryRows(executor, 'FROM system::virtual_tables MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::ringbuffers MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::columns MAP { source_id, source_type, name, type, position }'),\n queryRows(executor, 'FROM system::virtual_table_columns MAP { vtable_id, name, type, position }'),\n queryRows(executor, 'FROM system::procedures MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::handlers MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::enums MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::events MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::dictionaries MAP { id, namespace_id, name }'),\n queryRows(executor, 'FROM system::migrations MAP { name }'),\n ]);\n\n // Build namespace map: id → name\n const nsMap = new Map<number, string>();\n for (const row of nsRows) {\n nsMap.set(extractNum(row.id), extractStr(row.name));\n }\n\n // Build column lookup: `${source_type}:${source_id}` → columns\n const columnsBySource = new Map<string, ColumnInfo[]>();\n // First collect with position for sorting\n const rawColumns = new Map<string, { name: string; type: string; position: number }[]>();\n for (const row of colRows) {\n const key = `${extractNum(row.source_type)}:${extractNum(row.source_id)}`;\n if (!rawColumns.has(key)) rawColumns.set(key, []);\n rawColumns.get(key)!.push({\n name: extractStr(row.name),\n type: resolveTypeName(extractNum(row.type)),\n position: extractNum(row.position),\n });\n }\n for (const row of vtableColRows) {\n const key = `${SOURCE_TYPE_VTABLE}:${extractNum(row.vtable_id)}`;\n if (!rawColumns.has(key)) rawColumns.set(key, []);\n rawColumns.get(key)!.push({\n name: extractStr(row.name),\n type: resolveTypeName(extractNum(row.type)),\n position: extractNum(row.position),\n });\n }\n for (const [key, cols] of rawColumns) {\n cols.sort((a, b) => a.position - b.position);\n columnsBySource.set(key, cols.map(c => ({ name: c.name, type: c.type })));\n }\n\n // Build sources grouped by namespace\n const nsSources = new Map<number, SourceInfo[]>();\n\n const addSource = (id: number, nsId: number, name: string, category: SourceInfo['category'], sourceType: number) => {\n if (!nsSources.has(nsId)) nsSources.set(nsId, []);\n const columns = columnsBySource.get(`${sourceType}:${id}`) ?? [];\n nsSources.get(nsId)!.push({ name: extractStr(name), category, columns });\n };\n\n for (const row of tableRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'table', SOURCE_TYPE_TABLE);\n }\n for (const row of viewRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'view', SOURCE_TYPE_VIEW);\n }\n for (const row of vtableRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'vtable', SOURCE_TYPE_VTABLE);\n }\n for (const row of rbRows) {\n addSource(extractNum(row.id), extractNum(row.namespace_id), extractStr(row.name), 'ringbuffer', SOURCE_TYPE_RINGBUFFER);\n }\n\n const addLeafSource = (nsId: number, name: string, category: SourceInfo['category']) => {\n if (!nsSources.has(nsId)) nsSources.set(nsId, []);\n nsSources.get(nsId)!.push({ name: extractStr(name), category, columns: [] });\n };\n\n for (const row of procRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'procedure');\n }\n for (const row of handlerRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'handler');\n }\n for (const row of enumRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'enum');\n }\n for (const row of eventRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'event');\n }\n for (const row of dictRows) {\n addLeafSource(extractNum(row.namespace_id), extractStr(row.name), 'dictionary');\n }\n\n // Migrations have no namespace_id — assign to \"system\" namespace\n let systemNsId: number | undefined;\n for (const [id, name] of nsMap) {\n if (name === 'system') { systemNsId = id; break; }\n }\n if (systemNsId !== undefined) {\n for (const row of migrationRows) {\n addLeafSource(systemNsId, extractStr(row.name), 'migration');\n }\n }\n\n // Build final namespace list (include all namespaces, even empty ones)\n const result: NamespaceInfo[] = [];\n for (const [nsId, nsName] of nsMap) {\n const sources = nsSources.get(nsId) ?? [];\n sources.sort((a, b) => a.name.localeCompare(b.name));\n result.push({ name: nsName, sources });\n }\n result.sort((a, b) => a.name.localeCompare(b.name));\n\n setNamespaces(result);\n } catch {\n setNamespaces([]);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n loadSchema();\n }, [executor]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const toolbar = (\n <div className=\"rdb-schema__toolbar\">\n <button\n className=\"rdb-schema__reload-btn\"\n onClick={loadSchema}\n disabled={loading}\n >\n {loading ? '[loading...]' : '[reload]'}\n </button>\n </div>\n );\n\n if (loading) {\n return (\n <>\n {toolbar}\n <div className=\"rdb-history__empty\">$ loading schema...</div>\n </>\n );\n }\n\n if (namespaces.length === 0) {\n return (\n <>\n {toolbar}\n <div className=\"rdb-history__empty\">$ no tables found</div>\n </>\n );\n }\n\n return (\n <>\n {toolbar}\n <div>\n {namespaces.map(ns => (\n <SchemaNode key={ns.name} label={ns.name} labelClass=\"rdb-schema__node-label--namespace\">\n {CATEGORY_GROUPS.map(({ key, label }) => {\n const sources = ns.sources.filter(s => s.category === key);\n if (sources.length === 0) return null;\n return (\n <SchemaNode key={key} label={`${label} (${sources.length})`} labelClass=\"rdb-schema__node-label--category\">\n {sources.map(source => (\n <SchemaNode key={source.name} label={source.name}>\n {source.columns.length > 0\n ? source.columns.map(col => (\n <SchemaNode\n key={col.name}\n label={col.name}\n labelClass=\"rdb-schema__node-label--column\"\n type={col.type}\n typeClass={typeColorClass(col.type)}\n />\n ))\n : undefined}\n </SchemaNode>\n ))}\n </SchemaNode>\n );\n })}\n </SchemaNode>\n ))}\n </div>\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, type ReactNode } from 'react';\n\ninterface SchemaNodeProps {\n label: string;\n labelClass?: string;\n type?: string;\n typeClass?: string;\n children?: ReactNode;\n}\n\nexport function SchemaNode({ label, labelClass, type, typeClass, children }: SchemaNodeProps) {\n const [expanded, setExpanded] = useState(false);\n const hasChildren = !!children;\n\n return (\n <div className=\"rdb-schema__node\">\n <div\n className=\"rdb-schema__node-header\"\n onClick={() => hasChildren && setExpanded(!expanded)}\n >\n {hasChildren && (\n <span className=\"rdb-schema__node-toggle\">\n {expanded ? '▾' : '▸'}\n </span>\n )}\n {!hasChildren && <span className=\"rdb-schema__node-toggle\" />}\n {type && <span className={typeClass ? \"rdb-schema__node-type \" + typeClass : \"rdb-schema__node-type\"}>{type}</span>}\n <span className={`rdb-schema__node-label${labelClass ? ` ${labelClass}` : ''}`}>\n {label}\n </span>\n </div>\n {expanded && hasChildren && (\n <div className=\"rdb-schema__node-children\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState } from 'react';\nimport type { HistoryEntry } from '../../types';\nimport { HistoryEntryRow } from './HistoryEntry';\n\ninterface HistoryPanelProps {\n entries: HistoryEntry[];\n onSelect: (query: string) => void;\n}\n\nexport function HistoryPanel({ entries, onSelect }: HistoryPanelProps) {\n const [search, setSearch] = useState('');\n\n const filtered = search\n ? entries.filter(e => e.query.toLowerCase().includes(search.toLowerCase()))\n : entries;\n\n return (\n <div className=\"rdb-history\">\n <div className=\"rdb-history__search\">\n <input\n type=\"text\"\n className=\"rdb-history__search-input\"\n placeholder=\"search history...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <div className=\"rdb-history__list\">\n {filtered.length === 0 ? (\n <div className=\"rdb-history__empty\">\n {entries.length === 0 ? '$ no history yet' : '$ no matching queries'}\n </div>\n ) : (\n filtered.map((entry) => (\n <HistoryEntryRow key={entry.id} entry={entry} onClick={onSelect} />\n ))\n )}\n </div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { HistoryEntry as HistoryEntryType } from '../../types';\n\ninterface HistoryEntryProps {\n entry: HistoryEntryType;\n onClick: (query: string) => void;\n}\n\nfunction formatTimestamp(ts: number): string {\n const d = new Date(ts);\n const hh = String(d.getHours()).padStart(2, '0');\n const mm = String(d.getMinutes()).padStart(2, '0');\n const ss = String(d.getSeconds()).padStart(2, '0');\n return `${hh}:${mm}:${ss}`;\n}\n\nexport function HistoryEntryRow({ entry, onClick }: HistoryEntryProps) {\n return (\n <div className=\"rdb-history__entry\" onClick={() => onClick(entry.query)}>\n <div className=\"rdb-history__entry-meta\">\n <span>{formatTimestamp(entry.timestamp)}</span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span>{entry.executionTime}ms</span>\n <span\n className={`rdb-history__entry-indicator ${\n entry.success\n ? 'rdb-history__entry-indicator--success'\n : 'rdb-history__entry-indicator--error'\n }`}\n />\n </div>\n </div>\n <div className=\"rdb-history__entry-query\">{entry.query}</div>\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useEffect, useRef } from 'react';\n\nexport type ConnectionMode = 'wasm' | 'websocket';\nexport type ConnectionStatus = 'connected' | 'connecting' | 'disconnected' | 'error';\n\nexport interface ConnectionPanelProps {\n mode: ConnectionMode;\n wsUrl: string;\n status: ConnectionStatus;\n error: string | null;\n onModeChange: (mode: ConnectionMode) => void;\n onUrlChange: (url: string) => void;\n onConnect: () => void;\n onDisconnect: () => void;\n onClose: () => void;\n}\n\nexport function ConnectionPanel({\n mode,\n wsUrl,\n status,\n error,\n onModeChange,\n onUrlChange,\n onConnect,\n onDisconnect,\n onClose,\n}: ConnectionPanelProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n onClose();\n }\n }\n function handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') onClose();\n }\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [onClose]);\n\n const isWsConnected = mode === 'websocket' && status === 'connected';\n const isWsConnecting = mode === 'websocket' && status === 'connecting';\n\n return (\n <div className=\"rdb-connection-panel\" ref={panelRef}>\n <div className=\"rdb-connection-panel__header\">connection</div>\n\n <div className=\"rdb-connection-panel__modes\">\n <button\n className={`rdb-connection-panel__mode-btn ${mode === 'wasm' ? 'rdb-connection-panel__mode-btn--active' : ''}`}\n onClick={() => onModeChange('wasm')}\n >\n [wasm (in-browser)]\n </button>\n <button\n className={`rdb-connection-panel__mode-btn ${mode === 'websocket' ? 'rdb-connection-panel__mode-btn--active' : ''}`}\n onClick={() => onModeChange('websocket')}\n >\n [websocket (remote)]\n </button>\n </div>\n\n {mode === 'websocket' && (\n <>\n <div className=\"rdb-connection-panel__url-row\">\n <span className=\"rdb-connection-panel__url-label\">url:</span>\n <input\n className=\"rdb-connection-panel__url-input\"\n type=\"text\"\n value={wsUrl}\n onChange={(e) => onUrlChange(e.target.value)}\n placeholder=\"ws://localhost:8090\"\n disabled={isWsConnected || isWsConnecting}\n />\n </div>\n <div className=\"rdb-connection-panel__actions\">\n {isWsConnected ? (\n <button className=\"rdb-connection-panel__action-btn\" onClick={onDisconnect}>\n [disconnect]\n </button>\n ) : (\n <button\n className=\"rdb-connection-panel__action-btn\"\n onClick={onConnect}\n disabled={isWsConnecting || !wsUrl.trim()}\n >\n {isWsConnecting ? '[connecting...]' : '[connect]'}\n </button>\n )}\n </div>\n </>\n )}\n\n <div className=\"rdb-connection-panel__status\">\n <span className={`rdb-connection-panel__status-dot rdb-connection-panel__status-dot--${status}`}>●</span>\n <span>{status}</span>\n </div>\n\n {error && (\n <div className=\"rdb-connection-panel__error\">{error}</div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport Editor, { type OnMount } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport { registerRqlLanguage } from '../monaco/register';\nimport { SnippetResults } from './SnippetResults';\nimport type { Executor, ExecutionResult } from '../types';\nimport type { RdbTheme } from './Console';\n\nexport interface SnippetProps {\n executor: Executor;\n initialCode: string;\n title?: string;\n description?: string;\n className?: string;\n theme?: RdbTheme;\n}\n\ninterface QueryResult {\n data: Record<string, unknown>[];\n error?: string;\n}\n\nexport function Snippet({\n executor,\n initialCode,\n title = 'reifydb playground',\n description,\n className,\n theme = 'light',\n}: SnippetProps) {\n const [code, setCode] = useState(initialCode);\n const [result, setResult] = useState<QueryResult | null>(null);\n const [isExecuting, setIsExecuting] = useState(false);\n const [copied, setCopied] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const handleRunRef = useRef<() => void>(() => {});\n\n const lineCount = code.split('\\n').length;\n const editorHeight = Math.max(lineCount * 20 + 16, 80);\n\n useEffect(() => {\n if (!isFullscreen) return;\n\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsFullscreen(false);\n };\n document.addEventListener('keydown', handleEsc);\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', handleEsc);\n document.body.style.overflow = '';\n };\n }, [isFullscreen]);\n\n const handleRun = useCallback(async () => {\n if (isExecuting) return;\n setResult(null);\n setIsExecuting(true);\n await new Promise(r => setTimeout(r, 0));\n\n try {\n const res: ExecutionResult = await executor.execute(code);\n if (res.success) {\n setResult({ data: res.data ?? [] });\n } else {\n setResult({ data: [], error: res.error });\n }\n } catch (err) {\n setResult({ data: [], error: err instanceof Error ? err.message : String(err) });\n } finally {\n setIsExecuting(false);\n }\n }, [code, executor, isExecuting]);\n\n handleRunRef.current = handleRun;\n\n const handleReset = useCallback(() => {\n setCode(initialCode);\n setResult(null);\n }, [initialCode]);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [code]);\n\n const handleEditorDidMount: OnMount = (editor, monaco) => {\n editorRef.current = editor;\n registerRqlLanguage(monaco);\n\n editor.addAction({\n id: 'run-query',\n label: 'Run Query',\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],\n run: () => {\n handleRunRef.current();\n },\n });\n };\n\n const handleBeforeMount = (monaco: typeof import('monaco-editor')) => {\n registerRqlLanguage(monaco);\n };\n\n const columns = result?.data && result.data.length > 0 ? Object.keys(result.data[0]) : [];\n const maxKeyLength = columns.length > 0 ? Math.max(...columns.map(c => c.length)) : 0;\n\n const content = (\n <div className={`rdb-snippet${isFullscreen ? ' rdb-snippet--fullscreen' : ''}${theme === 'light' ? ' rdb-theme-light' : ''}${className ? ` ${className}` : ''}`}>\n {/* Header */}\n <div className=\"rdb-snippet__header\">\n <div className=\"rdb-snippet__title\">\n <span className=\"rdb-snippet__title-marker\">$</span> {title}\n </div>\n <div className=\"rdb-snippet__actions\">\n <button\n onClick={() => setIsFullscreen(!isFullscreen)}\n className=\"rdb-snippet__action-btn\"\n title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n >\n {isFullscreen ? '[×]' : '[[]]'}\n </button>\n <button\n onClick={handleCopy}\n className=\"rdb-snippet__action-btn\"\n title=\"Copy code\"\n >\n {copied ? '[ok]' : '[cp]'}\n </button>\n <button\n onClick={handleReset}\n className=\"rdb-snippet__action-btn\"\n title=\"Reset code\"\n >\n [&#8634;]\n </button>\n </div>\n </div>\n\n {/* Description */}\n {description && (\n <div className=\"rdb-snippet__description\">\n <p className=\"rdb-snippet__description-text\">\n <span className=\"rdb-snippet__description-marker\">// </span>{description}\n </p>\n </div>\n )}\n\n {/* Editor */}\n <div\n className={isFullscreen ? 'rdb-snippet__editor--fullscreen' : 'rdb-snippet__editor'}\n style={isFullscreen ? undefined : { height: editorHeight }}\n >\n <Editor\n height=\"100%\"\n language=\"rql\"\n theme={theme === 'light' ? 'premium-light' : 'premium-dark'}\n value={code}\n onChange={(value) => setCode(value || '')}\n beforeMount={handleBeforeMount}\n onMount={handleEditorDidMount}\n options={{\n minimap: { enabled: false },\n lineNumbers: 'on',\n glyphMargin: false,\n folding: false,\n lineDecorationsWidth: 16,\n lineNumbersMinChars: 3,\n scrollBeyondLastLine: false,\n scrollbar: {\n vertical: isFullscreen ? 'auto' : 'hidden',\n horizontal: isFullscreen ? 'auto' : 'hidden',\n },\n overviewRulerLanes: 0,\n hideCursorInOverviewRuler: true,\n overviewRulerBorder: false,\n renderLineHighlight: 'none',\n fontFamily: \"'IBM Plex Mono', monospace\",\n fontSize: 13,\n padding: { top: 8, bottom: 8 },\n wordWrap: 'on',\n automaticLayout: true,\n }}\n />\n </div>\n\n {/* Toolbar */}\n <div className=\"rdb-snippet__toolbar\">\n <span className=\"rdb-snippet__hint\">\n {isExecuting ? '$ running...' : '$ ctrl+enter to run'}\n </span>\n <button\n onClick={handleRun}\n disabled={isExecuting}\n className={`rdb-snippet__run-btn${isExecuting ? ' rdb-snippet__run-btn--loading' : ''}`}\n >\n {isExecuting ? '[running...]' : '[run]'}\n </button>\n </div>\n\n {/* Results */}\n {result && (\n <div className={`rdb-snippet__results${isFullscreen ? ' rdb-snippet__results--fullscreen' : ''}`}>\n <div className=\"rdb-snippet__results-header\">\n <span>{result.error ? '--- error ---' : '--- output ---'}</span>\n {result.data && !result.error && (\n <span>({result.data.length} row{result.data.length !== 1 ? 's' : ''})</span>\n )}\n </div>\n\n {result.error && (\n <div className=\"rdb-snippet__error\">\n <pre className=\"rdb-snippet__error-text\">ERR: {result.error}</pre>\n </div>\n )}\n\n {result.data && result.data.length > 0 && !result.error && (\n <SnippetResults data={result.data} columns={columns} maxKeyLength={maxKeyLength} />\n )}\n\n {result.data && result.data.length === 0 && !result.error && (\n <div className=\"rdb-snippet__empty\">$ 0 rows returned.</div>\n )}\n </div>\n )}\n </div>\n );\n\n if (isFullscreen) {\n return (\n <div className=\"rdb-snippet__overlay\">\n <div className=\"rdb-snippet__overlay-inner\">\n {content}\n </div>\n </div>\n );\n }\n\n return content;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { formatValue, getValueStyle } from '../format/value';\n\ninterface SnippetResultsProps {\n data: Record<string, unknown>[];\n columns: string[];\n maxKeyLength: number;\n}\n\nexport function SnippetResults({ data, columns, maxKeyLength }: SnippetResultsProps) {\n return (\n <div className=\"rdb-snippet__rows\">\n {data.map((row, i) => (\n <div key={i} className=\"rdb-snippet__row\">\n <div className=\"rdb-snippet__row-label\">-- row {i + 1} --</div>\n {columns.map((col) => {\n const vs = getValueStyle(row[col]);\n return (\n <div key={col} className=\"rdb-snippet__field\">\n <span\n className=\"rdb-snippet__field-key\"\n style={{ minWidth: `${maxKeyLength}ch` }}\n >{` ${col.padEnd(maxKeyLength)}`}</span>\n <span className=\"rdb-snippet__field-eq\">= </span>\n <span\n className={`rdb-snippet__field-value${vs.italic ? ' rdb-snippet__field-value--italic' : ''}`}\n style={vs.color ? { color: vs.color } : undefined}\n >{formatValue(row[col])}</span>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult, Diagnostic } from '../types';\n\nexport interface WasmDB {\n admin(rql: string): Promise<unknown> | unknown;\n}\n\nexport class WasmExecutor implements Executor {\n private db: WasmDB;\n\n constructor(db: WasmDB) {\n this.db = db;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n const query = trimmed.endsWith(';') ? trimmed.slice(0, -1).trim() : trimmed;\n\n if (!query) {\n return { success: true, data: [], executionTime: 0 };\n }\n\n const startTime = performance.now();\n try {\n const results = await this.db.admin(query);\n const executionTime = Math.round(performance.now() - startTime);\n return {\n success: true,\n data: Array.isArray(results) ? results : [],\n executionTime,\n };\n } catch (error) {\n const executionTime = Math.round(performance.now() - startTime);\n let diagnostic: Diagnostic | undefined;\n if (error && typeof error === 'object' && 'code' in error) {\n const e = error as Record<string, unknown>;\n diagnostic = {\n code: String(e.code),\n message: String(e.message ?? ''),\n statement: e.statement as string | undefined,\n fragment: e.fragment as Diagnostic['fragment'],\n label: e.label as string | undefined,\n help: e.help as string | undefined,\n notes: Array.isArray(e.notes) ? e.notes.map(String) : [],\n cause: e.cause as Diagnostic | undefined,\n };\n }\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n diagnostic,\n executionTime,\n };\n }\n }\n\n}\n"],"mappings":";AAGA,SAAS,eAAAA,cAAa,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AACzD,SAAS,cAAc;;;ACAvB,SAAS,kBAAkB;AAU3B,SAAS,kBAAkB,KAAsC;AAC/D,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,MAAM;AACZ,MAAI,eAAe,OAAO,IAAI,aAAa,OAAO,IAAI,cAAc,UAAU;AAC5E,UAAM,IAAI,IAAI;AACd,WAAO,EAAE,MAAM,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,MAAgB,QAAQ,EAAE,OAAiB;AAAA,EAC1F;AACA,MAAI,cAAc,OAAO,IAAI,YAAY,OAAO,IAAI,aAAa,UAAU;AACzE,UAAM,IAAI,IAAI;AACd,WAAO,EAAE,MAAM,OAAO,EAAE,QAAQ,EAAE,EAAE;AAAA,EACtC;AACA,MAAI,UAAU,KAAK;AACjB,WAAO,EAAE,MAAM,OAAO,IAAI,IAAI,GAAG,MAAM,IAAI,MAA4B,QAAQ,IAAI,OAA6B;AAAA,EAClH;AACA,SAAO;AACT;AAEA,SAAS,aAAa,OAA+B;AACnD,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM,QAAQ,QAAQ,eAAe,EAAE;AAAA,IAChD,UAAU,kBAAkB,MAAM,QAAQ;AAAA,IAC1C,OAAO,MAAM;AAAA,IACb,MAAM,MAAM;AAAA,IACZ,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf;AACF;AAEO,IAAM,aAAN,MAAqC;AAAA,EAClC;AAAA,EAER,YAAY,QAAkB;AAC5B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,QAAQ,WAA6C;AACzD,UAAM,UAAU,UAAU,KAAK;AAC/B,UAAM,QAAQ,QAAQ,SAAS,GAAG,IAAI,QAAQ,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI;AAEpE,QAAI,CAAC,OAAO;AACV,aAAO,EAAE,SAAS,MAAM,MAAM,CAAC,GAAG,eAAe,EAAE;AAAA,IACrD;AAEA,UAAM,YAAY,YAAY,IAAI;AAClC,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC;AACtD,YAAM,gBAAgB,KAAK,MAAM,YAAY,IAAI,IAAI,SAAS;AAC9D,YAAM,UAAU,OAAO,CAAC,KAAK,CAAC;AAE9B,YAAM,OAAO,QAAQ,IAAI,CAAC,QAAiB;AACzC,YAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,gBAAM,WAAoC,CAAC;AAC3C,qBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAA8B,GAAG;AACzE,qBAAS,GAAG,IAAI;AAAA,UAClB;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,CAAC;AAED,aAAO,EAAE,SAAS,MAAM,MAAM,cAAc;AAAA,IAC9C,SAAS,OAAO;AACd,YAAM,gBAAgB,KAAK,MAAM,YAAY,IAAI,IAAI,SAAS;AAC9D,UAAI,iBAAiB,YAAY;AAC/B,eAAO,EAAE,SAAS,OAAO,OAAO,MAAM,SAAS,YAAY,aAAa,KAAK,GAAG,cAAc;AAAA,MAChG;AACA,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,aAAO,EAAE,SAAS,OAAO,OAAO,cAAc,cAAc;AAAA,IAC9D;AAAA,EACF;AAEF;;;ACpFA,SAAS,eAAe,YAAY,kBAAiD;;;ACqBrF,IAAI,gBAAgB;AAEb,SAAS,eAAe,OAAqB,QAAqC;AACvF,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,MAAM,OAAO,KAAK;AAAA,IAEvC,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,aAAa,MAAM,QAAQ,KAAK;AAAA,IAErD,KAAK,mBAAmB;AACtB,YAAM,QAAsB;AAAA,QAC1B,IAAI,OAAO,eAAe;AAAA,QAC1B,OAAO,OAAO;AAAA,QACd,WAAW,KAAK,IAAI;AAAA,QACpB,SAAS;AAAA,QACT,UAAU,OAAO,OAAO,MAAM;AAAA,QAC9B,eAAe,OAAO,OAAO;AAAA,MAC/B;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,QACb,QAAQ,OAAO;AAAA,QACf,SAAS,CAAC,OAAO,GAAG,MAAM,OAAO;AAAA,QACjC,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAEA,KAAK,iBAAiB;AACpB,YAAM,QAAsB;AAAA,QAC1B,IAAI,OAAO,eAAe;AAAA,QAC1B,OAAO,OAAO;AAAA,QACd,WAAW,KAAK,IAAI;AAAA,QACpB,SAAS;AAAA,QACT,eAAe,OAAO,OAAO;AAAA,MAC/B;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,QACb,QAAQ,OAAO;AAAA,QACf,SAAS,CAAC,OAAO,GAAG,MAAM,OAAO;AAAA,QACjC,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAEA,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,QAAQ,KAAK;AAAA,IAElC,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,WAAW,OAAO,IAAI;AAAA,IAE3C,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,SAAS,OAAO,QAAQ;AAAA,IAE7C,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,SAAS,CAAC,EAAE;AAAA,IAEjC,KAAK;AACH,aAAO,EAAE,GAAG,OAAO,MAAM,OAAO,MAAM,WAAW,UAAU;AAAA,IAE7D;AACE,aAAO;AAAA,EACX;AACF;AAEO,IAAM,sBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS,CAAC;AAAA,EACV,WAAW;AACb;;;ADtEI;AAdJ,IAAM,iBAAiB,cAA0C,IAAI;AAO9D,SAAS,gBAAgB,EAAE,UAAU,YAAY,GAAyB;AAC/E,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,gBAAgB;AAAA,IACnD,GAAG;AAAA,IACH,MAAM,eAAe;AAAA,EACvB,CAAC;AAED,SACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,OAAO,SAAS,GAC/C,UACH;AAEJ;AAEO,SAAS,kBAAuC;AACrD,QAAM,MAAM,WAAW,cAAc;AACrC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACA,SAAO;AACT;;;AEhCA,IAAM,cAAc;AACpB,IAAM,cAAc;AAEb,SAAS,YAAY,MAAc,aAA6B;AACrE,MAAI;AACF,UAAM,MAAM,aAAa,QAAQ,GAAG;AACpC,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,UAAM,UAAU,KAAK,MAAM,GAAG;AAC9B,WAAO,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC;AAAA,EAC7C,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,YAAY,SAAyB,MAAc,aAAmB;AACpF,MAAI;AACF,UAAM,UAAU,QAAQ,MAAM,GAAG,WAAW;AAC5C,iBAAa,QAAQ,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA,EACnD,QAAQ;AAAA,EAER;AACF;;;ACvBA,SAAS,UAAU,aAAa,QAAQ,iBAAiC;AA4CrE,SACE,OAAAC,MADF;AApCG,SAAS,UAAU,EAAE,KAAK,QAAQ,eAAe,GAAG,GAAmB;AAC5E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,WAAW,OAAO,KAAK;AAE7B,QAAM,cAAc,YAAY,MAAM;AACpC,aAAS,UAAU;AACnB,aAAS,KAAK,MAAM,SAAS;AAC7B,aAAS,KAAK,MAAM,aAAa;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,UAAM,cAAc,CAAC,MAAkB;AACrC,UAAI,CAAC,SAAS,WAAW,CAAC,aAAa,QAAS;AAChD,YAAM,OAAO,aAAa,QAAQ,sBAAsB;AACxD,YAAM,OAAQ,EAAE,UAAU,KAAK,OAAO,KAAK,SAAU;AACrD,eAAS,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC;AAAA,IAC1C;AAEA,UAAM,YAAY,MAAM;AACtB,UAAI,SAAS,SAAS;AACpB,iBAAS,UAAU;AACnB,iBAAS,KAAK,MAAM,SAAS;AAC7B,iBAAS,KAAK,MAAM,aAAa;AAAA,MACnC;AAAA,IACF;AAEA,aAAS,iBAAiB,aAAa,WAAW;AAClD,aAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,WAAW;AACrD,eAAS,oBAAoB,WAAW,SAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,qBAAC,SAAI,WAAU,aAAY,KAAK,cAC9B;AAAA,oBAAAA,KAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,QAAQ,GAAG,KAAK,IAAI,GAC1D,eACH;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAU,qBAAoB,aAA0B;AAAA,IAC7D,gBAAAA,KAAC,SAAI,WAAU,qBACZ,kBACH;AAAA,KACF;AAEJ;;;AC5CQ,gBAAAC,YAAA;AAJD,SAAS,OAAO,EAAE,WAAW,MAAM,YAAY,GAAgB;AACpE,SACE,gBAAAA,KAAC,SAAI,WAAU,YACZ,eAAK,IAAI,CAAC,QACT,gBAAAA;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,gBAAgB,cAAc,IAAI,KAAK,2BAA2B,EAAE;AAAA,MAC/E,SAAS,MAAM,YAAY,IAAI,EAAE;AAAA,MAEhC,cAAI;AAAA;AAAA,IAJA,IAAI;AAAA,EAKX,CACD,GACH;AAEJ;;;ACpBA,SAAS,UAAAC,eAAc;AACvB,OAAO,YAA8B;;;ACCrC,IAAM,WAAW;AAAA;AAAA,EAEf;AAAA,EAAO;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAa;AAAA,EACrD;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA;AAAA,EAG5B;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAS;AAAA,EAAa;AAAA;AAAA,EAGhE;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAO;AAAA;AAAA,EAGnC;AAAA,EAAO;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAS;AAAA,EAAY;AAAA;AAAA,EAGlE;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAS;AAAA;AAAA,EAGxB;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAQ;AAAA;AAAA,EAGzE;AAAA,EAAM;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAM;AAAA;AAAA,EAG/B;AAAA,EAAa;AAAA,EAAY;AAAA,EAAU;AAAA,EAAgB;AAAA,EAAS;AAAA,EAC5D;AAAA,EAAU;AAAA,EAAU;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAY;AAAA;AAAA,EAGpD;AAAA,EAAS;AAAA,EAAU;AAAA,EAAW;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAa;AAAA;AAAA,EAGzE;AAAA,EAAU;AAAA,EAAW;AAAA,EAAW;AAAA,EAAY;AAAA,EAAM;AAAA,EAAS;AAAA,EAC3D;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAc;AAAA,EAAO;AAAA,EAAU;AAAA,EAC5D;AAAA,EAAU;AAAA;AAAA,EAGV;AAAA,EAAQ;AAAA;AAAA,EAGR;AAAA,EAAa;AAAA,EAAS;AAAA,EAAW;AAAA,EAAY;AAAA;AAAA,EAG7C;AAAA,EAAQ;AAAA,EAAS;AAAA;AAAA,EAGjB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EAAW;AAAA,EAC1D;AAAA,EAAU;AAAA,EAAa;AAAA,EAAU;AAAA;AAAA,EAGjC;AAAA,EAAY;AAAA,EAAW;AAAA;AAAA,EAGvB;AAAA,EAAO;AAAA,EAAa;AAAA,EAAW;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAW;AAAA;AAAA,EAGzE;AAAA,EAAkB;AAAA,EAAY;AAAA,EAAU;AAAA;AAAA,EAGxC;AAAA,EAAU;AAAA,EAAS;AAAA,EAAS;AAAA;AAAA,EAG5B;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AACtB;AAEA,IAAM,UAAU,CAAC,QAAQ,QAAQ,MAAM;AACvC,IAAM,oBAAoB,CAAC,MAAM;AACjC,IAAM,WAAW,CAAC,QAAQ,QAAQ,OAAO;AAEzC,IAAM,gBAAgB;AAAA;AAAA,EAEpB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA;AAAA,EAEzC;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAU;AAAA;AAAA,EAE9C;AAAA,EAAU;AAAA;AAAA,EAEV;AAAA,EAAQ;AAAA;AAAA,EAER;AAAA,EAAQ;AAAA;AAAA,EAER;AAAA;AAAA,EAEA;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAY;AAAA;AAAA,EAExC;AAAA,EAAS;AAAA,EAAS;AAAA,EAAc;AAAA,EAAe;AAAA,EAAgB;AAAA;AAAA,EAE/D;AAAA;AAAA,EAEA;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAU;AAAA;AAAA,EAE5B;AACF;AAEO,IAAM,wBAAoD;AAAA,EAC/D,cAAc;AAAA,EACd,YAAY;AAAA,EAEZ,UAAU,CAAC,GAAG,UAAU,GAAG,SAAS,GAAG,iBAAiB;AAAA,EACxD,WAAW;AAAA,EACX,cAAc;AAAA,EAEd,WAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,EAEpH,WAAW;AAAA,IACT,MAAM;AAAA;AAAA,MAEJ,CAAC,OAAO,SAAS;AAAA;AAAA,MAGjB,CAAC,MAAM,UAAU;AAAA;AAAA,MAGjB,CAAC,kBAAkB,KAAK;AAAA;AAAA,MAGxB,CAAC,YAAY,UAAU;AAAA;AAAA,MAGvB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAGA,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB,CAAC,aAAa,WAAW;AAAA;AAAA,MAGzB,CAAC,0DAA0D,QAAQ;AAAA;AAAA,MAGnE,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,KAAK,EAAE,OAAO,gBAAgB,SAAS,SAAS,MAAM,UAAU,CAAC;AAAA;AAAA,MAGlE,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,KAAK,EAAE,OAAO,gBAAgB,SAAS,SAAS,MAAM,gBAAgB,CAAC;AAAA;AAAA,MAGxE,CAAC,cAAc,UAAU;AAAA,MACzB,CAAC,2BAA2B,UAAU;AAAA,MACtC,CAAC,gBAAgB,UAAU;AAAA,MAC3B,CAAC,QAAQ,UAAU;AAAA;AAAA,MAGnB,CAAC,qBAAqB,UAAU;AAAA;AAAA,MAGhC,CAAC,QAAQ,WAAW;AAAA,IACtB;AAAA,IAEA,QAAQ;AAAA,MACN,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,OAAO,eAAe;AAAA,MACvB,CAAC,KAAK,EAAE,OAAO,gBAAgB,SAAS,UAAU,MAAM,OAAO,CAAC;AAAA,IAClE;AAAA,IAEA,cAAc;AAAA,MACZ,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,OAAO,eAAe;AAAA,MACvB,CAAC,KAAK,EAAE,OAAO,gBAAgB,SAAS,UAAU,MAAM,OAAO,CAAC;AAAA,IAClE;AAAA,IAEA,YAAY;AAAA,MACV,CAAC,cAAc,OAAO;AAAA,IACxB;AAAA,EACF;AACF;AAEO,IAAM,2BAA4D;AAAA,EACvE,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE;AAAA,IAC3C,EAAE,MAAM,KAAK,OAAO,KAAK,OAAO,CAAC,QAAQ,EAAE;AAAA,EAC7C;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAC1B;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AACF;;;AC5MO,IAAM,sBAAmD;AAAA,EAC9D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,IACL,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,OAAO;AAAA,IAC5D,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,UAAU,YAAY,UAAU,WAAW,OAAO;AAAA,IAC3D,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,OAAO,YAAY,UAAU,WAAW,OAAO;AAAA,EAC1D;AAAA,EACA,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA,EACvC;AACF;AAEO,IAAM,qBAAkD;AAAA,EAC7D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,IACL,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,OAAO;AAAA,IAC5D,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,UAAU,YAAY,UAAU,WAAW,OAAO;AAAA,IAC3D,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,OAAO,YAAY,UAAU,WAAW,OAAO;AAAA,EAC1D;AAAA,EACA,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA,EACvC;AACF;AAEO,IAAM,oBAAiD;AAAA,EAC5D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,IACL,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,OAAO;AAAA,IAC5D,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,UAAU,YAAY,UAAU,WAAW,OAAO;AAAA,IAC3D,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,OAAO,YAAY,UAAU,WAAW,OAAO;AAAA,EAC1D;AAAA,EACA,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA,EACvC;AACF;AAEO,IAAM,mBAAgD;AAAA,EAC3D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,IACL,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,OAAO;AAAA,IAC5D,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,UAAU,YAAY,UAAU,WAAW,OAAO;AAAA,IAC3D,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,OAAO,YAAY,UAAU,WAAW,OAAO;AAAA,EAC1D;AAAA,EACA,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA,EACvC;AACF;;;AC7FA,IAAI,aAAa;AAEV,SAAS,oBAAoB,QAA8C;AAChF,MAAI,WAAY;AAEhB,SAAO,UAAU,SAAS,EAAE,IAAI,MAAM,CAAC;AACvC,SAAO,UAAU,yBAAyB,OAAO,qBAAqB;AACtE,SAAO,UAAU,yBAAyB,OAAO,wBAAwB;AACzE,SAAO,OAAO,YAAY,gBAAgB,gBAAgB;AAC1D,SAAO,OAAO,YAAY,iBAAiB,iBAAiB;AAC5D,SAAO,OAAO,YAAY,kBAAkB,kBAAkB;AAC9D,SAAO,OAAO,YAAY,mBAAmB,mBAAmB;AAEhE,eAAa;AACf;;;AHmBI,gBAAAC,YAAA;AAxBG,SAAS,YAAY,EAAE,MAAM,UAAU,OAAO,QAAQ,QAAQ,GAAqB;AACxF,QAAM,YAAYC,QAA4C,IAAI;AAClE,QAAM,WAAWA,QAAO,KAAK;AAC7B,WAAS,UAAU;AAEnB,QAAM,cAAuB,CAAC,QAAQ,WAAW;AAC/C,cAAU,UAAU;AACpB,wBAAoB,MAAM;AAE1B,WAAO,UAAU;AAAA,MACf,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,CAAC,OAAO,OAAO,UAAU,OAAO,QAAQ,KAAK;AAAA,MAC1D,KAAK,MAAM;AACT,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,CAAC,WAA2C;AACpE,wBAAoB,MAAM;AAAA,EAC5B;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP,UAAS;AAAA,MACT,OAAO,UAAU,UAAU,kBAAkB;AAAA,MAC7C,OAAO;AAAA,MACP,UAAU,CAAC,UAAU,SAAS,SAAS,EAAE;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,QACP,SAAS,EAAE,SAAS,MAAM;AAAA,QAC1B,aAAa;AAAA,QACb,aAAa;AAAA,QACb,SAAS;AAAA,QACT,sBAAsB;AAAA,QACtB,qBAAqB;AAAA,QACrB,sBAAsB;AAAA,QACtB,WAAW,EAAE,UAAU,QAAQ,YAAY,OAAO;AAAA,QAClD,oBAAoB;AAAA,QACpB,2BAA2B;AAAA,QAC3B,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE;AAAA,QAC7B,UAAU;AAAA,QACV,iBAAiB;AAAA,MACnB;AAAA;AAAA,EACF;AAEJ;;;AIvCY,gBAAAE,MACA,QAAAC,aADA;AAdL,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,SACE,gBAAAA,MAAC,SAAI,WAAU,sBACb;AAAA,oBAAAA,MAAC,SAAI,WAAU,4BACZ;AAAA,yBACC,gBAAAA,MAAC,UAAK,WAAU,yEACd;AAAA,wBAAAD,KAAC,UAAK,WAAW,0EAA0E,gBAAgB,IAAI,oBAAC;AAAA,QAChH,gBAAAC,MAAC,UAAK;AAAA;AAAA,UAAE;AAAA,UAAgB;AAAA,WAAC;AAAA,SAC3B,IAEA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS;AAAA,UAET;AAAA,4BAAAD,KAAC,UAAK,WAAW,0EAA0E,gBAAgB,IAAI,oBAAC;AAAA,YAChH,gBAAAC,MAAC,UAAK;AAAA;AAAA,cAAE;AAAA,cAAgB;AAAA,eAAC;AAAA;AAAA;AAAA,MAC3B;AAAA,MAEF,gBAAAD,KAAC,UAAK,WAAU,4BAA2B,+BAAiB;AAAA,OAC9D;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAU,+BACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACX;AAAA;AAAA,MAED;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UAET,wBAAc,iBAAiB;AAAA;AAAA,MAClC;AAAA,OACF;AAAA,KACF;AAEJ;;;ACpDO,SAAS,cAAc,OAA4B;AACxD,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO,EAAE,OAAO,0BAA0B,QAAQ,KAAK;AAAA,EACzD;AAIA,QAAM,IAAK,MAA6B;AACxC,MAAI,OAAO,MAAM,UAAU;AACzB,YAAQ,GAAG;AAAA,MACT,KAAK;AACH,eAAO,EAAE,OAAO,0BAA0B,QAAQ,KAAK;AAAA,MACzD,KAAK;AACH,eAAO,EAAE,OAAO,iCAAiC;AAAA,MACnD,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MACzD,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAC7D,KAAK;AAAA,MAAU,KAAK;AAAA,MAAU,KAAK;AACjC,eAAO,EAAE,OAAO,gCAAgC;AAAA,MAClD,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAY,KAAK;AAAA,MAAQ,KAAK;AAC9C,eAAO,EAAE,OAAO,8BAA8B;AAAA,MAChD,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAC/B,eAAO,EAAE,OAAO,8BAA8B;AAAA,MAChD,KAAK;AACH,eAAO,EAAE,OAAO,gCAAgC;AAAA,MAClD,KAAK;AACH,eAAO,EAAE,OAAO,6BAA6B;AAAA,IACjD;AAAA,EACF;AAGA,UAAQ,OAAO,OAAO;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,OAAO,gCAAgC;AAAA,IAClD,KAAK;AACH,aAAO,EAAE,OAAO,iCAAiC;AAAA,IACnD,KAAK;AACH,aAAO,EAAE,OAAO,gCAAgC;AAAA,IAClD;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAEO,SAAS,YAAY,OAAwB;AAClD,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,UAAU,YAAY,OAAQ,MAAc,SAAS,UAAU;AACxE,WAAO,MAAM,SAAS;AAAA,EACxB;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,SAAS;AAAA,EACxB;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AACA,SAAO,OAAO,KAAK;AACrB;;;ACpDM,SAIQ,OAAAE,MAJR,QAAAC,aAAA;AAPC,SAAS,aAAa,EAAE,KAAK,GAAsB;AACxD,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,UAAU,OAAO,KAAK,KAAK,CAAC,CAAC;AAEnC,SACE,gBAAAD,KAAC,SAAI,WAAU,eACb,0BAAAC,MAAC,WAAM,WAAU,sBACf;AAAA,oBAAAD,KAAC,WACC,0BAAAA,KAAC,QACE,kBAAQ,IAAI,CAAC,QACZ,gBAAAA,KAAC,QAAc,iBAAN,GAAU,CACpB,GACH,GACF;AAAA,IACA,gBAAAA,KAAC,WACE,eAAK,IAAI,CAAC,KAAK,MACd,gBAAAA,KAAC,QACE,kBAAQ,IAAI,CAAC,QAAQ;AACpB,YAAM,KAAK,cAAc,IAAI,GAAG,CAAC;AACjC,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO;AAAA,YACL,OAAO,GAAG;AAAA,YACV,WAAW,GAAG,SAAS,WAAW;AAAA,UACpC;AAAA,UAEC,sBAAY,IAAI,GAAG,CAAC;AAAA;AAAA,QANhB;AAAA,MAOP;AAAA,IAEJ,CAAC,KAdM,CAeT,CACD,GACH;AAAA,KACF,GACF;AAEJ;;;ACmFM,gBAAAE,YAAA;AAxHN,SAAS,QAAQ,QAAgB,MAAsB;AACrD,SAAO,OAAO,MAAM,IAAI,EAAE,OAAO,CAAC,KAAK;AACzC;AAEA,SAAS,WAAW,GAAuB;AACzC,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,SAAS,EAAE,IAAI,EAAE;AAC5B,QAAM,KAAK,KAAK,EAAE,OAAO,EAAE;AAC3B,QAAM,KAAK,EAAE;AAEb,MAAI,EAAE,UAAU,QAAQ,QAAQ,EAAE,SAAS,UAAU,MAAM;AACzD,UAAM,EAAE,MAAM,UAAU,MAAM,OAAO,IAAI,EAAE;AAC3C,UAAM,YAAY,EAAE,aAAa;AAEjC,UAAM,KAAK,UAAU;AACrB,UAAM,KAAK,UAAU,IAAI,YAAY,MAAM,EAAE;AAC7C,UAAM,KAAK,EAAE;AAEb,UAAM,cAAc,QAAQ,WAAW,IAAI;AAE3C,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,KAAK,IAAI,WAAW,WAAW,EAAE;AAC5C,UAAM,gBAAgB,YAAY,QAAQ,QAAQ,MAAM,KACpD,YAAY,QAAQ,QAAQ,IAC5B;AACJ,UAAM,KAAK,cAAc,IAAI,OAAO,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,MAAM,CAAC,EAAE;AAClF,UAAM,KAAK,YAAY;AAEvB,UAAM,YAAY,EAAE,SAAS;AAC7B,QAAI,WAAW;AACb,YAAM,iBAAiB,gBAAgB,KAAK,MAAM,SAAS,SAAS,CAAC;AACrE,YAAM,YAAY,KAAK,MAAM,UAAU,SAAS,CAAC;AACjD,YAAM,cAAc,YAAY,iBAAiB,IAAI,iBAAiB;AACtE,YAAM,KAAK,cAAc,IAAI,OAAO,WAAW,CAAC,GAAG,SAAS,EAAE;AAAA,IAChE;AACA,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,EAAE,MAAM;AACV,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,KAAK,EAAE,IAAI,EAAE;AACxB,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,EAAE,MAAM,SAAS,GAAG;AACtB,UAAM,KAAK,OAAO;AAClB,eAAW,QAAQ,EAAE,OAAO;AAC1B,YAAM,KAAK,YAAY,IAAI,EAAE;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,aAAa,GAAe,OAAuB;AAC1D,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAS,UAAU,IAAI,KAAK;AAClC,QAAM,SAAS,UAAU,IAAI,KAAK;AAElC,QAAM,KAAK,GAAG,MAAM,GAAG,MAAM,SAAS,EAAE,IAAI,KAAK,EAAE,OAAO,EAAE;AAE5D,MAAI,EAAE,UAAU,QAAQ,QAAQ,EAAE,SAAS,UAAU,MAAM;AACzD,UAAM,EAAE,MAAM,UAAU,MAAM,OAAO,IAAI,EAAE;AAC3C,UAAM,YAAY,EAAE,aAAa;AAEjC,UAAM,SAAS,YAAY,IAAI,QAAQ,MAAM;AAC7C,UAAM,KAAK,GAAG,MAAM,QAAQ,MAAM,UAAU,IAAI,YAAY,MAAM,GAAG;AACrE,UAAM,KAAK,EAAE;AAEb,UAAM,cAAc,QAAQ,WAAW,IAAI;AAC3C,UAAM,KAAK,GAAG,MAAM,KAAK,IAAI,WAAW,WAAW,EAAE;AACrD,UAAM,gBAAgB,YAAY,QAAQ,QAAQ,MAAM,KACpD,YAAY,QAAQ,QAAQ,IAC5B;AACJ,UAAM,KAAK,GAAG,MAAM,cAAc,IAAI,OAAO,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,MAAM,CAAC,EAAE;AAE3F,UAAM,YAAY,EAAE,SAAS;AAC7B,QAAI,WAAW;AACb,YAAM,iBAAiB,gBAAgB,KAAK,MAAM,SAAS,SAAS,CAAC;AACrE,YAAM,YAAY,KAAK,MAAM,UAAU,SAAS,CAAC;AACjD,YAAM,cAAc,YAAY,iBAAiB,IAAI,iBAAiB;AACtE,YAAM,KAAK,GAAG,MAAM,cAAc,IAAI,OAAO,WAAW,CAAC,GAAG,SAAS,EAAE;AAAA,IACzE;AACA,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,EAAE,OAAO;AACX,UAAM,KAAK,aAAa,EAAE,OAAO,QAAQ,CAAC,CAAC;AAAA,EAC7C;AAEA,MAAI,EAAE,MAAM;AACV,UAAM,KAAK,GAAG,MAAM,WAAW,EAAE,IAAI,EAAE;AAAA,EACzC;AAEA,MAAI,EAAE,MAAM,SAAS,GAAG;AACtB,eAAW,QAAQ,EAAE,OAAO;AAC1B,YAAM,KAAK,GAAG,MAAM,WAAW,IAAI,EAAE;AAAA,IACvC;AAAA,EACF;AAEA,MAAI,QAAQ,GAAG;AACb,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,iBAAiB,GAAuB;AAC/C,MAAI,EAAE,OAAO;AACX,WAAO,aAAa,GAAG,CAAC;AAAA,EAC1B;AACA,SAAO,WAAW,CAAC;AACrB;AAEO,SAAS,aAAa,EAAE,SAAS,WAAW,GAAsB;AACvE,QAAM,OAAO,aAAa,iBAAiB,UAAU,IAAI;AAAA,IAAY,OAAO;AAE5E,SACE,gBAAAA,KAAC,SAAI,WAAU,sBACb,0BAAAA,KAAC,SAAK,gBAAK,GACb;AAEJ;;;AChII,gBAAAC,YAAA;AAFG,SAAS,eAAe;AAC7B,SACE,gBAAAA,KAAC,SAAI,WAAU,sBAAqB,gCAEpC;AAEJ;;;ACNA,SAAS,eAAAC,oBAAmB;AAwCpB,SAIA,OAAAC,MAJA,QAAAC,aAAA;AA/BD,SAAS,iBAAiB,EAAE,UAAU,eAAe,KAAK,GAA0B;AACzF,QAAM,YAAYC,aAAY,MAAM;AAClC,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG;AAChC,UAAM,UAAU,OAAO,KAAK,KAAK,CAAC,CAAC;AACnC,UAAM,SAAS,QAAQ,KAAK,GAAG;AAC/B,UAAM,OAAO,KAAK;AAAA,MAAI,SACpB,QAAQ,IAAI,SAAO;AACjB,cAAM,MAAM,YAAY,IAAI,GAAG,CAAC;AAChC,eAAO,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,IAAI,IAC9D,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,MAC3B;AAAA,MACN,CAAC,EAAE,KAAK,GAAG;AAAA,IACb;AACA,cAAU,UAAU,UAAU,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,EAC5D,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,aAAaA,aAAY,MAAM;AACnC,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG;AAChC,UAAM,aAAa,KAAK,IAAI,SAAO;AACjC,YAAM,MAA8B,CAAC;AACrC,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC5C,YAAI,GAAG,IAAI,YAAY,GAAG;AAAA,MAC5B;AACA,aAAO;AAAA,IACT,CAAC;AACD,cAAU,UAAU,UAAU,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AAAA,EACnE,GAAG,CAAC,IAAI,CAAC;AAET,SACE,gBAAAD,MAAC,SAAI,WAAU,kBACb;AAAA,oBAAAA,MAAC,SAAI,WAAU,wBACb;AAAA,sBAAAA,MAAC,UAAM;AAAA;AAAA,QAAS;AAAA,QAAK,aAAa,IAAI,MAAM;AAAA,SAAG;AAAA,MAC/C,gBAAAA,MAAC,UAAK;AAAA;AAAA,QAAE;AAAA,QAAc;AAAA,SAAG;AAAA,OAC3B;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAU,2BACb;AAAA,sBAAAD,KAAC,YAAO,WAAU,uBAAsB,SAAS,WAAW,OAAM,eAAc,mBAEhF;AAAA,MACA,gBAAAA,KAAC,YAAO,WAAU,uBAAsB,SAAS,YAAY,OAAM,gBAAe,oBAElF;AAAA,OACF;AAAA,KACF;AAEJ;;;ACxCM,SAgBF,UAhBE,OAAAG,OAgBF,QAAAC,aAhBE;AAHC,SAAS,aAAa,EAAE,OAAO,GAAsB;AAC1D,MAAI,CAAC,QAAQ;AACX,WACE,gBAAAD,MAAC,SAAI,WAAU,sBAAqB,0CAEpC;AAAA,EAEJ;AAEA,MAAI,CAAC,OAAO,WAAW,OAAO,OAAO;AACnC,WAAO,gBAAAA,MAAC,gBAAa,SAAS,OAAO,OAAO,YAAY,OAAO,YAAY;AAAA,EAC7E;AAEA,QAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO,gBAAAA,MAAC,gBAAa;AAAA,EACvB;AAEA,SACE,gBAAAC,MAAA,YACE;AAAA,oBAAAD,MAAC,gBAAa,MAAY;AAAA,IAC1B,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,KAAK;AAAA,QACf,eAAe,OAAO;AAAA,QACtB;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;ACtCA,SAAS,aAAAE,YAAW,YAAAC,iBAAgB;;;ACApC,SAAS,YAAAC,iBAAgC;AAgBnC,SAKI,OAAAC,OALJ,QAAAC,aAAA;AANC,SAAS,WAAW,EAAE,OAAO,YAAY,MAAM,WAAW,SAAS,GAAoB;AAC5F,QAAM,CAAC,UAAU,WAAW,IAAIF,UAAS,KAAK;AAC9C,QAAM,cAAc,CAAC,CAAC;AAEtB,SACE,gBAAAE,MAAC,SAAI,WAAU,oBACb;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM,eAAe,YAAY,CAAC,QAAQ;AAAA,QAElD;AAAA,yBACC,gBAAAD,MAAC,UAAK,WAAU,2BACb,qBAAW,WAAM,UACpB;AAAA,UAED,CAAC,eAAe,gBAAAA,MAAC,UAAK,WAAU,2BAA0B;AAAA,UAC1D,QAAQ,gBAAAA,MAAC,UAAK,WAAW,YAAY,2BAA2B,YAAY,yBAA0B,gBAAK;AAAA,UAC5G,gBAAAA,MAAC,UAAK,WAAW,yBAAyB,aAAa,IAAI,UAAU,KAAK,EAAE,IACzE,iBACH;AAAA;AAAA;AAAA,IACF;AAAA,IACC,YAAY,eACX,gBAAAA,MAAC,SAAI,WAAU,6BACZ,UACH;AAAA,KAEJ;AAEJ;;;AD0MM,SAYA,YAAAE,WAZA,OAAAC,OAYA,QAAAC,aAZA;AAxNN,IAAM,aAAqC;AAAA,EACzC,GAAG;AAAA,EAAU,GAAG;AAAA,EAChB,GAAG;AAAA,EAAQ,GAAG;AAAA,EAAQ,GAAG;AAAA,EAAQ,GAAG;AAAA,EAAQ,GAAG;AAAA,EAC/C,GAAG;AAAA,EACH,GAAG;AAAA,EAAS,IAAI;AAAA,EAAS,IAAI;AAAA,EAAS,IAAI;AAAA,EAAS,IAAI;AAAA,EACvD,IAAI;AAAA,EAAW,IAAI;AAAA,EAAQ,IAAI;AAAA,EAAY,IAAI;AAAA,EAAQ,IAAI;AAAA,EAC3D,IAAI;AAAA,EAAc,IAAI;AAAA,EAAS,IAAI;AAAA,EAAS,IAAI;AAAA,EAChD,IAAI;AAAA,EAAO,IAAI;AAAA,EAAW,IAAI;AAAA,EAAQ,IAAI;AAAA,EAC1C,IAAI;AAAA,EAAgB,IAAI;AAC1B;AAGA,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,yBAAyB;AAE/B,SAAS,gBAAgB,QAAwB;AAC/C,QAAM,cAAc,SAAS,SAAU;AACvC,QAAM,SAAS,SAAS;AACxB,QAAM,OAAO,WAAW,MAAM,KAAK,WAAW,MAAM;AACpD,SAAO,aAAa,GAAG,IAAI,MAAM;AACnC;AAEA,SAAS,WAAW,OAAwB;AAC1C,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,SAAU,QAAO,OAAO,KAAK;AAClD,MAAI,SAAS,OAAO,UAAU,YAAY,OAAQ,MAAiC,YAAY,YAAY;AACzG,UAAM,IAAK,MAAiC,QAAQ;AACpD,QAAI,OAAO,MAAM,SAAU,QAAO;AAClC,QAAI,OAAO,MAAM,SAAU,QAAO,OAAO,CAAC;AAAA,EAC5C;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,WAAW,OAAwB;AAC1C,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,SAAS,OAAO,UAAU,YAAY,OAAQ,MAAiC,YAAY,YAAY;AACzG,UAAM,IAAK,MAAiC,QAAQ;AACpD,QAAI,OAAO,MAAM,SAAU,QAAO;AAAA,EACpC;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,eAAe,UAAU,UAAoB,OAAmD;AAC9F,QAAM,SAAS,MAAM,SAAS,QAAQ,KAAK;AAC3C,SAAO,OAAO,WAAW,OAAO,OAAO,OAAO,OAAO,CAAC;AACxD;AAEA,SAAS,eAAe,UAAsC;AAC5D,QAAM,OAAO,SAAS,QAAQ,OAAO,EAAE;AACvC,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IAAU,KAAK;AAAA,IACpB,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IACzD,KAAK;AAAA,IAAS,KAAK;AAAA,IAAS,KAAK;AAAA,IAAS,KAAK;AAAA,IAAS,KAAK;AAAA,IAC7D,KAAK;AAAA,IAAO,KAAK;AAAA,IAAQ,KAAK;AAC5B,aAAO;AAAA,IACT,KAAK;AAAA,IAAQ,KAAK;AAChB,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAY,KAAK;AAAA,IAAQ,KAAK;AAC9C,aAAO;AAAA,IACT,KAAK;AAAA,IAAc,KAAK;AAAA,IAAS,KAAK;AAAA,IAAS,KAAK;AAClD,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,kBAAoE;AAAA,EACxE,EAAE,KAAK,SAAS,OAAO,SAAS;AAAA,EAChC,EAAE,KAAK,UAAU,OAAO,iBAAiB;AAAA,EACzC,EAAE,KAAK,QAAQ,OAAO,QAAQ;AAAA,EAC9B,EAAE,KAAK,cAAc,OAAO,eAAe;AAAA,EAC3C,EAAE,KAAK,aAAa,OAAO,aAAa;AAAA,EACxC,EAAE,KAAK,WAAW,OAAO,WAAW;AAAA,EACpC,EAAE,KAAK,QAAQ,OAAO,QAAQ;AAAA,EAC9B,EAAE,KAAK,SAAS,OAAO,SAAS;AAAA,EAChC,EAAE,KAAK,cAAc,OAAO,eAAe;AAAA,EAC3C,EAAE,KAAK,aAAa,OAAO,aAAa;AAC1C;AAEO,SAAS,cAAc,EAAE,SAAS,GAAuB;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAIC,UAA0B,CAAC,CAAC;AAChE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,IAAI;AAE3C,QAAM,aAAa,YAAY;AAC7B,eAAW,IAAI;AACf,QAAI;AACF,YAAM,CAAC,QAAQ,WAAW,UAAU,YAAY,QAAQ,SAAS,eAAe,UAAU,aAAa,UAAU,WAAW,UAAU,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,QACvK,UAAU,UAAU,0CAA0C;AAAA,QAC9D,UAAU,UAAU,oDAAoD;AAAA,QACxE,UAAU,UAAU,yDAAyD;AAAA,QAC7E,UAAU,UAAU,4DAA4D;AAAA,QAChF,UAAU,UAAU,yDAAyD;AAAA,QAC7E,UAAU,UAAU,2EAA2E;AAAA,QAC/F,UAAU,UAAU,4EAA4E;AAAA,QAChG,UAAU,UAAU,wDAAwD;AAAA,QAC5E,UAAU,UAAU,sDAAsD;AAAA,QAC1E,UAAU,UAAU,mDAAmD;AAAA,QACvE,UAAU,UAAU,oDAAoD;AAAA,QACxE,UAAU,UAAU,0DAA0D;AAAA,QAC9E,UAAU,UAAU,sCAAsC;AAAA,MAC5D,CAAC;AAGD,YAAM,QAAQ,oBAAI,IAAoB;AACtC,iBAAW,OAAO,QAAQ;AACxB,cAAM,IAAI,WAAW,IAAI,EAAE,GAAG,WAAW,IAAI,IAAI,CAAC;AAAA,MACpD;AAGA,YAAM,kBAAkB,oBAAI,IAA0B;AAEtD,YAAM,aAAa,oBAAI,IAAgE;AACvF,iBAAW,OAAO,SAAS;AACzB,cAAM,MAAM,GAAG,WAAW,IAAI,WAAW,CAAC,IAAI,WAAW,IAAI,SAAS,CAAC;AACvE,YAAI,CAAC,WAAW,IAAI,GAAG,EAAG,YAAW,IAAI,KAAK,CAAC,CAAC;AAChD,mBAAW,IAAI,GAAG,EAAG,KAAK;AAAA,UACxB,MAAM,WAAW,IAAI,IAAI;AAAA,UACzB,MAAM,gBAAgB,WAAW,IAAI,IAAI,CAAC;AAAA,UAC1C,UAAU,WAAW,IAAI,QAAQ;AAAA,QACnC,CAAC;AAAA,MACH;AACA,iBAAW,OAAO,eAAe;AAC/B,cAAM,MAAM,GAAG,kBAAkB,IAAI,WAAW,IAAI,SAAS,CAAC;AAC9D,YAAI,CAAC,WAAW,IAAI,GAAG,EAAG,YAAW,IAAI,KAAK,CAAC,CAAC;AAChD,mBAAW,IAAI,GAAG,EAAG,KAAK;AAAA,UACxB,MAAM,WAAW,IAAI,IAAI;AAAA,UACzB,MAAM,gBAAgB,WAAW,IAAI,IAAI,CAAC;AAAA,UAC1C,UAAU,WAAW,IAAI,QAAQ;AAAA,QACnC,CAAC;AAAA,MACH;AACA,iBAAW,CAAC,KAAK,IAAI,KAAK,YAAY;AACpC,aAAK,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAC3C,wBAAgB,IAAI,KAAK,KAAK,IAAI,QAAM,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,MAC1E;AAGA,YAAM,YAAY,oBAAI,IAA0B;AAEhD,YAAM,YAAY,CAAC,IAAY,MAAc,MAAc,UAAkC,eAAuB;AAClH,YAAI,CAAC,UAAU,IAAI,IAAI,EAAG,WAAU,IAAI,MAAM,CAAC,CAAC;AAChD,cAAM,UAAU,gBAAgB,IAAI,GAAG,UAAU,IAAI,EAAE,EAAE,KAAK,CAAC;AAC/D,kBAAU,IAAI,IAAI,EAAG,KAAK,EAAE,MAAM,WAAW,IAAI,GAAG,UAAU,QAAQ,CAAC;AAAA,MACzE;AAEA,iBAAW,OAAO,WAAW;AAC3B,kBAAU,WAAW,IAAI,EAAE,GAAG,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,SAAS,iBAAiB;AAAA,MAC9G;AACA,iBAAW,OAAO,UAAU;AAC1B,kBAAU,WAAW,IAAI,EAAE,GAAG,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,QAAQ,gBAAgB;AAAA,MAC5G;AACA,iBAAW,OAAO,YAAY;AAC5B,kBAAU,WAAW,IAAI,EAAE,GAAG,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,UAAU,kBAAkB;AAAA,MAChH;AACA,iBAAW,OAAO,QAAQ;AACxB,kBAAU,WAAW,IAAI,EAAE,GAAG,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,cAAc,sBAAsB;AAAA,MACxH;AAEA,YAAM,gBAAgB,CAAC,MAAc,MAAc,aAAqC;AACtF,YAAI,CAAC,UAAU,IAAI,IAAI,EAAG,WAAU,IAAI,MAAM,CAAC,CAAC;AAChD,kBAAU,IAAI,IAAI,EAAG,KAAK,EAAE,MAAM,WAAW,IAAI,GAAG,UAAU,SAAS,CAAC,EAAE,CAAC;AAAA,MAC7E;AAEA,iBAAW,OAAO,UAAU;AAC1B,sBAAc,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,WAAW;AAAA,MAC/E;AACA,iBAAW,OAAO,aAAa;AAC7B,sBAAc,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,SAAS;AAAA,MAC7E;AACA,iBAAW,OAAO,UAAU;AAC1B,sBAAc,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,MAAM;AAAA,MAC1E;AACA,iBAAW,OAAO,WAAW;AAC3B,sBAAc,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,OAAO;AAAA,MAC3E;AACA,iBAAW,OAAO,UAAU;AAC1B,sBAAc,WAAW,IAAI,YAAY,GAAG,WAAW,IAAI,IAAI,GAAG,YAAY;AAAA,MAChF;AAGA,UAAI;AACJ,iBAAW,CAAC,IAAI,IAAI,KAAK,OAAO;AAC9B,YAAI,SAAS,UAAU;AAAE,uBAAa;AAAI;AAAA,QAAO;AAAA,MACnD;AACA,UAAI,eAAe,QAAW;AAC5B,mBAAW,OAAO,eAAe;AAC/B,wBAAc,YAAY,WAAW,IAAI,IAAI,GAAG,WAAW;AAAA,QAC7D;AAAA,MACF;AAGA,YAAM,SAA0B,CAAC;AACjC,iBAAW,CAAC,MAAM,MAAM,KAAK,OAAO;AAClC,cAAM,UAAU,UAAU,IAAI,IAAI,KAAK,CAAC;AACxC,gBAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AACnD,eAAO,KAAK,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACvC;AACA,aAAO,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAElD,oBAAc,MAAM;AAAA,IACtB,QAAQ;AACN,oBAAc,CAAC,CAAC;AAAA,IAClB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,eAAW;AAAA,EACb,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,UACJ,gBAAAH,MAAC,SAAI,WAAU,uBACb,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MAET,oBAAU,iBAAiB;AAAA;AAAA,EAC9B,GACF;AAGF,MAAI,SAAS;AACX,WACE,gBAAAC,MAAAF,WAAA,EACG;AAAA;AAAA,MACD,gBAAAC,MAAC,SAAI,WAAU,sBAAqB,iCAAmB;AAAA,OACzD;AAAA,EAEJ;AAEA,MAAI,WAAW,WAAW,GAAG;AAC3B,WACE,gBAAAC,MAAAF,WAAA,EACG;AAAA;AAAA,MACD,gBAAAC,MAAC,SAAI,WAAU,sBAAqB,+BAAiB;AAAA,OACvD;AAAA,EAEJ;AAEA,SACE,gBAAAC,MAAAF,WAAA,EACG;AAAA;AAAA,IACD,gBAAAC,MAAC,SACE,qBAAW,IAAI,QACd,gBAAAA,MAAC,cAAyB,OAAO,GAAG,MAAM,YAAW,qCAClD,0BAAgB,IAAI,CAAC,EAAE,KAAK,MAAM,MAAM;AACvC,YAAM,UAAU,GAAG,QAAQ,OAAO,OAAK,EAAE,aAAa,GAAG;AACzD,UAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,aACE,gBAAAA,MAAC,cAAqB,OAAO,GAAG,KAAK,KAAK,QAAQ,MAAM,KAAK,YAAW,oCACrE,kBAAQ,IAAI,YACX,gBAAAA,MAAC,cAA6B,OAAO,OAAO,MACzC,iBAAO,QAAQ,SAAS,IACrB,OAAO,QAAQ,IAAI,SACnB,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,IAAI;AAAA,UACX,YAAW;AAAA,UACX,MAAM,IAAI;AAAA,UACV,WAAW,eAAe,IAAI,IAAI;AAAA;AAAA,QAJ7B,IAAI;AAAA,MAKX,CACD,IACC,UAXW,OAAO,IAYxB,CACD,KAfc,GAgBjB;AAAA,IAEJ,CAAC,KAvBc,GAAG,IAwBpB,CACD,GACH;AAAA,KACF;AAEJ;;;AE9SA,SAAS,YAAAI,iBAAgB;;;ACmBjB,gBAAAC,OAEE,QAAAC,aAFF;AAZR,SAAS,gBAAgB,IAAoB;AAC3C,QAAM,IAAI,IAAI,KAAK,EAAE;AACrB,QAAM,KAAK,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAC/C,QAAM,KAAK,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,QAAM,KAAK,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B;AAEO,SAAS,gBAAgB,EAAE,OAAO,QAAQ,GAAsB;AACrE,SACE,gBAAAA,MAAC,SAAI,WAAU,sBAAqB,SAAS,MAAM,QAAQ,MAAM,KAAK,GACpE;AAAA,oBAAAA,MAAC,SAAI,WAAU,2BACb;AAAA,sBAAAD,MAAC,UAAM,0BAAgB,MAAM,SAAS,GAAE;AAAA,MACxC,gBAAAC,MAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,SAAS,GACjE;AAAA,wBAAAA,MAAC,UAAM;AAAA,gBAAM;AAAA,UAAc;AAAA,WAAE;AAAA,QAC7B,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,gCACT,MAAM,UACF,0CACA,qCACN;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAU,4BAA4B,gBAAM,OAAM;AAAA,KACzD;AAEJ;;;ADjBI,SAEI,OAAAE,OAFJ,QAAAC,aAAA;AARG,SAAS,aAAa,EAAE,SAAS,SAAS,GAAsB;AACrE,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAS,EAAE;AAEvC,QAAM,WAAW,SACb,QAAQ,OAAO,OAAK,EAAE,MAAM,YAAY,EAAE,SAAS,OAAO,YAAY,CAAC,CAAC,IACxE;AAEJ,SACE,gBAAAD,MAAC,SAAI,WAAU,eACb;AAAA,oBAAAD,MAAC,SAAI,WAAU,uBACb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,aAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,UAAU,EAAE,OAAO,KAAK;AAAA;AAAA,IAC3C,GACF;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAU,qBACZ,mBAAS,WAAW,IACnB,gBAAAA,MAAC,SAAI,WAAU,sBACZ,kBAAQ,WAAW,IAAI,qBAAqB,yBAC/C,IAEA,SAAS,IAAI,CAAC,UACZ,gBAAAA,MAAC,mBAA+B,OAAc,SAAS,YAAjC,MAAM,EAAqC,CAClE,GAEL;AAAA,KACF;AAEJ;;;AExCA,SAAS,aAAAG,YAAW,UAAAC,eAAc;AAoD5B,SAkBE,YAAAC,WAlBF,OAAAC,OAEA,QAAAC,cAFA;AAnCC,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,WAAWH,QAAuB,IAAI;AAE5C,EAAAD,WAAU,MAAM;AACd,aAAS,mBAAmB,GAAe;AACzC,UAAI,SAAS,WAAW,CAAC,SAAS,QAAQ,SAAS,EAAE,MAAc,GAAG;AACpE,gBAAQ;AAAA,MACV;AAAA,IACF;AACA,aAAS,aAAa,GAAkB;AACtC,UAAI,EAAE,QAAQ,SAAU,SAAQ;AAAA,IAClC;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,aAAS,iBAAiB,WAAW,YAAY;AACjD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,kBAAkB;AAC5D,eAAS,oBAAoB,WAAW,YAAY;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,gBAAgB,SAAS,eAAe,WAAW;AACzD,QAAM,iBAAiB,SAAS,eAAe,WAAW;AAE1D,SACE,gBAAAI,OAAC,SAAI,WAAU,wBAAuB,KAAK,UACzC;AAAA,oBAAAD,MAAC,SAAI,WAAU,gCAA+B,wBAAU;AAAA,IAExD,gBAAAC,OAAC,SAAI,WAAU,+BACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,kCAAkC,SAAS,SAAS,2CAA2C,EAAE;AAAA,UAC5G,SAAS,MAAM,aAAa,MAAM;AAAA,UACnC;AAAA;AAAA,MAED;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,kCAAkC,SAAS,cAAc,2CAA2C,EAAE;AAAA,UACjH,SAAS,MAAM,aAAa,WAAW;AAAA,UACxC;AAAA;AAAA,MAED;AAAA,OACF;AAAA,IAEC,SAAS,eACR,gBAAAC,OAAAF,WAAA,EACE;AAAA,sBAAAE,OAAC,SAAI,WAAU,iCACb;AAAA,wBAAAD,MAAC,UAAK,WAAU,mCAAkC,kBAAI;AAAA,QACtD,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,OAAO;AAAA,YACP,UAAU,CAAC,MAAM,YAAY,EAAE,OAAO,KAAK;AAAA,YAC3C,aAAY;AAAA,YACZ,UAAU,iBAAiB;AAAA;AAAA,QAC7B;AAAA,SACF;AAAA,MACA,gBAAAA,MAAC,SAAI,WAAU,iCACZ,0BACC,gBAAAA,MAAC,YAAO,WAAU,oCAAmC,SAAS,cAAc,0BAE5E,IAEA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU,kBAAkB,CAAC,MAAM,KAAK;AAAA,UAEvC,2BAAiB,oBAAoB;AAAA;AAAA,MACxC,GAEJ;AAAA,OACF;AAAA,IAGF,gBAAAC,OAAC,SAAI,WAAU,gCACb;AAAA,sBAAAD,MAAC,UAAK,WAAW,sEAAsE,MAAM,IAAI,oBAAC;AAAA,MAClG,gBAAAA,MAAC,UAAM,kBAAO;AAAA,OAChB;AAAA,IAEC,SACC,gBAAAA,MAAC,SAAI,WAAU,+BAA+B,iBAAM;AAAA,KAExD;AAEJ;;;AtBiIM,SACE,OAAAE,OADF,QAAAC,cAAA;AAjNN,IAAM,OAAO;AAAA,EACX,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,UAAU,OAAO,SAAS;AAClC;AAEA,IAAM,qBAAqB;AAE3B,SAAS,aAAa,EAAE,UAAU,YAAY,YAAY,QAAQ,QAAQ,GAAiG;AACzK,QAAM,EAAE,OAAO,SAAS,IAAI,gBAAgB;AAC5C,QAAM,mBAAmB,cAAc;AACvC,QAAM,cAAc,YAAY,SAAS,cAAc,WAAW,MAAM;AAExE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC;AAAA,IAC1C,aAAa,WAAW,OAAO;AAAA,EACjC;AACA,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,MAAM;AACvC,QAAI,YAAY,SAAS,YAAa,QAAO,WAAW;AACxD,QAAI;AACF,aAAO,aAAa,QAAQ,kBAAkB,KAAK;AAAA,IACrD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA;AAAA,IAC9C,YAAY,SAAS,cAAc,eAAe;AAAA,EACpD;AACA,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAwB,IAAI;AAC1E,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAmB,QAAQ;AACvE,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAS,KAAK;AACpE,QAAM,cAAcC,QAAsC,IAAI;AAC9D,QAAM,oBAAoBA,QAA6C,IAAI;AAG3E,EAAAC,WAAU,MAAM;AACd,QAAI,iBAAkB;AACtB,QAAI;AACF,mBAAa,QAAQ,oBAAoB,KAAK;AAAA,IAChD,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAAC,OAAO,gBAAgB,CAAC;AAG5B,EAAAA,WAAU,MAAM;AACd,QAAI,mBAAmB,QAAQ;AAC7B,wBAAkB,QAAQ;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,UAAU,cAAc,CAAC;AAG7B,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,YAAa;AAClB,UAAM,MAAM;AAEZ,QAAI,YAAY;AAChB,QAAI,UAAU;AACd,UAAM,aAAa;AAEnB,mBAAe,UAAU;AACvB,UAAI,UAAW;AACf,0BAAoB,YAAY;AAChC,yBAAmB,IAAI;AAEvB,UAAI;AACF,YAAI,YAAY,SAAS;AACvB,sBAAY,QAAQ,WAAW;AAC/B,sBAAY,UAAU;AAAA,QACxB;AAEA,cAAM,SAAS,MAAM,OAAO,WAAW,KAAK,EAAE,WAAW,IAAO,CAAC;AACjE,YAAI,WAAW;AACb,iBAAO,WAAW;AAClB;AAAA,QACF;AACA,oBAAY,UAAU;AACtB,cAAM,aAAa,IAAI,WAAW,MAA6B;AAC/D,0BAAkB,UAAU;AAC5B,4BAAoB,WAAW;AAC/B,kBAAU;AAAA,MACZ,SAAS,KAAK;AACZ,YAAI,UAAW;AACf,4BAAoB,OAAO;AAC3B,2BAAmB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAEnE,0BAAkB,UAAU,WAAW,MAAM;AAC3C,kBAAQ;AAAA,QACV,GAAG,OAAO;AACV,kBAAU,KAAK,IAAI,UAAU,GAAG,UAAU;AAAA,MAC5C;AAAA,IACF;AAEA,YAAQ;AAER,WAAO,MAAM;AACX,kBAAY;AACZ,UAAI,kBAAkB,SAAS;AAC7B,qBAAa,kBAAkB,OAAO;AACtC,0BAAkB,UAAU;AAAA,MAC9B;AACA,UAAI,YAAY,SAAS;AACvB,oBAAY,QAAQ,WAAW;AAC/B,oBAAY,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAGhB,EAAAA,WAAU,MAAM;AACd,UAAM,UAAU,YAAY,UAAU;AACtC,QAAI,QAAQ,SAAS,GAAG;AACtB,eAAS,EAAE,MAAM,gBAAgB,QAAQ,CAAC;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,YAAY,QAAQ,CAAC;AAGzB,EAAAA,WAAU,MAAM;AACd,gBAAY,MAAM,SAAS,UAAU;AAAA,EACvC,GAAG,CAAC,MAAM,SAAS,UAAU,CAAC;AAE9B,QAAM,gBAAgBC,aAAY,YAAY;AAC5C,QAAI,CAAC,MAAM,KAAK,EAAG;AACnB,wBAAoB,YAAY;AAChC,uBAAmB,IAAI;AAEvB,QAAI;AAEF,UAAI,YAAY,SAAS;AACvB,oBAAY,QAAQ,WAAW;AAC/B,oBAAY,UAAU;AAAA,MACxB;AAEA,YAAM,SAAS,MAAM,OAAO,WAAW,OAAO,EAAE,WAAW,IAAO,CAAC;AACnE,kBAAY,UAAU;AACtB,YAAM,aAAa,IAAI,WAAW,MAA6B;AAC/D,wBAAkB,UAAU;AAC5B,0BAAoB,WAAW;AAAA,IACjC,SAAS,KAAK;AACZ,0BAAoB,OAAO;AAC3B,yBAAmB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,IACrE;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,mBAAmBA,aAAY,MAAM;AACzC,QAAI,YAAY,SAAS;AACvB,kBAAY,QAAQ,WAAW;AAC/B,kBAAY,UAAU;AAAA,IACxB;AACA,sBAAkB,QAAQ;AAC1B,sBAAkB,MAAM;AACxB,wBAAoB,WAAW;AAC/B,uBAAmB,IAAI;AAAA,EACzB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,mBAAmBA,aAAY,CAAC,SAAyB;AAC7D,QAAI,SAAS,UAAU,mBAAmB,aAAa;AAErD,UAAI,YAAY,SAAS;AACvB,oBAAY,QAAQ,WAAW;AAC/B,oBAAY,UAAU;AAAA,MACxB;AACA,wBAAkB,QAAQ;AAC1B,0BAAoB,WAAW;AAC/B,yBAAmB,IAAI;AAAA,IACzB,WAAW,SAAS,eAAe,mBAAmB,QAAQ;AAE5D,0BAAoB,cAAc;AAClC,yBAAmB,IAAI;AAAA,IACzB;AACA,sBAAkB,IAAI;AAAA,EACxB,GAAG,CAAC,gBAAgB,QAAQ,CAAC;AAE7B,QAAM,kBAAkB,mBAAmB,SAAS,SAAS;AAE7D,QAAM,YAAYA,aAAY,YAAY;AACxC,QAAI,MAAM,eAAe,CAAC,MAAM,KAAK,KAAK,EAAG;AAC7C,aAAS,EAAE,MAAM,gBAAgB,CAAC;AAElC,QAAI;AACF,YAAM,SAAS,MAAM,eAAe,QAAQ,MAAM,IAAI;AACtD,UAAI,OAAO,SAAS;AAClB,iBAAS,EAAE,MAAM,mBAAmB,QAAQ,OAAO,MAAM,KAAK,CAAC;AAAA,MACjE,OAAO;AACL,iBAAS,EAAE,MAAM,iBAAiB,QAAQ,OAAO,MAAM,KAAK,CAAC;AAAA,MAC/D;AAAA,IACF,SAAS,KAAK;AACZ,eAAS;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,SAAS;AAAA,UACT,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,UACtD,eAAe;AAAA,QACjB;AAAA,QACA,OAAO,MAAM;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EAEF,GAAG,CAAC,MAAM,aAAa,MAAM,MAAM,gBAAgB,QAAQ,CAAC;AAE5D,QAAM,cAAcA,aAAY,MAAM;AACpC,aAAS,EAAE,MAAM,gBAAgB,CAAC;AAAA,EACpC,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,sBAAsBA,aAAY,CAAC,UAAkB;AACzD,aAAS,EAAE,MAAM,cAAc,MAAM,MAAM,CAAC;AAAA,EAC9C,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,aACJ,gBAAAJ,OAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,QAAQ,OAAO,GACrE;AAAA,oBAAAA,OAAC,SAAI,OAAO,EAAE,UAAU,WAAW,GACjC;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,aAAa,MAAM;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA,yBAAyB,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAAA;AAAA,MACjE;AAAA,MACC,CAAC,oBAAoB,uBACpB,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,UACd,aAAa;AAAA,UACb,WAAW;AAAA,UACX,cAAc;AAAA,UACd,SAAS,MAAM,uBAAuB,KAAK;AAAA;AAAA,MAC7C;AAAA,OAEJ;AAAA,IACA,gBAAAA,MAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,GAClC,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM;AAAA,QACZ,UAAU,CAAC,SAAS,SAAS,EAAE,MAAM,YAAY,KAAK,CAAC;AAAA,QACvD,OAAO;AAAA,QACP;AAAA;AAAA,IACF,GACF;AAAA,KACF;AAGF,QAAM,aACJ,gBAAAC,OAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,QAAQ,OAAO,GACrE;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,MAAM;AAAA,QACjB,MAAM;AAAA,QACN,aAAa,CAAC,QAAQ,SAAS,EAAE,MAAM,WAAW,IAA6C,CAAC;AAAA;AAAA,IAClG;AAAA,IACA,gBAAAA,MAAC,SAAI,OAAO,EAAE,MAAM,GAAG,UAAU,QAAQ,WAAW,EAAE,GACnD,gBAAM,cAAc,YACnB,gBAAAA,MAAC,gBAAa,QAAQ,MAAM,QAAQ,IAClC,MAAM,cAAc,YACtB,gBAAAA,MAAC,gBAAa,SAAS,MAAM,SAAS,UAAU,qBAAqB,IAErE,gBAAAA,MAAC,iBAAc,UAAU,gBAAgB,GAE7C;AAAA,KACF;AAGF,SACE,gBAAAA,MAAC,SAAI,WAAW,cAAc,UAAU,UAAU,qBAAqB,EAAE,IACvE,0BAAAA,MAAC,SAAI,WAAU,qBACb,0BAAAA,MAAC,aAAU,KAAK,YAAY,QAAQ,YAAY,cAAc,IAAI,GACpE,GACF;AAEJ;AAEO,SAAS,QAAQ,EAAE,UAAU,aAAa,YAAY,YAAY,MAAM,GAAiB;AAC9F,SACE,gBAAAA,MAAC,mBAAgB,aACf,0BAAAA,MAAC,gBAAa,UAAoB,YAAwB,YAAwB,OAAc,GAClG;AAEJ;;;AuBpTA,SAAS,YAAAM,WAAU,eAAAC,cAAa,aAAAC,YAAW,UAAAC,eAAc;AACzD,OAAOC,aAA8B;;;ACY3B,SAKM,OAAAC,OALN,QAAAC,cAAA;AALH,SAAS,eAAe,EAAE,MAAM,SAAS,aAAa,GAAwB;AACnF,SACE,gBAAAD,MAAC,SAAI,WAAU,qBACZ,eAAK,IAAI,CAAC,KAAK,MACd,gBAAAC,OAAC,SAAY,WAAU,oBACrB;AAAA,oBAAAA,OAAC,SAAI,WAAU,0BAAyB;AAAA;AAAA,MAAQ,IAAI;AAAA,MAAE;AAAA,OAAG;AAAA,IACxD,QAAQ,IAAI,CAAC,QAAQ;AACpB,YAAM,KAAK,cAAc,IAAI,GAAG,CAAC;AACjC,aACE,gBAAAA,OAAC,SAAc,WAAU,sBACvB;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,UAAU,GAAG,YAAY,KAAK;AAAA,YACvC,eAAK,IAAI,OAAO,YAAY,CAAC;AAAA;AAAA,QAAG;AAAA,QAClC,gBAAAA,MAAC,UAAK,WAAU,yBAAwB,gBAAE;AAAA,QAC1C,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,2BAA2B,GAAG,SAAS,sCAAsC,EAAE;AAAA,YAC1F,OAAO,GAAG,QAAQ,EAAE,OAAO,GAAG,MAAM,IAAI;AAAA,YACxC,sBAAY,IAAI,GAAG,CAAC;AAAA;AAAA,QAAE;AAAA,WAThB,GAUV;AAAA,IAEJ,CAAC;AAAA,OAjBO,CAkBV,CACD,GACH;AAEJ;;;ADgFQ,SACE,OAAAE,OADF,QAAAC,cAAA;AA5FD,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAAiB;AACf,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAS,WAAW;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAA6B,IAAI;AAC7D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAS,KAAK;AAC1C,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,YAAYC,QAA4C,IAAI;AAClE,QAAM,eAAeA,QAAmB,MAAM;AAAA,EAAC,CAAC;AAEhD,QAAM,YAAY,KAAK,MAAM,IAAI,EAAE;AACnC,QAAM,eAAe,KAAK,IAAI,YAAY,KAAK,IAAI,EAAE;AAErD,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,aAAc;AAEnB,UAAM,YAAY,CAAC,MAAqB;AACtC,UAAI,EAAE,QAAQ,SAAU,iBAAgB,KAAK;AAAA,IAC/C;AACA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,aAAS,KAAK,MAAM,WAAW;AAE/B,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,SAAS;AACjD,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,YAAYC,aAAY,YAAY;AACxC,QAAI,YAAa;AACjB,cAAU,IAAI;AACd,mBAAe,IAAI;AACnB,UAAM,IAAI,QAAQ,OAAK,WAAW,GAAG,CAAC,CAAC;AAEvC,QAAI;AACF,YAAM,MAAuB,MAAM,SAAS,QAAQ,IAAI;AACxD,UAAI,IAAI,SAAS;AACf,kBAAU,EAAE,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC;AAAA,MACpC,OAAO;AACL,kBAAU,EAAE,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC;AAAA,MAC1C;AAAA,IACF,SAAS,KAAK;AACZ,gBAAU,EAAE,MAAM,CAAC,GAAG,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,EAAE,CAAC;AAAA,IACjF,UAAE;AACA,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,WAAW,CAAC;AAEhC,eAAa,UAAU;AAEvB,QAAM,cAAcA,aAAY,MAAM;AACpC,YAAQ,WAAW;AACnB,cAAU,IAAI;AAAA,EAChB,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,aAAaA,aAAY,YAAY;AACzC,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,cAAU,IAAI;AACd,eAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,EACzC,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,uBAAgC,CAAC,QAAQ,WAAW;AACxD,cAAU,UAAU;AACpB,wBAAoB,MAAM;AAE1B,WAAO,UAAU;AAAA,MACf,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,CAAC,OAAO,OAAO,UAAU,OAAO,QAAQ,KAAK;AAAA,MAC1D,KAAK,MAAM;AACT,qBAAa,QAAQ;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,CAAC,WAA2C;AACpE,wBAAoB,MAAM;AAAA,EAC5B;AAEA,QAAM,UAAU,QAAQ,QAAQ,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC;AACxF,QAAM,eAAe,QAAQ,SAAS,IAAI,KAAK,IAAI,GAAG,QAAQ,IAAI,OAAK,EAAE,MAAM,CAAC,IAAI;AAEpF,QAAM,UACJ,gBAAAJ,OAAC,SAAI,WAAW,cAAc,eAAe,6BAA6B,EAAE,GAAG,UAAU,UAAU,qBAAqB,EAAE,GAAG,YAAY,IAAI,SAAS,KAAK,EAAE,IAE3J;AAAA,oBAAAA,OAAC,SAAI,WAAU,uBACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,sBACb;AAAA,wBAAAD,MAAC,UAAK,WAAU,6BAA4B,eAAC;AAAA,QAAO;AAAA,QAAE;AAAA,SACxD;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,wBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,gBAAgB,CAAC,YAAY;AAAA,YAC5C,WAAU;AAAA,YACV,OAAO,eAAe,oBAAoB;AAAA,YAEzC,yBAAe,WAAQ;AAAA;AAAA,QAC1B;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YACV,OAAM;AAAA,YAEL,mBAAS,SAAS;AAAA;AAAA,QACrB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YACV,OAAM;AAAA,YACP;AAAA;AAAA,QAED;AAAA,SACF;AAAA,OACF;AAAA,IAGC,eACC,gBAAAA,MAAC,SAAI,WAAU,4BACb,0BAAAC,OAAC,OAAE,WAAU,iCACX;AAAA,sBAAAD,MAAC,UAAK,WAAU,mCAAkC,iBAAG;AAAA,MAAQ;AAAA,OAC/D,GACF;AAAA,IAIF,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,eAAe,oCAAoC;AAAA,QAC9D,OAAO,eAAe,SAAY,EAAE,QAAQ,aAAa;AAAA,QAEzD,0BAAAA;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP,UAAS;AAAA,YACT,OAAO,UAAU,UAAU,kBAAkB;AAAA,YAC7C,OAAO;AAAA,YACP,UAAU,CAAC,UAAU,QAAQ,SAAS,EAAE;AAAA,YACxC,aAAa;AAAA,YACb,SAAS;AAAA,YACT,SAAS;AAAA,cACP,SAAS,EAAE,SAAS,MAAM;AAAA,cAC1B,aAAa;AAAA,cACb,aAAa;AAAA,cACb,SAAS;AAAA,cACT,sBAAsB;AAAA,cACtB,qBAAqB;AAAA,cACrB,sBAAsB;AAAA,cACtB,WAAW;AAAA,gBACT,UAAU,eAAe,SAAS;AAAA,gBAClC,YAAY,eAAe,SAAS;AAAA,cACtC;AAAA,cACA,oBAAoB;AAAA,cACpB,2BAA2B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,qBAAqB;AAAA,cACrB,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE;AAAA,cAC7B,UAAU;AAAA,cACV,iBAAiB;AAAA,YACnB;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IAGA,gBAAAL,OAAC,SAAI,WAAU,wBACb;AAAA,sBAAAD,MAAC,UAAK,WAAU,qBACb,wBAAc,iBAAiB,uBAClC;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAW,uBAAuB,cAAc,mCAAmC,EAAE;AAAA,UAEpF,wBAAc,iBAAiB;AAAA;AAAA,MAClC;AAAA,OACF;AAAA,IAGC,UACC,gBAAAC,OAAC,SAAI,WAAW,uBAAuB,eAAe,sCAAsC,EAAE,IAC5F;AAAA,sBAAAA,OAAC,SAAI,WAAU,+BACb;AAAA,wBAAAD,MAAC,UAAM,iBAAO,QAAQ,kBAAkB,kBAAiB;AAAA,QACxD,OAAO,QAAQ,CAAC,OAAO,SACtB,gBAAAC,OAAC,UAAK;AAAA;AAAA,UAAE,OAAO,KAAK;AAAA,UAAO;AAAA,UAAK,OAAO,KAAK,WAAW,IAAI,MAAM;AAAA,UAAG;AAAA,WAAC;AAAA,SAEzE;AAAA,MAEC,OAAO,SACN,gBAAAD,MAAC,SAAI,WAAU,sBACb,0BAAAC,OAAC,SAAI,WAAU,2BAA0B;AAAA;AAAA,QAAM,OAAO;AAAA,SAAM,GAC9D;AAAA,MAGD,OAAO,QAAQ,OAAO,KAAK,SAAS,KAAK,CAAC,OAAO,SAChD,gBAAAD,MAAC,kBAAe,MAAM,OAAO,MAAM,SAAkB,cAA4B;AAAA,MAGlF,OAAO,QAAQ,OAAO,KAAK,WAAW,KAAK,CAAC,OAAO,SAClD,gBAAAA,MAAC,SAAI,WAAU,sBAAqB,gCAAkB;AAAA,OAE1D;AAAA,KAEJ;AAGF,MAAI,cAAc;AAChB,WACE,gBAAAA,MAAC,SAAI,WAAU,wBACb,0BAAAA,MAAC,SAAI,WAAU,8BACZ,mBACH,GACF;AAAA,EAEJ;AAEA,SAAO;AACT;;;AE5OO,IAAM,eAAN,MAAuC;AAAA,EACpC;AAAA,EAER,YAAY,IAAY;AACtB,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,MAAM,QAAQ,WAA6C;AACzD,UAAM,UAAU,UAAU,KAAK;AAC/B,UAAM,QAAQ,QAAQ,SAAS,GAAG,IAAI,QAAQ,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI;AAEpE,QAAI,CAAC,OAAO;AACV,aAAO,EAAE,SAAS,MAAM,MAAM,CAAC,GAAG,eAAe,EAAE;AAAA,IACrD;AAEA,UAAM,YAAY,YAAY,IAAI;AAClC,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,GAAG,MAAM,KAAK;AACzC,YAAM,gBAAgB,KAAK,MAAM,YAAY,IAAI,IAAI,SAAS;AAC9D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,gBAAgB,KAAK,MAAM,YAAY,IAAI,IAAI,SAAS;AAC9D,UAAI;AACJ,UAAI,SAAS,OAAO,UAAU,YAAY,UAAU,OAAO;AACzD,cAAM,IAAI;AACV,qBAAa;AAAA,UACX,MAAM,OAAO,EAAE,IAAI;AAAA,UACnB,SAAS,OAAO,EAAE,WAAW,EAAE;AAAA,UAC/B,WAAW,EAAE;AAAA,UACb,UAAU,EAAE;AAAA,UACZ,OAAO,EAAE;AAAA,UACT,MAAM,EAAE;AAAA,UACR,OAAO,MAAM,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI,MAAM,IAAI,CAAC;AAAA,UACvD,OAAO,EAAE;AAAA,QACX;AAAA,MACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC5D;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEF;","names":["useCallback","useEffect","useRef","useState","jsx","jsx","useRef","jsx","useRef","jsx","jsxs","jsx","jsxs","jsx","jsx","useCallback","jsx","jsxs","useCallback","jsx","jsxs","useEffect","useState","useState","jsx","jsxs","Fragment","jsx","jsxs","useState","useEffect","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","useRef","Fragment","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","useCallback","useState","useCallback","useEffect","useRef","Editor","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","useCallback","Editor"]}
package/dist/styles.css CHANGED
@@ -15,8 +15,8 @@
15
15
  --rdb-color-bg-secondary: #1F1F1F;
16
16
  --rdb-color-bg-elevated: #262626;
17
17
  --rdb-color-bg-tertiary: #151515;
18
- --rdb-color-primary: #14B8A6;
19
- --rdb-color-primary-hover: #2DD4BF;
18
+ --rdb-color-primary: #1DE5D2;
19
+ --rdb-color-primary-hover: #4DEADA;
20
20
  --rdb-color-text: #E5E5E5;
21
21
  --rdb-color-secondary: #A3A3A3;
22
22
  --rdb-color-muted: #525252;
@@ -29,7 +29,7 @@
29
29
  --rdb-color-value-number: #F472B6;
30
30
  --rdb-color-value-boolean: #818CF8;
31
31
  --rdb-color-value-date: #06B6D4;
32
- --rdb-color-value-uuid: #14B8A6;
32
+ --rdb-color-value-uuid: #1DE5D2;
33
33
 
34
34
  /* Spacing */
35
35
  --rdb-space-1: 0.25rem;
@@ -48,8 +48,8 @@
48
48
  --rdb-color-bg-secondary: #F5F5F5;
49
49
  --rdb-color-bg-elevated: #F0F0F0;
50
50
  --rdb-color-bg-tertiary: #FAFAFA;
51
- --rdb-color-primary: #0D9488;
52
- --rdb-color-primary-hover: #14B8A6;
51
+ --rdb-color-primary: #14AD9E;
52
+ --rdb-color-primary-hover: #1DE5D2;
53
53
  --rdb-color-text: #1A1A1A;
54
54
  --rdb-color-secondary: #525252;
55
55
  --rdb-color-muted: #9CA3AF;
@@ -61,7 +61,7 @@
61
61
  --rdb-color-value-number: #DB2777;
62
62
  --rdb-color-value-boolean: #6366F1;
63
63
  --rdb-color-value-date: #0891B2;
64
- --rdb-color-value-uuid: #0D9488;
64
+ --rdb-color-value-uuid: #14AD9E;
65
65
  }
66
66
 
67
67
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reifydb/console",
3
- "version": "0.4.2",
3
+ "version": "0.4.6",
4
4
  "description": "Database console and embeddable snippet component for ReifyDB",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,8 +19,8 @@
19
19
  "@monaco-editor/react": ">=4.0.0"
20
20
  },
21
21
  "dependencies": {
22
- "@reifydb/core": "0.4.2",
23
- "@reifydb/client": "0.4.2"
22
+ "@reifydb/client": "0.4.6",
23
+ "@reifydb/core": "0.4.6"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@monaco-editor/react": "^4.7.0",
@@ -67,6 +67,6 @@
67
67
  "build": "tsup",
68
68
  "test": "vitest run",
69
69
  "test:unit": "vitest run",
70
- "publish:npm": "pnpm publish --access public"
70
+ "publish:npm": "pnpm publish --access public --no-git-checks"
71
71
  }
72
72
  }