@inkindcards/semantic-layer 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.cjs +546 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +53 -2
- package/dist/components.d.ts +53 -2
- package/dist/components.js +545 -3
- package/dist/components.js.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/{types-DJpYLOyy.d.cts → types-c5qj4BKB.d.cts} +1 -1
- package/dist/{types-DJpYLOyy.d.ts → types-c5qj4BKB.d.ts} +1 -1
- package/package.json +1 -1
package/dist/components.cjs.map
CHANGED
|
@@ -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"],"names":["useMetrics","useState","useMemo","jsx","jsxs","useCallback","rootStyle","headingStyle","subStyle","tableStyle","thStyle","tdStyle","badgeStyle","emptyStyle","useAdminFields","useAdminRoles","useAdminUsers","useAuth"],"mappings":"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","file":"components.cjs","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"]}
|
|
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":["useMetrics","useState","useMemo","jsx","jsxs","useCallback","rootStyle","headingStyle","subStyle","tableStyle","thStyle","tdStyle","badgeStyle","emptyStyle","useAdminFields","useAdminRoles","useAdminUsers","useAuth","createContext","useContext","useId","useRef","useEffect","Fragment","selectStyle"],"mappings":"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","file":"components.cjs","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}>×</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"]}
|
package/dist/components.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { S as SemanticField,
|
|
2
|
+
import { S as SemanticField, d as FieldType, Q as QueryResult } from './types-c5qj4BKB.cjs';
|
|
3
|
+
import React__default from 'react';
|
|
3
4
|
|
|
4
5
|
interface MetricPickerProps {
|
|
5
6
|
onSelect: (field: SemanticField) => void;
|
|
@@ -47,4 +48,54 @@ interface AdminDashboardProps {
|
|
|
47
48
|
}
|
|
48
49
|
declare function AdminDashboard({ className }: AdminDashboardProps): react_jsx_runtime.JSX.Element;
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
interface InspectableProps {
|
|
52
|
+
/** Human-readable label for this component (e.g., "Revenue Chart"). */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Describes where data currently comes from (e.g., "hardcoded array", "API /revenue"). */
|
|
55
|
+
currentSource?: string;
|
|
56
|
+
/** The current data powering this component -- used to infer columns and sample values. */
|
|
57
|
+
data?: Record<string, unknown>[];
|
|
58
|
+
/** Explicit column names. If omitted, inferred from the first item in data. */
|
|
59
|
+
columns?: string[];
|
|
60
|
+
children: React__default.ReactNode;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Wraps a data-bound component and registers it with the DataInspector overlay.
|
|
64
|
+
* When no DataInspector/InspectableRegistry ancestor exists, renders as a plain div
|
|
65
|
+
* with no overhead.
|
|
66
|
+
*/
|
|
67
|
+
declare function Inspectable({ label, currentSource, data, columns, children, }: InspectableProps): react_jsx_runtime.JSX.Element;
|
|
68
|
+
|
|
69
|
+
interface DataInspectorProps {
|
|
70
|
+
children: React__default.ReactNode;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Dev-mode overlay that wraps your app in an InspectableRegistry and provides
|
|
74
|
+
* a floating toggle + inspector modal for data migration.
|
|
75
|
+
* Renders the registry context so <Inspectable> children can register.
|
|
76
|
+
*/
|
|
77
|
+
declare function DataInspector({ children }: DataInspectorProps): react_jsx_runtime.JSX.Element;
|
|
78
|
+
|
|
79
|
+
type MatchConfidence = "exact" | "fuzzy" | "manual";
|
|
80
|
+
interface FieldMatch {
|
|
81
|
+
column: string;
|
|
82
|
+
suggestedField: SemanticField | null;
|
|
83
|
+
confidence: MatchConfidence;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Match an array of column names against the semantic layer field catalog.
|
|
87
|
+
* Uses three layers: exact name match, normalized match, then display name match.
|
|
88
|
+
*/
|
|
89
|
+
declare function matchFields(columns: string[], catalog: SemanticField[]): FieldMatch[];
|
|
90
|
+
|
|
91
|
+
interface FieldMapping {
|
|
92
|
+
column: string;
|
|
93
|
+
field: SemanticField | null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Generate a ready-to-paste Lovable prompt that tells the AI how to migrate
|
|
97
|
+
* a component from its current data to a useSemanticQuery() call.
|
|
98
|
+
*/
|
|
99
|
+
declare function generateMigrationPrompt(componentLabel: string, mappings: FieldMapping[]): string;
|
|
100
|
+
|
|
101
|
+
export { AdminDashboard, type AdminDashboardProps, DataCatalog, type DataCatalogProps, DataInspector, type DataInspectorProps, type FieldMapping, type FieldMatch, Inspectable, type InspectableProps, type MatchConfidence, MetricPicker, type MetricPickerProps, ResultsTable, type ResultsTableProps, generateMigrationPrompt, matchFields };
|
package/dist/components.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { S as SemanticField,
|
|
2
|
+
import { S as SemanticField, d as FieldType, Q as QueryResult } from './types-c5qj4BKB.js';
|
|
3
|
+
import React__default from 'react';
|
|
3
4
|
|
|
4
5
|
interface MetricPickerProps {
|
|
5
6
|
onSelect: (field: SemanticField) => void;
|
|
@@ -47,4 +48,54 @@ interface AdminDashboardProps {
|
|
|
47
48
|
}
|
|
48
49
|
declare function AdminDashboard({ className }: AdminDashboardProps): react_jsx_runtime.JSX.Element;
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
interface InspectableProps {
|
|
52
|
+
/** Human-readable label for this component (e.g., "Revenue Chart"). */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Describes where data currently comes from (e.g., "hardcoded array", "API /revenue"). */
|
|
55
|
+
currentSource?: string;
|
|
56
|
+
/** The current data powering this component -- used to infer columns and sample values. */
|
|
57
|
+
data?: Record<string, unknown>[];
|
|
58
|
+
/** Explicit column names. If omitted, inferred from the first item in data. */
|
|
59
|
+
columns?: string[];
|
|
60
|
+
children: React__default.ReactNode;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Wraps a data-bound component and registers it with the DataInspector overlay.
|
|
64
|
+
* When no DataInspector/InspectableRegistry ancestor exists, renders as a plain div
|
|
65
|
+
* with no overhead.
|
|
66
|
+
*/
|
|
67
|
+
declare function Inspectable({ label, currentSource, data, columns, children, }: InspectableProps): react_jsx_runtime.JSX.Element;
|
|
68
|
+
|
|
69
|
+
interface DataInspectorProps {
|
|
70
|
+
children: React__default.ReactNode;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Dev-mode overlay that wraps your app in an InspectableRegistry and provides
|
|
74
|
+
* a floating toggle + inspector modal for data migration.
|
|
75
|
+
* Renders the registry context so <Inspectable> children can register.
|
|
76
|
+
*/
|
|
77
|
+
declare function DataInspector({ children }: DataInspectorProps): react_jsx_runtime.JSX.Element;
|
|
78
|
+
|
|
79
|
+
type MatchConfidence = "exact" | "fuzzy" | "manual";
|
|
80
|
+
interface FieldMatch {
|
|
81
|
+
column: string;
|
|
82
|
+
suggestedField: SemanticField | null;
|
|
83
|
+
confidence: MatchConfidence;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Match an array of column names against the semantic layer field catalog.
|
|
87
|
+
* Uses three layers: exact name match, normalized match, then display name match.
|
|
88
|
+
*/
|
|
89
|
+
declare function matchFields(columns: string[], catalog: SemanticField[]): FieldMatch[];
|
|
90
|
+
|
|
91
|
+
interface FieldMapping {
|
|
92
|
+
column: string;
|
|
93
|
+
field: SemanticField | null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Generate a ready-to-paste Lovable prompt that tells the AI how to migrate
|
|
97
|
+
* a component from its current data to a useSemanticQuery() call.
|
|
98
|
+
*/
|
|
99
|
+
declare function generateMigrationPrompt(componentLabel: string, mappings: FieldMapping[]): string;
|
|
100
|
+
|
|
101
|
+
export { AdminDashboard, type AdminDashboardProps, DataCatalog, type DataCatalogProps, DataInspector, type DataInspectorProps, type FieldMapping, type FieldMatch, Inspectable, type InspectableProps, type MatchConfidence, MetricPicker, type MetricPickerProps, ResultsTable, type ResultsTableProps, generateMigrationPrompt, matchFields };
|