database-devtools 0.1.3 → 0.1.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/adapter.ts","../src/client/handleWriteOperations.ts","../src/utils/sqlSafety.ts","../src/mobile/sqliteTableQuery.ts","../src/mobile/createExpoSqliteInspector.ts","../src/utils/isDevToolsEnabled.ts","../src/hooks/useDevTools.ts","../src/utils/resolveDevToolsHost.ts","../src/utils/resolveDeviceMetadata.ts","../src/utils/resolveServerUrl.ts","../src/utils/persistDeviceId.ts","../src/components/DevToolsProvider.tsx","../src/components/ConnectionStatusBadge.tsx","../src/components/DevToolsLauncherModal.tsx","../src/components/DevToolsSettingsModal.tsx","../src/utils/floatingButtonPosition.ts","../src/components/FloatingDevToolsButton.tsx","../src/components/mobile/mobileExplorerStyles.ts","../src/components/mobile/ExplorerOverviewTab.tsx","../src/mobile/constants.ts","../src/mobile/computeColumnWidths.ts","../src/mobile/copyToClipboard.ts","../src/components/mobile/MobileDataCardList.tsx","../src/components/mobile/MobileDataTable.tsx","../src/components/mobile/MobileDataView.tsx","../src/components/mobile/ExplorerSqlTab.tsx","../src/components/mobile/ExplorerTableDetail.tsx","../src/components/mobile/ExplorerTablesTab.tsx","../src/components/mobile/MobileDatabaseExplorer.tsx","../src/components/DatabaseDevTools.tsx"],"names":["Constants","Platform","client","jsx","View","styles","jsxs","Text","StyleSheet","useState","useEffect","Modal","Pressable","ScrollView","ActivityIndicator","useRef","useMemo","useCallback","Fragment","formatValue","useWindowDimensions","FlatList","TextInput"],"mappings":"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","file":"chunk-SFLXGLHQ.js","sourcesContent":["import type { AdapterCapabilities } from './capabilities';\r\nimport type { DatabaseKind } from './kind';\r\nimport type { SnapshotExport } from './snapshot';\r\nimport type { WriteOperation } from './write';\r\n\r\n/** Database adapter interface for export and write operations on the live device. */\r\nexport interface DatabaseAdapter {\r\n readonly kind: DatabaseKind;\r\n /** @deprecated Use `kind` instead. */\r\n readonly dialect: DatabaseKind;\r\n readonly id: string;\r\n readonly name: string;\r\n readonly capabilities: AdapterCapabilities;\r\n exportSnapshot(): Promise<SnapshotExport>;\r\n}\r\n\r\nexport type WriteResult = {\r\n rowsAffected: number;\r\n};\r\n\r\n/** Adapter that supports transactional writes on the live device database. */\r\nexport interface WritableDatabaseAdapter extends DatabaseAdapter {\r\n beginTransaction(): Promise<void>;\r\n commitTransaction(): Promise<void>;\r\n rollbackTransaction(): Promise<void>;\r\n executeWrite(operation: WriteOperation): Promise<WriteResult>;\r\n}\r\n\r\n/** @deprecated Use `WritableDatabaseAdapter` instead. */\r\nexport type EditableDatabaseAdapter = WritableDatabaseAdapter;\r\n\r\nexport function isWritableDatabaseAdapter(\r\n adapter: DatabaseAdapter | undefined,\r\n): adapter is WritableDatabaseAdapter {\r\n if (!adapter?.capabilities.transactionalWrites) {\r\n return false;\r\n }\r\n\r\n const candidate = adapter as WritableDatabaseAdapter;\r\n return (\r\n typeof candidate.beginTransaction === 'function' &&\r\n typeof candidate.commitTransaction === 'function' &&\r\n typeof candidate.rollbackTransaction === 'function' &&\r\n typeof candidate.executeWrite === 'function'\r\n );\r\n}\r\n\r\n/** @deprecated Use `isWritableDatabaseAdapter` instead. */\r\nexport const isEditableDatabaseAdapter = isWritableDatabaseAdapter;\r\n","import type { DatabaseAdapter } from '../types/adapter';\r\nimport { isWritableDatabaseAdapter } from '../types/adapter';\r\nimport type {\r\n BeginTransactionMessage,\r\n CommitTransactionMessage,\r\n ExecuteWriteMessage,\r\n RollbackTransactionMessage,\r\n TransactionAckMessage,\r\n WriteAckMessage,\r\n} from '../types/protocol';\r\n\r\nexport type TransactionAckReporter = (\r\n message: Omit<TransactionAckMessage, 'timestamp' | 'type'>,\r\n) => void;\r\nexport type WriteAckReporter = (message: Omit<WriteAckMessage, 'timestamp' | 'type'>) => void;\r\n\r\nexport async function handleBeginTransaction(\r\n adapter: DatabaseAdapter | undefined,\r\n message: BeginTransactionMessage,\r\n report: TransactionAckReporter,\r\n): Promise<void> {\r\n if (!isWritableDatabaseAdapter(adapter)) {\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'begin',\r\n ok: false,\r\n message: 'Database adapter does not support writes',\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n await adapter.beginTransaction();\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'begin',\r\n ok: true,\r\n });\r\n } catch (error) {\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'begin',\r\n ok: false,\r\n message: error instanceof Error ? error.message : 'Failed to begin transaction',\r\n });\r\n }\r\n}\r\n\r\nexport async function handleCommitTransaction(\r\n adapter: DatabaseAdapter | undefined,\r\n message: CommitTransactionMessage,\r\n report: TransactionAckReporter,\r\n): Promise<void> {\r\n if (!isWritableDatabaseAdapter(adapter)) {\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'commit',\r\n ok: false,\r\n message: 'Database adapter does not support writes',\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n await adapter.commitTransaction();\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'commit',\r\n ok: true,\r\n });\r\n } catch (error) {\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'commit',\r\n ok: false,\r\n message: error instanceof Error ? error.message : 'Failed to commit transaction',\r\n });\r\n }\r\n}\r\n\r\nexport async function handleRollbackTransaction(\r\n adapter: DatabaseAdapter | undefined,\r\n message: RollbackTransactionMessage,\r\n report: TransactionAckReporter,\r\n): Promise<void> {\r\n if (!isWritableDatabaseAdapter(adapter)) {\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'rollback',\r\n ok: false,\r\n message: 'Database adapter does not support writes',\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n await adapter.rollbackTransaction();\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'rollback',\r\n ok: true,\r\n });\r\n } catch (error) {\r\n report({\r\n transactionId: message.transactionId,\r\n action: 'rollback',\r\n ok: false,\r\n message: error instanceof Error ? error.message : 'Failed to roll back transaction',\r\n });\r\n }\r\n}\r\n\r\nexport async function handleExecuteWrite(\r\n adapter: DatabaseAdapter | undefined,\r\n message: ExecuteWriteMessage,\r\n report: WriteAckReporter,\r\n): Promise<void> {\r\n if (!isWritableDatabaseAdapter(adapter)) {\r\n report({\r\n writeId: message.writeId,\r\n transactionId: message.transactionId,\r\n ok: false,\r\n message: 'Database adapter does not support writes',\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n const result = await adapter.executeWrite(message.operation);\r\n report({\r\n writeId: message.writeId,\r\n transactionId: message.transactionId,\r\n ok: true,\r\n rowsAffected: result.rowsAffected,\r\n });\r\n } catch (error) {\r\n report({\r\n writeId: message.writeId,\r\n transactionId: message.transactionId,\r\n ok: false,\r\n message: error instanceof Error ? error.message : 'Write operation failed',\r\n });\r\n }\r\n}\r\n","const BLOCKED_KEYWORDS =\r\n /\\b(INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|REPLACE|ATTACH|DETACH|REINDEX|VACUUM|TRUNCATE)\\b/i;\r\n\r\nexport function validateReadOnlySql(sql: string): void {\r\n const trimmed = sql.trim();\r\n\r\n if (!trimmed) {\r\n throw new Error('SQL query is empty');\r\n }\r\n\r\n if (BLOCKED_KEYWORDS.test(trimmed)) {\r\n throw new Error(\r\n 'DevTools is read-only; only SELECT, PRAGMA, EXPLAIN, and WITH queries are allowed',\r\n );\r\n }\r\n\r\n const statements = trimmed\r\n .split(';')\r\n .map((statement) => statement.trim())\r\n .filter(Boolean);\r\n\r\n for (const statement of statements) {\r\n const leading = statement.replace(/^\\s*(--[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*/g, '').trim();\r\n const keyword = leading.split(/\\s+/)[0]?.toUpperCase();\r\n\r\n if (!keyword) {\r\n continue;\r\n }\r\n\r\n if (\r\n keyword !== 'SELECT' &&\r\n keyword !== 'PRAGMA' &&\r\n keyword !== 'EXPLAIN' &&\r\n keyword !== 'WITH'\r\n ) {\r\n throw new Error(`DevTools is read-only; \"${keyword}\" statements are not allowed`);\r\n }\r\n }\r\n}\r\n","import type { ColumnInfo } from '../types/inspection';\r\n\r\nexport function quoteIdentifier(name: string): string {\r\n return `\"${name.replace(/\"/g, '\"\"')}\"`;\r\n}\r\n\r\nexport function buildSearchClause(\r\n columns: ColumnInfo[],\r\n search: string | undefined,\r\n): { clause: string; params: string[] } {\r\n const term = search?.trim();\r\n\r\n if (!term || columns.length === 0) {\r\n return { clause: '', params: [] };\r\n }\r\n\r\n const pattern = `%${term}%`;\r\n const conditions = columns.map(\r\n (column) => `CAST(${quoteIdentifier(column.name)} AS TEXT) LIKE ?`,\r\n );\r\n\r\n return {\r\n clause: ` WHERE (${conditions.join(' OR ')})`,\r\n params: columns.map(() => pattern),\r\n };\r\n}\r\n\r\nexport function resolveSortColumn(\r\n columns: ColumnInfo[],\r\n sortColumn: string | null | undefined,\r\n): string | null {\r\n if (!sortColumn) {\r\n return null;\r\n }\r\n\r\n return columns.some((column) => column.name === sortColumn) ? sortColumn : null;\r\n}\r\n","import type { ExpoSqliteInspectableDatabase } from '../adapters/sqlite/types';\r\nimport type {\r\n ColumnInfo,\r\n QueryResult,\r\n SchemaTable,\r\n TableInfo,\r\n TablePageRequest,\r\n TablePageResult,\r\n} from '../types/inspection';\r\nimport { validateReadOnlySql } from '../utils/sqlSafety';\r\nimport type { MobileDatabaseInfo, MobileDatabaseInspector } from './types';\r\nimport { buildSearchClause, quoteIdentifier, resolveSortColumn } from './sqliteTableQuery';\r\n\r\ntype PragmaTableInfoRow = {\r\n name: string;\r\n type: string;\r\n notnull: number;\r\n dflt_value: string | number | null;\r\n pk: number;\r\n};\r\n\r\nfunction normalizeCell(cell: unknown): string | number | null {\r\n if (cell === null || cell === undefined) {\r\n return null;\r\n }\r\n\r\n if (typeof cell === 'number' || typeof cell === 'string') {\r\n return cell;\r\n }\r\n\r\n if (typeof cell === 'boolean') {\r\n return cell ? 1 : 0;\r\n }\r\n\r\n if (cell instanceof Uint8Array) {\r\n return `[BLOB ${cell.byteLength} bytes]`;\r\n }\r\n\r\n return String(cell);\r\n}\r\n\r\nfunction objectRowsToMatrix(rows: Record<string, unknown>[]): {\r\n columns: string[];\r\n matrix: (string | number | null)[][];\r\n} {\r\n if (rows.length === 0) {\r\n return { columns: [], matrix: [] };\r\n }\r\n\r\n const columns = Object.keys(rows[0]!);\r\n\r\n return {\r\n columns,\r\n matrix: rows.map((row) => columns.map((column) => normalizeCell(row[column]))),\r\n };\r\n}\r\n\r\nexport function createExpoSqliteInspector(\r\n database: ExpoSqliteInspectableDatabase,\r\n): MobileDatabaseInspector {\r\n let operationQueue: Promise<void> = Promise.resolve();\r\n\r\n const enqueue = async <T>(operation: () => Promise<T>): Promise<T> => {\r\n const next = operationQueue.then(operation);\r\n operationQueue = next.then(\r\n () => undefined,\r\n () => undefined,\r\n );\r\n return next;\r\n };\r\n\r\n const listTablesInternal = async (): Promise<TableInfo[]> => {\r\n const masterRows = await database.getAllAsync<{ name: string }>(\r\n `SELECT name FROM sqlite_master\r\n WHERE type = 'table' AND name NOT LIKE 'sqlite_%'\r\n ORDER BY name`,\r\n );\r\n\r\n const tables: TableInfo[] = [];\r\n\r\n for (const row of masterRows) {\r\n const countRow = await database.getFirstAsync<{ count: number }>(\r\n `SELECT COUNT(*) AS count FROM ${quoteIdentifier(row.name)}`,\r\n );\r\n\r\n tables.push({\r\n name: row.name,\r\n rowCount: Number(countRow?.count ?? 0),\r\n });\r\n }\r\n\r\n return tables;\r\n };\r\n\r\n const getTableColumnsInternal = async (table: string): Promise<ColumnInfo[]> => {\r\n const rows = await database.getAllAsync<PragmaTableInfoRow>(\r\n `PRAGMA table_info(${quoteIdentifier(table)})`,\r\n );\r\n\r\n return rows.map((row) => ({\r\n name: row.name,\r\n type: row.type || 'ANY',\r\n notNull: row.notnull === 1,\r\n pk: row.pk === 1,\r\n defaultValue:\r\n row.dflt_value === null || row.dflt_value === undefined\r\n ? null\r\n : String(row.dflt_value),\r\n }));\r\n };\r\n\r\n return {\r\n listTables: () => enqueue(listTablesInternal),\r\n\r\n getSchema: () =>\r\n enqueue(async () => {\r\n const tables = await listTablesInternal();\r\n\r\n return Promise.all(\r\n tables.map(async (table) => ({\r\n name: table.name,\r\n columns: await getTableColumnsInternal(table.name),\r\n })),\r\n );\r\n }),\r\n\r\n getTableColumns: (table) => enqueue(() => getTableColumnsInternal(table)),\r\n\r\n getDatabaseInfo: () =>\r\n enqueue(async () => {\r\n const tables = await listTablesInternal();\r\n const versionRow = await database.getFirstAsync<{ version: string }>(\r\n 'SELECT sqlite_version() AS version',\r\n );\r\n const pageRow = await database.getFirstAsync<{ page_size: number; page_count: number }>(\r\n 'SELECT page_size, page_count FROM pragma_page_size(), pragma_page_count()',\r\n );\r\n const pageSize = Number(pageRow?.page_size ?? 0);\r\n const pageCount = Number(pageRow?.page_count ?? 0);\r\n\r\n return {\r\n name: database.databasePath.split('/').pop() ?? database.databasePath,\r\n path: database.databasePath,\r\n tableCount: tables.length,\r\n sqliteVersion: versionRow?.version ?? 'unknown',\r\n pageSize,\r\n pageCount,\r\n estimatedSizeBytes: pageSize * pageCount,\r\n } satisfies MobileDatabaseInfo;\r\n }),\r\n\r\n fetchTablePage: (request) =>\r\n enqueue(async () => {\r\n const columns = await getTableColumnsInternal(request.table);\r\n const { clause, params: searchParams } = buildSearchClause(columns, request.search);\r\n const quotedTable = quoteIdentifier(request.table);\r\n const countRow = await database.getFirstAsync<{ count: number }>(\r\n `SELECT COUNT(*) AS count FROM ${quotedTable}${clause}`,\r\n searchParams,\r\n );\r\n const totalCount = Number(countRow?.count ?? 0);\r\n const pageSize = Math.max(1, request.pageSize);\r\n const page = Math.max(1, request.page);\r\n const offset = (page - 1) * pageSize;\r\n const sortColumn = resolveSortColumn(columns, request.sortColumn);\r\n const orderClause = sortColumn\r\n ? ` ORDER BY ${quoteIdentifier(sortColumn)} ${request.sortDir === 'desc' ? 'DESC' : 'ASC'}`\r\n : '';\r\n const rows = await database.getAllAsync<Record<string, unknown>>(\r\n `SELECT * FROM ${quotedTable}${clause}${orderClause} LIMIT ? OFFSET ?`,\r\n [...searchParams, pageSize, offset],\r\n );\r\n const { columns: resultColumns, matrix } = objectRowsToMatrix(rows);\r\n\r\n return {\r\n columns: resultColumns,\r\n rows: matrix,\r\n totalCount,\r\n page,\r\n pageSize,\r\n } satisfies TablePageResult;\r\n }),\r\n\r\n executeQuery: (sql) =>\r\n enqueue(async () => {\r\n validateReadOnlySql(sql);\r\n const started = Date.now();\r\n const rows = await database.getAllAsync<Record<string, unknown>>(sql);\r\n const { columns, matrix } = objectRowsToMatrix(rows);\r\n\r\n return {\r\n columns,\r\n rows: matrix,\r\n rowCount: matrix.length,\r\n durationMs: Date.now() - started,\r\n } satisfies QueryResult;\r\n }),\r\n };\r\n}\r\n","export function isDevToolsEnabled(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n if (enabled === true) {\n return true;\n }\n\n return typeof __DEV__ !== 'undefined' && __DEV__;\n}\n","import { createContext, useContext } from 'react';\r\nimport type { ConnectionState } from '../client/createDevToolsClient';\r\nimport type { DatabaseAdapter } from '../types/adapter';\r\nimport type { DeviceMetadata } from '../types/protocol';\r\nimport type { MobileDatabaseInspector } from '../mobile/types';\r\n\r\nexport type ExportState = 'idle' | 'exporting' | 'success' | 'error';\r\n\r\nexport type DevToolsContextValue = {\r\n connectionState: ConnectionState;\r\n connectionError: string | null;\r\n connectionHint: string | null;\r\n deviceId: string | undefined;\r\n serverUrl: string;\r\n metadata: DeviceMetadata;\r\n database: DatabaseAdapter | undefined;\r\n adapterError: string | null;\r\n mobileInspector: MobileDatabaseInspector | null;\r\n launcherVisible: boolean;\r\n openLauncher: () => void;\r\n closeLauncher: () => void;\r\n explorerVisible: boolean;\r\n openExplorer: () => void;\r\n closeExplorer: () => void;\r\n settingsVisible: boolean;\r\n openSettings: () => void;\r\n closeSettings: () => void;\r\n reconnect: (url: string) => void;\r\n exportState: ExportState;\r\n exportError: string | null;\r\n exportDatabase: () => Promise<void>;\r\n};\r\n\r\nexport const DevToolsContext = createContext<DevToolsContextValue | null>(null);\r\n\r\nexport function useDevTools(): DevToolsContextValue {\r\n const context = useContext(DevToolsContext);\r\n\r\n if (!context) {\r\n throw new Error('useDevTools must be used within DevToolsProvider');\r\n }\r\n\r\n return context;\r\n}\r\n","import { Platform } from 'react-native';\r\nimport Constants from 'expo-constants';\r\n\r\n/** Host loopback aliases that do not reach the dev machine from Android. */\r\nconst ANDROID_LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '::1']);\r\n\r\n/** Special alias from the Android emulator to the host machine. */\r\nexport const ANDROID_EMULATOR_HOST = '10.0.2.2';\r\n\r\ntype ExpoConstantsShape = {\r\n expoConfig?: { hostUri?: string };\r\n expoGoConfig?: { debuggerHost?: string };\r\n manifest2?: { extra?: { expoGo?: { debuggerHost?: string } } };\r\n manifest?: { debuggerHost?: string };\r\n};\r\n\r\nexport function isAndroidLoopbackHost(host: string): boolean {\r\n return ANDROID_LOOPBACK_HOSTS.has(host.toLowerCase());\r\n}\r\n\r\nexport function readMetroDevHostFromConstants(\r\n constants: ExpoConstantsShape | undefined,\r\n): string | undefined {\r\n const hostUri =\r\n constants?.expoConfig?.hostUri ??\r\n constants?.expoGoConfig?.debuggerHost ??\r\n constants?.manifest2?.extra?.expoGo?.debuggerHost ??\r\n constants?.manifest?.debuggerHost;\r\n\r\n if (typeof hostUri !== 'string' || hostUri.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return hostUri.split(':')[0];\r\n}\r\n\r\n/**\r\n * Picks a dev-machine hostname that mobile clients can reach.\r\n * - Physical devices: Metro debugger host (LAN IP).\r\n * - Android emulator: 10.0.2.2 when Metro reports loopback.\r\n * - iOS simulator / default: localhost.\r\n */\r\nexport function resolveDevToolsHostFromInputs(\r\n platformOs: string,\r\n metroHost?: string,\r\n): string {\r\n if (platformOs === 'android') {\r\n if (metroHost && !isAndroidLoopbackHost(metroHost)) {\r\n return metroHost;\r\n }\r\n\r\n return ANDROID_EMULATOR_HOST;\r\n }\r\n\r\n if (metroHost) {\r\n return metroHost;\r\n }\r\n\r\n return 'localhost';\r\n}\r\n\r\nexport function getConnectionHintForPlatform(\r\n platformOs: string,\r\n serverUrl: string,\r\n): string | null {\r\n try {\r\n const parsed = new URL(serverUrl);\r\n const host = parsed.hostname.toLowerCase();\r\n\r\n if (platformOs === 'android' && isAndroidLoopbackHost(host)) {\r\n return `On Android, \"${host}\" refers to the device itself. Use ${ANDROID_EMULATOR_HOST} (emulator) or your PC's LAN IP (physical device).`;\r\n }\r\n\r\n if (parsed.protocol !== 'ws:' && parsed.protocol !== 'wss:') {\r\n return 'Server URL must start with ws:// or wss://';\r\n }\r\n } catch {\r\n return 'Invalid WebSocket URL.';\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction getPlatformOs(): string {\r\n return Platform.OS;\r\n}\r\n\r\nfunction readMetroDevHostRuntime(): string | undefined {\r\n return readMetroDevHostFromConstants(Constants);\r\n}\r\n\r\nexport function readMetroDevHost(): string | undefined {\r\n return readMetroDevHostRuntime();\r\n}\r\n\r\nexport function resolveDevToolsHost(): string {\r\n return resolveDevToolsHostFromInputs(getPlatformOs(), readMetroDevHostRuntime());\r\n}\r\n\r\nexport function getConnectionHint(serverUrl: string): string | null {\r\n return getConnectionHintForPlatform(getPlatformOs(), serverUrl);\r\n}\r\n","import { Platform } from 'react-native';\nimport Constants from 'expo-constants';\nimport type { DeviceMetadata } from '../types/protocol';\n\ntype ExpoConstants = {\n expoConfig?: {\n name?: string;\n version?: string;\n ios?: { bundleIdentifier?: string };\n android?: { package?: string };\n };\n};\n\nfunction getExpoConstants(): ExpoConstants | undefined {\n return Constants;\n}\n\nexport function resolveDeviceMetadata(): DeviceMetadata {\n const constants = getExpoConstants();\n const config = constants?.expoConfig;\n\n const metadata: DeviceMetadata = {\n platform: Platform.OS,\n appName: config?.name ?? 'React Native App',\n };\n\n if (config?.version) {\n metadata.appVersion = config.version;\n }\n\n const bundleId = config?.ios?.bundleIdentifier ?? config?.android?.package;\n\n if (bundleId) {\n metadata.bundleId = bundleId;\n }\n\n return metadata;\n}\n","import { buildDevToolsWsUrl, DEFAULT_DEVTOOLS_PORT } from '../types/protocol';\r\nimport { resolveDevToolsHost } from './resolveDevToolsHost';\r\n\r\nexport function normalizeServerUrl(url: string): string {\r\n const trimmed = url.trim();\r\n\r\n if (trimmed.startsWith('ws://') || trimmed.startsWith('wss://')) {\r\n return trimmed;\r\n }\r\n\r\n return buildDevToolsWsUrl(trimmed.replace(/^https?:\\/\\//, ''), DEFAULT_DEVTOOLS_PORT);\r\n}\r\n\r\nexport function resolveServerUrl(serverUrl?: string): string {\r\n if (serverUrl) {\r\n return normalizeServerUrl(serverUrl);\r\n }\r\n\r\n const envUrl =\r\n typeof process !== 'undefined'\r\n ? process.env.EXPO_PUBLIC_DATABASE_DEVTOOLS_URL\r\n : undefined;\r\n\r\n if (envUrl) {\r\n return normalizeServerUrl(envUrl);\r\n }\r\n\r\n return buildDevToolsWsUrl(resolveDevToolsHost(), DEFAULT_DEVTOOLS_PORT);\r\n}\r\n","import AsyncStorage from '@react-native-async-storage/async-storage';\r\nimport { NativeModules } from 'react-native';\r\n\r\nimport { generateDeviceId } from './ids';\r\n\r\nexport const PERSISTED_DEVICE_ID_STORAGE_KEY = '@database-devtools/device-id';\r\n\r\nexport type DeviceIdStorage = {\r\n getItem: (key: string) => Promise<string | null>;\r\n setItem: (key: string, value: string) => Promise<void>;\r\n};\r\n\r\nlet memoryDeviceId: string | null = null;\r\n\r\nfunction hasAsyncStorageNativeModule(): boolean {\r\n return Boolean(\r\n NativeModules.RNCAsyncStorage ??\r\n NativeModules.RNC_AsyncSQLiteDBStoragePassThru ??\r\n NativeModules.PlatformLocalStorage,\r\n );\r\n}\r\n\r\nexport function createAsyncStorageDeviceIdStore(): DeviceIdStorage | null {\r\n if (!hasAsyncStorageNativeModule()) {\r\n return null;\r\n }\r\n\r\n return AsyncStorage;\r\n}\r\n\r\nfunction loadOrCreateMemoryDeviceId(): string {\r\n if (!memoryDeviceId) {\r\n memoryDeviceId = generateDeviceId();\r\n }\r\n\r\n return memoryDeviceId;\r\n}\r\n\r\nexport async function loadOrCreateDeviceId(\r\n storage: DeviceIdStorage | null = createAsyncStorageDeviceIdStore(),\r\n): Promise<string> {\r\n if (storage) {\r\n try {\r\n const stored = await storage.getItem(PERSISTED_DEVICE_ID_STORAGE_KEY);\r\n\r\n if (stored) {\r\n return stored;\r\n }\r\n\r\n const created = generateDeviceId();\r\n await storage.setItem(PERSISTED_DEVICE_ID_STORAGE_KEY, created);\r\n return created;\r\n } catch {\r\n // Expo Go / missing native module — use an in-memory id for this session.\r\n }\r\n }\r\n\r\n return loadOrCreateMemoryDeviceId();\r\n}\r\n/** @internal Test helper */\r\nexport function resetMemoryDeviceIdForTests(): void {\r\n memoryDeviceId = null;\r\n}\r\n","import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\r\nimport { resolveAdapter } from '../adapter/resolveAdapter';\r\nimport { detectExpoSqliteInspectable } from '../adapters/sqlite/detect';\r\nimport { isWritableDatabaseAdapter } from '../types/adapter';\r\nimport {\r\n createDevToolsClient,\r\n type ConnectionState,\r\n} from '../client/createDevToolsClient';\r\nimport { formatRefreshErrorMessage } from '../client/formatSyncError';\r\nimport { handleDeviceSnapshotUpload } from '../client/handleDeviceSnapshot';\r\nimport {\r\n handleBeginTransaction,\r\n handleCommitTransaction,\r\n handleExecuteWrite,\r\n handleRollbackTransaction,\r\n} from '../client/handleWriteOperations';\r\nimport { DevToolsContext, type ExportState } from '../hooks/useDevTools';\r\nimport type { DatabaseAdapter } from '../types/adapter';\r\nimport type { DatabaseKind } from '../types/kind';\r\nimport { DevToolsRole, REFRESH_TIMEOUT_MS } from '../types/protocol';\r\nimport { getConnectionHint } from '../utils/resolveDevToolsHost';\r\nimport { resolveDeviceMetadata } from '../utils/resolveDeviceMetadata';\r\nimport { normalizeServerUrl, resolveServerUrl } from '../utils/resolveServerUrl';\r\nimport { loadOrCreateDeviceId } from '../utils/persistDeviceId';\r\nimport { createExpoSqliteInspector } from '../mobile/createExpoSqliteInspector';\r\nimport type { MobileDatabaseInspector } from '../mobile/types';\r\n\r\nexport type DevToolsProviderProps = {\r\n children: ReactNode;\r\n database?: unknown;\r\n type?: DatabaseKind;\r\n adapter?: DatabaseAdapter;\r\n serverUrl?: string;\r\n onConnectionStateChange?: (state: ConnectionState) => void;\r\n};\r\n\r\ntype ExportWaiters = {\r\n resolve: () => void;\r\n reject: (error: Error) => void;\r\n};\r\n\r\nexport function DevToolsProvider({\r\n children,\r\n database,\r\n type,\r\n adapter: explicitAdapter,\r\n serverUrl: initialServerUrl,\r\n onConnectionStateChange,\r\n}: DevToolsProviderProps) {\r\n const [connectionState, setConnectionState] = useState<ConnectionState>('connecting');\r\n const [connectionError, setConnectionError] = useState<string | null>(null);\r\n const [serverUrl, setServerUrl] = useState(() => resolveServerUrl(initialServerUrl));\r\n const [deviceId, setDeviceId] = useState<string | undefined>();\r\n const [deviceIdReady, setDeviceIdReady] = useState(false);\r\n const [settingsVisible, setSettingsVisible] = useState(false);\r\n const [launcherVisible, setLauncherVisible] = useState(false);\r\n const [explorerVisible, setExplorerVisible] = useState(false);\r\n const [mobileInspector, setMobileInspector] = useState<MobileDatabaseInspector | null>(null);\r\n const [resolvedAdapter, setResolvedAdapter] = useState<DatabaseAdapter | undefined>(explicitAdapter);\r\n const [adapterError, setAdapterError] = useState<string | null>(null);\r\n const [exportState, setExportState] = useState<ExportState>('idle');\r\n const [exportError, setExportError] = useState<string | null>(null);\r\n\r\n const metadata = useMemo(() => resolveDeviceMetadata(), []);\r\n const clientRef = useRef<ReturnType<typeof createDevToolsClient> | null>(null);\r\n const onConnectionStateChangeRef = useRef(onConnectionStateChange);\r\n const databaseRef = useRef(resolvedAdapter);\r\n const rollbackOpenTransactionRef = useRef<(() => Promise<void>) | null>(null);\r\n const exportWaitersRef = useRef<ExportWaiters | null>(null);\r\n const exportTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const exportSuccessTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const clearExportWaiters = useCallback(() => {\r\n if (exportTimeoutRef.current) {\r\n clearTimeout(exportTimeoutRef.current);\r\n exportTimeoutRef.current = null;\r\n }\r\n\r\n exportWaitersRef.current = null;\r\n }, []);\r\n\r\n const resetExportSuccessLater = useCallback(() => {\r\n if (exportSuccessTimeoutRef.current) {\r\n clearTimeout(exportSuccessTimeoutRef.current);\r\n }\r\n\r\n exportSuccessTimeoutRef.current = setTimeout(() => {\r\n setExportState((current) => (current === 'success' ? 'idle' : current));\r\n exportSuccessTimeoutRef.current = null;\r\n }, 3000);\r\n }, []);\r\n\r\n const finishExportSuccess = useCallback(() => {\r\n clearExportWaiters();\r\n setExportState('success');\r\n setExportError(null);\r\n resetExportSuccessLater();\r\n }, [clearExportWaiters, resetExportSuccessLater]);\r\n\r\n const finishExportFailure = useCallback(\r\n (message: string) => {\r\n clearExportWaiters();\r\n setExportState('error');\r\n setExportError(message);\r\n },\r\n [clearExportWaiters],\r\n );\r\n\r\n useEffect(() => {\r\n onConnectionStateChangeRef.current = onConnectionStateChange;\r\n }, [onConnectionStateChange]);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n\r\n async function resolveDatabaseAdapter(): Promise<void> {\r\n if (explicitAdapter) {\r\n setResolvedAdapter(explicitAdapter);\r\n setAdapterError(null);\r\n return;\r\n }\r\n\r\n if (!database) {\r\n setResolvedAdapter(undefined);\r\n setAdapterError(null);\r\n return;\r\n }\r\n\r\n try {\r\n const nextAdapter = await resolveAdapter(database, { type });\r\n if (!cancelled) {\r\n setResolvedAdapter(nextAdapter);\r\n setAdapterError(null);\r\n }\r\n } catch (error) {\r\n if (!cancelled) {\r\n setResolvedAdapter(undefined);\r\n setAdapterError(error instanceof Error ? error.message : 'Failed to resolve database adapter');\r\n }\r\n }\r\n }\r\n\r\n void resolveDatabaseAdapter();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [database, type, explicitAdapter]);\r\n\r\n useEffect(() => {\r\n if (detectExpoSqliteInspectable(database)) {\r\n setMobileInspector(createExpoSqliteInspector(database));\r\n return;\r\n }\r\n\r\n setMobileInspector(null);\r\n }, [database]);\r\n\r\n useEffect(() => {\r\n databaseRef.current = resolvedAdapter;\r\n }, [resolvedAdapter]);\r\n\r\n useEffect(() => {\r\n rollbackOpenTransactionRef.current = async () => {\r\n const adapter = databaseRef.current;\r\n\r\n if (!isWritableDatabaseAdapter(adapter)) {\r\n return;\r\n }\r\n\r\n try {\r\n await adapter.rollbackTransaction();\r\n } catch {\r\n // Best-effort cleanup when the provider unmounts or reconnects.\r\n }\r\n };\r\n }, [resolvedAdapter]);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n\r\n void loadOrCreateDeviceId()\r\n .then((persistedId) => {\r\n if (!cancelled) {\r\n setDeviceId(persistedId);\r\n setDeviceIdReady(true);\r\n }\r\n })\r\n .catch(() => {\r\n if (!cancelled) {\r\n setDeviceIdReady(true);\r\n }\r\n });\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!deviceIdReady || !deviceId) {\r\n return;\r\n }\r\n\r\n const client = createDevToolsClient({\r\n serverUrl,\r\n role: DevToolsRole.MOBILE,\r\n deviceId,\r\n metadata,\r\n onConnect: () => {\r\n setConnectionError(null);\r\n },\r\n onConnectionStateChange: (state) => {\r\n setConnectionState(state);\r\n onConnectionStateChangeRef.current?.(state);\r\n },\r\n onError: (error) => {\r\n setConnectionError(error.message);\r\n },\r\n onSnapshotUploadRequested: async (message) => {\r\n try {\r\n await handleDeviceSnapshotUpload(databaseRef.current, message, {\r\n hubServerUrl: serverUrl,\r\n deviceId: clientRef.current?.getDeviceId(),\r\n });\r\n\r\n if (exportWaitersRef.current) {\r\n exportWaitersRef.current.resolve();\r\n clearExportWaiters();\r\n }\r\n } catch (error) {\r\n const errorMessage =\r\n error instanceof Error ? error.message : 'Database export or upload failed';\r\n\r\n if (exportWaitersRef.current) {\r\n exportWaitersRef.current.reject(new Error(errorMessage));\r\n clearExportWaiters();\r\n return;\r\n }\r\n\r\n console.error('[database-devtools] Snapshot export or upload failed:', errorMessage);\r\n }\r\n },\r\n onExportSnapshotError: (message) => {\r\n const errorMessage = formatRefreshErrorMessage(message.code, message.message);\r\n\r\n if (exportWaitersRef.current) {\r\n exportWaitersRef.current.reject(new Error(errorMessage));\r\n clearExportWaiters();\r\n }\r\n },\r\n onBeginTransaction: async (message) => {\r\n const client = clientRef.current;\r\n\r\n if (!client) {\r\n return;\r\n }\r\n\r\n await handleBeginTransaction(databaseRef.current, message, (ack) => {\r\n client.sendTransactionAck(ack);\r\n });\r\n },\r\n onCommitTransaction: async (message) => {\r\n const client = clientRef.current;\r\n\r\n if (!client) {\r\n return;\r\n }\r\n\r\n await handleCommitTransaction(databaseRef.current, message, (ack) => {\r\n client.sendTransactionAck(ack);\r\n });\r\n },\r\n onRollbackTransaction: async (message) => {\r\n const client = clientRef.current;\r\n\r\n if (!client) {\r\n return;\r\n }\r\n\r\n await handleRollbackTransaction(databaseRef.current, message, (ack) => {\r\n client.sendTransactionAck(ack);\r\n });\r\n },\r\n onExecuteWrite: async (message) => {\r\n const client = clientRef.current;\r\n\r\n if (!client) {\r\n return;\r\n }\r\n\r\n await handleExecuteWrite(databaseRef.current, message, (ack) => {\r\n client.sendWriteAck(ack);\r\n });\r\n },\r\n });\r\n\r\n clientRef.current = client;\r\n setDeviceId(client.getDeviceId());\r\n client.connect();\r\n\r\n return () => {\r\n void rollbackOpenTransactionRef.current?.();\r\n client.disconnect();\r\n clientRef.current = null;\r\n clearExportWaiters();\r\n\r\n if (exportSuccessTimeoutRef.current) {\r\n clearTimeout(exportSuccessTimeoutRef.current);\r\n exportSuccessTimeoutRef.current = null;\r\n }\r\n };\r\n }, [serverUrl, metadata, clearExportWaiters, deviceIdReady, deviceId]);\r\n\r\n const openLauncher = useCallback(() => {\r\n setLauncherVisible(true);\r\n }, []);\r\n\r\n const closeLauncher = useCallback(() => {\r\n setLauncherVisible(false);\r\n }, []);\r\n\r\n const openExplorer = useCallback(() => {\r\n setLauncherVisible(false);\r\n setExplorerVisible(true);\r\n }, []);\r\n\r\n const closeExplorer = useCallback(() => {\r\n setExplorerVisible(false);\r\n }, []);\r\n\r\n const openSettings = useCallback(() => {\r\n setLauncherVisible(false);\r\n setSettingsVisible(true);\r\n }, []);\r\n\r\n const closeSettings = useCallback(() => {\r\n setSettingsVisible(false);\r\n }, []);\r\n\r\n const reconnect = useCallback((url: string) => {\r\n setConnectionError(null);\r\n setServerUrl(normalizeServerUrl(url));\r\n }, []);\r\n\r\n const exportDatabase = useCallback(async () => {\r\n if (exportState === 'exporting') {\r\n return;\r\n }\r\n\r\n if (connectionState !== 'connected') {\r\n finishExportFailure('Connect to the DevTools hub first');\r\n return;\r\n }\r\n\r\n if (!resolvedAdapter) {\r\n finishExportFailure(adapterError ?? 'No database adapter connected');\r\n return;\r\n }\r\n\r\n const client = clientRef.current;\r\n\r\n if (!client) {\r\n finishExportFailure('DevTools client is not ready');\r\n return;\r\n }\r\n\r\n setExportState('exporting');\r\n setExportError(null);\r\n\r\n try {\r\n await new Promise<void>((resolve, reject) => {\r\n exportWaitersRef.current = { resolve, reject };\r\n exportTimeoutRef.current = setTimeout(() => {\r\n exportWaitersRef.current?.reject(new Error('Export timed out'));\r\n clearExportWaiters();\r\n }, REFRESH_TIMEOUT_MS);\r\n\r\n client.requestExportSnapshot();\r\n });\r\n\r\n finishExportSuccess();\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Export failed';\r\n finishExportFailure(message);\r\n }\r\n }, [\r\n adapterError,\r\n connectionState,\r\n exportState,\r\n finishExportFailure,\r\n resolvedAdapter,\r\n ]);\r\n\r\n const connectionHint = useMemo(() => getConnectionHint(serverUrl), [serverUrl]);\r\n\r\n const value = useMemo(\r\n () => ({\r\n connectionState,\r\n connectionError,\r\n connectionHint,\r\n deviceId,\r\n serverUrl,\r\n metadata,\r\n database: resolvedAdapter,\r\n adapterError,\r\n mobileInspector,\r\n launcherVisible,\r\n openLauncher,\r\n closeLauncher,\r\n explorerVisible,\r\n openExplorer,\r\n closeExplorer,\r\n settingsVisible,\r\n openSettings,\r\n closeSettings,\r\n reconnect,\r\n exportState,\r\n exportError,\r\n exportDatabase,\r\n }),\r\n [\r\n connectionState,\r\n connectionError,\r\n connectionHint,\r\n deviceId,\r\n serverUrl,\r\n metadata,\r\n resolvedAdapter,\r\n adapterError,\r\n mobileInspector,\r\n launcherVisible,\r\n openLauncher,\r\n closeLauncher,\r\n explorerVisible,\r\n openExplorer,\r\n closeExplorer,\r\n settingsVisible,\r\n openSettings,\r\n closeSettings,\r\n reconnect,\r\n exportState,\r\n exportError,\r\n exportDatabase,\r\n ],\r\n );\r\n\r\n return <DevToolsContext.Provider value={value}>{children}</DevToolsContext.Provider>;\r\n}\r\n","import { StyleSheet, Text, View } from 'react-native';\nimport type { ConnectionState } from '../client/createDevToolsClient';\n\nexport type ConnectionStatusBadgeProps = {\n state: ConnectionState;\n};\n\ntype StatusConfig = {\n label: string;\n color: string;\n backgroundColor: string;\n};\n\nfunction getStatusConfig(state: ConnectionState): StatusConfig {\n switch (state) {\n case 'connected':\n return { label: 'Connected', color: '#166534', backgroundColor: '#dcfce7' };\n case 'reconnecting':\n return { label: 'Reconnecting', color: '#92400e', backgroundColor: '#fef3c7' };\n case 'connecting':\n return { label: 'Connecting', color: '#92400e', backgroundColor: '#fef3c7' };\n case 'disconnected':\n return { label: 'Disconnected', color: '#991b1b', backgroundColor: '#fee2e2' };\n }\n}\n\nexport function getConnectionDotColor(state: ConnectionState): string {\n switch (state) {\n case 'connected':\n return '#22c55e';\n case 'reconnecting':\n case 'connecting':\n return '#eab308';\n case 'disconnected':\n return '#ef4444';\n }\n}\n\nexport function ConnectionStatusBadge({ state }: ConnectionStatusBadgeProps) {\n const config = getStatusConfig(state);\n\n return (\n <View style={[styles.badge, { backgroundColor: config.backgroundColor }]}>\n <View style={[styles.dot, { backgroundColor: getConnectionDotColor(state) }]} />\n <Text style={[styles.label, { color: config.color }]}>{config.label}</Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n badge: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n paddingHorizontal: 10,\n paddingVertical: 6,\n borderRadius: 999,\n gap: 6,\n },\n dot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n },\n label: {\n fontSize: 13,\n fontWeight: '600',\n },\n});\n","import {\r\n ActivityIndicator,\r\n Modal,\r\n Pressable,\r\n ScrollView,\r\n StyleSheet,\r\n Text,\r\n View,\r\n} from 'react-native';\r\nimport { useDevTools } from '../hooks/useDevTools';\r\nimport { ConnectionStatusBadge } from './ConnectionStatusBadge';\r\n\r\nexport function DevToolsLauncherModal() {\r\n const {\r\n launcherVisible,\r\n closeLauncher,\r\n openExplorer,\r\n openSettings,\r\n connectionState,\r\n mobileInspector,\r\n exportState,\r\n exportError,\r\n exportDatabase,\r\n database,\r\n adapterError,\r\n } = useDevTools();\r\n\r\n const isExporting = exportState === 'exporting';\r\n const exportDisabled =\r\n connectionState !== 'connected' || !database || isExporting || Boolean(adapterError);\r\n\r\n return (\r\n <Modal\r\n animationType=\"slide\"\r\n onRequestClose={closeLauncher}\r\n transparent\r\n visible={launcherVisible}\r\n >\r\n <View style={styles.overlay}>\r\n <View style={styles.sheet}>\r\n <View style={styles.header}>\r\n <Text style={styles.title}>Database DevTools</Text>\r\n <Pressable accessibilityLabel=\"Close launcher\" onPress={closeLauncher}>\r\n <Text style={styles.closeButton}>Close</Text>\r\n </Pressable>\r\n </View>\r\n\r\n <View style={styles.body}>\r\n <ConnectionStatusBadge state={connectionState} />\r\n <Text style={styles.hint}>\r\n Browse and query the on-device database, or connect to the web inspector.\r\n </Text>\r\n\r\n <Pressable\r\n accessibilityLabel=\"View database on device\"\r\n disabled={!mobileInspector}\r\n onPress={openExplorer}\r\n style={[styles.primaryButton, !mobileInspector && styles.primaryButtonDisabled]}\r\n >\r\n <Text style={styles.primaryLabel}>View Database</Text>\r\n </Pressable>\r\n {!mobileInspector ? (\r\n <Text style={styles.warning}>\r\n On-device explorer requires an Expo SQLite database instance.\r\n </Text>\r\n ) : null}\r\n\r\n <Pressable\r\n accessibilityLabel=\"Open DevTools settings\"\r\n onPress={openSettings}\r\n style={styles.secondaryButton}\r\n >\r\n <Text style={styles.secondaryLabel}>DevTools Settings</Text>\r\n </Pressable>\r\n\r\n <Pressable\r\n accessibilityLabel=\"Export database to web inspector\"\r\n accessibilityState={{ busy: isExporting, disabled: exportDisabled }}\r\n disabled={exportDisabled}\r\n onPress={() => void exportDatabase()}\r\n style={[styles.ghostButton, exportDisabled && !isExporting && styles.buttonDisabled]}\r\n >\r\n <View style={styles.exportContent}>\r\n {isExporting ? <ActivityIndicator color=\"#0f172a\" size=\"small\" /> : null}\r\n <Text style={styles.ghostLabel}>\r\n {isExporting ? 'Exporting…' : 'Export to Web Inspector'}\r\n </Text>\r\n </View>\r\n </Pressable>\r\n\r\n {connectionState !== 'connected' ? (\r\n <Text style={styles.hint}>Connect to the hub in settings before exporting.</Text>\r\n ) : null}\r\n {exportState === 'success' ? (\r\n <Text style={styles.success}>Sent to web inspector</Text>\r\n ) : null}\r\n {exportError ? <Text style={styles.error}>{exportError}</Text> : null}\r\n {adapterError ? <Text style={styles.error}>{adapterError}</Text> : null}\r\n </View>\r\n </View>\r\n </View>\r\n </Modal>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n overlay: {\r\n flex: 1,\r\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\r\n justifyContent: 'flex-end',\r\n },\r\n sheet: {\r\n backgroundColor: '#ffffff',\r\n borderTopLeftRadius: 16,\r\n borderTopRightRadius: 16,\r\n overflow: 'hidden',\r\n },\r\n header: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingHorizontal: 20,\r\n paddingVertical: 16,\r\n borderBottomWidth: StyleSheet.hairlineWidth,\r\n borderBottomColor: '#e2e8f0',\r\n },\r\n title: {\r\n fontSize: 18,\r\n fontWeight: '700',\r\n color: '#0f172a',\r\n },\r\n closeButton: {\r\n fontSize: 16,\r\n color: '#2563eb',\r\n fontWeight: '600',\r\n },\r\n body: {\r\n padding: 20,\r\n gap: 12,\r\n },\r\n hint: {\r\n fontSize: 13,\r\n color: '#64748b',\r\n lineHeight: 20,\r\n },\r\n warning: {\r\n fontSize: 12,\r\n color: '#b45309',\r\n marginTop: -4,\r\n },\r\n primaryButton: {\r\n backgroundColor: '#2563eb',\r\n borderRadius: 8,\r\n paddingVertical: 14,\r\n alignItems: 'center',\r\n },\r\n primaryButtonDisabled: {\r\n opacity: 0.5,\r\n },\r\n primaryLabel: {\r\n color: '#f8fafc',\r\n fontSize: 16,\r\n fontWeight: '700',\r\n },\r\n secondaryButton: {\r\n backgroundColor: '#1e293b',\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n },\r\n secondaryLabel: {\r\n color: '#f8fafc',\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n ghostButton: {\r\n borderWidth: 1,\r\n borderColor: '#cbd5e1',\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n },\r\n buttonDisabled: {\r\n opacity: 0.5,\r\n },\r\n ghostLabel: {\r\n color: '#0f172a',\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n exportContent: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 8,\r\n },\r\n success: {\r\n fontSize: 13,\r\n color: '#15803d',\r\n },\r\n error: {\r\n fontSize: 13,\r\n color: '#dc2626',\r\n },\r\n});\r\n","import { useEffect, useState, type ReactNode } from 'react';\r\nimport {\r\n ActivityIndicator,\r\n Modal,\r\n Pressable,\r\n ScrollView,\r\n StyleSheet,\r\n Text,\r\n TextInput,\r\n View,\r\n} from 'react-native';\r\nimport { useDevTools } from '../hooks/useDevTools';\r\nimport { ConnectionStatusBadge } from './ConnectionStatusBadge';\r\n\r\nexport function DevToolsSettingsModal() {\r\n const {\r\n settingsVisible,\r\n closeSettings,\r\n connectionState,\r\n connectionError,\r\n connectionHint,\r\n deviceId,\r\n serverUrl,\r\n metadata,\r\n database,\r\n adapterError,\r\n reconnect,\r\n exportState,\r\n exportError,\r\n exportDatabase,\r\n } = useDevTools();\r\n\r\n const [draftUrl, setDraftUrl] = useState(serverUrl);\r\n\r\n useEffect(() => {\r\n if (settingsVisible) {\r\n setDraftUrl(serverUrl);\r\n }\r\n }, [settingsVisible, serverUrl]);\r\n\r\n const handleReconnect = () => {\r\n const trimmed = draftUrl.trim();\r\n\r\n if (trimmed) {\r\n reconnect(trimmed);\r\n }\r\n };\r\n\r\n const handleExportDatabase = () => {\r\n void exportDatabase();\r\n };\r\n\r\n const isExporting = exportState === 'exporting';\r\n const exportDisabled =\r\n connectionState !== 'connected' || !database || isExporting;\r\n\r\n return (\r\n <Modal\r\n animationType=\"slide\"\r\n onRequestClose={closeSettings}\r\n transparent\r\n visible={settingsVisible}\r\n >\r\n <View style={styles.overlay}>\r\n <View style={styles.sheet}>\r\n <View style={styles.header}>\r\n <Text style={styles.title}>Database DevTools</Text>\r\n <Pressable accessibilityLabel=\"Close settings\" onPress={closeSettings}>\r\n <Text style={styles.closeButton}>Close</Text>\r\n </Pressable>\r\n </View>\r\n\r\n <ScrollView\r\n contentContainerStyle={styles.content}\r\n style={styles.scrollBody}\r\n >\r\n <Section title=\"Connection\">\r\n <ConnectionStatusBadge state={connectionState} />\r\n <InfoRow label=\"Server URL\" value={serverUrl} mono />\r\n {connectionError ? (\r\n <Text style={styles.errorText}>{connectionError}</Text>\r\n ) : null}\r\n {connectionHint ? (\r\n <Text style={styles.hintText}>{connectionHint}</Text>\r\n ) : null}\r\n {connectionState === 'reconnecting' ? (\r\n <Text style={styles.hintText}>\r\n Ensure the inspector hub is running (npx database-devtools) and the URL reaches\r\n your development machine — not the phone itself.\r\n </Text>\r\n ) : null}\r\n </Section>\r\n\r\n <Section title=\"Device\">\r\n <InfoRow label=\"Device ID\" value={deviceId ?? '—'} mono />\r\n <InfoRow label=\"Platform\" value={metadata.platform ?? '—'} />\r\n <InfoRow label=\"App\" value={metadata.appName ?? '—'} />\r\n {metadata.appVersion ? (\r\n <InfoRow label=\"Version\" value={metadata.appVersion} />\r\n ) : null}\r\n {metadata.bundleId ? (\r\n <InfoRow label=\"Bundle ID\" value={metadata.bundleId} mono />\r\n ) : null}\r\n </Section>\r\n\r\n <Section title=\"Server\">\r\n <Text style={styles.fieldLabel}>WebSocket URL</Text>\r\n <TextInput\r\n autoCapitalize=\"none\"\r\n autoCorrect={false}\r\n onChangeText={setDraftUrl}\r\n placeholder=\"ws://10.0.2.2:3847/ws\"\r\n style={styles.input}\r\n value={draftUrl}\r\n />\r\n <Pressable onPress={handleReconnect} style={styles.reconnectButton}>\r\n <Text style={styles.reconnectLabel}>Reconnect</Text>\r\n </Pressable>\r\n </Section>\r\n\r\n <Section title=\"Database\">\r\n {database ? (\r\n <>\r\n <InfoRow label=\"Kind\" value={database.kind} />\r\n <InfoRow label=\"Name\" value={database.name} />\r\n <InfoRow label=\"ID\" value={database.id} mono />\r\n </>\r\n ) : (\r\n <Text style={styles.placeholder}>\r\n {adapterError ? 'Adapter not connected' : 'No adapter connected'}\r\n </Text>\r\n )}\r\n </Section>\r\n </ScrollView>\r\n\r\n <View style={styles.exportFooter}>\r\n {adapterError ? <Text style={styles.errorText}>{adapterError}</Text> : null}\r\n {database ? (\r\n <>\r\n <Pressable\r\n accessibilityLabel=\"Export database to web inspector\"\r\n accessibilityState={{ busy: isExporting, disabled: exportDisabled }}\r\n disabled={exportDisabled}\r\n onPress={handleExportDatabase}\r\n style={[\r\n styles.exportButton,\r\n exportDisabled && !isExporting && styles.exportButtonDisabled,\r\n ]}\r\n >\r\n <View style={styles.exportButtonContent}>\r\n {isExporting ? (\r\n <ActivityIndicator color=\"#f8fafc\" size=\"small\" />\r\n ) : null}\r\n <Text style={styles.exportLabel}>\r\n {isExporting ? 'Exporting…' : 'Export Database'}\r\n </Text>\r\n </View>\r\n </Pressable>\r\n {connectionState !== 'connected' ? (\r\n <Text style={styles.hintText}>Connect to the hub before exporting.</Text>\r\n ) : null}\r\n {exportState === 'success' ? (\r\n <Text style={styles.successText}>Sent to web inspector</Text>\r\n ) : null}\r\n {exportError ? <Text style={styles.errorText}>{exportError}</Text> : null}\r\n </>\r\n ) : (\r\n <Text style={styles.placeholder}>\r\n {adapterError ? 'Adapter not connected' : 'No adapter connected'}\r\n </Text>\r\n )}\r\n </View>\r\n </View>\r\n </View>\r\n </Modal>\r\n );\r\n}\r\n\r\nfunction Section({ title, children }: { title: string; children: ReactNode }) {\r\n return (\r\n <View style={styles.section}>\r\n <Text style={styles.sectionTitle}>{title}</Text>\r\n {children}\r\n </View>\r\n );\r\n}\r\n\r\nfunction InfoRow({\r\n label,\r\n value,\r\n mono = false,\r\n}: {\r\n label: string;\r\n value: string;\r\n mono?: boolean;\r\n}) {\r\n return (\r\n <View style={styles.infoRow}>\r\n <Text style={styles.infoLabel}>{label}</Text>\r\n <Text style={[styles.infoValue, mono && styles.mono]} selectable>\r\n {value}\r\n </Text>\r\n </View>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n overlay: {\r\n flex: 1,\r\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\r\n justifyContent: 'flex-end',\r\n },\r\n sheet: {\r\n backgroundColor: '#ffffff',\r\n borderTopLeftRadius: 16,\r\n borderTopRightRadius: 16,\r\n maxHeight: '85%',\r\n overflow: 'hidden',\r\n },\r\n scrollBody: {\r\n flexGrow: 0,\r\n flexShrink: 1,\r\n },\r\n header: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingHorizontal: 20,\r\n paddingVertical: 16,\r\n borderBottomWidth: StyleSheet.hairlineWidth,\r\n borderBottomColor: '#e2e8f0',\r\n },\r\n title: {\r\n fontSize: 18,\r\n fontWeight: '700',\r\n color: '#0f172a',\r\n },\r\n closeButton: {\r\n fontSize: 16,\r\n color: '#2563eb',\r\n fontWeight: '600',\r\n },\r\n exportFooter: {\r\n paddingHorizontal: 20,\r\n paddingTop: 12,\r\n paddingBottom: 20,\r\n gap: 8,\r\n borderTopWidth: StyleSheet.hairlineWidth,\r\n borderTopColor: '#e2e8f0',\r\n backgroundColor: '#ffffff',\r\n },\r\n content: {\r\n padding: 20,\r\n gap: 20,\r\n },\r\n section: {\r\n gap: 10,\r\n },\r\n sectionTitle: {\r\n fontSize: 13,\r\n fontWeight: '600',\r\n color: '#64748b',\r\n textTransform: 'uppercase',\r\n letterSpacing: 0.5,\r\n },\r\n infoRow: {\r\n gap: 2,\r\n },\r\n infoLabel: {\r\n fontSize: 12,\r\n color: '#94a3b8',\r\n },\r\n infoValue: {\r\n fontSize: 14,\r\n color: '#0f172a',\r\n },\r\n mono: {\r\n fontFamily: 'monospace',\r\n fontSize: 12,\r\n },\r\n fieldLabel: {\r\n fontSize: 12,\r\n color: '#64748b',\r\n marginBottom: 4,\r\n },\r\n input: {\r\n borderWidth: 1,\r\n borderColor: '#cbd5e1',\r\n borderRadius: 8,\r\n paddingHorizontal: 12,\r\n paddingVertical: 10,\r\n fontSize: 14,\r\n color: '#0f172a',\r\n fontFamily: 'monospace',\r\n },\r\n reconnectButton: {\r\n marginTop: 8,\r\n backgroundColor: '#1e293b',\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n },\r\n reconnectLabel: {\r\n color: '#f8fafc',\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n exportButton: {\r\n backgroundColor: '#2563eb',\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n paddingHorizontal: 16,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: 44,\r\n },\r\n exportButtonContent: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: 8,\r\n },\r\n exportButtonDisabled: {\r\n opacity: 0.5,\r\n },\r\n exportLabel: {\r\n color: '#f8fafc',\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n successText: {\r\n fontSize: 13,\r\n color: '#15803d',\r\n },\r\n placeholder: {\r\n fontSize: 14,\r\n color: '#94a3b8',\r\n fontStyle: 'italic',\r\n },\r\n errorText: {\r\n fontSize: 13,\r\n color: '#dc2626',\r\n marginBottom: 8,\r\n },\r\n hintText: {\r\n fontSize: 12,\r\n color: '#b45309',\r\n lineHeight: 18,\r\n },\r\n});\r\n","export type FloatingButtonCorner = 'bottom-right' | 'bottom-left';\r\n\r\nexport type FloatingButtonPosition = {\r\n x: number;\r\n y: number;\r\n};\r\n\r\nexport type FloatingButtonLayout = {\r\n windowWidth: number;\r\n windowHeight: number;\r\n buttonSize: number;\r\n margin: number;\r\n};\r\n\r\nexport const FLOATING_BUTTON_SIZE = 48;\r\nexport const FLOATING_BUTTON_MARGIN = 16;\r\nexport const FLOATING_BUTTON_BOTTOM = 24;\r\nexport const FLOATING_BUTTON_TAP_THRESHOLD = 8;\r\n\r\nexport function getCornerPosition(\r\n corner: FloatingButtonCorner,\r\n layout: FloatingButtonLayout,\r\n bottomInset = FLOATING_BUTTON_BOTTOM,\r\n): FloatingButtonPosition {\r\n const { windowWidth, windowHeight, buttonSize, margin } = layout;\r\n const y = windowHeight - bottomInset - buttonSize;\r\n\r\n return {\r\n x: corner === 'bottom-right' ? windowWidth - margin - buttonSize : margin,\r\n y,\r\n };\r\n}\r\n\r\nexport function clampFloatingPosition(\r\n position: FloatingButtonPosition,\r\n layout: FloatingButtonLayout,\r\n): FloatingButtonPosition {\r\n const { windowWidth, windowHeight, buttonSize, margin } = layout;\r\n\r\n return {\r\n x: Math.min(Math.max(margin, position.x), windowWidth - margin - buttonSize),\r\n y: Math.min(Math.max(margin, position.y), windowHeight - margin - buttonSize),\r\n };\r\n}\r\n\r\nexport function snapFloatingPositionToEdges(\r\n position: FloatingButtonPosition,\r\n layout: FloatingButtonLayout,\r\n): FloatingButtonPosition {\r\n const { windowWidth, windowHeight, buttonSize, margin } = layout;\r\n const clamped = clampFloatingPosition(position, layout);\r\n const centerX = clamped.x + buttonSize / 2;\r\n const centerY = clamped.y + buttonSize / 2;\r\n\r\n let x = centerX < windowWidth / 2 ? margin : windowWidth - margin - buttonSize;\r\n let y = clamped.y;\r\n\r\n if (centerY < windowHeight * 0.2) {\r\n y = margin;\r\n } else if (centerY > windowHeight * 0.8) {\r\n y = windowHeight - margin - buttonSize;\r\n }\r\n\r\n return { x, y };\r\n}\r\n\r\nexport function isFloatingButtonTap(totalMovement: number): boolean {\r\n return totalMovement < FLOATING_BUTTON_TAP_THRESHOLD;\r\n}\r\n","import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport {\r\n PanResponder,\r\n Pressable,\r\n StyleSheet,\r\n View,\r\n useWindowDimensions,\r\n type StyleProp,\r\n type TextStyle,\r\n} from 'react-native';\r\nimport { useDevTools } from '../hooks/useDevTools';\r\nimport {\r\n FLOATING_BUTTON_MARGIN,\r\n FLOATING_BUTTON_SIZE,\r\n clampFloatingPosition,\r\n getCornerPosition,\r\n isFloatingButtonTap,\r\n snapFloatingPositionToEdges,\r\n type FloatingButtonCorner,\r\n type FloatingButtonPosition,\r\n} from '../utils/floatingButtonPosition';\r\nimport { getConnectionDotColor } from './ConnectionStatusBadge';\r\n\r\nconst DEFAULT_ICON_SIZE = 22;\r\nconst DEFAULT_ICON_COLOR = '#f8fafc';\r\nconst DEFAULT_BUTTON_COLOR = '#1e293b';\r\n\r\nexport type FloatingDevToolsButtonProps = {\r\n position?: FloatingButtonCorner;\r\n iconStyle?: StyleProp<TextStyle>;\r\n /** Floating button background color. */\r\n buttonColor?: string;\r\n /** Database icon color. */\r\n iconColor?: string;\r\n draggable?: boolean;\r\n snapToEdges?: boolean;\r\n floatingPosition?: FloatingButtonPosition;\r\n onFloatingPositionChange?: (position: FloatingButtonPosition) => void;\r\n};\r\n\r\nexport function FloatingDevToolsButton({\r\n position = 'bottom-right',\r\n iconStyle,\r\n buttonColor,\r\n iconColor,\r\n draggable = true,\r\n snapToEdges = true,\r\n floatingPosition,\r\n onFloatingPositionChange,\r\n}: FloatingDevToolsButtonProps) {\r\n const { connectionState, openLauncher } = useDevTools();\r\n const { width: windowWidth, height: windowHeight } = useWindowDimensions();\r\n const [internalPosition, setInternalPosition] = useState<FloatingButtonPosition | null>(null);\r\n const [dragPosition, setDragPosition] = useState<FloatingButtonPosition | null>(null);\r\n const dragOrigin = useRef<FloatingButtonPosition>({ x: 0, y: 0 });\r\n const hasInitialized = useRef(false);\r\n const onFloatingPositionChangeRef = useRef(onFloatingPositionChange);\r\n\r\n useEffect(() => {\r\n onFloatingPositionChangeRef.current = onFloatingPositionChange;\r\n }, [onFloatingPositionChange]);\r\n\r\n const layout = useMemo(\r\n () => ({\r\n windowWidth,\r\n windowHeight,\r\n buttonSize: FLOATING_BUTTON_SIZE,\r\n margin: FLOATING_BUTTON_MARGIN,\r\n }),\r\n [windowWidth, windowHeight],\r\n );\r\n\r\n const committedPosition = floatingPosition ?? internalPosition;\r\n const renderedPosition = dragPosition ?? committedPosition;\r\n\r\n const commitPosition = useCallback(\r\n (next: FloatingButtonPosition) => {\r\n const clamped = clampFloatingPosition(next, layout);\r\n\r\n if (!floatingPosition) {\r\n setInternalPosition(clamped);\r\n }\r\n\r\n onFloatingPositionChangeRef.current?.(clamped);\r\n return clamped;\r\n },\r\n [floatingPosition, layout],\r\n );\r\n\r\n useEffect(() => {\r\n if (windowWidth <= 0 || windowHeight <= 0) {\r\n return;\r\n }\r\n\r\n if (floatingPosition) {\r\n hasInitialized.current = true;\r\n return;\r\n }\r\n\r\n if (!hasInitialized.current) {\r\n setInternalPosition(getCornerPosition(position, layout));\r\n hasInitialized.current = true;\r\n }\r\n }, [floatingPosition, layout, position, windowHeight, windowWidth]);\r\n\r\n useEffect(() => {\r\n if (!committedPosition || windowWidth <= 0 || windowHeight <= 0) {\r\n return;\r\n }\r\n\r\n const clamped = clampFloatingPosition(committedPosition, layout);\r\n\r\n if (clamped.x !== committedPosition.x || clamped.y !== committedPosition.y) {\r\n commitPosition(clamped);\r\n }\r\n }, [commitPosition, committedPosition, layout, windowHeight, windowWidth]);\r\n\r\n const panResponder = useMemo(\r\n () =>\r\n PanResponder.create({\r\n onStartShouldSetPanResponder: () => draggable,\r\n onMoveShouldSetPanResponder: (_, gesture) =>\r\n draggable && (Math.abs(gesture.dx) > 2 || Math.abs(gesture.dy) > 2),\r\n onPanResponderGrant: () => {\r\n if (!committedPosition) {\r\n return;\r\n }\r\n\r\n dragOrigin.current = committedPosition;\r\n },\r\n onPanResponderMove: (_, gesture) => {\r\n setDragPosition(\r\n clampFloatingPosition(\r\n {\r\n x: dragOrigin.current.x + gesture.dx,\r\n y: dragOrigin.current.y + gesture.dy,\r\n },\r\n layout,\r\n ),\r\n );\r\n },\r\n onPanResponderRelease: (_, gesture) => {\r\n setDragPosition(null);\r\n\r\n const movement = Math.hypot(gesture.dx, gesture.dy);\r\n\r\n if (isFloatingButtonTap(movement)) {\r\n openLauncher();\r\n return;\r\n }\r\n\r\n const raw = {\r\n x: dragOrigin.current.x + gesture.dx,\r\n y: dragOrigin.current.y + gesture.dy,\r\n };\r\n const next = snapToEdges\r\n ? snapFloatingPositionToEdges(raw, layout)\r\n : clampFloatingPosition(raw, layout);\r\n\r\n commitPosition(next);\r\n },\r\n onPanResponderTerminate: () => {\r\n setDragPosition(null);\r\n },\r\n }),\r\n [commitPosition, committedPosition, draggable, layout, openLauncher, snapToEdges],\r\n );\r\n\r\n if (!renderedPosition) {\r\n return null;\r\n }\r\n\r\n const resolvedButtonColor = buttonColor ?? DEFAULT_BUTTON_COLOR;\r\n const resolvedIconColor =\r\n iconColor ?? StyleSheet.flatten(iconStyle)?.color ?? DEFAULT_ICON_COLOR;\r\n const buttonStyle = { backgroundColor: resolvedButtonColor };\r\n const statusDotStyle = {\r\n backgroundColor: getConnectionDotColor(connectionState),\r\n borderColor: resolvedButtonColor,\r\n };\r\n\r\n const buttonContent = (\r\n <>\r\n <MaterialCommunityIcons\r\n color={resolvedIconColor}\r\n name=\"database\"\r\n size={DEFAULT_ICON_SIZE}\r\n style={iconStyle}\r\n />\r\n <View style={[styles.statusDot, statusDotStyle]} />\r\n </>\r\n );\r\n\r\n if (!draggable) {\r\n const positionStyle = position === 'bottom-left' ? styles.bottomLeft : styles.bottomRight;\r\n\r\n return (\r\n <View style={[styles.fixedContainer, positionStyle]} pointerEvents=\"box-none\">\r\n <Pressable\r\n accessibilityLabel=\"Open Database DevTools\"\r\n accessibilityRole=\"button\"\r\n onPress={openLauncher}\r\n style={({ pressed }) => [\r\n styles.button,\r\n buttonStyle,\r\n pressed && styles.buttonPressed,\r\n ]}\r\n >\r\n {buttonContent}\r\n </Pressable>\r\n </View>\r\n );\r\n }\r\n\r\n return (\r\n <View\r\n pointerEvents=\"box-none\"\r\n style={[\r\n styles.draggableContainer,\r\n {\r\n transform: [\r\n { translateX: renderedPosition.x },\r\n { translateY: renderedPosition.y },\r\n ],\r\n },\r\n ]}\r\n {...panResponder.panHandlers}\r\n >\r\n <View\r\n accessibilityHint=\"Drag to move. Tap to open DevTools launcher.\"\r\n accessibilityLabel=\"Open Database DevTools\"\r\n accessibilityRole=\"button\"\r\n style={[styles.button, buttonStyle, dragPosition && styles.buttonDragging]}\r\n >\r\n {buttonContent}\r\n </View>\r\n </View>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n fixedContainer: {\r\n position: 'absolute',\r\n bottom: 24,\r\n zIndex: 9999,\r\n },\r\n bottomRight: {\r\n right: 16,\r\n },\r\n bottomLeft: {\r\n left: 16,\r\n },\r\n draggableContainer: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n zIndex: 9999,\r\n },\r\n button: {\r\n width: FLOATING_BUTTON_SIZE,\r\n height: FLOATING_BUTTON_SIZE,\r\n borderRadius: FLOATING_BUTTON_SIZE / 2,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n shadowColor: '#000',\r\n shadowOffset: { width: 0, height: 2 },\r\n shadowOpacity: 0.25,\r\n shadowRadius: 4,\r\n elevation: 6,\r\n },\r\n buttonPressed: {\r\n opacity: 0.85,\r\n },\r\n buttonDragging: {\r\n opacity: 0.92,\r\n transform: [{ scale: 1.04 }],\r\n },\r\n statusDot: {\r\n position: 'absolute',\r\n top: 2,\r\n right: 2,\r\n width: 10,\r\n height: 10,\r\n borderRadius: 5,\r\n borderWidth: 2,\r\n },\r\n});\r\n","import { StyleSheet } from 'react-native';\r\n\r\nexport const explorerColors = {\r\n background: '#ffffff',\r\n surface: '#f8fafc',\r\n border: '#e2e8f0',\r\n text: '#0f172a',\r\n muted: '#64748b',\r\n subtle: '#94a3b8',\r\n accent: '#2563eb',\r\n accentSoft: '#dbeafe',\r\n error: '#dc2626',\r\n success: '#15803d',\r\n overlay: 'rgba(0, 0, 0, 0.45)',\r\n};\r\n\r\nexport const explorerStyles = StyleSheet.create({\r\n fullScreen: {\r\n flex: 1,\r\n backgroundColor: explorerColors.background,\r\n },\r\n header: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingHorizontal: 16,\r\n paddingVertical: 14,\r\n borderBottomWidth: StyleSheet.hairlineWidth,\r\n borderBottomColor: explorerColors.border,\r\n backgroundColor: explorerColors.background,\r\n },\r\n headerTitle: {\r\n fontSize: 17,\r\n fontWeight: '700',\r\n color: explorerColors.text,\r\n },\r\n headerAction: {\r\n fontSize: 16,\r\n color: explorerColors.accent,\r\n fontWeight: '600',\r\n },\r\n tabRow: {\r\n flexDirection: 'row',\r\n borderBottomWidth: StyleSheet.hairlineWidth,\r\n borderBottomColor: explorerColors.border,\r\n backgroundColor: explorerColors.surface,\r\n },\r\n tab: {\r\n flex: 1,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n borderBottomWidth: 2,\r\n borderBottomColor: 'transparent',\r\n },\r\n tabActive: {\r\n borderBottomColor: explorerColors.accent,\r\n },\r\n tabLabel: {\r\n fontSize: 14,\r\n color: explorerColors.muted,\r\n fontWeight: '500',\r\n },\r\n tabLabelActive: {\r\n color: explorerColors.accent,\r\n fontWeight: '700',\r\n },\r\n content: {\r\n flex: 1,\r\n padding: 16,\r\n },\r\n sectionTitle: {\r\n fontSize: 12,\r\n fontWeight: '600',\r\n color: explorerColors.muted,\r\n textTransform: 'uppercase',\r\n letterSpacing: 0.5,\r\n marginBottom: 8,\r\n },\r\n infoRow: {\r\n marginBottom: 10,\r\n },\r\n infoLabel: {\r\n fontSize: 12,\r\n color: explorerColors.subtle,\r\n marginBottom: 2,\r\n },\r\n infoValue: {\r\n fontSize: 14,\r\n color: explorerColors.text,\r\n },\r\n mono: {\r\n fontFamily: 'monospace',\r\n fontSize: 12,\r\n },\r\n listItem: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingVertical: 12,\r\n paddingHorizontal: 12,\r\n borderRadius: 8,\r\n backgroundColor: explorerColors.surface,\r\n marginBottom: 8,\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n },\r\n listItemTitle: {\r\n fontSize: 15,\r\n fontWeight: '600',\r\n color: explorerColors.text,\r\n fontFamily: 'monospace',\r\n },\r\n listItemMeta: {\r\n fontSize: 12,\r\n color: explorerColors.muted,\r\n },\r\n searchInput: {\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n paddingHorizontal: 12,\r\n paddingVertical: 10,\r\n fontSize: 14,\r\n color: explorerColors.text,\r\n backgroundColor: explorerColors.background,\r\n marginBottom: 12,\r\n },\r\n primaryButton: {\r\n backgroundColor: explorerColors.accent,\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: 44,\r\n },\r\n primaryButtonDisabled: {\r\n opacity: 0.5,\r\n },\r\n primaryButtonLabel: {\r\n color: '#f8fafc',\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n secondaryButton: {\r\n backgroundColor: '#1e293b',\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: 44,\r\n },\r\n secondaryButtonLabel: {\r\n color: '#f8fafc',\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n ghostButton: {\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n paddingVertical: 12,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: 44,\r\n backgroundColor: explorerColors.background,\r\n },\r\n ghostButtonLabel: {\r\n color: explorerColors.text,\r\n fontSize: 15,\r\n fontWeight: '600',\r\n },\r\n errorText: {\r\n fontSize: 13,\r\n color: explorerColors.error,\r\n marginTop: 8,\r\n },\r\n hintText: {\r\n fontSize: 12,\r\n color: explorerColors.muted,\r\n marginTop: 8,\r\n lineHeight: 18,\r\n },\r\n placeholder: {\r\n fontSize: 14,\r\n color: explorerColors.subtle,\r\n fontStyle: 'italic',\r\n textAlign: 'center',\r\n marginTop: 24,\r\n },\r\n sqlInput: {\r\n minHeight: 120,\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n paddingHorizontal: 12,\r\n paddingVertical: 10,\r\n fontSize: 13,\r\n fontFamily: 'monospace',\r\n color: explorerColors.text,\r\n textAlignVertical: 'top',\r\n backgroundColor: explorerColors.surface,\r\n },\r\n sqlTabRoot: {\r\n flex: 1,\r\n minHeight: 0,\r\n },\r\n sqlQueryPane: {\r\n flexShrink: 0,\r\n paddingHorizontal: 16,\r\n paddingTop: 16,\r\n paddingBottom: 12,\r\n gap: 12,\r\n borderBottomWidth: StyleSheet.hairlineWidth,\r\n borderBottomColor: explorerColors.border,\r\n backgroundColor: explorerColors.background,\r\n },\r\n sqlInputCompact: {\r\n minHeight: 96,\r\n maxHeight: 120,\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n paddingHorizontal: 12,\r\n paddingVertical: 10,\r\n fontSize: 13,\r\n fontFamily: 'monospace',\r\n color: explorerColors.text,\r\n textAlignVertical: 'top',\r\n backgroundColor: explorerColors.surface,\r\n },\r\n sqlResultsPane: {\r\n flex: 1,\r\n minHeight: 0,\r\n paddingHorizontal: 16,\r\n paddingTop: 8,\r\n paddingBottom: 16,\r\n },\r\n sqlResultsEmpty: {\r\n flex: 1,\r\n justifyContent: 'center',\r\n paddingHorizontal: 16,\r\n },\r\n subTabRow: {\r\n flexDirection: 'row',\r\n gap: 8,\r\n marginBottom: 12,\r\n },\r\n subTab: {\r\n paddingHorizontal: 12,\r\n paddingVertical: 6,\r\n borderRadius: 999,\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n backgroundColor: explorerColors.background,\r\n },\r\n subTabActive: {\r\n borderColor: explorerColors.accent,\r\n backgroundColor: explorerColors.accentSoft,\r\n },\r\n subTabLabel: {\r\n fontSize: 13,\r\n color: explorerColors.muted,\r\n },\r\n subTabLabelActive: {\r\n color: explorerColors.accent,\r\n fontWeight: '600',\r\n },\r\n paginationRow: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingVertical: 12,\r\n borderTopWidth: StyleSheet.hairlineWidth,\r\n borderTopColor: explorerColors.border,\r\n },\r\n paginationLabel: {\r\n fontSize: 12,\r\n color: explorerColors.muted,\r\n },\r\n});\r\n\r\nexport const tableStyles = StyleSheet.create({\r\n viewRoot: {\r\n flex: 1,\r\n minHeight: 0,\r\n },\r\n viewToolbar: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: 8,\r\n marginBottom: 8,\r\n flexWrap: 'wrap',\r\n },\r\n viewMeta: {\r\n flex: 1,\r\n fontSize: 12,\r\n color: explorerColors.muted,\r\n },\r\n viewToggle: {\r\n flexDirection: 'row',\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n overflow: 'hidden',\r\n },\r\n viewToggleButton: {\r\n paddingHorizontal: 10,\r\n paddingVertical: 6,\r\n backgroundColor: explorerColors.background,\r\n },\r\n viewToggleButtonActive: {\r\n backgroundColor: explorerColors.accentSoft,\r\n },\r\n viewToggleLabel: {\r\n fontSize: 12,\r\n fontWeight: '600',\r\n color: explorerColors.muted,\r\n },\r\n viewToggleLabelActive: {\r\n color: explorerColors.accent,\r\n },\r\n footerHint: {\r\n flexShrink: 0,\r\n marginTop: 8,\r\n fontSize: 11,\r\n color: explorerColors.subtle,\r\n textAlign: 'center',\r\n },\r\n tableContainer: {\r\n flex: 1,\r\n minHeight: 0,\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n overflow: 'hidden',\r\n backgroundColor: explorerColors.background,\r\n },\r\n horizontalScroll: {\r\n flex: 1,\r\n },\r\n scrollHint: {\r\n paddingHorizontal: 10,\r\n paddingVertical: 6,\r\n fontSize: 11,\r\n color: explorerColors.muted,\r\n backgroundColor: explorerColors.surface,\r\n borderBottomWidth: StyleSheet.hairlineWidth,\r\n borderBottomColor: explorerColors.border,\r\n },\r\n headerRow: {\r\n flexDirection: 'row',\r\n backgroundColor: '#f1f5f9',\r\n borderBottomWidth: 1,\r\n borderBottomColor: explorerColors.border,\r\n },\r\n headerCell: {\r\n backgroundColor: '#f1f5f9',\r\n },\r\n headerText: {\r\n fontSize: 12,\r\n fontWeight: '700',\r\n color: explorerColors.text,\r\n fontFamily: 'monospace',\r\n },\r\n bodyList: {\r\n flex: 1,\r\n },\r\n dataRow: {\r\n flexDirection: 'row',\r\n backgroundColor: explorerColors.background,\r\n },\r\n dataRowAlt: {\r\n backgroundColor: explorerColors.surface,\r\n },\r\n cell: {\r\n paddingHorizontal: 10,\r\n paddingVertical: 8,\r\n borderRightWidth: 1,\r\n borderBottomWidth: 1,\r\n borderColor: explorerColors.border,\r\n justifyContent: 'center',\r\n },\r\n cellText: {\r\n fontSize: 13,\r\n color: explorerColors.text,\r\n },\r\n cellTextMono: {\r\n fontFamily: 'monospace',\r\n fontSize: 12,\r\n },\r\n cellNull: {\r\n color: explorerColors.subtle,\r\n fontStyle: 'italic',\r\n },\r\n copiedHint: {\r\n marginTop: 2,\r\n fontSize: 10,\r\n color: explorerColors.accent,\r\n fontWeight: '600',\r\n },\r\n cardList: {\r\n paddingBottom: 8,\r\n gap: 8,\r\n },\r\n card: {\r\n borderWidth: 1,\r\n borderColor: explorerColors.border,\r\n borderRadius: 8,\r\n backgroundColor: explorerColors.surface,\r\n padding: 12,\r\n gap: 10,\r\n },\r\n cardField: {\r\n gap: 2,\r\n },\r\n cardLabel: {\r\n fontSize: 11,\r\n fontWeight: '600',\r\n color: explorerColors.muted,\r\n textTransform: 'uppercase',\r\n letterSpacing: 0.4,\r\n },\r\n cardValue: {\r\n fontSize: 14,\r\n color: explorerColors.text,\r\n },\r\n cardValueMono: {\r\n fontFamily: 'monospace',\r\n fontSize: 13,\r\n },\r\n detailBody: {\r\n flex: 1,\r\n minHeight: 0,\r\n paddingHorizontal: 16,\r\n },\r\n detailDataPane: {\r\n flex: 1,\r\n minHeight: 0,\r\n },\r\n});\r\n","import { Pressable, ScrollView, Text, View } from 'react-native';\r\nimport type { MobileDatabaseInfo } from '../../mobile/types';\r\nimport { explorerStyles } from './mobileExplorerStyles';\r\n\r\ntype ExplorerOverviewTabProps = {\r\n info: MobileDatabaseInfo | null;\r\n loading: boolean;\r\n error: string | null;\r\n onOpenTables: () => void;\r\n onOpenSql: () => void;\r\n};\r\n\r\nfunction formatBytes(bytes: number): string {\r\n if (bytes < 1024) {\r\n return `${bytes} B`;\r\n }\r\n\r\n if (bytes < 1024 * 1024) {\r\n return `${(bytes / 1024).toFixed(1)} KB`;\r\n }\r\n\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function ExplorerOverviewTab({\r\n info,\r\n loading,\r\n error,\r\n onOpenTables,\r\n onOpenSql,\r\n}: ExplorerOverviewTabProps) {\r\n if (loading) {\r\n return <Text style={explorerStyles.placeholder}>Loading database info…</Text>;\r\n }\r\n\r\n if (error) {\r\n return <Text style={explorerStyles.errorText}>{error}</Text>;\r\n }\r\n\r\n if (!info) {\r\n return <Text style={explorerStyles.placeholder}>No database information available.</Text>;\r\n }\r\n\r\n return (\r\n <ScrollView contentContainerStyle={explorerStyles.content}>\r\n <Text style={explorerStyles.sectionTitle}>Database</Text>\r\n <Info label=\"Name\" value={info.name} />\r\n <Info label=\"Path\" value={info.path} mono />\r\n <Info label=\"SQLite version\" value={info.sqliteVersion} />\r\n <Info label=\"Tables\" value={String(info.tableCount)} />\r\n <Info label=\"Estimated size\" value={formatBytes(info.estimatedSizeBytes)} />\r\n <Info\r\n label=\"Pages\"\r\n value={`${info.pageCount.toLocaleString()} × ${info.pageSize} bytes`}\r\n />\r\n\r\n <View style={{ height: 16 }} />\r\n <Text style={explorerStyles.sectionTitle}>Quick actions</Text>\r\n <View style={{ gap: 8 }}>\r\n <ActionButton label=\"Browse tables\" onPress={onOpenTables} />\r\n <ActionButton label=\"Run SQL query\" onPress={onOpenSql} />\r\n </View>\r\n </ScrollView>\r\n );\r\n}\r\n\r\nfunction Info({ label, value, mono = false }: { label: string; value: string; mono?: boolean }) {\r\n return (\r\n <View style={explorerStyles.infoRow}>\r\n <Text style={explorerStyles.infoLabel}>{label}</Text>\r\n <Text style={[explorerStyles.infoValue, mono && explorerStyles.mono]} selectable>\r\n {value}\r\n </Text>\r\n </View>\r\n );\r\n}\r\n\r\nfunction ActionButton({ label, onPress }: { label: string; onPress: () => void }) {\r\n return (\r\n <Pressable onPress={onPress} style={explorerStyles.ghostButton}>\r\n <Text style={explorerStyles.ghostButtonLabel}>{label}</Text>\r\n </Pressable>\r\n );\r\n}\r\n","export const DEFAULT_MOBILE_SQL = '';\r\n\r\nexport const DEFAULT_PAGE_SIZE = 50;\r\n","const CHAR_WIDTH = 7.5;\r\nconst CELL_PADDING = 24;\r\nconst MIN_COLUMN_WIDTH = 72;\r\nconst MAX_COLUMN_WIDTH = 280;\r\nconst SAMPLE_ROW_LIMIT = 20;\r\n\r\nfunction hintMinWidth(columnName: string): number {\r\n const lower = columnName.toLowerCase();\r\n\r\n if (lower === 'id' || lower.endsWith('_id')) {\r\n return 80;\r\n }\r\n\r\n if (lower.includes('email')) {\r\n return 168;\r\n }\r\n\r\n if (lower.includes('created_at') || lower.includes('updated_at') || lower.endsWith('_at')) {\r\n return 188;\r\n }\r\n\r\n if (lower === 'name' || lower.includes('title')) {\r\n return 128;\r\n }\r\n\r\n if (lower === 'status' || lower === 'type') {\r\n return 96;\r\n }\r\n\r\n return MIN_COLUMN_WIDTH;\r\n}\r\n\r\nfunction measureText(text: string): number {\r\n return Math.ceil(text.length * CHAR_WIDTH) + CELL_PADDING;\r\n}\r\n\r\nfunction formatCellValue(value: string | number | null): string {\r\n if (value === null) {\r\n return 'NULL';\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nexport function computeColumnWidths(\r\n columns: string[],\r\n rows: (string | number | null)[][],\r\n): number[] {\r\n const sampleRows = rows.slice(0, SAMPLE_ROW_LIMIT);\r\n\r\n return columns.map((column, columnIndex) => {\r\n let maxWidth = measureText(column);\r\n\r\n for (const row of sampleRows) {\r\n const cell = formatCellValue(row[columnIndex] ?? null);\r\n maxWidth = Math.max(maxWidth, measureText(cell));\r\n }\r\n\r\n maxWidth = Math.max(maxWidth, hintMinWidth(column));\r\n\r\n return Math.min(MAX_COLUMN_WIDTH, Math.max(MIN_COLUMN_WIDTH, maxWidth));\r\n });\r\n}\r\n\r\nexport function totalTableWidth(columnWidths: number[]): number {\r\n return columnWidths.reduce((sum, width) => sum + width, 0);\r\n}\r\n\r\nexport function defaultMobileDataViewMode(): 'table' {\r\n return 'table';\r\n}\r\n\r\nexport function isMonospaceColumn(columnName: string): boolean {\r\n const lower = columnName.toLowerCase();\r\n\r\n return (\r\n lower === 'id' ||\r\n lower.endsWith('_id') ||\r\n lower.includes('created_at') ||\r\n lower.includes('updated_at') ||\r\n lower.endsWith('_at') ||\r\n lower.includes('date') ||\r\n lower.includes('time')\r\n );\r\n}\r\n","/** Web / Node fallback — clipboard is provided by the native module. */\r\nexport async function copyToClipboard(_text: string): Promise<boolean> {\r\n return false;\r\n}\r\n","import { useState } from 'react';\r\nimport { FlatList, Pressable, Text, View } from 'react-native';\r\nimport { isMonospaceColumn } from '../../mobile/computeColumnWidths';\r\nimport { copyToClipboard } from '../../mobile/copyToClipboard';\r\nimport { tableStyles } from './mobileExplorerStyles';\r\n\r\ntype MobileDataCardListProps = {\r\n columns: string[];\r\n rows: (string | number | null)[][];\r\n};\r\n\r\nfunction formatValue(value: string | number | null): string {\r\n return value === null ? 'NULL' : String(value);\r\n}\r\n\r\nexport function MobileDataCardList({ columns, rows }: MobileDataCardListProps) {\r\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\r\n\r\n const copyValue = async (value: string, key: string) => {\r\n await copyToClipboard(value);\r\n setCopiedKey(key);\r\n setTimeout(() => setCopiedKey(null), 1500);\r\n };\r\n\r\n return (\r\n <FlatList\r\n data={rows}\r\n keyExtractor={(_, index) => String(index)}\r\n contentContainerStyle={tableStyles.cardList}\r\n style={tableStyles.bodyList}\r\n renderItem={({ item: row, index: rowIndex }) => (\r\n <View style={tableStyles.card}>\r\n {columns.map((column, columnIndex) => {\r\n const value = formatValue(row[columnIndex] ?? null);\r\n const key = `${rowIndex}-${column}`;\r\n const isNull = row[columnIndex] === null;\r\n\r\n return (\r\n <Pressable\r\n key={key}\r\n onPress={() => void copyValue(value, key)}\r\n style={tableStyles.cardField}\r\n >\r\n <Text style={tableStyles.cardLabel}>{column}</Text>\r\n <Text\r\n style={[\r\n tableStyles.cardValue,\r\n isMonospaceColumn(column) && tableStyles.cardValueMono,\r\n isNull && tableStyles.cellNull,\r\n ]}\r\n >\r\n {value}\r\n </Text>\r\n {copiedKey === key && <Text style={tableStyles.copiedHint}>Copied</Text>}\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n )}\r\n />\r\n );\r\n}\r\n","import { useMemo, useState } from 'react';\r\nimport {\r\n FlatList,\r\n Pressable,\r\n ScrollView,\r\n Text,\r\n useWindowDimensions,\r\n View,\r\n} from 'react-native';\r\nimport {\r\n computeColumnWidths,\r\n isMonospaceColumn,\r\n totalTableWidth,\r\n} from '../../mobile/computeColumnWidths';\r\nimport { copyToClipboard } from '../../mobile/copyToClipboard';\r\nimport { tableStyles } from './mobileExplorerStyles';\r\n\r\ntype MobileDataTableProps = {\r\n columns: string[];\r\n rows: (string | number | null)[][];\r\n columnWidths?: number[];\r\n};\r\n\r\nfunction formatValue(value: string | number | null): string {\r\n return value === null ? 'NULL' : String(value);\r\n}\r\n\r\nexport function MobileDataTable({ columns, rows, columnWidths: columnWidthsProp }: MobileDataTableProps) {\r\n const { width: windowWidth } = useWindowDimensions();\r\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\r\n\r\n const columnWidths = useMemo(\r\n () => columnWidthsProp ?? computeColumnWidths(columns, rows),\r\n [columnWidthsProp, columns, rows],\r\n );\r\n\r\n const tableWidth = useMemo(() => totalTableWidth(columnWidths), [columnWidths]);\r\n const showScrollHint = tableWidth > windowWidth - 32;\r\n\r\n const copyCell = async (value: string, key: string) => {\r\n await copyToClipboard(value);\r\n setCopiedKey(key);\r\n setTimeout(() => setCopiedKey(null), 1500);\r\n };\r\n\r\n if (columns.length === 0) {\r\n return null;\r\n }\r\n\r\n const headerRow = (\r\n <View style={tableStyles.headerRow}>\r\n {columns.map((column, index) => (\r\n <View\r\n key={column}\r\n style={[tableStyles.cell, tableStyles.headerCell, { width: columnWidths[index] }]}\r\n >\r\n <Text style={tableStyles.headerText}>{column}</Text>\r\n </View>\r\n ))}\r\n </View>\r\n );\r\n\r\n return (\r\n <View style={tableStyles.tableContainer}>\r\n {showScrollHint && (\r\n <Text style={tableStyles.scrollHint}>Swipe horizontally for more columns</Text>\r\n )}\r\n <ScrollView\r\n horizontal\r\n bounces={false}\r\n nestedScrollEnabled\r\n showsHorizontalScrollIndicator\r\n style={tableStyles.horizontalScroll}\r\n >\r\n <View style={{ width: tableWidth, flex: 1 }}>\r\n {headerRow}\r\n <FlatList\r\n data={rows}\r\n keyExtractor={(_, index) => String(index)}\r\n nestedScrollEnabled\r\n style={tableStyles.bodyList}\r\n renderItem={({ item: row, index: rowIndex }) => (\r\n <View style={[tableStyles.dataRow, rowIndex % 2 === 1 && tableStyles.dataRowAlt]}>\r\n {row.map((cell, cellIndex) => {\r\n const column = columns[cellIndex]!;\r\n const display = formatValue(cell);\r\n const key = `${rowIndex}-${cellIndex}`;\r\n const isNull = cell === null;\r\n\r\n return (\r\n <Pressable\r\n key={key}\r\n onPress={() => void copyCell(display, key)}\r\n style={[tableStyles.cell, { width: columnWidths[cellIndex] }]}\r\n >\r\n <Text\r\n numberOfLines={2}\r\n selectable\r\n style={[\r\n tableStyles.cellText,\r\n isMonospaceColumn(column) && tableStyles.cellTextMono,\r\n isNull && tableStyles.cellNull,\r\n ]}\r\n >\r\n {display}\r\n </Text>\r\n {copiedKey === key && <Text style={tableStyles.copiedHint}>Copied</Text>}\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n )}\r\n />\r\n </View>\r\n </ScrollView>\r\n </View>\r\n );\r\n}\r\n","import { useEffect, useMemo, useState } from 'react';\r\nimport { Pressable, Text, View } from 'react-native';\r\nimport {\r\n computeColumnWidths,\r\n totalTableWidth,\r\n} from '../../mobile/computeColumnWidths';\r\nimport { MobileDataCardList } from './MobileDataCardList';\r\nimport { MobileDataTable } from './MobileDataTable';\r\nimport { explorerStyles, tableStyles } from './mobileExplorerStyles';\r\n\r\nexport type MobileDataViewMode = 'table' | 'cards';\r\n\r\ntype MobileDataViewProps = {\r\n columns: string[];\r\n rows: (string | number | null)[][];\r\n metaSuffix?: string;\r\n defaultMode?: MobileDataViewMode;\r\n dataKey?: string;\r\n};\r\n\r\nexport function MobileDataView({\r\n columns,\r\n rows,\r\n metaSuffix,\r\n defaultMode = 'table',\r\n dataKey,\r\n}: MobileDataViewProps) {\r\n const [mode, setMode] = useState<MobileDataViewMode>(defaultMode);\r\n\r\n const columnWidths = useMemo(() => computeColumnWidths(columns, rows), [columns, rows]);\r\n const tableWidth = useMemo(() => totalTableWidth(columnWidths), [columnWidths]);\r\n const columnsKey = columns.join('|');\r\n\r\n useEffect(() => {\r\n setMode(defaultMode);\r\n }, [columnsKey, dataKey, defaultMode, rows.length]);\r\n\r\n if (columns.length === 0) {\r\n return <Text style={explorerStyles.placeholder}>No rows to display.</Text>;\r\n }\r\n\r\n const meta = `${rows.length} row${rows.length === 1 ? '' : 's'} · ${columns.length} column${\r\n columns.length === 1 ? '' : 's'\r\n }${metaSuffix ? ` · ${metaSuffix}` : ''}`;\r\n\r\n return (\r\n <View style={tableStyles.viewRoot}>\r\n <View style={tableStyles.viewToolbar}>\r\n <Text style={tableStyles.viewMeta}>{meta}</Text>\r\n <View style={tableStyles.viewToggle}>\r\n <Pressable\r\n onPress={() => setMode('cards')}\r\n style={[tableStyles.viewToggleButton, mode === 'cards' && tableStyles.viewToggleButtonActive]}\r\n >\r\n <Text\r\n style={[tableStyles.viewToggleLabel, mode === 'cards' && tableStyles.viewToggleLabelActive]}\r\n >\r\n Cards\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setMode('table')}\r\n style={[tableStyles.viewToggleButton, mode === 'table' && tableStyles.viewToggleButtonActive]}\r\n >\r\n <Text\r\n style={[tableStyles.viewToggleLabel, mode === 'table' && tableStyles.viewToggleLabelActive]}\r\n >\r\n Table\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n {mode === 'cards' ? (\r\n <MobileDataCardList columns={columns} rows={rows} />\r\n ) : (\r\n <MobileDataTable columnWidths={columnWidths} columns={columns} rows={rows} />\r\n )}\r\n\r\n {mode === 'table' && tableWidth > 320 && (\r\n <Text style={tableStyles.footerHint}>Tap a cell to copy its value</Text>\r\n )}\r\n {mode === 'cards' && (\r\n <Text style={tableStyles.footerHint}>Tap a field to copy its value</Text>\r\n )}\r\n </View>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport {\r\n ActivityIndicator,\r\n Pressable,\r\n Text,\r\n TextInput,\r\n View,\r\n} from 'react-native';\r\nimport type { QueryResult } from '../../types/inspection';\r\nimport type { MobileDatabaseInspector } from '../../mobile/types';\r\nimport { DEFAULT_MOBILE_SQL } from '../../mobile/constants';\r\nimport { MobileDataView } from './MobileDataView';\r\nimport { explorerStyles } from './mobileExplorerStyles';\r\n\r\ntype ExplorerSqlTabProps = {\r\n inspector: MobileDatabaseInspector;\r\n};\r\n\r\nexport function ExplorerSqlTab({ inspector }: ExplorerSqlTabProps) {\r\n const [sql, setSql] = useState(DEFAULT_MOBILE_SQL);\r\n const [result, setResult] = useState<QueryResult | null>(null);\r\n const [error, setError] = useState<string | null>(null);\r\n const [running, setRunning] = useState(false);\r\n const [panel, setPanel] = useState<'results' | 'output'>('results');\r\n const [resultKey, setResultKey] = useState(0);\r\n\r\n const runQuery = async () => {\r\n setRunning(true);\r\n setError(null);\r\n\r\n try {\r\n const queryResult = await inspector.executeQuery(sql);\r\n setResult(queryResult);\r\n setResultKey((current) => current + 1);\r\n setPanel('results');\r\n } catch (runError) {\r\n const message = runError instanceof Error ? runError.message : 'Query failed';\r\n setError(message);\r\n setResult(null);\r\n setPanel('output');\r\n } finally {\r\n setRunning(false);\r\n }\r\n };\r\n\r\n const renderResultsContent = () => {\r\n if (panel === 'output') {\r\n if (error) {\r\n return <Text style={explorerStyles.errorText}>{error}</Text>;\r\n }\r\n\r\n if (result) {\r\n return (\r\n <Text style={explorerStyles.infoValue}>\r\n Query executed successfully. {result.rowCount} row\r\n {result.rowCount === 1 ? '' : 's'} in {result.durationMs.toFixed(1)} ms.\r\n </Text>\r\n );\r\n }\r\n\r\n return <Text style={explorerStyles.placeholder}>Messages and errors appear here.</Text>;\r\n }\r\n\r\n if (!result) {\r\n return (\r\n <View style={explorerStyles.sqlResultsEmpty}>\r\n <Text style={[explorerStyles.placeholder, { marginTop: 0 }]}>\r\n Run a query to see results.\r\n </Text>\r\n </View>\r\n );\r\n }\r\n\r\n if (result.columns.length === 0) {\r\n return (\r\n <View style={explorerStyles.sqlResultsEmpty}>\r\n <Text style={[explorerStyles.placeholder, { marginTop: 0 }]}>\r\n Query completed with no result set ({result.durationMs.toFixed(1)} ms).\r\n </Text>\r\n </View>\r\n );\r\n }\r\n\r\n return (\r\n <MobileDataView\r\n columns={result.columns}\r\n dataKey={String(resultKey)}\r\n defaultMode=\"table\"\r\n metaSuffix={`${result.durationMs.toFixed(1)} ms`}\r\n rows={result.rows}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <View style={explorerStyles.sqlTabRoot}>\r\n <View style={explorerStyles.sqlQueryPane}>\r\n <Text style={explorerStyles.sectionTitle}>SQL (read-only)</Text>\r\n <TextInput\r\n autoCapitalize=\"none\"\r\n autoCorrect={false}\r\n multiline\r\n onChangeText={setSql}\r\n scrollEnabled\r\n style={explorerStyles.sqlInputCompact}\r\n value={sql}\r\n />\r\n <Pressable\r\n disabled={running}\r\n onPress={() => void runQuery()}\r\n style={[explorerStyles.primaryButton, running && explorerStyles.primaryButtonDisabled]}\r\n >\r\n {running ? (\r\n <ActivityIndicator color=\"#f8fafc\" />\r\n ) : (\r\n <Text style={explorerStyles.primaryButtonLabel}>Run query</Text>\r\n )}\r\n </Pressable>\r\n <Text style={[explorerStyles.hintText, { marginTop: 0 }]}>\r\n Allowed: SELECT, PRAGMA, EXPLAIN, WITH. Writes are blocked in DevTools.\r\n </Text>\r\n </View>\r\n\r\n <View style={[explorerStyles.tabRow, { flexShrink: 0 }]}>\r\n <Pressable\r\n onPress={() => setPanel('results')}\r\n style={[explorerStyles.tab, panel === 'results' && explorerStyles.tabActive]}\r\n >\r\n <Text\r\n style={[explorerStyles.tabLabel, panel === 'results' && explorerStyles.tabLabelActive]}\r\n >\r\n Results{result ? ` (${result.rowCount})` : ''}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setPanel('output')}\r\n style={[explorerStyles.tab, panel === 'output' && explorerStyles.tabActive]}\r\n >\r\n <Text\r\n style={[explorerStyles.tabLabel, panel === 'output' && explorerStyles.tabLabelActive]}\r\n >\r\n Output\r\n </Text>\r\n </Pressable>\r\n </View>\r\n\r\n <View style={explorerStyles.sqlResultsPane}>{renderResultsContent()}</View>\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport {\r\n ActivityIndicator,\r\n Pressable,\r\n ScrollView,\r\n Text,\r\n TextInput,\r\n View,\r\n} from 'react-native';\r\nimport type { ColumnInfo, TablePageResult } from '../../types/inspection';\r\nimport type { MobileDatabaseInspector } from '../../mobile/types';\r\nimport { DEFAULT_PAGE_SIZE } from '../../mobile/constants';\r\nimport { MobileDataView } from './MobileDataView';\r\nimport { explorerStyles, tableStyles } from './mobileExplorerStyles';\r\n\r\ntype ExplorerTableDetailProps = {\r\n inspector: MobileDatabaseInspector;\r\n tableName: string;\r\n onBack: () => void;\r\n};\r\n\r\ntype DetailView = 'data' | 'schema';\r\n\r\nexport function ExplorerTableDetail({ inspector, tableName, onBack }: ExplorerTableDetailProps) {\r\n const [view, setView] = useState<DetailView>('data');\r\n const [columns, setColumns] = useState<ColumnInfo[]>([]);\r\n const [pageResult, setPageResult] = useState<TablePageResult | null>(null);\r\n const [search, setSearch] = useState('');\r\n const [page, setPage] = useState(1);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const loadData = useCallback(async () => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const nextColumns = await inspector.getTableColumns(tableName);\r\n setColumns(nextColumns);\r\n\r\n const result = await inspector.fetchTablePage({\r\n table: tableName,\r\n page,\r\n pageSize: DEFAULT_PAGE_SIZE,\r\n search,\r\n });\r\n\r\n setPageResult(result);\r\n } catch (loadError) {\r\n setError(loadError instanceof Error ? loadError.message : 'Failed to load table');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [inspector, page, search, tableName]);\r\n\r\n useEffect(() => {\r\n void loadData();\r\n }, [loadData]);\r\n\r\n const totalPages = pageResult\r\n ? Math.max(1, Math.ceil(pageResult.totalCount / pageResult.pageSize))\r\n : 1;\r\n\r\n return (\r\n <View style={explorerStyles.fullScreen}>\r\n <View style={explorerStyles.header}>\r\n <Pressable onPress={onBack}>\r\n <Text style={explorerStyles.headerAction}>← Back</Text>\r\n </Pressable>\r\n <Text style={explorerStyles.headerTitle}>{tableName}</Text>\r\n <View style={{ width: 48 }} />\r\n </View>\r\n\r\n <View style={[explorerStyles.subTabRow, { paddingHorizontal: 16, paddingTop: 12 }]}>\r\n <Pressable\r\n onPress={() => setView('data')}\r\n style={[explorerStyles.subTab, view === 'data' && explorerStyles.subTabActive]}\r\n >\r\n <Text style={[explorerStyles.subTabLabel, view === 'data' && explorerStyles.subTabLabelActive]}>\r\n Data\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setView('schema')}\r\n style={[explorerStyles.subTab, view === 'schema' && explorerStyles.subTabActive]}\r\n >\r\n <Text\r\n style={[explorerStyles.subTabLabel, view === 'schema' && explorerStyles.subTabLabelActive]}\r\n >\r\n Schema\r\n </Text>\r\n </Pressable>\r\n </View>\r\n\r\n {view === 'data' ? (\r\n <View style={tableStyles.detailBody}>\r\n <TextInput\r\n autoCapitalize=\"none\"\r\n autoCorrect={false}\r\n onChangeText={(value) => {\r\n setSearch(value);\r\n setPage(1);\r\n }}\r\n placeholder=\"Search rows…\"\r\n style={explorerStyles.searchInput}\r\n value={search}\r\n />\r\n\r\n {loading ? (\r\n <ActivityIndicator style={{ marginTop: 24 }} />\r\n ) : error ? (\r\n <Text style={explorerStyles.errorText}>{error}</Text>\r\n ) : pageResult ? (\r\n <>\r\n <View style={tableStyles.detailDataPane}>\r\n <MobileDataView\r\n columns={pageResult.columns}\r\n dataKey={`${tableName}-${page}-${search}`}\r\n defaultMode=\"table\"\r\n metaSuffix={`page ${page} of ${totalPages}`}\r\n rows={pageResult.rows}\r\n />\r\n </View>\r\n <View style={explorerStyles.paginationRow}>\r\n <Pressable disabled={page <= 1} onPress={() => setPage((current) => current - 1)}>\r\n <Text style={explorerStyles.headerAction}>Previous</Text>\r\n </Pressable>\r\n <Text style={explorerStyles.paginationLabel}>\r\n Page {page} of {totalPages} · {pageResult.totalCount.toLocaleString()} rows\r\n </Text>\r\n <Pressable\r\n disabled={page >= totalPages}\r\n onPress={() => setPage((current) => current + 1)}\r\n >\r\n <Text style={explorerStyles.headerAction}>Next</Text>\r\n </Pressable>\r\n </View>\r\n </>\r\n ) : null}\r\n </View>\r\n ) : (\r\n <ScrollView contentContainerStyle={explorerStyles.content}>\r\n {columns.length === 0 ? (\r\n <Text style={explorerStyles.placeholder}>No schema information.</Text>\r\n ) : (\r\n columns.map((column) => (\r\n <View key={column.name} style={explorerStyles.listItem}>\r\n <View style={{ flex: 1 }}>\r\n <Text style={explorerStyles.listItemTitle}>{column.name}</Text>\r\n <Text style={explorerStyles.listItemMeta}>\r\n {column.type}\r\n {column.pk ? ' · PK' : ''}\r\n {column.notNull ? ' · NOT NULL' : ''}\r\n {column.defaultValue ? ` · DEFAULT ${column.defaultValue}` : ''}\r\n </Text>\r\n </View>\r\n </View>\r\n ))\r\n )}\r\n </ScrollView>\r\n )}\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState } from 'react';\r\nimport {\r\n FlatList,\r\n Pressable,\r\n Text,\r\n TextInput,\r\n View,\r\n} from 'react-native';\r\nimport type { TableInfo } from '../../types/inspection';\r\nimport { explorerStyles } from './mobileExplorerStyles';\r\n\r\ntype ExplorerTablesTabProps = {\r\n tables: TableInfo[];\r\n loading: boolean;\r\n error: string | null;\r\n onSelectTable: (tableName: string) => void;\r\n};\r\n\r\nexport function ExplorerTablesTab({\r\n tables,\r\n loading,\r\n error,\r\n onSelectTable,\r\n}: ExplorerTablesTabProps) {\r\n const [search, setSearch] = useState('');\r\n\r\n const filtered = useMemo(() => {\r\n const term = search.trim().toLowerCase();\r\n\r\n if (!term) {\r\n return tables;\r\n }\r\n\r\n return tables.filter((table) => table.name.toLowerCase().includes(term));\r\n }, [search, tables]);\r\n\r\n if (loading) {\r\n return <Text style={explorerStyles.placeholder}>Loading tables…</Text>;\r\n }\r\n\r\n if (error) {\r\n return <Text style={explorerStyles.errorText}>{error}</Text>;\r\n }\r\n\r\n return (\r\n <View style={{ flex: 1, padding: 16 }}>\r\n <TextInput\r\n autoCapitalize=\"none\"\r\n autoCorrect={false}\r\n onChangeText={setSearch}\r\n placeholder=\"Filter tables…\"\r\n style={explorerStyles.searchInput}\r\n value={search}\r\n />\r\n\r\n {filtered.length === 0 ? (\r\n <Text style={explorerStyles.placeholder}>No tables match your search.</Text>\r\n ) : (\r\n <FlatList\r\n data={filtered}\r\n keyExtractor={(item) => item.name}\r\n style={{ flex: 1 }}\r\n renderItem={({ item }) => (\r\n <Pressable onPress={() => onSelectTable(item.name)} style={explorerStyles.listItem}>\r\n <View>\r\n <Text style={explorerStyles.listItemTitle}>{item.name}</Text>\r\n <Text style={explorerStyles.listItemMeta}>\r\n {item.rowCount.toLocaleString()} row{item.rowCount === 1 ? '' : 's'}\r\n </Text>\r\n </View>\r\n <Text style={explorerStyles.listItemMeta}>›</Text>\r\n </Pressable>\r\n )}\r\n />\r\n )}\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { Modal, Pressable, Text, View } from 'react-native';\r\nimport { useDevTools } from '../../hooks/useDevTools';\r\nimport type { MobileDatabaseInfo } from '../../mobile/types';\r\nimport type { TableInfo } from '../../types/inspection';\r\nimport { ExplorerOverviewTab } from './ExplorerOverviewTab';\r\nimport { ExplorerSqlTab } from './ExplorerSqlTab';\r\nimport { ExplorerTableDetail } from './ExplorerTableDetail';\r\nimport { ExplorerTablesTab } from './ExplorerTablesTab';\r\nimport { explorerStyles } from './mobileExplorerStyles';\r\n\r\ntype ExplorerTab = 'overview' | 'tables' | 'sql';\r\n\r\ntype ExplorerScreen =\r\n | { kind: 'tabs' }\r\n | { kind: 'table'; tableName: string };\r\n\r\nexport function MobileDatabaseExplorer() {\r\n const { explorerVisible, closeExplorer, mobileInspector } = useDevTools();\r\n const [tab, setTab] = useState<ExplorerTab>('overview');\r\n const [screen, setScreen] = useState<ExplorerScreen>({ kind: 'tabs' });\r\n const [info, setInfo] = useState<MobileDatabaseInfo | null>(null);\r\n const [tables, setTables] = useState<TableInfo[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const loadOverview = useCallback(async () => {\r\n if (!mobileInspector) {\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const [nextInfo, nextTables] = await Promise.all([\r\n mobileInspector.getDatabaseInfo(),\r\n mobileInspector.listTables(),\r\n ]);\r\n setInfo(nextInfo);\r\n setTables(nextTables);\r\n } catch (loadError) {\r\n setError(loadError instanceof Error ? loadError.message : 'Failed to load database');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [mobileInspector]);\r\n\r\n useEffect(() => {\r\n if (!explorerVisible) {\r\n setScreen({ kind: 'tabs' });\r\n setTab('overview');\r\n return;\r\n }\r\n\r\n void loadOverview();\r\n }, [explorerVisible, loadOverview]);\r\n\r\n if (!mobileInspector) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Modal animationType=\"slide\" onRequestClose={closeExplorer} visible={explorerVisible}>\r\n {screen.kind === 'table' ? (\r\n <ExplorerTableDetail\r\n inspector={mobileInspector}\r\n onBack={() => setScreen({ kind: 'tabs' })}\r\n tableName={screen.tableName}\r\n />\r\n ) : (\r\n <View style={explorerStyles.fullScreen}>\r\n <View style={explorerStyles.header}>\r\n <Text style={explorerStyles.headerTitle}>Database Explorer</Text>\r\n <Pressable accessibilityLabel=\"Close database explorer\" onPress={closeExplorer}>\r\n <Text style={explorerStyles.headerAction}>Close</Text>\r\n </Pressable>\r\n </View>\r\n\r\n <View style={explorerStyles.tabRow}>\r\n {(['overview', 'tables', 'sql'] as ExplorerTab[]).map((item) => (\r\n <Pressable\r\n key={item}\r\n onPress={() => setTab(item)}\r\n style={[explorerStyles.tab, tab === item && explorerStyles.tabActive]}\r\n >\r\n <Text\r\n style={[explorerStyles.tabLabel, tab === item && explorerStyles.tabLabelActive]}\r\n >\r\n {item === 'overview' ? 'Overview' : item === 'tables' ? 'Tables' : 'SQL'}\r\n </Text>\r\n </Pressable>\r\n ))}\r\n </View>\r\n\r\n <View style={{ flex: 1 }}>\r\n {tab === 'overview' && (\r\n <ExplorerOverviewTab\r\n error={error}\r\n info={info}\r\n loading={loading}\r\n onOpenSql={() => setTab('sql')}\r\n onOpenTables={() => setTab('tables')}\r\n />\r\n )}\r\n {tab === 'tables' && (\r\n <ExplorerTablesTab\r\n error={error}\r\n loading={loading}\r\n onSelectTable={(tableName) => setScreen({ kind: 'table', tableName })}\r\n tables={tables}\r\n />\r\n )}\r\n {tab === 'sql' && <ExplorerSqlTab inspector={mobileInspector} />}\r\n </View>\r\n </View>\r\n )}\r\n </Modal>\r\n );\r\n}\r\n","import { StyleSheet, View, type StyleProp, type TextStyle } from 'react-native';\r\nimport type { ConnectionState } from '../client/createDevToolsClient';\r\nimport type { DatabaseAdapter } from '../types/adapter';\r\nimport type { DatabaseKind } from '../types/kind';\r\nimport type { FloatingButtonPosition } from '../utils/floatingButtonPosition';\r\nimport { isDevToolsEnabled } from '../utils/isDevToolsEnabled';\r\nimport { DevToolsProvider } from './DevToolsProvider';\r\nimport { DevToolsLauncherModal } from './DevToolsLauncherModal';\r\nimport { DevToolsSettingsModal } from './DevToolsSettingsModal';\r\nimport { FloatingDevToolsButton } from './FloatingDevToolsButton';\r\nimport { MobileDatabaseExplorer } from './mobile/MobileDatabaseExplorer';\r\n\r\nexport type { ConnectionState };\r\nexport type { FloatingButtonPosition };\r\n\r\nexport type DatabaseDevToolsProps = {\r\n /** Raw database instance (auto-detected) or a resolved adapter. */\r\n database?: unknown;\r\n /** Explicit database kind override. */\r\n type?: DatabaseKind;\r\n /** Custom adapter override (advanced). */\r\n adapter?: DatabaseAdapter;\r\n serverUrl?: string;\r\n enabled?: boolean;\r\n position?: 'bottom-right' | 'bottom-left';\r\n /** Allow dragging the floating button around the screen. */\r\n draggable?: boolean;\r\n /** Snap the button to screen edges after dragging. */\r\n snapToEdges?: boolean;\r\n /** Controlled floating button position. */\r\n floatingPosition?: FloatingButtonPosition;\r\n /** Called when the user drags the floating button to a new position. */\r\n onFloatingPositionChange?: (position: FloatingButtonPosition) => void;\r\n /** Optional style for the floating button database icon. */\r\n style?: StyleProp<TextStyle>;\r\n /** Floating button background color. */\r\n buttonColor?: string;\r\n /** Database icon color. */\r\n iconColor?: string;\r\n onConnectionStateChange?: (state: ConnectionState) => void;\r\n};\r\n\r\nexport function DatabaseDevTools({\r\n database,\r\n type,\r\n adapter,\r\n serverUrl,\r\n enabled,\r\n position = 'bottom-right',\r\n draggable = true,\r\n snapToEdges = true,\r\n floatingPosition,\r\n onFloatingPositionChange,\r\n style,\r\n buttonColor,\r\n iconColor,\r\n onConnectionStateChange,\r\n}: DatabaseDevToolsProps) {\r\n if (!isDevToolsEnabled(enabled)) {\r\n return null;\r\n }\r\n\r\n return (\r\n <DevToolsProvider\r\n adapter={adapter}\r\n database={database}\r\n onConnectionStateChange={onConnectionStateChange}\r\n serverUrl={serverUrl}\r\n type={type}\r\n >\r\n <View pointerEvents=\"box-none\" style={StyleSheet.absoluteFill}>\r\n <FloatingDevToolsButton\r\n buttonColor={buttonColor}\r\n draggable={draggable}\r\n floatingPosition={floatingPosition}\r\n iconColor={iconColor}\r\n iconStyle={style}\r\n onFloatingPositionChange={onFloatingPositionChange}\r\n position={position}\r\n snapToEdges={snapToEdges}\r\n />\r\n <DevToolsLauncherModal />\r\n <DevToolsSettingsModal />\r\n <MobileDatabaseExplorer />\r\n </View>\r\n </DevToolsProvider>\r\n );\r\n}\r\n"]}
package/dist/index.cjs CHANGED
@@ -1865,6 +1865,10 @@ function DevToolsProvider({
1865
1865
  setDeviceId(persistedId);
1866
1866
  setDeviceIdReady(true);
1867
1867
  }
1868
+ }).catch(() => {
1869
+ if (!cancelled) {
1870
+ setDeviceIdReady(true);
1871
+ }
1868
1872
  });
1869
1873
  return () => {
1870
1874
  cancelled = true;
@@ -2625,9 +2629,12 @@ function isFloatingButtonTap(totalMovement) {
2625
2629
  }
2626
2630
  var DEFAULT_ICON_SIZE = 22;
2627
2631
  var DEFAULT_ICON_COLOR = "#f8fafc";
2632
+ var DEFAULT_BUTTON_COLOR = "#1e293b";
2628
2633
  function FloatingDevToolsButton({
2629
2634
  position = "bottom-right",
2630
2635
  iconStyle,
2636
+ buttonColor,
2637
+ iconColor,
2631
2638
  draggable = true,
2632
2639
  snapToEdges = true,
2633
2640
  floatingPosition,
@@ -2731,22 +2738,24 @@ function FloatingDevToolsButton({
2731
2738
  if (!renderedPosition) {
2732
2739
  return null;
2733
2740
  }
2741
+ const resolvedButtonColor = buttonColor ?? DEFAULT_BUTTON_COLOR;
2742
+ const resolvedIconColor = iconColor ?? reactNative.StyleSheet.flatten(iconStyle)?.color ?? DEFAULT_ICON_COLOR;
2743
+ const buttonStyle = { backgroundColor: resolvedButtonColor };
2744
+ const statusDotStyle = {
2745
+ backgroundColor: getConnectionDotColor(connectionState),
2746
+ borderColor: resolvedButtonColor
2747
+ };
2734
2748
  const buttonContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2735
2749
  /* @__PURE__ */ jsxRuntime.jsx(
2736
2750
  MaterialCommunityIcons__default.default,
2737
2751
  {
2738
- color: DEFAULT_ICON_COLOR,
2752
+ color: resolvedIconColor,
2739
2753
  name: "database",
2740
2754
  size: DEFAULT_ICON_SIZE,
2741
2755
  style: iconStyle
2742
2756
  }
2743
2757
  ),
2744
- /* @__PURE__ */ jsxRuntime.jsx(
2745
- reactNative.View,
2746
- {
2747
- style: [styles4.statusDot, { backgroundColor: getConnectionDotColor(connectionState) }]
2748
- }
2749
- )
2758
+ /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles4.statusDot, statusDotStyle] })
2750
2759
  ] });
2751
2760
  if (!draggable) {
2752
2761
  const positionStyle = position === "bottom-left" ? styles4.bottomLeft : styles4.bottomRight;
@@ -2756,7 +2765,11 @@ function FloatingDevToolsButton({
2756
2765
  accessibilityLabel: "Open Database DevTools",
2757
2766
  accessibilityRole: "button",
2758
2767
  onPress: openLauncher,
2759
- style: ({ pressed }) => [styles4.button, pressed && styles4.buttonPressed],
2768
+ style: ({ pressed }) => [
2769
+ styles4.button,
2770
+ buttonStyle,
2771
+ pressed && styles4.buttonPressed
2772
+ ],
2760
2773
  children: buttonContent
2761
2774
  }
2762
2775
  ) });
@@ -2781,7 +2794,7 @@ function FloatingDevToolsButton({
2781
2794
  accessibilityHint: "Drag to move. Tap to open DevTools launcher.",
2782
2795
  accessibilityLabel: "Open Database DevTools",
2783
2796
  accessibilityRole: "button",
2784
- style: [styles4.button, dragPosition && styles4.buttonDragging],
2797
+ style: [styles4.button, buttonStyle, dragPosition && styles4.buttonDragging],
2785
2798
  children: buttonContent
2786
2799
  }
2787
2800
  )
@@ -2810,7 +2823,6 @@ var styles4 = reactNative.StyleSheet.create({
2810
2823
  width: FLOATING_BUTTON_SIZE,
2811
2824
  height: FLOATING_BUTTON_SIZE,
2812
2825
  borderRadius: FLOATING_BUTTON_SIZE / 2,
2813
- backgroundColor: "#1e293b",
2814
2826
  alignItems: "center",
2815
2827
  justifyContent: "center",
2816
2828
  shadowColor: "#000",
@@ -2833,8 +2845,7 @@ var styles4 = reactNative.StyleSheet.create({
2833
2845
  width: 10,
2834
2846
  height: 10,
2835
2847
  borderRadius: 5,
2836
- borderWidth: 2,
2837
- borderColor: "#1e293b"
2848
+ borderWidth: 2
2838
2849
  }
2839
2850
  });
2840
2851
  var explorerColors = {
@@ -3977,6 +3988,8 @@ function DatabaseDevTools({
3977
3988
  floatingPosition,
3978
3989
  onFloatingPositionChange,
3979
3990
  style,
3991
+ buttonColor,
3992
+ iconColor,
3980
3993
  onConnectionStateChange
3981
3994
  }) {
3982
3995
  if (!isDevToolsEnabled(enabled)) {
@@ -3994,8 +4007,10 @@ function DatabaseDevTools({
3994
4007
  /* @__PURE__ */ jsxRuntime.jsx(
3995
4008
  FloatingDevToolsButton,
3996
4009
  {
4010
+ buttonColor,
3997
4011
  draggable,
3998
4012
  floatingPosition,
4013
+ iconColor,
3999
4014
  iconStyle: style,
4000
4015
  onFloatingPositionChange,
4001
4016
  position,