@inkindcards/semantic-layer 2.2.0 → 2.2.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/metric-picker.tsx","../src/components/results-table.tsx","../src/components/data-catalog.tsx","../src/components/admin-dashboard.tsx","../src/components/inspectable.tsx","../src/components/field-matcher.ts","../src/components/prompt-generator.ts","../src/components/data-inspector.tsx"],"names":["jsx","jsxs","useState","useMemo","rootStyle","headingStyle","subStyle","tableStyle","thStyle","tdStyle","badgeStyle","emptyStyle","useCallback","useContext","useEffect","Fragment","selectStyle"],"mappings":"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","file":"components.js","sourcesContent":["import React, { useState, useMemo } from \"react\";\nimport type { SemanticField, FieldType } from \"../types\";\nimport { useMetrics } from \"../react/hooks\";\n\nexport interface MetricPickerProps {\n onSelect: (field: SemanticField) => void;\n /** Filter to only show certain field types. Default: all. */\n fieldTypes?: FieldType[];\n /** Currently selected field IDs (for visual highlighting). */\n selectedIds?: string[];\n /** Placeholder text for the search input. */\n searchPlaceholder?: string;\n /** Custom class name for the root container. */\n className?: string;\n}\n\nconst containerStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n maxHeight: \"400px\",\n display: \"flex\",\n flexDirection: \"column\",\n};\n\nconst searchStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n border: \"none\",\n borderBottom: \"1px solid #e5e7eb\",\n fontSize: \"14px\",\n outline: \"none\",\n width: \"100%\",\n boxSizing: \"border-box\",\n};\n\nconst listStyle: React.CSSProperties = {\n overflowY: \"auto\",\n flex: 1,\n};\n\nconst categoryHeaderStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n fontSize: \"11px\",\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"#6b7280\",\n backgroundColor: \"#f9fafb\",\n position: \"sticky\",\n top: 0,\n};\n\nconst itemStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n cursor: \"pointer\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n borderBottom: \"1px solid #f3f4f6\",\n};\n\nconst selectedItemStyle: React.CSSProperties = {\n ...itemStyle,\n backgroundColor: \"#eff6ff\",\n};\n\n/**\n * A searchable, categorized picker for metrics and dimensions.\n * Fetches the catalog from the gateway automatically.\n */\nexport function MetricPicker({\n onSelect,\n fieldTypes,\n selectedIds = [],\n searchPlaceholder = \"Search metrics and dimensions...\",\n className,\n}: MetricPickerProps) {\n const { fields, categories, isLoading, error } = useMetrics();\n const [search, setSearch] = useState(\"\");\n\n const filtered = useMemo(() => {\n let result = fields;\n if (fieldTypes) {\n result = result.filter((f) => fieldTypes.includes(f.type));\n }\n if (search) {\n const q = search.toLowerCase();\n result = result.filter(\n (f) =>\n f.displayName.toLowerCase().includes(q) ||\n f.description.toLowerCase().includes(q) ||\n f.name.toLowerCase().includes(q),\n );\n }\n return result;\n }, [fields, fieldTypes, search]);\n\n const grouped = useMemo(() => {\n const map = new Map<string, SemanticField[]>();\n for (const field of filtered) {\n const list = map.get(field.category) || [];\n list.push(field);\n map.set(field.category, list);\n }\n return map;\n }, [filtered]);\n\n const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n if (isLoading) {\n return <div style={{ padding: \"12px\", color: \"#6b7280\" }}>Loading catalog...</div>;\n }\n\n if (error) {\n return <div style={{ padding: \"12px\", color: \"#ef4444\" }}>{error}</div>;\n }\n\n return (\n <div style={containerStyle} className={className}>\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n style={searchStyle}\n />\n <div style={listStyle}>\n {Array.from(grouped.entries()).map(([category, categoryFields]) => (\n <div key={category}>\n <div style={categoryHeaderStyle}>{category}</div>\n {categoryFields.map((field) => (\n <div\n key={field.id}\n style={selectedSet.has(field.id) ? selectedItemStyle : itemStyle}\n onClick={() => onSelect(field)}\n >\n <span style={{ fontSize: \"14px\", fontWeight: 500, color: \"#111827\" }}>\n {field.displayName}\n </span>\n {field.description && (\n <span style={{ fontSize: \"12px\", color: \"#6b7280\" }}>\n {field.description}\n </span>\n )}\n </div>\n ))}\n </div>\n ))}\n {grouped.size === 0 && (\n <div style={{ padding: \"12px\", color: \"#6b7280\", textAlign: \"center\" }}>\n No fields found\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { QueryResult } from \"../types\";\n\nexport interface ResultsTableProps {\n data: QueryResult | null;\n /** Custom class name for the root container. */\n className?: string;\n /** Max rows to display. Default: 100. */\n maxRows?: number;\n /** Format numbers with locale string. Default: true. */\n formatNumbers?: boolean;\n}\n\nconst tableContainerStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"8px\",\n overflow: \"auto\",\n maxHeight: \"500px\",\n};\n\nconst tableStyle: React.CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: \"14px\",\n};\n\nconst thStyle: React.CSSProperties = {\n padding: \"10px 12px\",\n textAlign: \"left\",\n fontWeight: 600,\n fontSize: \"12px\",\n color: \"#6b7280\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1px solid #e5e7eb\",\n position: \"sticky\",\n top: 0,\n whiteSpace: \"nowrap\",\n};\n\nconst tdStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n borderBottom: \"1px solid #f3f4f6\",\n color: \"#111827\",\n whiteSpace: \"nowrap\",\n};\n\nconst numberTdStyle: React.CSSProperties = {\n ...tdStyle,\n textAlign: \"right\",\n fontVariantNumeric: \"tabular-nums\",\n};\n\nfunction formatValue(value: unknown, dataType: string, formatNumbers: boolean): string {\n if (value === null || value === undefined) return \"—\";\n if (dataType === \"number\" && typeof value === \"number\" && formatNumbers) {\n return value.toLocaleString(undefined, { maximumFractionDigits: 2 });\n }\n return String(value);\n}\n\n/**\n * A simple data table that renders a QueryResult.\n * Handles formatting numbers, truncating rows, and sticky headers.\n */\nexport function ResultsTable({\n data,\n className,\n maxRows = 100,\n formatNumbers = true,\n}: ResultsTableProps) {\n if (!data || data.columns.length === 0) {\n return (\n <div style={{ padding: \"12px\", color: \"#6b7280\", textAlign: \"center\" }}>\n No data to display\n </div>\n );\n }\n\n const displayRows = data.rows.slice(0, maxRows);\n\n return (\n <div style={tableContainerStyle} className={className}>\n <table style={tableStyle}>\n <thead>\n <tr>\n {data.columns.map((col) => (\n <th key={col.key} style={thStyle}>\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {displayRows.map((row, i) => (\n <tr key={i}>\n {data.columns.map((col) => (\n <td\n key={col.key}\n style={col.dataType === \"number\" ? numberTdStyle : tdStyle}\n >\n {formatValue(row[col.key], col.dataType, formatNumbers)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {data.totalRows > maxRows && (\n <div style={{ padding: \"8px 12px\", fontSize: \"12px\", color: \"#6b7280\", textAlign: \"center\" }}>\n Showing {maxRows} of {data.totalRows} rows\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport { useMetrics } from \"../react/hooks\";\nimport type { SemanticField } from \"../types\";\n\nexport interface DataCatalogProps {\n className?: string;\n /** Show a \"copy name\" button for each field. Default: true. */\n showCopyButton?: boolean;\n /** Filter to only show certain field types. */\n fieldTypes?: Array<\"metric\" | \"dimension\" | \"time_dimension\">;\n}\n\nconst rootStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n maxWidth: 960,\n margin: \"0 auto\",\n padding: 24,\n};\n\nconst headingStyle: React.CSSProperties = {\n fontSize: 24, fontWeight: 700, color: \"#111827\", margin: \"0 0 4px\",\n};\n\nconst subStyle: React.CSSProperties = {\n fontSize: 14, color: \"#6b7280\", margin: \"0 0 20px\",\n};\n\nconst searchBarStyle: React.CSSProperties = {\n display: \"flex\", gap: 8, marginBottom: 20,\n};\n\nconst searchInput: React.CSSProperties = {\n flex: 1, padding: \"10px 14px\", fontSize: 14, border: \"1px solid #d1d5db\",\n borderRadius: 8, outline: \"none\", boxSizing: \"border-box\",\n};\n\nconst filterBtn = (active: boolean): React.CSSProperties => ({\n padding: \"8px 14px\", fontSize: 13, fontWeight: 500, borderRadius: 6,\n border: \"1px solid \" + (active ? \"#3b82f6\" : \"#d1d5db\"),\n backgroundColor: active ? \"#eff6ff\" : \"#fff\",\n color: active ? \"#1d4ed8\" : \"#374151\",\n cursor: \"pointer\",\n});\n\nconst categoryStyle: React.CSSProperties = {\n marginBottom: 24,\n};\n\nconst categoryHeader: React.CSSProperties = {\n fontSize: 13, fontWeight: 600, textTransform: \"uppercase\", letterSpacing: \"0.05em\",\n color: \"#6b7280\", marginBottom: 8, paddingBottom: 6, borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst fieldCard: React.CSSProperties = {\n display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\",\n padding: \"10px 12px\", borderRadius: 6, marginBottom: 4,\n backgroundColor: \"#fafafa\", border: \"1px solid #f3f4f6\",\n};\n\nconst fieldNameStyle: React.CSSProperties = {\n fontSize: 15, fontWeight: 600, color: \"#111827\",\n};\n\nconst fieldDescStyle: React.CSSProperties = {\n fontSize: 13, color: \"#6b7280\", marginTop: 2,\n};\n\nconst codeName: React.CSSProperties = {\n fontSize: 12, color: \"#6366f1\", fontFamily: \"monospace\", marginTop: 2,\n};\n\nconst badgeStyle = (type: string): React.CSSProperties => ({\n display: \"inline-block\", padding: \"2px 8px\", fontSize: 11, fontWeight: 600,\n borderRadius: 9999, whiteSpace: \"nowrap\",\n backgroundColor: type === \"metric\" ? \"#eff6ff\" : type === \"time_dimension\" ? \"#f0fdf4\" : \"#f3f4f6\",\n color: type === \"metric\" ? \"#1d4ed8\" : type === \"time_dimension\" ? \"#15803d\" : \"#6b7280\",\n});\n\nconst copyBtn: React.CSSProperties = {\n padding: \"4px 8px\", fontSize: 11, fontWeight: 500, color: \"#6366f1\",\n backgroundColor: \"#eef2ff\", border: \"1px solid #c7d2fe\", borderRadius: 4,\n cursor: \"pointer\", whiteSpace: \"nowrap\",\n};\n\nconst statsBar: React.CSSProperties = {\n display: \"flex\", gap: 16, marginBottom: 16, fontSize: 14,\n};\n\nconst statItem: React.CSSProperties = {\n display: \"flex\", alignItems: \"center\", gap: 4, color: \"#6b7280\",\n};\n\nconst statNum: React.CSSProperties = { fontWeight: 700, color: \"#111827\" };\n\nconst emptyStyle: React.CSSProperties = {\n padding: 40, textAlign: \"center\", color: \"#9ca3af\", fontSize: 14,\n};\n\ntype TypeFilter = \"all\" | \"metric\" | \"dimension\" | \"time_dimension\";\n\nexport function DataCatalog({ className, showCopyButton = true, fieldTypes }: DataCatalogProps) {\n const { fields, metrics, dimensions, isLoading, error } = useMetrics();\n const [search, setSearch] = useState(\"\");\n const [typeFilter, setTypeFilter] = useState<TypeFilter>(\"all\");\n const [copiedField, setCopiedField] = useState<string | null>(null);\n\n const filtered = useMemo(() => {\n let result = fields;\n if (fieldTypes) result = result.filter((f) => (fieldTypes as string[]).includes(f.type));\n if (typeFilter !== \"all\") result = result.filter((f) => f.type === typeFilter);\n if (search) {\n const q = search.toLowerCase();\n result = result.filter((f) =>\n f.displayName.toLowerCase().includes(q) ||\n f.name.toLowerCase().includes(q) ||\n f.description.toLowerCase().includes(q) ||\n f.category.toLowerCase().includes(q)\n );\n }\n return result;\n }, [fields, fieldTypes, typeFilter, search]);\n\n const grouped = useMemo(() => {\n const map = new Map<string, SemanticField[]>();\n for (const f of filtered) {\n const list = map.get(f.category) || [];\n list.push(f);\n map.set(f.category, list);\n }\n return map;\n }, [filtered]);\n\n const handleCopy = useCallback(async (name: string) => {\n try {\n await navigator.clipboard.writeText(name);\n setCopiedField(name);\n setTimeout(() => setCopiedField(null), 1500);\n } catch {\n // Clipboard API not available in some iframes\n }\n }, []);\n\n if (isLoading) return <div style={{ ...rootStyle, ...emptyStyle }}>Loading data catalog...</div>;\n if (error) return <div style={{ ...rootStyle, padding: 24, color: \"#ef4444\" }}>{error}</div>;\n\n const timeDims = fields.filter((f) => f.type === \"time_dimension\");\n\n return (\n <div style={rootStyle} className={className}>\n <h1 style={headingStyle}>Data Catalog</h1>\n <p style={subStyle}>Browse available metrics and dimensions from the semantic layer</p>\n\n <div style={statsBar}>\n <div style={statItem}><span style={statNum}>{metrics.length}</span> metrics</div>\n <div style={statItem}><span style={statNum}>{dimensions.length - timeDims.length}</span> dimensions</div>\n <div style={statItem}><span style={statNum}>{timeDims.length}</span> time dimensions</div>\n </div>\n\n <div style={searchBarStyle}>\n <input\n style={searchInput}\n placeholder=\"Search by name, description, or category...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <button style={filterBtn(typeFilter === \"all\")} onClick={() => setTypeFilter(\"all\")}>All</button>\n <button style={filterBtn(typeFilter === \"metric\")} onClick={() => setTypeFilter(\"metric\")}>Metrics</button>\n <button style={filterBtn(typeFilter === \"dimension\")} onClick={() => setTypeFilter(\"dimension\")}>Dimensions</button>\n <button style={filterBtn(typeFilter === \"time_dimension\")} onClick={() => setTypeFilter(\"time_dimension\")}>Time</button>\n </div>\n\n {Array.from(grouped.entries()).map(([category, categoryFields]) => (\n <div key={category} style={categoryStyle}>\n <div style={categoryHeader}>{category} ({categoryFields.length})</div>\n {categoryFields.map((f) => (\n <div key={f.id} style={fieldCard}>\n <div style={{ flex: 1 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span style={fieldNameStyle}>{f.displayName}</span>\n <span style={badgeStyle(f.type)}>{f.type}</span>\n </div>\n {f.description && <div style={fieldDescStyle}>{f.description}</div>}\n <div style={codeName}>{f.name}</div>\n </div>\n {showCopyButton && (\n <button style={copyBtn} onClick={() => handleCopy(f.name)}>\n {copiedField === f.name ? \"Copied!\" : \"Copy name\"}\n </button>\n )}\n </div>\n ))}\n </div>\n ))}\n\n {grouped.size === 0 && (\n <div style={emptyStyle}>\n {search ? \"No fields match your search.\" : \"No data available. The gateway may not be configured yet.\"}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useCallback, useMemo } from \"react\";\nimport { useAdminFields, useAdminRoles, useAdminUsers } from \"../react/admin-hooks\";\nimport { useAuth } from \"../react/hooks\";\nimport type { CuratedField, AccessRole, UserRoleAssignment } from \"../types\";\n\nexport interface AdminDashboardProps {\n className?: string;\n}\n\n// ─── Shared styles ────────────────────────────────────────────────────────────\n\nconst rootStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n maxWidth: 960,\n margin: \"0 auto\",\n padding: 24,\n};\n\nconst headingStyle: React.CSSProperties = {\n fontSize: 24, fontWeight: 700, color: \"#111827\", margin: \"0 0 4px\",\n};\n\nconst subStyle: React.CSSProperties = {\n fontSize: 14, color: \"#6b7280\", margin: \"0 0 20px\",\n};\n\nconst tabBarStyle: React.CSSProperties = {\n display: \"flex\", gap: 0, borderBottom: \"1px solid #e5e7eb\", marginBottom: 24,\n};\n\nconst tabBase: React.CSSProperties = {\n padding: \"10px 20px\", fontSize: 14, fontWeight: 500, cursor: \"pointer\",\n background: \"none\", border: \"none\", borderBottom: \"2px solid transparent\",\n color: \"#6b7280\",\n};\n\nconst tabActive: React.CSSProperties = {\n ...tabBase, color: \"#111827\", borderBottomColor: \"#3b82f6\",\n};\n\nconst tableStyle: React.CSSProperties = {\n width: \"100%\", borderCollapse: \"collapse\", fontSize: 14,\n};\n\nconst thStyle: React.CSSProperties = {\n padding: \"10px 12px\", textAlign: \"left\", fontWeight: 600, fontSize: 12,\n color: \"#6b7280\", backgroundColor: \"#f9fafb\", borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst tdStyle: React.CSSProperties = {\n padding: \"8px 12px\", borderBottom: \"1px solid #f3f4f6\", color: \"#111827\",\n};\n\nconst btnPrimary: React.CSSProperties = {\n padding: \"8px 16px\", fontSize: 14, fontWeight: 500, color: \"#fff\",\n backgroundColor: \"#3b82f6\", border: \"none\", borderRadius: 6, cursor: \"pointer\",\n};\n\nconst btnDanger: React.CSSProperties = {\n ...btnPrimary, backgroundColor: \"#ef4444\",\n};\n\nconst btnSecondary: React.CSSProperties = {\n ...btnPrimary, backgroundColor: \"#fff\", color: \"#374151\",\n border: \"1px solid #d1d5db\",\n};\n\nconst inputStyle: React.CSSProperties = {\n padding: \"6px 10px\", fontSize: 14, border: \"1px solid #d1d5db\",\n borderRadius: 6, width: \"100%\", boxSizing: \"border-box\",\n};\n\nconst selectStyle: React.CSSProperties = { ...inputStyle, width: \"auto\" };\n\nconst cardStyle: React.CSSProperties = {\n border: \"1px solid #e5e7eb\", borderRadius: 8, padding: 16, marginBottom: 16,\n backgroundColor: \"#fff\",\n};\n\nconst errorBanner: React.CSSProperties = {\n padding: \"10px 14px\", backgroundColor: \"#fef2f2\", color: \"#b91c1c\",\n borderRadius: 6, fontSize: 14, marginBottom: 16,\n};\n\nconst badgeStyle: React.CSSProperties = {\n display: \"inline-block\", padding: \"2px 8px\", fontSize: 11, fontWeight: 600,\n borderRadius: 9999, backgroundColor: \"#eff6ff\", color: \"#1d4ed8\",\n};\n\nconst badgeGreen: React.CSSProperties = { ...badgeStyle, backgroundColor: \"#f0fdf4\", color: \"#15803d\" };\nconst badgeGray: React.CSSProperties = { ...badgeStyle, backgroundColor: \"#f3f4f6\", color: \"#6b7280\" };\n\nconst checkboxStyle: React.CSSProperties = { width: 16, height: 16, cursor: \"pointer\" };\n\nconst emptyStyle: React.CSSProperties = {\n padding: 24, textAlign: \"center\", color: \"#9ca3af\", fontSize: 14,\n};\n\n// ─── Fields Tab ───────────────────────────────────────────────────────────────\n\nfunction FieldsTab() {\n const { fields, isLoading, error, createField, updateField, deleteField } = useAdminFields();\n const [showAdd, setShowAdd] = useState(false);\n const [newName, setNewName] = useState(\"\");\n const [newType, setNewType] = useState<string>(\"metric\");\n const [newDisplay, setNewDisplay] = useState(\"\");\n const [newDesc, setNewDesc] = useState(\"\");\n const [actionError, setActionError] = useState<string | null>(null);\n\n const handleAdd = useCallback(async () => {\n if (!newName.trim()) return;\n setActionError(null);\n try {\n await createField({\n field_name: newName.trim(),\n field_type: newType,\n display_name: newDisplay.trim() || undefined,\n description: newDesc.trim() || undefined,\n });\n setNewName(\"\"); setNewDisplay(\"\"); setNewDesc(\"\"); setShowAdd(false);\n } catch (err) {\n setActionError(err instanceof Error ? err.message : \"Failed to create field\");\n }\n }, [newName, newType, newDisplay, newDesc, createField]);\n\n const handleToggle = useCallback(async (f: CuratedField) => {\n try { await updateField({ id: f.id, is_active: !f.is_active }); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to update\"); }\n }, [updateField]);\n\n const handleDelete = useCallback(async (id: number) => {\n if (!confirm(\"Delete this field? This also removes it from all roles.\")) return;\n try { await deleteField(id); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to delete\"); }\n }, [deleteField]);\n\n if (isLoading) return <div style={emptyStyle}>Loading fields...</div>;\n if (error) return <div style={errorBanner}>{error}</div>;\n\n return (\n <div>\n {actionError && <div style={errorBanner}>{actionError}</div>}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 16 }}>\n <span style={{ fontSize: 14, color: \"#6b7280\" }}>{fields.length} curated field{fields.length !== 1 ? \"s\" : \"\"}</span>\n <button style={btnPrimary} onClick={() => setShowAdd(!showAdd)}>\n {showAdd ? \"Cancel\" : \"+ Add field\"}\n </button>\n </div>\n\n {showAdd && (\n <div style={cardStyle}>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr auto 1fr\", gap: 8, marginBottom: 8 }}>\n <input style={inputStyle} placeholder=\"field_name (from dbt)\" value={newName} onChange={(e) => setNewName(e.target.value)} />\n <select style={selectStyle} value={newType} onChange={(e) => setNewType(e.target.value)}>\n <option value=\"metric\">metric</option>\n <option value=\"dimension\">dimension</option>\n <option value=\"time_dimension\">time_dimension</option>\n </select>\n <input style={inputStyle} placeholder=\"Display name (optional)\" value={newDisplay} onChange={(e) => setNewDisplay(e.target.value)} />\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n <input style={{ ...inputStyle, flex: 1 }} placeholder=\"Description (optional)\" value={newDesc} onChange={(e) => setNewDesc(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleAdd()} />\n <button style={btnPrimary} onClick={handleAdd}>Save</button>\n </div>\n </div>\n )}\n\n <table style={tableStyle}>\n <thead>\n <tr>\n <th style={thStyle}>Field Name</th>\n <th style={thStyle}>Type</th>\n <th style={thStyle}>Display Name</th>\n <th style={thStyle}>Active</th>\n <th style={{ ...thStyle, textAlign: \"right\" }}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {fields.map((f) => (\n <tr key={f.id}>\n <td style={tdStyle}><code style={{ fontSize: 13 }}>{f.field_name}</code></td>\n <td style={tdStyle}>\n <span style={f.field_type === \"metric\" ? badgeStyle : f.field_type === \"time_dimension\" ? badgeGreen : badgeGray}>\n {f.field_type}\n </span>\n </td>\n <td style={tdStyle}>{f.display_name || <span style={{ color: \"#9ca3af\" }}>—</span>}</td>\n <td style={tdStyle}>\n <input type=\"checkbox\" checked={f.is_active} onChange={() => handleToggle(f)} style={checkboxStyle} />\n </td>\n <td style={{ ...tdStyle, textAlign: \"right\" }}>\n <button style={{ ...btnDanger, padding: \"4px 10px\", fontSize: 12 }} onClick={() => handleDelete(f.id)}>Delete</button>\n </td>\n </tr>\n ))}\n {fields.length === 0 && (\n <tr><td colSpan={5} style={emptyStyle}>No curated fields yet. Add fields to start restricting access.</td></tr>\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\n// ─── Roles Tab ────────────────────────────────────────────────────────────────\n\nfunction RolesTab() {\n const { roles, isLoading, error, createRole, deleteRole, setRoleFields } = useAdminRoles();\n const { fields } = useAdminFields();\n const [showAdd, setShowAdd] = useState(false);\n const [newName, setNewName] = useState(\"\");\n const [newDesc, setNewDesc] = useState(\"\");\n const [editingRole, setEditingRole] = useState<number | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n\n const handleAdd = useCallback(async () => {\n if (!newName.trim()) return;\n setActionError(null);\n try {\n await createRole({ name: newName.trim(), description: newDesc.trim() || undefined });\n setNewName(\"\"); setNewDesc(\"\"); setShowAdd(false);\n } catch (err) {\n setActionError(err instanceof Error ? err.message : \"Failed to create role\");\n }\n }, [newName, newDesc, createRole]);\n\n const handleDelete = useCallback(async (id: number) => {\n if (!confirm(\"Delete this role? Users assigned to it will lose this role's access.\")) return;\n try { await deleteRole(id); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to delete\"); }\n }, [deleteRole]);\n\n const getFieldIds = (role: AccessRole): Set<number> =>\n new Set((role.role_field_access || []).map((rfa) => rfa.curated_field_id));\n\n const handleToggleField = useCallback(async (role: AccessRole, fieldId: number) => {\n const current = getFieldIds(role);\n if (current.has(fieldId)) current.delete(fieldId);\n else current.add(fieldId);\n setActionError(null);\n try { await setRoleFields(role.id, Array.from(current)); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to update\"); }\n }, [setRoleFields]);\n\n if (isLoading) return <div style={emptyStyle}>Loading roles...</div>;\n if (error) return <div style={errorBanner}>{error}</div>;\n\n return (\n <div>\n {actionError && <div style={errorBanner}>{actionError}</div>}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 16 }}>\n <span style={{ fontSize: 14, color: \"#6b7280\" }}>{roles.length} role{roles.length !== 1 ? \"s\" : \"\"}</span>\n <button style={btnPrimary} onClick={() => setShowAdd(!showAdd)}>\n {showAdd ? \"Cancel\" : \"+ Add role\"}\n </button>\n </div>\n\n {showAdd && (\n <div style={cardStyle}>\n <div style={{ display: \"flex\", gap: 8 }}>\n <input style={{ ...inputStyle, flex: 1 }} placeholder=\"Role name\" value={newName} onChange={(e) => setNewName(e.target.value)} />\n <input style={{ ...inputStyle, flex: 2 }} placeholder=\"Description (optional)\" value={newDesc} onChange={(e) => setNewDesc(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleAdd()} />\n <button style={btnPrimary} onClick={handleAdd}>Save</button>\n </div>\n </div>\n )}\n\n {roles.map((role) => {\n const assignedIds = getFieldIds(role);\n const isEditing = editingRole === role.id;\n\n return (\n <div key={role.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: isEditing ? 12 : 0 }}>\n <div>\n <strong style={{ fontSize: 16 }}>{role.name}</strong>\n {role.is_default && <span style={{ ...badgeGreen, marginLeft: 8 }}>default</span>}\n <span style={{ ...badgeGray, marginLeft: 8 }}>{assignedIds.size} field{assignedIds.size !== 1 ? \"s\" : \"\"}</span>\n {role.description && <div style={{ fontSize: 13, color: \"#6b7280\", marginTop: 2 }}>{role.description}</div>}\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n <button style={btnSecondary} onClick={() => setEditingRole(isEditing ? null : role.id)}>\n {isEditing ? \"Done\" : \"Edit fields\"}\n </button>\n {!role.is_default && (\n <button style={{ ...btnDanger, padding: \"6px 12px\", fontSize: 12 }} onClick={() => handleDelete(role.id)}>Delete</button>\n )}\n </div>\n </div>\n\n {isEditing && fields.length > 0 && (\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(auto-fill, minmax(240px, 1fr))\", gap: 4 }}>\n {fields.filter((f) => f.is_active).map((f) => (\n <label key={f.id} style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"4px 0\", fontSize: 13, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={assignedIds.has(f.id)} onChange={() => handleToggleField(role, f.id)} style={checkboxStyle} />\n <span>{f.display_name || f.field_name}</span>\n <span style={f.field_type === \"metric\" ? badgeStyle : badgeGray}>{f.field_type}</span>\n </label>\n ))}\n </div>\n )}\n\n {isEditing && fields.length === 0 && (\n <div style={emptyStyle}>No curated fields defined yet. Add fields in the Fields tab first.</div>\n )}\n </div>\n );\n })}\n\n {roles.length === 0 && <div style={emptyStyle}>No roles defined.</div>}\n </div>\n );\n}\n\n// ─── Users Tab ────────────────────────────────────────────────────────────────\n\nfunction UsersTab() {\n const { users, isLoading, error, assignUserRole, removeUserRole } = useAdminUsers();\n const { roles } = useAdminRoles();\n const [showAdd, setShowAdd] = useState(false);\n const [newEmail, setNewEmail] = useState(\"\");\n const [newRoleId, setNewRoleId] = useState<number>(0);\n const [newIsAdmin, setNewIsAdmin] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n const handleAdd = useCallback(async () => {\n if (!newEmail.trim() || !newRoleId) return;\n setActionError(null);\n try {\n await assignUserRole({ email: newEmail.trim().toLowerCase(), role_id: newRoleId, is_admin: newIsAdmin });\n setNewEmail(\"\"); setNewIsAdmin(false); setShowAdd(false);\n } catch (err) {\n setActionError(err instanceof Error ? err.message : \"Failed to assign role\");\n }\n }, [newEmail, newRoleId, newIsAdmin, assignUserRole]);\n\n const handleRemove = useCallback(async (u: UserRoleAssignment) => {\n if (!confirm(`Remove ${u.email} from this role?`)) return;\n try { await removeUserRole({ email: u.email, role_id: u.role_id }); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to remove\"); }\n }, [removeUserRole]);\n\n const grouped = useMemo(() => {\n const map = new Map<string, UserRoleAssignment[]>();\n for (const u of users) {\n const list = map.get(u.email) || [];\n list.push(u);\n map.set(u.email, list);\n }\n return map;\n }, [users]);\n\n if (isLoading) return <div style={emptyStyle}>Loading users...</div>;\n if (error) return <div style={errorBanner}>{error}</div>;\n\n return (\n <div>\n {actionError && <div style={errorBanner}>{actionError}</div>}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 16 }}>\n <span style={{ fontSize: 14, color: \"#6b7280\" }}>{grouped.size} user{grouped.size !== 1 ? \"s\" : \"\"} with role assignments</span>\n <button style={btnPrimary} onClick={() => setShowAdd(!showAdd)}>\n {showAdd ? \"Cancel\" : \"+ Assign user\"}\n </button>\n </div>\n\n {showAdd && (\n <div style={cardStyle}>\n <div style={{ display: \"flex\", gap: 8, marginBottom: 8 }}>\n <input style={{ ...inputStyle, flex: 1 }} placeholder=\"Email (e.g. name@inkind.com)\" value={newEmail} onChange={(e) => setNewEmail(e.target.value)} />\n <select style={selectStyle} value={newRoleId} onChange={(e) => setNewRoleId(Number(e.target.value))}>\n <option value={0}>Select role...</option>\n {roles.map((r) => <option key={r.id} value={r.id}>{r.name}</option>)}\n </select>\n </div>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 13, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={newIsAdmin} onChange={(e) => setNewIsAdmin(e.target.checked)} style={checkboxStyle} />\n Admin access\n </label>\n <div style={{ flex: 1 }} />\n <button style={btnPrimary} onClick={handleAdd}>Assign</button>\n </div>\n </div>\n )}\n\n {Array.from(grouped.entries()).map(([email, assignments]) => (\n <div key={email} style={cardStyle}>\n <div>\n <strong style={{ fontSize: 14 }}>{email}</strong>\n {assignments.some((a) => a.is_admin) && <span style={{ ...badgeGreen, marginLeft: 8 }}>admin</span>}\n </div>\n <div style={{ display: \"flex\", gap: 6, marginTop: 8, flexWrap: \"wrap\" }}>\n {assignments.map((a) => (\n <span key={a.id} style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4, ...badgeStyle }}>\n {a.access_roles?.name || `role #${a.role_id}`}\n <button\n onClick={() => handleRemove(a)}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: \"#6b7280\", fontSize: 14, padding: 0, lineHeight: 1 }}\n title=\"Remove role\"\n >\n ×\n </button>\n </span>\n ))}\n </div>\n </div>\n ))}\n\n {grouped.size === 0 && (\n <div style={emptyStyle}>\n No user role assignments yet. Users without an explicit role get the default role's access.\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main Dashboard ───────────────────────────────────────────────────────────\n\ntype Tab = \"fields\" | \"roles\" | \"users\";\n\nexport function AdminDashboard({ className }: AdminDashboardProps) {\n const { isAuthenticated, isLoading: authLoading } = useAuth();\n const [tab, setTab] = useState<Tab>(\"fields\");\n const [initError, setInitError] = useState<string | null>(null);\n\n if (authLoading) return <div style={{ ...rootStyle, ...emptyStyle }}>Loading...</div>;\n if (!isAuthenticated) return <div style={{ ...rootStyle, ...emptyStyle }}>Sign in to access the admin dashboard.</div>;\n\n return (\n <div style={rootStyle} className={className}>\n <h1 style={headingStyle}>Semantic Layer Admin</h1>\n <p style={subStyle}>Manage curated fields, roles, and user access</p>\n\n {initError && <div style={errorBanner}>{initError}</div>}\n\n <div style={tabBarStyle}>\n {([\"fields\", \"roles\", \"users\"] as Tab[]).map((t) => (\n <button key={t} style={tab === t ? tabActive : tabBase} onClick={() => { setTab(t); setInitError(null); }}>\n {t.charAt(0).toUpperCase() + t.slice(1)}\n </button>\n ))}\n </div>\n\n {tab === \"fields\" && <FieldsTab />}\n {tab === \"roles\" && <RolesTab />}\n {tab === \"users\" && <UsersTab />}\n </div>\n );\n}\n","import React, { createContext, useContext, useEffect, useId, useRef, useState, useCallback } from \"react\";\n\nexport interface InspectableEntry {\n id: string;\n label: string;\n currentSource: string;\n columns: string[];\n sampleValues: Record<string, unknown>[];\n element: HTMLElement | null;\n}\n\nexport interface InspectableRegistryValue {\n entries: Map<string, InspectableEntry>;\n register: (entry: InspectableEntry) => void;\n unregister: (id: string) => void;\n inspectActive: boolean;\n setInspectActive: (active: boolean) => void;\n selectedId: string | null;\n setSelectedId: (id: string | null) => void;\n}\n\nexport const InspectableRegistryContext = createContext<InspectableRegistryValue | null>(null);\n\nexport function InspectableRegistry({ children }: { children: React.ReactNode }) {\n const [entries, setEntries] = useState<Map<string, InspectableEntry>>(new Map());\n const [inspectActive, setInspectActive] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n\n const register = useCallback((entry: InspectableEntry) => {\n setEntries((prev) => {\n const next = new Map(prev);\n next.set(entry.id, entry);\n return next;\n });\n }, []);\n\n const unregister = useCallback((id: string) => {\n setEntries((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n setSelectedId((prev) => (prev === id ? null : prev));\n }, []);\n\n const value: InspectableRegistryValue = {\n entries,\n register,\n unregister,\n inspectActive,\n setInspectActive,\n selectedId,\n setSelectedId,\n };\n\n return (\n <InspectableRegistryContext.Provider value={value}>\n {children}\n </InspectableRegistryContext.Provider>\n );\n}\n\n// ─── Inspectable wrapper ───────────────────────────────────────────────────────\n\nexport interface InspectableProps {\n /** Human-readable label for this component (e.g., \"Revenue Chart\"). */\n label: string;\n /** Describes where data currently comes from (e.g., \"hardcoded array\", \"API /revenue\"). */\n currentSource?: string;\n /** The current data powering this component -- used to infer columns and sample values. */\n data?: Record<string, unknown>[];\n /** Explicit column names. If omitted, inferred from the first item in data. */\n columns?: string[];\n children: React.ReactNode;\n}\n\n/**\n * Wraps a data-bound component and registers it with the DataInspector overlay.\n * When no DataInspector/InspectableRegistry ancestor exists, renders as a plain div\n * with no overhead.\n */\nexport function Inspectable({\n label,\n currentSource = \"unknown\",\n data,\n columns,\n children,\n}: InspectableProps) {\n const registry = useContext(InspectableRegistryContext);\n const id = useId();\n const ref = useRef<HTMLDivElement>(null);\n\n const inferredColumns = columns ?? (data?.[0] ? Object.keys(data[0]) : []);\n const sampleValues = data?.slice(0, 3) ?? [];\n\n useEffect(() => {\n if (!registry) return;\n\n registry.register({\n id,\n label,\n currentSource,\n columns: inferredColumns,\n sampleValues,\n element: ref.current,\n });\n\n return () => registry.unregister(id);\n }, [id, label, currentSource, inferredColumns.join(\",\"), registry]);\n\n if (!registry) {\n return <>{children}</>;\n }\n\n const isSelected = registry.selectedId === id;\n const showOutline = registry.inspectActive;\n\n const handleClick = (e: React.MouseEvent) => {\n if (!registry.inspectActive) return;\n e.stopPropagation();\n registry.setSelectedId(isSelected ? null : id);\n };\n\n return (\n <div\n ref={ref}\n onClick={handleClick}\n style={{\n position: \"relative\",\n outline: showOutline\n ? isSelected\n ? \"2px solid #3b82f6\"\n : \"2px dashed #93c5fd\"\n : \"none\",\n outlineOffset: 2,\n borderRadius: 4,\n cursor: showOutline ? \"pointer\" : \"inherit\",\n transition: \"outline 0.15s ease\",\n }}\n >\n {showOutline && (\n <div\n style={{\n position: \"absolute\",\n top: -10,\n left: 4,\n fontSize: 10,\n fontWeight: 600,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n color: \"#fff\",\n backgroundColor: isSelected ? \"#3b82f6\" : \"#93c5fd\",\n padding: \"1px 6px\",\n borderRadius: 3,\n zIndex: 10000,\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n }}\n >\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n","import type { SemanticField } from \"../types\";\n\nexport type MatchConfidence = \"exact\" | \"fuzzy\" | \"manual\";\n\nexport interface FieldMatch {\n column: string;\n suggestedField: SemanticField | null;\n confidence: MatchConfidence;\n}\n\nconst AGG_PREFIXES = [\"total_\", \"sum_\", \"avg_\", \"count_\", \"min_\", \"max_\", \"num_\"];\nconst NOISE_SUFFIXES = [\"_name\", \"_id\", \"_value\", \"_val\", \"_amt\", \"_amount\"];\n\nfunction camelToSnake(s: string): string {\n return s.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nfunction normalize(s: string): string {\n let result = camelToSnake(s).toLowerCase().trim();\n for (const prefix of AGG_PREFIXES) {\n if (result.startsWith(prefix) && result.length > prefix.length) {\n result = result.slice(prefix.length);\n break;\n }\n }\n for (const suffix of NOISE_SUFFIXES) {\n if (result.endsWith(suffix) && result.length > suffix.length) {\n result = result.slice(0, -suffix.length);\n break;\n }\n }\n return result;\n}\n\nfunction matchExact(column: string, catalog: SemanticField[]): SemanticField | null {\n const lower = column.toLowerCase();\n return catalog.find((f) => f.name.toLowerCase() === lower) ?? null;\n}\n\nfunction matchNormalized(column: string, catalog: SemanticField[]): SemanticField | null {\n const norm = normalize(column);\n return catalog.find((f) => normalize(f.name) === norm) ?? null;\n}\n\nfunction matchDisplayName(column: string, catalog: SemanticField[]): SemanticField | null {\n const lower = normalize(column).replace(/_/g, \" \");\n if (lower.length < 3) return null;\n\n return (\n catalog.find((f) => f.displayName.toLowerCase().includes(lower)) ??\n catalog.find((f) => f.description.toLowerCase().includes(lower)) ??\n null\n );\n}\n\n/**\n * Match an array of column names against the semantic layer field catalog.\n * Uses three layers: exact name match, normalized match, then display name match.\n */\nexport function matchFields(columns: string[], catalog: SemanticField[]): FieldMatch[] {\n return columns.map((column) => {\n const exact = matchExact(column, catalog);\n if (exact) return { column, suggestedField: exact, confidence: \"exact\" as const };\n\n const normalized = matchNormalized(column, catalog);\n if (normalized) return { column, suggestedField: normalized, confidence: \"fuzzy\" as const };\n\n const display = matchDisplayName(column, catalog);\n if (display) return { column, suggestedField: display, confidence: \"fuzzy\" as const };\n\n return { column, suggestedField: null, confidence: \"manual\" as const };\n });\n}\n","import type { SemanticField } from \"../types\";\n\nexport interface FieldMapping {\n column: string;\n field: SemanticField | null;\n}\n\n/**\n * Generate a ready-to-paste Lovable prompt that tells the AI how to migrate\n * a component from its current data to a useSemanticQuery() call.\n */\nexport function generateMigrationPrompt(\n componentLabel: string,\n mappings: FieldMapping[],\n): string {\n const resolved = mappings.filter((m) => m.field !== null) as Array<{\n column: string;\n field: SemanticField;\n }>;\n\n if (resolved.length === 0) {\n return `Replace the sample/hardcoded data in the \"${componentLabel}\" component with live data from the semantic layer using useSemanticQuery. Use the DataCatalog to find the right field names.`;\n }\n\n const metrics = resolved\n .filter((m) => m.field.type === \"metric\")\n .map((m) => m.field.name);\n\n const timeDims = resolved\n .filter((m) => m.field.type === \"time_dimension\")\n .map((m) => m.field.name);\n\n const dims = resolved\n .filter((m) => m.field.type === \"dimension\")\n .map((m) => m.field.name);\n\n const groupBy = [...timeDims, ...dims];\n\n const parts: string[] = [\n `Replace the sample/hardcoded data in the \"${componentLabel}\" component with a useSemanticQuery call using:`,\n ];\n\n if (metrics.length > 0) {\n parts.push(` metrics: [${metrics.map((n) => `'${n}'`).join(\", \")}]`);\n }\n\n if (groupBy.length > 0) {\n parts.push(` groupBy: [${groupBy.map((n) => `'${n}'`).join(\", \")}]`);\n }\n\n if (timeDims.length > 0) {\n parts.push(` grain: 'month'`);\n }\n\n parts.push(\"\");\n parts.push(\"Map the query result columns to the component's props:\");\n\n for (const m of resolved) {\n parts.push(` \"${m.column}\" → data column \"${m.field.name}\"`);\n }\n\n parts.push(\"\");\n parts.push(\n \"Remove the old hardcoded/sample data and any fetch logic it used. \" +\n \"Use the data, isLoading, and error values from useSemanticQuery to render the component.\",\n );\n\n return parts.join(\"\\n\");\n}\n","import React, { useState, useMemo, useCallback, useEffect, useContext } from \"react\";\nimport { InspectableRegistry, InspectableRegistryContext } from \"./inspectable\";\nimport type { InspectableEntry } from \"./inspectable\";\nimport { matchFields } from \"./field-matcher\";\nimport type { FieldMatch } from \"./field-matcher\";\nimport { generateMigrationPrompt } from \"./prompt-generator\";\nimport type { FieldMapping } from \"./prompt-generator\";\nimport type { SemanticField } from \"../types\";\nimport { useMetrics } from \"../react/hooks\";\n\nexport interface DataInspectorProps {\n children: React.ReactNode;\n}\n\n/**\n * Dev-mode overlay that wraps your app in an InspectableRegistry and provides\n * a floating toggle + inspector modal for data migration.\n * Renders the registry context so <Inspectable> children can register.\n */\nexport function DataInspector({ children }: DataInspectorProps) {\n return (\n <InspectableRegistry>\n <InspectorOverlay />\n {children}\n </InspectableRegistry>\n );\n}\n\n// ─── Internal overlay ──────────────────────────────────────────────────────────\n\nfunction InspectorOverlay() {\n const registry = useContext(InspectableRegistryContext);\n if (!registry) return null;\n\n const { inspectActive, setInspectActive, selectedId, setSelectedId, entries } = registry;\n\n // Keyboard shortcut: Ctrl+Shift+I\n useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.ctrlKey && e.shiftKey && e.key === \"I\") {\n e.preventDefault();\n setInspectActive(!inspectActive);\n }\n }\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [inspectActive, setInspectActive]);\n\n const selectedEntry = selectedId ? entries.get(selectedId) ?? null : null;\n\n return (\n <>\n <ToggleButton\n active={inspectActive}\n count={entries.size}\n onToggle={() => {\n setInspectActive(!inspectActive);\n if (inspectActive) setSelectedId(null);\n }}\n />\n {selectedEntry && (\n <InspectorModal\n entry={selectedEntry}\n onClose={() => setSelectedId(null)}\n />\n )}\n </>\n );\n}\n\n// ─── Toggle button ─────────────────────────────────────────────────────────────\n\nfunction ToggleButton({\n active,\n count,\n onToggle,\n}: {\n active: boolean;\n count: number;\n onToggle: () => void;\n}) {\n return (\n <button\n onClick={onToggle}\n title={active ? \"Exit inspect mode (Ctrl+Shift+I)\" : \"Enter inspect mode (Ctrl+Shift+I)\"}\n style={{\n position: \"fixed\",\n bottom: 20,\n right: 20,\n zIndex: 99999,\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"8px 16px\",\n fontSize: 13,\n fontWeight: 600,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n color: active ? \"#fff\" : \"#374151\",\n backgroundColor: active ? \"#3b82f6\" : \"#fff\",\n border: `1px solid ${active ? \"#2563eb\" : \"#d1d5db\"}`,\n borderRadius: 999,\n cursor: \"pointer\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.12)\",\n transition: \"all 0.15s ease\",\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n {active ? \"Inspecting\" : \"Inspect Data\"}\n {count > 0 && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: 18,\n height: 18,\n fontSize: 11,\n fontWeight: 700,\n borderRadius: 999,\n backgroundColor: active ? \"rgba(255,255,255,0.25)\" : \"#e5e7eb\",\n color: active ? \"#fff\" : \"#6b7280\",\n padding: \"0 5px\",\n }}\n >\n {count}\n </span>\n )}\n </button>\n );\n}\n\n// ─── Inspector modal ───────────────────────────────────────────────────────────\n\nfunction InspectorModal({\n entry,\n onClose,\n}: {\n entry: InspectableEntry;\n onClose: () => void;\n}) {\n const { fields: catalog } = useMetrics();\n\n const initialMatches = useMemo(\n () => matchFields(entry.columns, catalog),\n [entry.columns, catalog],\n );\n\n const [mappings, setMappings] = useState<Map<string, SemanticField | null>>(\n () => new Map(initialMatches.map((m) => [m.column, m.suggestedField])),\n );\n\n useEffect(() => {\n setMappings(new Map(initialMatches.map((m) => [m.column, m.suggestedField])));\n }, [initialMatches]);\n\n const [copied, setCopied] = useState(false);\n\n const handleFieldChange = useCallback((column: string, field: SemanticField | null) => {\n setMappings((prev) => {\n const next = new Map(prev);\n next.set(column, field);\n return next;\n });\n }, []);\n\n const handleGenerate = useCallback(async () => {\n const fieldMappings: FieldMapping[] = entry.columns.map((col) => ({\n column: col,\n field: mappings.get(col) ?? null,\n }));\n const prompt = generateMigrationPrompt(entry.label, fieldMappings);\n try {\n await navigator.clipboard.writeText(prompt);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Fallback: select text in a textarea\n const ta = document.createElement(\"textarea\");\n ta.value = prompt;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n document.body.removeChild(ta);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [entry, mappings]);\n\n const confidenceMap = useMemo(() => {\n const map = new Map<string, FieldMatch[\"confidence\"]>();\n for (const m of initialMatches) map.set(m.column, m.confidence);\n return map;\n }, [initialMatches]);\n\n return (\n <>\n <div onClick={onClose} style={backdropStyle} />\n <div style={modalStyle}>\n <div style={modalHeaderStyle}>\n <div>\n <div style={{ fontSize: 16, fontWeight: 700, color: \"#111827\" }}>{entry.label}</div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\n Source: {entry.currentSource}\n </div>\n </div>\n <button onClick={onClose} style={closeBtnStyle}>&times;</button>\n </div>\n\n {/* Sample data preview */}\n {entry.sampleValues.length > 0 && (\n <div style={sectionStyle}>\n <div style={sectionTitleStyle}>Current Data Preview</div>\n <div style={{ overflow: \"auto\" }}>\n <table style={previewTableStyle}>\n <thead>\n <tr>\n {entry.columns.map((col) => (\n <th key={col} style={previewThStyle}>{col}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entry.sampleValues.map((row, i) => (\n <tr key={i}>\n {entry.columns.map((col) => (\n <td key={col} style={previewTdStyle}>\n {row[col] === null || row[col] === undefined ? \"—\" : String(row[col])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* Field mapping table */}\n <div style={sectionStyle}>\n <div style={sectionTitleStyle}>Field Mapping</div>\n <table style={{ width: \"100%\", borderCollapse: \"collapse\", fontSize: 13 }}>\n <thead>\n <tr>\n <th style={mappingThStyle}>Current Column</th>\n <th style={mappingThStyle}>Confidence</th>\n <th style={mappingThStyle}>Semantic Layer Field</th>\n </tr>\n </thead>\n <tbody>\n {entry.columns.map((col) => (\n <MappingRow\n key={col}\n column={col}\n confidence={confidenceMap.get(col) ?? \"manual\"}\n selectedField={mappings.get(col) ?? null}\n catalog={catalog}\n onChange={(field) => handleFieldChange(col, field)}\n />\n ))}\n </tbody>\n </table>\n {catalog.length === 0 && (\n <div style={{ fontSize: 12, color: \"#9ca3af\", marginTop: 8, textAlign: \"center\" }}>\n No semantic layer catalog available. Connect to the gateway to enable smart matching.\n </div>\n )}\n </div>\n\n {/* Generate button */}\n <div style={{ padding: \"12px 20px\", borderTop: \"1px solid #e5e7eb\" }}>\n <button onClick={handleGenerate} style={generateBtnStyle}>\n {copied ? \"Copied to clipboard!\" : \"Generate Migration Prompt\"}\n </button>\n </div>\n </div>\n </>\n );\n}\n\n// ─── Mapping row ───────────────────────────────────────────────────────────────\n\nfunction MappingRow({\n column,\n confidence,\n selectedField,\n catalog,\n onChange,\n}: {\n column: string;\n confidence: FieldMatch[\"confidence\"];\n selectedField: SemanticField | null;\n catalog: SemanticField[];\n onChange: (field: SemanticField | null) => void;\n}) {\n const badgeColors: Record<string, { bg: string; color: string }> = {\n exact: { bg: \"#dcfce7\", color: \"#15803d\" },\n fuzzy: { bg: \"#fef9c3\", color: \"#a16207\" },\n manual: { bg: \"#fee2e2\", color: \"#dc2626\" },\n };\n const badge = badgeColors[confidence] ?? badgeColors.manual;\n\n return (\n <tr>\n <td style={mappingTdStyle}>\n <code style={{ fontSize: 12, color: \"#6366f1\", fontFamily: \"monospace\" }}>{column}</code>\n </td>\n <td style={{ ...mappingTdStyle, textAlign: \"center\" }}>\n <span\n style={{\n display: \"inline-block\",\n padding: \"1px 6px\",\n fontSize: 10,\n fontWeight: 600,\n borderRadius: 4,\n backgroundColor: badge.bg,\n color: badge.color,\n }}\n >\n {confidence}\n </span>\n </td>\n <td style={mappingTdStyle}>\n {catalog.length > 0 ? (\n <select\n value={selectedField?.name ?? \"\"}\n onChange={(e) => {\n const field = catalog.find((f) => f.name === e.target.value) ?? null;\n onChange(field);\n }}\n style={selectStyle}\n >\n <option value=\"\">-- none --</option>\n {catalog.map((f) => (\n <option key={f.name} value={f.name}>\n {f.displayName} ({f.type}) — {f.name}\n </option>\n ))}\n </select>\n ) : (\n <span style={{ fontSize: 12, color: \"#9ca3af\" }}>\n {selectedField ? selectedField.name : \"No catalog\"}\n </span>\n )}\n </td>\n </tr>\n );\n}\n\n// ─── Styles ────────────────────────────────────────────────────────────────────\n\nconst backdropStyle: React.CSSProperties = {\n position: \"fixed\",\n inset: 0,\n backgroundColor: \"rgba(0,0,0,0.3)\",\n zIndex: 100000,\n};\n\nconst modalStyle: React.CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 100001,\n width: \"min(640px, 90vw)\",\n maxHeight: \"80vh\",\n backgroundColor: \"#fff\",\n borderRadius: 12,\n boxShadow: \"0 8px 30px rgba(0,0,0,0.2)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n};\n\nconst modalHeaderStyle: React.CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n padding: \"16px 20px\",\n borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst closeBtnStyle: React.CSSProperties = {\n background: \"none\",\n border: \"none\",\n fontSize: 22,\n color: \"#6b7280\",\n cursor: \"pointer\",\n padding: \"0 4px\",\n lineHeight: 1,\n};\n\nconst sectionStyle: React.CSSProperties = {\n padding: \"12px 20px\",\n overflow: \"auto\",\n flex: 1,\n};\n\nconst sectionTitleStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 700,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"#6b7280\",\n marginBottom: 8,\n};\n\nconst previewTableStyle: React.CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: 12,\n};\n\nconst previewThStyle: React.CSSProperties = {\n padding: \"4px 8px\",\n textAlign: \"left\",\n fontWeight: 600,\n color: \"#374151\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1px solid #e5e7eb\",\n whiteSpace: \"nowrap\",\n};\n\nconst previewTdStyle: React.CSSProperties = {\n padding: \"4px 8px\",\n color: \"#6b7280\",\n borderBottom: \"1px solid #f3f4f6\",\n whiteSpace: \"nowrap\",\n maxWidth: 150,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst mappingThStyle: React.CSSProperties = {\n padding: \"6px 8px\",\n textAlign: \"left\",\n fontWeight: 600,\n fontSize: 11,\n color: \"#6b7280\",\n borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst mappingTdStyle: React.CSSProperties = {\n padding: \"6px 8px\",\n borderBottom: \"1px solid #f3f4f6\",\n verticalAlign: \"middle\",\n};\n\nconst selectStyle: React.CSSProperties = {\n width: \"100%\",\n padding: \"4px 6px\",\n fontSize: 12,\n border: \"1px solid #d1d5db\",\n borderRadius: 4,\n backgroundColor: \"#fff\",\n color: \"#111827\",\n};\n\nconst generateBtnStyle: React.CSSProperties = {\n width: \"100%\",\n padding: \"10px 16px\",\n fontSize: 14,\n fontWeight: 600,\n color: \"#fff\",\n backgroundColor: \"#3b82f6\",\n border: \"none\",\n borderRadius: 8,\n cursor: \"pointer\",\n};\n"]}
1
+ {"version":3,"sources":["../src/components/metric-picker.tsx","../src/components/results-table.tsx","../src/components/data-catalog.tsx","../src/components/admin-dashboard.tsx","../src/components/inspectable.tsx","../src/components/field-matcher.ts","../src/components/prompt-generator.ts","../src/components/data-inspector.tsx"],"names":["jsx","jsxs","useState","useMemo","rootStyle","headingStyle","subStyle","tableStyle","thStyle","tdStyle","badgeStyle","emptyStyle","useCallback","useContext","useEffect","Fragment","selectStyle"],"mappings":"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","file":"components.js","sourcesContent":["import React, { useState, useMemo } from \"react\";\nimport type { SemanticField, FieldType } from \"../types\";\nimport { useMetrics } from \"../react/hooks\";\n\nexport interface MetricPickerProps {\n onSelect: (field: SemanticField) => void;\n /** Filter to only show certain field types. Default: all. */\n fieldTypes?: FieldType[];\n /** Currently selected field IDs (for visual highlighting). */\n selectedIds?: string[];\n /** Placeholder text for the search input. */\n searchPlaceholder?: string;\n /** Custom class name for the root container. */\n className?: string;\n}\n\nconst containerStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"8px\",\n overflow: \"hidden\",\n maxHeight: \"400px\",\n display: \"flex\",\n flexDirection: \"column\",\n};\n\nconst searchStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n border: \"none\",\n borderBottom: \"1px solid #e5e7eb\",\n fontSize: \"14px\",\n outline: \"none\",\n width: \"100%\",\n boxSizing: \"border-box\",\n};\n\nconst listStyle: React.CSSProperties = {\n overflowY: \"auto\",\n flex: 1,\n};\n\nconst categoryHeaderStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n fontSize: \"11px\",\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"#6b7280\",\n backgroundColor: \"#f9fafb\",\n position: \"sticky\",\n top: 0,\n};\n\nconst itemStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n cursor: \"pointer\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n borderBottom: \"1px solid #f3f4f6\",\n};\n\nconst selectedItemStyle: React.CSSProperties = {\n ...itemStyle,\n backgroundColor: \"#eff6ff\",\n};\n\n/**\n * A searchable, categorized picker for metrics and dimensions.\n * Fetches the catalog from the gateway automatically.\n */\nexport function MetricPicker({\n onSelect,\n fieldTypes,\n selectedIds = [],\n searchPlaceholder = \"Search metrics and dimensions...\",\n className,\n}: MetricPickerProps) {\n const { fields, categories, isLoading, error } = useMetrics();\n const [search, setSearch] = useState(\"\");\n\n const filtered = useMemo(() => {\n let result = fields;\n if (fieldTypes) {\n result = result.filter((f) => fieldTypes.includes(f.type));\n }\n if (search) {\n const q = search.toLowerCase();\n result = result.filter(\n (f) =>\n f.displayName.toLowerCase().includes(q) ||\n f.description.toLowerCase().includes(q) ||\n f.name.toLowerCase().includes(q),\n );\n }\n return result;\n }, [fields, fieldTypes, search]);\n\n const grouped = useMemo(() => {\n const map = new Map<string, SemanticField[]>();\n for (const field of filtered) {\n const list = map.get(field.category) || [];\n list.push(field);\n map.set(field.category, list);\n }\n return map;\n }, [filtered]);\n\n const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n if (isLoading) {\n return <div style={{ padding: \"12px\", color: \"#6b7280\" }}>Loading catalog...</div>;\n }\n\n if (error) {\n return <div style={{ padding: \"12px\", color: \"#ef4444\" }}>{error}</div>;\n }\n\n return (\n <div style={containerStyle} className={className}>\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n style={searchStyle}\n />\n <div style={listStyle}>\n {Array.from(grouped.entries()).map(([category, categoryFields]) => (\n <div key={category}>\n <div style={categoryHeaderStyle}>{category}</div>\n {categoryFields.map((field) => (\n <div\n key={field.id}\n style={selectedSet.has(field.id) ? selectedItemStyle : itemStyle}\n onClick={() => onSelect(field)}\n >\n <span style={{ fontSize: \"14px\", fontWeight: 500, color: \"#111827\" }}>\n {field.displayName}\n </span>\n {field.description && (\n <span style={{ fontSize: \"12px\", color: \"#6b7280\" }}>\n {field.description}\n </span>\n )}\n </div>\n ))}\n </div>\n ))}\n {grouped.size === 0 && (\n <div style={{ padding: \"12px\", color: \"#6b7280\", textAlign: \"center\" }}>\n No fields found\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport type { QueryResult } from \"../types\";\n\nexport interface ResultsTableProps {\n data: QueryResult | null;\n /** Custom class name for the root container. */\n className?: string;\n /** Max rows to display. Default: 100. */\n maxRows?: number;\n /** Format numbers with locale string. Default: true. */\n formatNumbers?: boolean;\n}\n\nconst tableContainerStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"8px\",\n overflow: \"auto\",\n maxHeight: \"500px\",\n};\n\nconst tableStyle: React.CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: \"14px\",\n};\n\nconst thStyle: React.CSSProperties = {\n padding: \"10px 12px\",\n textAlign: \"left\",\n fontWeight: 600,\n fontSize: \"12px\",\n color: \"#6b7280\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1px solid #e5e7eb\",\n position: \"sticky\",\n top: 0,\n whiteSpace: \"nowrap\",\n};\n\nconst tdStyle: React.CSSProperties = {\n padding: \"8px 12px\",\n borderBottom: \"1px solid #f3f4f6\",\n color: \"#111827\",\n whiteSpace: \"nowrap\",\n};\n\nconst numberTdStyle: React.CSSProperties = {\n ...tdStyle,\n textAlign: \"right\",\n fontVariantNumeric: \"tabular-nums\",\n};\n\nfunction formatValue(value: unknown, dataType: string, formatNumbers: boolean): string {\n if (value === null || value === undefined) return \"—\";\n if (dataType === \"number\" && typeof value === \"number\" && formatNumbers) {\n return value.toLocaleString(undefined, { maximumFractionDigits: 2 });\n }\n return String(value);\n}\n\n/**\n * A simple data table that renders a QueryResult.\n * Handles formatting numbers, truncating rows, and sticky headers.\n */\nexport function ResultsTable({\n data,\n className,\n maxRows = 100,\n formatNumbers = true,\n}: ResultsTableProps) {\n if (!data || data.columns.length === 0) {\n return (\n <div style={{ padding: \"12px\", color: \"#6b7280\", textAlign: \"center\" }}>\n No data to display\n </div>\n );\n }\n\n const displayRows = data.rows.slice(0, maxRows);\n\n return (\n <div style={tableContainerStyle} className={className}>\n <table style={tableStyle}>\n <thead>\n <tr>\n {data.columns.map((col) => (\n <th key={col.key} style={thStyle}>\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {displayRows.map((row, i) => (\n <tr key={i}>\n {data.columns.map((col) => (\n <td\n key={col.key}\n style={col.dataType === \"number\" ? numberTdStyle : tdStyle}\n >\n {formatValue(row[col.key], col.dataType, formatNumbers)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {data.totalRows > maxRows && (\n <div style={{ padding: \"8px 12px\", fontSize: \"12px\", color: \"#6b7280\", textAlign: \"center\" }}>\n Showing {maxRows} of {data.totalRows} rows\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport { useMetrics } from \"../react/hooks\";\nimport type { SemanticField } from \"../types\";\n\nexport interface DataCatalogProps {\n className?: string;\n /** Show a \"copy name\" button for each field. Default: true. */\n showCopyButton?: boolean;\n /** Filter to only show certain field types. */\n fieldTypes?: Array<\"metric\" | \"dimension\" | \"time_dimension\">;\n}\n\nconst rootStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n maxWidth: 960,\n margin: \"0 auto\",\n padding: 24,\n};\n\nconst headingStyle: React.CSSProperties = {\n fontSize: 24, fontWeight: 700, color: \"#111827\", margin: \"0 0 4px\",\n};\n\nconst subStyle: React.CSSProperties = {\n fontSize: 14, color: \"#6b7280\", margin: \"0 0 20px\",\n};\n\nconst searchBarStyle: React.CSSProperties = {\n display: \"flex\", gap: 8, marginBottom: 20,\n};\n\nconst searchInput: React.CSSProperties = {\n flex: 1, padding: \"10px 14px\", fontSize: 14, border: \"1px solid #d1d5db\",\n borderRadius: 8, outline: \"none\", boxSizing: \"border-box\",\n};\n\nconst filterBtn = (active: boolean): React.CSSProperties => ({\n padding: \"8px 14px\", fontSize: 13, fontWeight: 500, borderRadius: 6,\n border: \"1px solid \" + (active ? \"#3b82f6\" : \"#d1d5db\"),\n backgroundColor: active ? \"#eff6ff\" : \"#fff\",\n color: active ? \"#1d4ed8\" : \"#374151\",\n cursor: \"pointer\",\n});\n\nconst categoryStyle: React.CSSProperties = {\n marginBottom: 24,\n};\n\nconst categoryHeader: React.CSSProperties = {\n fontSize: 13, fontWeight: 600, textTransform: \"uppercase\", letterSpacing: \"0.05em\",\n color: \"#6b7280\", marginBottom: 8, paddingBottom: 6, borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst fieldCard: React.CSSProperties = {\n display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\",\n padding: \"10px 12px\", borderRadius: 6, marginBottom: 4,\n backgroundColor: \"#fafafa\", border: \"1px solid #f3f4f6\",\n};\n\nconst fieldNameStyle: React.CSSProperties = {\n fontSize: 15, fontWeight: 600, color: \"#111827\",\n};\n\nconst fieldDescStyle: React.CSSProperties = {\n fontSize: 13, color: \"#6b7280\", marginTop: 2,\n};\n\nconst codeName: React.CSSProperties = {\n fontSize: 12, color: \"#6366f1\", fontFamily: \"monospace\", marginTop: 2,\n};\n\nconst badgeStyle = (type: string): React.CSSProperties => ({\n display: \"inline-block\", padding: \"2px 8px\", fontSize: 11, fontWeight: 600,\n borderRadius: 9999, whiteSpace: \"nowrap\",\n backgroundColor: type === \"metric\" ? \"#eff6ff\" : type === \"time_dimension\" ? \"#f0fdf4\" : \"#f3f4f6\",\n color: type === \"metric\" ? \"#1d4ed8\" : type === \"time_dimension\" ? \"#15803d\" : \"#6b7280\",\n});\n\nconst copyBtn: React.CSSProperties = {\n padding: \"4px 8px\", fontSize: 11, fontWeight: 500, color: \"#6366f1\",\n backgroundColor: \"#eef2ff\", border: \"1px solid #c7d2fe\", borderRadius: 4,\n cursor: \"pointer\", whiteSpace: \"nowrap\",\n};\n\nconst statsBar: React.CSSProperties = {\n display: \"flex\", gap: 16, marginBottom: 16, fontSize: 14,\n};\n\nconst statItem: React.CSSProperties = {\n display: \"flex\", alignItems: \"center\", gap: 4, color: \"#6b7280\",\n};\n\nconst statNum: React.CSSProperties = { fontWeight: 700, color: \"#111827\" };\n\nconst emptyStyle: React.CSSProperties = {\n padding: 40, textAlign: \"center\", color: \"#9ca3af\", fontSize: 14,\n};\n\ntype TypeFilter = \"all\" | \"metric\" | \"dimension\" | \"time_dimension\";\n\nexport function DataCatalog({ className, showCopyButton = true, fieldTypes }: DataCatalogProps) {\n const { fields, metrics, dimensions, isLoading, error } = useMetrics();\n const [search, setSearch] = useState(\"\");\n const [typeFilter, setTypeFilter] = useState<TypeFilter>(\"all\");\n const [copiedField, setCopiedField] = useState<string | null>(null);\n\n const filtered = useMemo(() => {\n let result = fields;\n if (fieldTypes) result = result.filter((f) => (fieldTypes as string[]).includes(f.type));\n if (typeFilter !== \"all\") result = result.filter((f) => f.type === typeFilter);\n if (search) {\n const q = search.toLowerCase();\n result = result.filter((f) =>\n f.displayName.toLowerCase().includes(q) ||\n f.name.toLowerCase().includes(q) ||\n f.description.toLowerCase().includes(q) ||\n f.category.toLowerCase().includes(q)\n );\n }\n return result;\n }, [fields, fieldTypes, typeFilter, search]);\n\n const grouped = useMemo(() => {\n const map = new Map<string, SemanticField[]>();\n for (const f of filtered) {\n const list = map.get(f.category) || [];\n list.push(f);\n map.set(f.category, list);\n }\n return map;\n }, [filtered]);\n\n const handleCopy = useCallback(async (name: string) => {\n try {\n await navigator.clipboard.writeText(name);\n setCopiedField(name);\n setTimeout(() => setCopiedField(null), 1500);\n } catch {\n // Clipboard API not available in some iframes\n }\n }, []);\n\n if (isLoading) return <div style={{ ...rootStyle, ...emptyStyle }}>Loading data catalog...</div>;\n if (error) return <div style={{ ...rootStyle, padding: 24, color: \"#ef4444\" }}>{error}</div>;\n\n const timeDims = fields.filter((f) => f.type === \"time_dimension\");\n\n return (\n <div style={rootStyle} className={className}>\n <h1 style={headingStyle}>Data Catalog</h1>\n <p style={subStyle}>Browse available metrics and dimensions from the semantic layer</p>\n\n <div style={statsBar}>\n <div style={statItem}><span style={statNum}>{metrics.length}</span> metrics</div>\n <div style={statItem}><span style={statNum}>{dimensions.length - timeDims.length}</span> dimensions</div>\n <div style={statItem}><span style={statNum}>{timeDims.length}</span> time dimensions</div>\n </div>\n\n <div style={searchBarStyle}>\n <input\n style={searchInput}\n placeholder=\"Search by name, description, or category...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <button style={filterBtn(typeFilter === \"all\")} onClick={() => setTypeFilter(\"all\")}>All</button>\n <button style={filterBtn(typeFilter === \"metric\")} onClick={() => setTypeFilter(\"metric\")}>Metrics</button>\n <button style={filterBtn(typeFilter === \"dimension\")} onClick={() => setTypeFilter(\"dimension\")}>Dimensions</button>\n <button style={filterBtn(typeFilter === \"time_dimension\")} onClick={() => setTypeFilter(\"time_dimension\")}>Time</button>\n </div>\n\n {Array.from(grouped.entries()).map(([category, categoryFields]) => (\n <div key={category} style={categoryStyle}>\n <div style={categoryHeader}>{category} ({categoryFields.length})</div>\n {categoryFields.map((f) => (\n <div key={f.id} style={fieldCard}>\n <div style={{ flex: 1 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span style={fieldNameStyle}>{f.displayName}</span>\n <span style={badgeStyle(f.type)}>{f.type}</span>\n </div>\n {f.description && <div style={fieldDescStyle}>{f.description}</div>}\n <div style={codeName}>{f.name}</div>\n </div>\n {showCopyButton && (\n <button style={copyBtn} onClick={() => handleCopy(f.name)}>\n {copiedField === f.name ? \"Copied!\" : \"Copy name\"}\n </button>\n )}\n </div>\n ))}\n </div>\n ))}\n\n {grouped.size === 0 && (\n <div style={emptyStyle}>\n {search ? \"No fields match your search.\" : \"No data available. The gateway may not be configured yet.\"}\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useCallback, useMemo } from \"react\";\nimport { useAdminFields, useAdminRoles, useAdminUsers } from \"../react/admin-hooks\";\nimport { useAuth } from \"../react/hooks\";\nimport type { CuratedField, AccessRole, UserRoleAssignment } from \"../types\";\n\nexport interface AdminDashboardProps {\n className?: string;\n}\n\n// ─── Shared styles ────────────────────────────────────────────────────────────\n\nconst rootStyle: React.CSSProperties = {\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n maxWidth: 960,\n margin: \"0 auto\",\n padding: 24,\n};\n\nconst headingStyle: React.CSSProperties = {\n fontSize: 24, fontWeight: 700, color: \"#111827\", margin: \"0 0 4px\",\n};\n\nconst subStyle: React.CSSProperties = {\n fontSize: 14, color: \"#6b7280\", margin: \"0 0 20px\",\n};\n\nconst tabBarStyle: React.CSSProperties = {\n display: \"flex\", gap: 0, borderBottom: \"1px solid #e5e7eb\", marginBottom: 24,\n};\n\nconst tabBase: React.CSSProperties = {\n padding: \"10px 20px\", fontSize: 14, fontWeight: 500, cursor: \"pointer\",\n background: \"none\", border: \"none\", borderBottom: \"2px solid transparent\",\n color: \"#6b7280\",\n};\n\nconst tabActive: React.CSSProperties = {\n ...tabBase, color: \"#111827\", borderBottomColor: \"#3b82f6\",\n};\n\nconst tableStyle: React.CSSProperties = {\n width: \"100%\", borderCollapse: \"collapse\", fontSize: 14,\n};\n\nconst thStyle: React.CSSProperties = {\n padding: \"10px 12px\", textAlign: \"left\", fontWeight: 600, fontSize: 12,\n color: \"#6b7280\", backgroundColor: \"#f9fafb\", borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst tdStyle: React.CSSProperties = {\n padding: \"8px 12px\", borderBottom: \"1px solid #f3f4f6\", color: \"#111827\",\n};\n\nconst btnPrimary: React.CSSProperties = {\n padding: \"8px 16px\", fontSize: 14, fontWeight: 500, color: \"#fff\",\n backgroundColor: \"#3b82f6\", border: \"none\", borderRadius: 6, cursor: \"pointer\",\n};\n\nconst btnDanger: React.CSSProperties = {\n ...btnPrimary, backgroundColor: \"#ef4444\",\n};\n\nconst btnSecondary: React.CSSProperties = {\n ...btnPrimary, backgroundColor: \"#fff\", color: \"#374151\",\n border: \"1px solid #d1d5db\",\n};\n\nconst inputStyle: React.CSSProperties = {\n padding: \"6px 10px\", fontSize: 14, border: \"1px solid #d1d5db\",\n borderRadius: 6, width: \"100%\", boxSizing: \"border-box\",\n};\n\nconst selectStyle: React.CSSProperties = { ...inputStyle, width: \"auto\" };\n\nconst cardStyle: React.CSSProperties = {\n border: \"1px solid #e5e7eb\", borderRadius: 8, padding: 16, marginBottom: 16,\n backgroundColor: \"#fff\",\n};\n\nconst errorBanner: React.CSSProperties = {\n padding: \"10px 14px\", backgroundColor: \"#fef2f2\", color: \"#b91c1c\",\n borderRadius: 6, fontSize: 14, marginBottom: 16,\n};\n\nconst badgeStyle: React.CSSProperties = {\n display: \"inline-block\", padding: \"2px 8px\", fontSize: 11, fontWeight: 600,\n borderRadius: 9999, backgroundColor: \"#eff6ff\", color: \"#1d4ed8\",\n};\n\nconst badgeGreen: React.CSSProperties = { ...badgeStyle, backgroundColor: \"#f0fdf4\", color: \"#15803d\" };\nconst badgeGray: React.CSSProperties = { ...badgeStyle, backgroundColor: \"#f3f4f6\", color: \"#6b7280\" };\n\nconst checkboxStyle: React.CSSProperties = { width: 16, height: 16, cursor: \"pointer\" };\n\nconst emptyStyle: React.CSSProperties = {\n padding: 24, textAlign: \"center\", color: \"#9ca3af\", fontSize: 14,\n};\n\n// ─── Fields Tab ───────────────────────────────────────────────────────────────\n\nfunction FieldsTab() {\n const { fields, isLoading, error, createField, updateField, deleteField } = useAdminFields();\n const [showAdd, setShowAdd] = useState(false);\n const [newName, setNewName] = useState(\"\");\n const [newType, setNewType] = useState<string>(\"metric\");\n const [newDisplay, setNewDisplay] = useState(\"\");\n const [newDesc, setNewDesc] = useState(\"\");\n const [actionError, setActionError] = useState<string | null>(null);\n\n const handleAdd = useCallback(async () => {\n if (!newName.trim()) return;\n setActionError(null);\n try {\n await createField({\n field_name: newName.trim(),\n field_type: newType,\n display_name: newDisplay.trim() || undefined,\n description: newDesc.trim() || undefined,\n });\n setNewName(\"\"); setNewDisplay(\"\"); setNewDesc(\"\"); setShowAdd(false);\n } catch (err) {\n setActionError(err instanceof Error ? err.message : \"Failed to create field\");\n }\n }, [newName, newType, newDisplay, newDesc, createField]);\n\n const handleToggle = useCallback(async (f: CuratedField) => {\n try { await updateField({ id: f.id, is_active: !f.is_active }); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to update\"); }\n }, [updateField]);\n\n const handleDelete = useCallback(async (id: number) => {\n if (!confirm(\"Delete this field? This also removes it from all roles.\")) return;\n try { await deleteField(id); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to delete\"); }\n }, [deleteField]);\n\n if (isLoading) return <div style={emptyStyle}>Loading fields...</div>;\n if (error) return <div style={errorBanner}>{error}</div>;\n\n return (\n <div>\n {actionError && <div style={errorBanner}>{actionError}</div>}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 16 }}>\n <span style={{ fontSize: 14, color: \"#6b7280\" }}>{fields.length} curated field{fields.length !== 1 ? \"s\" : \"\"}</span>\n <button style={btnPrimary} onClick={() => setShowAdd(!showAdd)}>\n {showAdd ? \"Cancel\" : \"+ Add field\"}\n </button>\n </div>\n\n {showAdd && (\n <div style={cardStyle}>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr auto 1fr\", gap: 8, marginBottom: 8 }}>\n <input style={inputStyle} placeholder=\"field_name (from dbt)\" value={newName} onChange={(e) => setNewName(e.target.value)} />\n <select style={selectStyle} value={newType} onChange={(e) => setNewType(e.target.value)}>\n <option value=\"metric\">metric</option>\n <option value=\"dimension\">dimension</option>\n <option value=\"time_dimension\">time_dimension</option>\n </select>\n <input style={inputStyle} placeholder=\"Display name (optional)\" value={newDisplay} onChange={(e) => setNewDisplay(e.target.value)} />\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n <input style={{ ...inputStyle, flex: 1 }} placeholder=\"Description (optional)\" value={newDesc} onChange={(e) => setNewDesc(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleAdd()} />\n <button style={btnPrimary} onClick={handleAdd}>Save</button>\n </div>\n </div>\n )}\n\n <table style={tableStyle}>\n <thead>\n <tr>\n <th style={thStyle}>Field Name</th>\n <th style={thStyle}>Type</th>\n <th style={thStyle}>Display Name</th>\n <th style={thStyle}>Active</th>\n <th style={{ ...thStyle, textAlign: \"right\" }}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {fields.map((f) => (\n <tr key={f.id}>\n <td style={tdStyle}><code style={{ fontSize: 13 }}>{f.field_name}</code></td>\n <td style={tdStyle}>\n <span style={f.field_type === \"metric\" ? badgeStyle : f.field_type === \"time_dimension\" ? badgeGreen : badgeGray}>\n {f.field_type}\n </span>\n </td>\n <td style={tdStyle}>{f.display_name || <span style={{ color: \"#9ca3af\" }}>—</span>}</td>\n <td style={tdStyle}>\n <input type=\"checkbox\" checked={f.is_active} onChange={() => handleToggle(f)} style={checkboxStyle} />\n </td>\n <td style={{ ...tdStyle, textAlign: \"right\" }}>\n <button style={{ ...btnDanger, padding: \"4px 10px\", fontSize: 12 }} onClick={() => handleDelete(f.id)}>Delete</button>\n </td>\n </tr>\n ))}\n {fields.length === 0 && (\n <tr><td colSpan={5} style={emptyStyle}>No curated fields yet. Add fields to start restricting access.</td></tr>\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\n// ─── Roles Tab ────────────────────────────────────────────────────────────────\n\nfunction RolesTab() {\n const { roles, isLoading, error, createRole, deleteRole, setRoleFields } = useAdminRoles();\n const { fields } = useAdminFields();\n const [showAdd, setShowAdd] = useState(false);\n const [newName, setNewName] = useState(\"\");\n const [newDesc, setNewDesc] = useState(\"\");\n const [editingRole, setEditingRole] = useState<number | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n\n const handleAdd = useCallback(async () => {\n if (!newName.trim()) return;\n setActionError(null);\n try {\n await createRole({ name: newName.trim(), description: newDesc.trim() || undefined });\n setNewName(\"\"); setNewDesc(\"\"); setShowAdd(false);\n } catch (err) {\n setActionError(err instanceof Error ? err.message : \"Failed to create role\");\n }\n }, [newName, newDesc, createRole]);\n\n const handleDelete = useCallback(async (id: number) => {\n if (!confirm(\"Delete this role? Users assigned to it will lose this role's access.\")) return;\n try { await deleteRole(id); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to delete\"); }\n }, [deleteRole]);\n\n const getFieldIds = (role: AccessRole): Set<number> =>\n new Set((role.role_field_access || []).map((rfa) => rfa.curated_field_id));\n\n const handleToggleField = useCallback(async (role: AccessRole, fieldId: number) => {\n const current = getFieldIds(role);\n if (current.has(fieldId)) current.delete(fieldId);\n else current.add(fieldId);\n setActionError(null);\n try { await setRoleFields(role.id, Array.from(current)); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to update\"); }\n }, [setRoleFields]);\n\n if (isLoading) return <div style={emptyStyle}>Loading roles...</div>;\n if (error) return <div style={errorBanner}>{error}</div>;\n\n return (\n <div>\n {actionError && <div style={errorBanner}>{actionError}</div>}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 16 }}>\n <span style={{ fontSize: 14, color: \"#6b7280\" }}>{roles.length} role{roles.length !== 1 ? \"s\" : \"\"}</span>\n <button style={btnPrimary} onClick={() => setShowAdd(!showAdd)}>\n {showAdd ? \"Cancel\" : \"+ Add role\"}\n </button>\n </div>\n\n {showAdd && (\n <div style={cardStyle}>\n <div style={{ display: \"flex\", gap: 8 }}>\n <input style={{ ...inputStyle, flex: 1 }} placeholder=\"Role name\" value={newName} onChange={(e) => setNewName(e.target.value)} />\n <input style={{ ...inputStyle, flex: 2 }} placeholder=\"Description (optional)\" value={newDesc} onChange={(e) => setNewDesc(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleAdd()} />\n <button style={btnPrimary} onClick={handleAdd}>Save</button>\n </div>\n </div>\n )}\n\n {roles.map((role) => {\n const assignedIds = getFieldIds(role);\n const isEditing = editingRole === role.id;\n\n return (\n <div key={role.id} style={cardStyle}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: isEditing ? 12 : 0 }}>\n <div>\n <strong style={{ fontSize: 16 }}>{role.name}</strong>\n {role.is_default && <span style={{ ...badgeGreen, marginLeft: 8 }}>default</span>}\n <span style={{ ...badgeGray, marginLeft: 8 }}>{assignedIds.size} field{assignedIds.size !== 1 ? \"s\" : \"\"}</span>\n {role.description && <div style={{ fontSize: 13, color: \"#6b7280\", marginTop: 2 }}>{role.description}</div>}\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n <button style={btnSecondary} onClick={() => setEditingRole(isEditing ? null : role.id)}>\n {isEditing ? \"Done\" : \"Edit fields\"}\n </button>\n {!role.is_default && (\n <button style={{ ...btnDanger, padding: \"6px 12px\", fontSize: 12 }} onClick={() => handleDelete(role.id)}>Delete</button>\n )}\n </div>\n </div>\n\n {isEditing && fields.length > 0 && (\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(auto-fill, minmax(240px, 1fr))\", gap: 4 }}>\n {fields.filter((f) => f.is_active).map((f) => (\n <label key={f.id} style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"4px 0\", fontSize: 13, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={assignedIds.has(f.id)} onChange={() => handleToggleField(role, f.id)} style={checkboxStyle} />\n <span>{f.display_name || f.field_name}</span>\n <span style={f.field_type === \"metric\" ? badgeStyle : badgeGray}>{f.field_type}</span>\n </label>\n ))}\n </div>\n )}\n\n {isEditing && fields.length === 0 && (\n <div style={emptyStyle}>No curated fields defined yet. Add fields in the Fields tab first.</div>\n )}\n </div>\n );\n })}\n\n {roles.length === 0 && <div style={emptyStyle}>No roles defined.</div>}\n </div>\n );\n}\n\n// ─── Users Tab ────────────────────────────────────────────────────────────────\n\nfunction UsersTab() {\n const { users, isLoading, error, assignUserRole, removeUserRole } = useAdminUsers();\n const { roles } = useAdminRoles();\n const [showAdd, setShowAdd] = useState(false);\n const [newEmail, setNewEmail] = useState(\"\");\n const [newRoleId, setNewRoleId] = useState<number>(0);\n const [newIsAdmin, setNewIsAdmin] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n const handleAdd = useCallback(async () => {\n if (!newEmail.trim() || !newRoleId) return;\n setActionError(null);\n try {\n await assignUserRole({ email: newEmail.trim().toLowerCase(), role_id: newRoleId, is_admin: newIsAdmin });\n setNewEmail(\"\"); setNewIsAdmin(false); setShowAdd(false);\n } catch (err) {\n setActionError(err instanceof Error ? err.message : \"Failed to assign role\");\n }\n }, [newEmail, newRoleId, newIsAdmin, assignUserRole]);\n\n const handleRemove = useCallback(async (u: UserRoleAssignment) => {\n if (!confirm(`Remove ${u.email} from this role?`)) return;\n try { await removeUserRole({ email: u.email, role_id: u.role_id }); }\n catch (err) { setActionError(err instanceof Error ? err.message : \"Failed to remove\"); }\n }, [removeUserRole]);\n\n const grouped = useMemo(() => {\n const map = new Map<string, UserRoleAssignment[]>();\n for (const u of users) {\n const list = map.get(u.email) || [];\n list.push(u);\n map.set(u.email, list);\n }\n return map;\n }, [users]);\n\n if (isLoading) return <div style={emptyStyle}>Loading users...</div>;\n if (error) return <div style={errorBanner}>{error}</div>;\n\n return (\n <div>\n {actionError && <div style={errorBanner}>{actionError}</div>}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginBottom: 16 }}>\n <span style={{ fontSize: 14, color: \"#6b7280\" }}>{grouped.size} user{grouped.size !== 1 ? \"s\" : \"\"} with role assignments</span>\n <button style={btnPrimary} onClick={() => setShowAdd(!showAdd)}>\n {showAdd ? \"Cancel\" : \"+ Assign user\"}\n </button>\n </div>\n\n {showAdd && (\n <div style={cardStyle}>\n <div style={{ display: \"flex\", gap: 8, marginBottom: 8 }}>\n <input style={{ ...inputStyle, flex: 1 }} placeholder=\"Email (e.g. name@inkind.com)\" value={newEmail} onChange={(e) => setNewEmail(e.target.value)} />\n <select style={selectStyle} value={newRoleId} onChange={(e) => setNewRoleId(Number(e.target.value))}>\n <option value={0}>Select role...</option>\n {roles.map((r) => <option key={r.id} value={r.id}>{r.name}</option>)}\n </select>\n </div>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 13, cursor: \"pointer\" }}>\n <input type=\"checkbox\" checked={newIsAdmin} onChange={(e) => setNewIsAdmin(e.target.checked)} style={checkboxStyle} />\n Admin access\n </label>\n <div style={{ flex: 1 }} />\n <button style={btnPrimary} onClick={handleAdd}>Assign</button>\n </div>\n </div>\n )}\n\n {Array.from(grouped.entries()).map(([email, assignments]) => (\n <div key={email} style={cardStyle}>\n <div>\n <strong style={{ fontSize: 14 }}>{email}</strong>\n {assignments.some((a) => a.is_admin) && <span style={{ ...badgeGreen, marginLeft: 8 }}>admin</span>}\n </div>\n <div style={{ display: \"flex\", gap: 6, marginTop: 8, flexWrap: \"wrap\" }}>\n {assignments.map((a) => (\n <span key={a.id} style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4, ...badgeStyle }}>\n {a.access_roles?.name || `role #${a.role_id}`}\n <button\n onClick={() => handleRemove(a)}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", color: \"#6b7280\", fontSize: 14, padding: 0, lineHeight: 1 }}\n title=\"Remove role\"\n >\n ×\n </button>\n </span>\n ))}\n </div>\n </div>\n ))}\n\n {grouped.size === 0 && (\n <div style={emptyStyle}>\n No user role assignments yet. Users without an explicit role get the default role's access.\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main Dashboard ───────────────────────────────────────────────────────────\n\ntype Tab = \"fields\" | \"roles\" | \"users\";\n\nexport function AdminDashboard({ className }: AdminDashboardProps) {\n const { isAuthenticated, isLoading: authLoading } = useAuth();\n const [tab, setTab] = useState<Tab>(\"fields\");\n const [initError, setInitError] = useState<string | null>(null);\n\n if (authLoading) return <div style={{ ...rootStyle, ...emptyStyle }}>Loading...</div>;\n if (!isAuthenticated) return <div style={{ ...rootStyle, ...emptyStyle }}>Sign in to access the admin dashboard.</div>;\n\n return (\n <div style={rootStyle} className={className}>\n <h1 style={headingStyle}>Semantic Layer Admin</h1>\n <p style={subStyle}>Manage curated fields, roles, and user access</p>\n\n {initError && <div style={errorBanner}>{initError}</div>}\n\n <div style={tabBarStyle}>\n {([\"fields\", \"roles\", \"users\"] as Tab[]).map((t) => (\n <button key={t} style={tab === t ? tabActive : tabBase} onClick={() => { setTab(t); setInitError(null); }}>\n {t.charAt(0).toUpperCase() + t.slice(1)}\n </button>\n ))}\n </div>\n\n {tab === \"fields\" && <FieldsTab />}\n {tab === \"roles\" && <RolesTab />}\n {tab === \"users\" && <UsersTab />}\n </div>\n );\n}\n","import React, { createContext, useContext, useEffect, useId, useRef, useState, useCallback } from \"react\";\n\nexport interface InspectableEntry {\n id: string;\n label: string;\n currentSource: string;\n columns: string[];\n sampleValues: Record<string, unknown>[];\n element: HTMLElement | null;\n}\n\nexport interface InspectableRegistryValue {\n entries: Map<string, InspectableEntry>;\n register: (entry: InspectableEntry) => void;\n unregister: (id: string) => void;\n inspectActive: boolean;\n setInspectActive: (active: boolean) => void;\n selectedId: string | null;\n setSelectedId: (id: string | null) => void;\n}\n\nexport const InspectableRegistryContext = createContext<InspectableRegistryValue | null>(null);\n\nexport function InspectableRegistry({ children }: { children: React.ReactNode }) {\n const [entries, setEntries] = useState<Map<string, InspectableEntry>>(new Map());\n const [inspectActive, setInspectActive] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n\n const register = useCallback((entry: InspectableEntry) => {\n setEntries((prev) => {\n const next = new Map(prev);\n next.set(entry.id, entry);\n return next;\n });\n }, []);\n\n const unregister = useCallback((id: string) => {\n setEntries((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n setSelectedId((prev) => (prev === id ? null : prev));\n }, []);\n\n const value: InspectableRegistryValue = {\n entries,\n register,\n unregister,\n inspectActive,\n setInspectActive,\n selectedId,\n setSelectedId,\n };\n\n return (\n <InspectableRegistryContext.Provider value={value}>\n {children}\n </InspectableRegistryContext.Provider>\n );\n}\n\n// ─── Inspectable wrapper ───────────────────────────────────────────────────────\n\nexport interface InspectableProps {\n /** Human-readable label for this component (e.g., \"Revenue Chart\"). */\n label: string;\n /** Describes where data currently comes from (e.g., \"hardcoded array\", \"API /revenue\"). */\n currentSource?: string;\n /** The current data powering this component -- used to infer columns and sample values. */\n data?: Record<string, unknown>[];\n /** Explicit column names. If omitted, inferred from the first item in data. */\n columns?: string[];\n children: React.ReactNode;\n}\n\n/**\n * Wraps a data-bound component and registers it with the DataInspector overlay.\n * When inspect mode is off or no DataInspector ancestor exists, renders children\n * with zero layout impact (no wrapper div). Only adds a positioned wrapper\n * with a click-capture overlay when inspect mode is active.\n */\nexport function Inspectable({\n label,\n currentSource = \"unknown\",\n data,\n columns,\n children,\n}: InspectableProps) {\n const registry = useContext(InspectableRegistryContext);\n const id = useId();\n const ref = useRef<HTMLDivElement>(null);\n\n const inferredColumns = columns ?? (data?.[0] ? Object.keys(data[0]) : []);\n const sampleValues = data?.slice(0, 3) ?? [];\n\n useEffect(() => {\n if (!registry) return;\n\n registry.register({\n id,\n label,\n currentSource,\n columns: inferredColumns,\n sampleValues,\n element: ref.current,\n });\n\n return () => registry.unregister(id);\n }, [id, label, currentSource, inferredColumns.join(\",\"), registry]);\n\n if (!registry) {\n return <>{children}</>;\n }\n\n const isSelected = registry.selectedId === id;\n const inspecting = registry.inspectActive;\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n registry.setSelectedId(isSelected ? null : id);\n };\n\n if (!inspecting) {\n return <div ref={ref}>{children}</div>;\n }\n\n return (\n <div\n ref={ref}\n style={{ position: \"relative\" }}\n >\n {children}\n {/* Transparent overlay captures clicks even over charts/SVGs */}\n <div\n onClick={handleClick}\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 9999,\n cursor: \"pointer\",\n outline: isSelected\n ? \"2px solid #3b82f6\"\n : \"2px dashed #93c5fd\",\n outlineOffset: 2,\n borderRadius: 4,\n transition: \"outline 0.15s ease\",\n background: isSelected ? \"rgba(59,130,246,0.05)\" : \"transparent\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n top: -10,\n left: 4,\n fontSize: 10,\n fontWeight: 600,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n color: \"#fff\",\n backgroundColor: isSelected ? \"#3b82f6\" : \"#93c5fd\",\n padding: \"1px 6px\",\n borderRadius: 3,\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n }}\n >\n {label}\n </div>\n </div>\n </div>\n );\n}\n","import type { SemanticField } from \"../types\";\n\nexport type MatchConfidence = \"exact\" | \"fuzzy\" | \"manual\";\n\nexport interface FieldMatch {\n column: string;\n suggestedField: SemanticField | null;\n confidence: MatchConfidence;\n}\n\nconst AGG_PREFIXES = [\"total_\", \"sum_\", \"avg_\", \"count_\", \"min_\", \"max_\", \"num_\"];\nconst NOISE_SUFFIXES = [\"_name\", \"_id\", \"_value\", \"_val\", \"_amt\", \"_amount\"];\n\nfunction camelToSnake(s: string): string {\n return s.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nfunction normalize(s: string): string {\n let result = camelToSnake(s).toLowerCase().trim();\n for (const prefix of AGG_PREFIXES) {\n if (result.startsWith(prefix) && result.length > prefix.length) {\n result = result.slice(prefix.length);\n break;\n }\n }\n for (const suffix of NOISE_SUFFIXES) {\n if (result.endsWith(suffix) && result.length > suffix.length) {\n result = result.slice(0, -suffix.length);\n break;\n }\n }\n return result;\n}\n\nfunction matchExact(column: string, catalog: SemanticField[]): SemanticField | null {\n const lower = column.toLowerCase();\n return catalog.find((f) => f.name.toLowerCase() === lower) ?? null;\n}\n\nfunction matchNormalized(column: string, catalog: SemanticField[]): SemanticField | null {\n const norm = normalize(column);\n return catalog.find((f) => normalize(f.name) === norm) ?? null;\n}\n\nfunction matchDisplayName(column: string, catalog: SemanticField[]): SemanticField | null {\n const lower = normalize(column).replace(/_/g, \" \");\n if (lower.length < 3) return null;\n\n return (\n catalog.find((f) => f.displayName.toLowerCase().includes(lower)) ??\n catalog.find((f) => f.description.toLowerCase().includes(lower)) ??\n null\n );\n}\n\n/**\n * Match an array of column names against the semantic layer field catalog.\n * Uses three layers: exact name match, normalized match, then display name match.\n */\nexport function matchFields(columns: string[], catalog: SemanticField[]): FieldMatch[] {\n return columns.map((column) => {\n const exact = matchExact(column, catalog);\n if (exact) return { column, suggestedField: exact, confidence: \"exact\" as const };\n\n const normalized = matchNormalized(column, catalog);\n if (normalized) return { column, suggestedField: normalized, confidence: \"fuzzy\" as const };\n\n const display = matchDisplayName(column, catalog);\n if (display) return { column, suggestedField: display, confidence: \"fuzzy\" as const };\n\n return { column, suggestedField: null, confidence: \"manual\" as const };\n });\n}\n","import type { SemanticField } from \"../types\";\n\nexport interface FieldMapping {\n column: string;\n field: SemanticField | null;\n}\n\n/**\n * Generate a ready-to-paste Lovable prompt that tells the AI how to migrate\n * a component from its current data to a useSemanticQuery() call.\n */\nexport function generateMigrationPrompt(\n componentLabel: string,\n mappings: FieldMapping[],\n): string {\n const resolved = mappings.filter((m) => m.field !== null) as Array<{\n column: string;\n field: SemanticField;\n }>;\n\n if (resolved.length === 0) {\n return `Replace the sample/hardcoded data in the \"${componentLabel}\" component with live data from the semantic layer using useSemanticQuery. Use the DataCatalog to find the right field names.`;\n }\n\n const metrics = resolved\n .filter((m) => m.field.type === \"metric\")\n .map((m) => m.field.name);\n\n const timeDims = resolved\n .filter((m) => m.field.type === \"time_dimension\")\n .map((m) => m.field.name);\n\n const dims = resolved\n .filter((m) => m.field.type === \"dimension\")\n .map((m) => m.field.name);\n\n const groupBy = [...timeDims, ...dims];\n\n const parts: string[] = [\n `Replace the sample/hardcoded data in the \"${componentLabel}\" component with a useSemanticQuery call using:`,\n ];\n\n if (metrics.length > 0) {\n parts.push(` metrics: [${metrics.map((n) => `'${n}'`).join(\", \")}]`);\n }\n\n if (groupBy.length > 0) {\n parts.push(` groupBy: [${groupBy.map((n) => `'${n}'`).join(\", \")}]`);\n }\n\n if (timeDims.length > 0) {\n parts.push(` grain: 'month'`);\n }\n\n parts.push(\"\");\n parts.push(\"Map the query result columns to the component's props:\");\n\n for (const m of resolved) {\n parts.push(` \"${m.column}\" → data column \"${m.field.name}\"`);\n }\n\n parts.push(\"\");\n parts.push(\n \"Remove the old hardcoded/sample data and any fetch logic it used. \" +\n \"Use the data, isLoading, and error values from useSemanticQuery to render the component.\",\n );\n\n return parts.join(\"\\n\");\n}\n","import React, { useState, useMemo, useCallback, useEffect, useContext } from \"react\";\nimport { InspectableRegistry, InspectableRegistryContext } from \"./inspectable\";\nimport type { InspectableEntry } from \"./inspectable\";\nimport { matchFields } from \"./field-matcher\";\nimport type { FieldMatch } from \"./field-matcher\";\nimport { generateMigrationPrompt } from \"./prompt-generator\";\nimport type { FieldMapping } from \"./prompt-generator\";\nimport type { SemanticField } from \"../types\";\nimport { useMetrics } from \"../react/hooks\";\n\nexport interface DataInspectorProps {\n children: React.ReactNode;\n}\n\n/**\n * Dev-mode overlay that wraps your app in an InspectableRegistry and provides\n * a floating toggle + inspector modal for data migration.\n * Renders the registry context so <Inspectable> children can register.\n */\nexport function DataInspector({ children }: DataInspectorProps) {\n return (\n <InspectableRegistry>\n <InspectorOverlay />\n {children}\n </InspectableRegistry>\n );\n}\n\n// ─── Internal overlay ──────────────────────────────────────────────────────────\n\nfunction InspectorOverlay() {\n const registry = useContext(InspectableRegistryContext);\n if (!registry) return null;\n\n const { inspectActive, setInspectActive, selectedId, setSelectedId, entries } = registry;\n\n // Keyboard shortcut: Ctrl+Shift+I\n useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.ctrlKey && e.shiftKey && e.key === \"I\") {\n e.preventDefault();\n setInspectActive(!inspectActive);\n }\n }\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [inspectActive, setInspectActive]);\n\n const selectedEntry = selectedId ? entries.get(selectedId) ?? null : null;\n\n return (\n <>\n <ToggleButton\n active={inspectActive}\n count={entries.size}\n onToggle={() => {\n setInspectActive(!inspectActive);\n if (inspectActive) setSelectedId(null);\n }}\n />\n {selectedEntry && (\n <InspectorModal\n entry={selectedEntry}\n onClose={() => setSelectedId(null)}\n />\n )}\n </>\n );\n}\n\n// ─── Toggle button ─────────────────────────────────────────────────────────────\n\nfunction ToggleButton({\n active,\n count,\n onToggle,\n}: {\n active: boolean;\n count: number;\n onToggle: () => void;\n}) {\n return (\n <button\n onClick={onToggle}\n title={active ? \"Exit inspect mode (Ctrl+Shift+I)\" : \"Enter inspect mode (Ctrl+Shift+I)\"}\n style={{\n position: \"fixed\",\n bottom: 20,\n right: 20,\n zIndex: 99999,\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"8px 16px\",\n fontSize: 13,\n fontWeight: 600,\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n color: active ? \"#fff\" : \"#374151\",\n backgroundColor: active ? \"#3b82f6\" : \"#fff\",\n border: `1px solid ${active ? \"#2563eb\" : \"#d1d5db\"}`,\n borderRadius: 999,\n cursor: \"pointer\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.12)\",\n transition: \"all 0.15s ease\",\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n {active ? \"Inspecting\" : \"Inspect Data\"}\n {count > 0 && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: 18,\n height: 18,\n fontSize: 11,\n fontWeight: 700,\n borderRadius: 999,\n backgroundColor: active ? \"rgba(255,255,255,0.25)\" : \"#e5e7eb\",\n color: active ? \"#fff\" : \"#6b7280\",\n padding: \"0 5px\",\n }}\n >\n {count}\n </span>\n )}\n </button>\n );\n}\n\n// ─── Inspector modal ───────────────────────────────────────────────────────────\n\nfunction InspectorModal({\n entry,\n onClose,\n}: {\n entry: InspectableEntry;\n onClose: () => void;\n}) {\n const { fields: catalog } = useMetrics();\n\n const initialMatches = useMemo(\n () => matchFields(entry.columns, catalog),\n [entry.columns, catalog],\n );\n\n const [mappings, setMappings] = useState<Map<string, SemanticField | null>>(\n () => new Map(initialMatches.map((m) => [m.column, m.suggestedField])),\n );\n\n useEffect(() => {\n setMappings(new Map(initialMatches.map((m) => [m.column, m.suggestedField])));\n }, [initialMatches]);\n\n const [copied, setCopied] = useState(false);\n\n const handleFieldChange = useCallback((column: string, field: SemanticField | null) => {\n setMappings((prev) => {\n const next = new Map(prev);\n next.set(column, field);\n return next;\n });\n }, []);\n\n const handleGenerate = useCallback(async () => {\n const fieldMappings: FieldMapping[] = entry.columns.map((col) => ({\n column: col,\n field: mappings.get(col) ?? null,\n }));\n const prompt = generateMigrationPrompt(entry.label, fieldMappings);\n try {\n await navigator.clipboard.writeText(prompt);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Fallback: select text in a textarea\n const ta = document.createElement(\"textarea\");\n ta.value = prompt;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n document.body.removeChild(ta);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [entry, mappings]);\n\n const confidenceMap = useMemo(() => {\n const map = new Map<string, FieldMatch[\"confidence\"]>();\n for (const m of initialMatches) map.set(m.column, m.confidence);\n return map;\n }, [initialMatches]);\n\n return (\n <>\n <div onClick={onClose} style={backdropStyle} />\n <div style={modalStyle}>\n <div style={modalHeaderStyle}>\n <div>\n <div style={{ fontSize: 16, fontWeight: 700, color: \"#111827\" }}>{entry.label}</div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\n Source: {entry.currentSource}\n </div>\n </div>\n <button onClick={onClose} style={closeBtnStyle}>&times;</button>\n </div>\n\n {/* Sample data preview */}\n {entry.sampleValues.length > 0 && (\n <div style={sectionStyle}>\n <div style={sectionTitleStyle}>Current Data Preview</div>\n <div style={{ overflow: \"auto\" }}>\n <table style={previewTableStyle}>\n <thead>\n <tr>\n {entry.columns.map((col) => (\n <th key={col} style={previewThStyle}>{col}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {entry.sampleValues.map((row, i) => (\n <tr key={i}>\n {entry.columns.map((col) => (\n <td key={col} style={previewTdStyle}>\n {row[col] === null || row[col] === undefined ? \"—\" : String(row[col])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* Field mapping table */}\n <div style={sectionStyle}>\n <div style={sectionTitleStyle}>Field Mapping</div>\n <table style={{ width: \"100%\", borderCollapse: \"collapse\", fontSize: 13 }}>\n <thead>\n <tr>\n <th style={mappingThStyle}>Current Column</th>\n <th style={mappingThStyle}>Confidence</th>\n <th style={mappingThStyle}>Semantic Layer Field</th>\n </tr>\n </thead>\n <tbody>\n {entry.columns.map((col) => (\n <MappingRow\n key={col}\n column={col}\n confidence={confidenceMap.get(col) ?? \"manual\"}\n selectedField={mappings.get(col) ?? null}\n catalog={catalog}\n onChange={(field) => handleFieldChange(col, field)}\n />\n ))}\n </tbody>\n </table>\n {catalog.length === 0 && (\n <div style={{ fontSize: 12, color: \"#9ca3af\", marginTop: 8, textAlign: \"center\" }}>\n No semantic layer catalog available. Connect to the gateway to enable smart matching.\n </div>\n )}\n </div>\n\n {/* Generate button */}\n <div style={{ padding: \"12px 20px\", borderTop: \"1px solid #e5e7eb\" }}>\n <button onClick={handleGenerate} style={generateBtnStyle}>\n {copied ? \"Copied to clipboard!\" : \"Generate Migration Prompt\"}\n </button>\n </div>\n </div>\n </>\n );\n}\n\n// ─── Mapping row ───────────────────────────────────────────────────────────────\n\nfunction MappingRow({\n column,\n confidence,\n selectedField,\n catalog,\n onChange,\n}: {\n column: string;\n confidence: FieldMatch[\"confidence\"];\n selectedField: SemanticField | null;\n catalog: SemanticField[];\n onChange: (field: SemanticField | null) => void;\n}) {\n const badgeColors: Record<string, { bg: string; color: string }> = {\n exact: { bg: \"#dcfce7\", color: \"#15803d\" },\n fuzzy: { bg: \"#fef9c3\", color: \"#a16207\" },\n manual: { bg: \"#fee2e2\", color: \"#dc2626\" },\n };\n const badge = badgeColors[confidence] ?? badgeColors.manual;\n\n return (\n <tr>\n <td style={mappingTdStyle}>\n <code style={{ fontSize: 12, color: \"#6366f1\", fontFamily: \"monospace\" }}>{column}</code>\n </td>\n <td style={{ ...mappingTdStyle, textAlign: \"center\" }}>\n <span\n style={{\n display: \"inline-block\",\n padding: \"1px 6px\",\n fontSize: 10,\n fontWeight: 600,\n borderRadius: 4,\n backgroundColor: badge.bg,\n color: badge.color,\n }}\n >\n {confidence}\n </span>\n </td>\n <td style={mappingTdStyle}>\n {catalog.length > 0 ? (\n <select\n value={selectedField?.name ?? \"\"}\n onChange={(e) => {\n const field = catalog.find((f) => f.name === e.target.value) ?? null;\n onChange(field);\n }}\n style={selectStyle}\n >\n <option value=\"\">-- none --</option>\n {catalog.map((f) => (\n <option key={f.name} value={f.name}>\n {f.displayName} ({f.type}) — {f.name}\n </option>\n ))}\n </select>\n ) : (\n <span style={{ fontSize: 12, color: \"#9ca3af\" }}>\n {selectedField ? selectedField.name : \"No catalog\"}\n </span>\n )}\n </td>\n </tr>\n );\n}\n\n// ─── Styles ────────────────────────────────────────────────────────────────────\n\nconst backdropStyle: React.CSSProperties = {\n position: \"fixed\",\n inset: 0,\n backgroundColor: \"rgba(0,0,0,0.3)\",\n zIndex: 100000,\n};\n\nconst modalStyle: React.CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 100001,\n width: \"min(640px, 90vw)\",\n maxHeight: \"80vh\",\n backgroundColor: \"#fff\",\n borderRadius: 12,\n boxShadow: \"0 8px 30px rgba(0,0,0,0.2)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n};\n\nconst modalHeaderStyle: React.CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n padding: \"16px 20px\",\n borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst closeBtnStyle: React.CSSProperties = {\n background: \"none\",\n border: \"none\",\n fontSize: 22,\n color: \"#6b7280\",\n cursor: \"pointer\",\n padding: \"0 4px\",\n lineHeight: 1,\n};\n\nconst sectionStyle: React.CSSProperties = {\n padding: \"12px 20px\",\n overflow: \"auto\",\n flex: 1,\n};\n\nconst sectionTitleStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 700,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"#6b7280\",\n marginBottom: 8,\n};\n\nconst previewTableStyle: React.CSSProperties = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: 12,\n};\n\nconst previewThStyle: React.CSSProperties = {\n padding: \"4px 8px\",\n textAlign: \"left\",\n fontWeight: 600,\n color: \"#374151\",\n backgroundColor: \"#f9fafb\",\n borderBottom: \"1px solid #e5e7eb\",\n whiteSpace: \"nowrap\",\n};\n\nconst previewTdStyle: React.CSSProperties = {\n padding: \"4px 8px\",\n color: \"#6b7280\",\n borderBottom: \"1px solid #f3f4f6\",\n whiteSpace: \"nowrap\",\n maxWidth: 150,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst mappingThStyle: React.CSSProperties = {\n padding: \"6px 8px\",\n textAlign: \"left\",\n fontWeight: 600,\n fontSize: 11,\n color: \"#6b7280\",\n borderBottom: \"1px solid #e5e7eb\",\n};\n\nconst mappingTdStyle: React.CSSProperties = {\n padding: \"6px 8px\",\n borderBottom: \"1px solid #f3f4f6\",\n verticalAlign: \"middle\",\n};\n\nconst selectStyle: React.CSSProperties = {\n width: \"100%\",\n padding: \"4px 6px\",\n fontSize: 12,\n border: \"1px solid #d1d5db\",\n borderRadius: 4,\n backgroundColor: \"#fff\",\n color: \"#111827\",\n};\n\nconst generateBtnStyle: React.CSSProperties = {\n width: \"100%\",\n padding: \"10px 16px\",\n fontSize: 14,\n fontWeight: 600,\n color: \"#fff\",\n backgroundColor: \"#3b82f6\",\n border: \"none\",\n borderRadius: 8,\n cursor: \"pointer\",\n};\n"]}