@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 +12 -12
- package/dist/index.js.map +1 -1
- package/dist/styles.css +6 -6
- package/package.json +4 -4
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: "
|
|
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: "
|
|
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": "#
|
|
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: "
|
|
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": "#
|
|
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: "
|
|
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: "
|
|
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": "#
|
|
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: "
|
|
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: "
|
|
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": "#
|
|
624
|
-
"editorCursor.foreground": "#
|
|
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 [↺]\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"]}
|
|
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 [↺]\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"]}
|
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: #
|
|
19
|
-
--rdb-color-primary-hover: #
|
|
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: #
|
|
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: #
|
|
52
|
-
--rdb-color-primary-hover: #
|
|
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: #
|
|
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.
|
|
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/
|
|
23
|
-
"@reifydb/
|
|
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
|
}
|