exploreda 0.0.5 → 0.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/README.md +144 -0
- package/dist/ExplorEda.cjs +4608 -10858
- package/dist/ExplorEda.cjs.map +1 -1
- package/dist/ExplorEda.css +2332 -1653
- package/dist/ExplorEda.css.map +1 -1
- package/dist/ExplorEda.d.cts +125 -278
- package/dist/ExplorEda.d.ts +125 -278
- package/dist/ExplorEda.js +4521 -10782
- package/dist/ExplorEda.js.map +1 -1
- package/dist/calculations.cjs +18 -0
- package/dist/calculations.cjs.map +1 -0
- package/dist/calculations.d.cts +63 -0
- package/dist/calculations.d.ts +63 -0
- package/dist/calculations.js +3 -0
- package/dist/calculations.js.map +1 -0
- package/dist/charts/bar.cjs +27 -0
- package/dist/charts/bar.cjs.map +1 -0
- package/dist/charts/bar.d.cts +2 -0
- package/dist/charts/bar.d.ts +2 -0
- package/dist/charts/bar.js +18 -0
- package/dist/charts/bar.js.map +1 -0
- package/dist/charts/box-plot.cjs +26 -0
- package/dist/charts/box-plot.cjs.map +1 -0
- package/dist/charts/box-plot.d.cts +2 -0
- package/dist/charts/box-plot.d.ts +2 -0
- package/dist/charts/box-plot.js +17 -0
- package/dist/charts/box-plot.js.map +1 -0
- package/dist/charts/color-legend.cjs +22 -0
- package/dist/charts/color-legend.cjs.map +1 -0
- package/dist/charts/color-legend.d.cts +2 -0
- package/dist/charts/color-legend.d.ts +2 -0
- package/dist/charts/color-legend.js +13 -0
- package/dist/charts/color-legend.js.map +1 -0
- package/dist/charts/data-table.cjs +22 -0
- package/dist/charts/data-table.cjs.map +1 -0
- package/dist/charts/data-table.d.cts +2 -0
- package/dist/charts/data-table.d.ts +2 -0
- package/dist/charts/data-table.js +13 -0
- package/dist/charts/data-table.js.map +1 -0
- package/dist/charts/line.cjs +30 -0
- package/dist/charts/line.cjs.map +1 -0
- package/dist/charts/line.d.cts +2 -0
- package/dist/charts/line.d.ts +2 -0
- package/dist/charts/line.js +17 -0
- package/dist/charts/line.js.map +1 -0
- package/dist/charts/markdown.cjs +16 -0
- package/dist/charts/markdown.cjs.map +1 -0
- package/dist/charts/markdown.css +77 -0
- package/dist/charts/markdown.css.map +1 -0
- package/dist/charts/markdown.d.cts +2 -0
- package/dist/charts/markdown.d.ts +2 -0
- package/dist/charts/markdown.js +7 -0
- package/dist/charts/markdown.js.map +1 -0
- package/dist/charts/pivot-table.cjs +23 -0
- package/dist/charts/pivot-table.cjs.map +1 -0
- package/dist/charts/pivot-table.d.cts +2 -0
- package/dist/charts/pivot-table.d.ts +2 -0
- package/dist/charts/pivot-table.js +14 -0
- package/dist/charts/pivot-table.js.map +1 -0
- package/dist/charts/row.cjs +27 -0
- package/dist/charts/row.cjs.map +1 -0
- package/dist/charts/row.d.cts +6 -0
- package/dist/charts/row.d.ts +6 -0
- package/dist/charts/row.js +18 -0
- package/dist/charts/row.js.map +1 -0
- package/dist/charts/scatter.cjs +24 -0
- package/dist/charts/scatter.cjs.map +1 -0
- package/dist/charts/scatter.d.cts +2 -0
- package/dist/charts/scatter.d.ts +2 -0
- package/dist/charts/scatter.js +15 -0
- package/dist/charts/scatter.js.map +1 -0
- package/dist/charts/summary-table.cjs +19 -0
- package/dist/charts/summary-table.cjs.map +1 -0
- package/dist/charts/summary-table.d.cts +2 -0
- package/dist/charts/summary-table.d.ts +2 -0
- package/dist/charts/summary-table.js +10 -0
- package/dist/charts/summary-table.js.map +1 -0
- package/dist/charts/three-d-scatter.cjs +24 -0
- package/dist/charts/three-d-scatter.cjs.map +1 -0
- package/dist/charts/three-d-scatter.d.cts +6 -0
- package/dist/charts/three-d-scatter.d.ts +6 -0
- package/dist/charts/three-d-scatter.js +15 -0
- package/dist/charts/three-d-scatter.js.map +1 -0
- package/dist/chunk-3PGYFLE3.cjs +499 -0
- package/dist/chunk-3PGYFLE3.cjs.map +1 -0
- package/dist/chunk-4HNDKMWF.js +167 -0
- package/dist/chunk-4HNDKMWF.js.map +1 -0
- package/dist/chunk-4QNENKTV.cjs +1214 -0
- package/dist/chunk-4QNENKTV.cjs.map +1 -0
- package/dist/chunk-54M32JJB.js +132 -0
- package/dist/chunk-54M32JJB.js.map +1 -0
- package/dist/chunk-5B23JVH3.cjs +2238 -0
- package/dist/chunk-5B23JVH3.cjs.map +1 -0
- package/dist/chunk-5LH6NSNL.js +456 -0
- package/dist/chunk-5LH6NSNL.js.map +1 -0
- package/dist/chunk-6DOKKCJ5.cjs +313 -0
- package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
- package/dist/chunk-6HZX5CBT.cjs +1074 -0
- package/dist/chunk-6HZX5CBT.cjs.map +1 -0
- package/dist/chunk-6U5DOIQM.js +1071 -0
- package/dist/chunk-6U5DOIQM.js.map +1 -0
- package/dist/chunk-7GBZIK2R.cjs +80 -0
- package/dist/chunk-7GBZIK2R.cjs.map +1 -0
- package/dist/chunk-7PTJNIOD.js +520 -0
- package/dist/chunk-7PTJNIOD.js.map +1 -0
- package/dist/chunk-AHZYQ7FN.js +319 -0
- package/dist/chunk-AHZYQ7FN.js.map +1 -0
- package/dist/chunk-AOODAOL4.cjs +55 -0
- package/dist/chunk-AOODAOL4.cjs.map +1 -0
- package/dist/chunk-ASKFIRMC.cjs +165 -0
- package/dist/chunk-ASKFIRMC.cjs.map +1 -0
- package/dist/chunk-B7OQUBH4.cjs +171 -0
- package/dist/chunk-B7OQUBH4.cjs.map +1 -0
- package/dist/chunk-BIMEHDLB.js +72 -0
- package/dist/chunk-BIMEHDLB.js.map +1 -0
- package/dist/chunk-C62KHV7S.js +1225 -0
- package/dist/chunk-C62KHV7S.js.map +1 -0
- package/dist/chunk-C7GQT65O.cjs +1119 -0
- package/dist/chunk-C7GQT65O.cjs.map +1 -0
- package/dist/chunk-CGDWDV4Z.js +1211 -0
- package/dist/chunk-CGDWDV4Z.js.map +1 -0
- package/dist/chunk-CJQQFNEY.js +69 -0
- package/dist/chunk-CJQQFNEY.js.map +1 -0
- package/dist/chunk-DHYLSXNR.js +964 -0
- package/dist/chunk-DHYLSXNR.js.map +1 -0
- package/dist/chunk-DKFA4KOJ.cjs +87 -0
- package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
- package/dist/chunk-DS5BS7PP.cjs +357 -0
- package/dist/chunk-DS5BS7PP.cjs.map +1 -0
- package/dist/chunk-EGMFQSGK.js +909 -0
- package/dist/chunk-EGMFQSGK.js.map +1 -0
- package/dist/chunk-EU5EFHO5.cjs +53 -0
- package/dist/chunk-EU5EFHO5.cjs.map +1 -0
- package/dist/chunk-FM46QSDM.js +837 -0
- package/dist/chunk-FM46QSDM.js.map +1 -0
- package/dist/chunk-GV2LRR32.cjs +843 -0
- package/dist/chunk-GV2LRR32.cjs.map +1 -0
- package/dist/chunk-H3XKFSA5.cjs +322 -0
- package/dist/chunk-H3XKFSA5.cjs.map +1 -0
- package/dist/chunk-H5AVMMCE.js +347 -0
- package/dist/chunk-H5AVMMCE.js.map +1 -0
- package/dist/chunk-JDMUN4VK.cjs +986 -0
- package/dist/chunk-JDMUN4VK.cjs.map +1 -0
- package/dist/chunk-JNO7OXCC.js +2171 -0
- package/dist/chunk-JNO7OXCC.js.map +1 -0
- package/dist/chunk-JQMG4ZR7.js +111 -0
- package/dist/chunk-JQMG4ZR7.js.map +1 -0
- package/dist/chunk-L2Q2R43U.cjs +118 -0
- package/dist/chunk-L2Q2R43U.cjs.map +1 -0
- package/dist/chunk-LBTZVERO.js +466 -0
- package/dist/chunk-LBTZVERO.js.map +1 -0
- package/dist/chunk-LUUGGTTK.cjs +1227 -0
- package/dist/chunk-LUUGGTTK.cjs.map +1 -0
- package/dist/chunk-MEEPH7ZC.cjs +911 -0
- package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
- package/dist/chunk-MJPDJ5AS.js +184 -0
- package/dist/chunk-MJPDJ5AS.js.map +1 -0
- package/dist/chunk-MJROUIDZ.cjs +219 -0
- package/dist/chunk-MJROUIDZ.cjs.map +1 -0
- package/dist/chunk-MUWSBYJS.js +528 -0
- package/dist/chunk-MUWSBYJS.js.map +1 -0
- package/dist/chunk-NDF5LCST.js +1088 -0
- package/dist/chunk-NDF5LCST.js.map +1 -0
- package/dist/chunk-NGWTPED4.js +311 -0
- package/dist/chunk-NGWTPED4.js.map +1 -0
- package/dist/chunk-PP4VCONW.js +739 -0
- package/dist/chunk-PP4VCONW.js.map +1 -0
- package/dist/chunk-PRMC2A6P.cjs +488 -0
- package/dist/chunk-PRMC2A6P.cjs.map +1 -0
- package/dist/chunk-PST6UU6S.cjs +742 -0
- package/dist/chunk-PST6UU6S.cjs.map +1 -0
- package/dist/chunk-Q7LK2UWH.js +33 -0
- package/dist/chunk-Q7LK2UWH.js.map +1 -0
- package/dist/chunk-SFV5LZPD.js +162 -0
- package/dist/chunk-SFV5LZPD.js.map +1 -0
- package/dist/chunk-SKXGYJJG.cjs +370 -0
- package/dist/chunk-SKXGYJJG.cjs.map +1 -0
- package/dist/chunk-SWLNKY6R.js +477 -0
- package/dist/chunk-SWLNKY6R.js.map +1 -0
- package/dist/chunk-TGVLNHUB.cjs +483 -0
- package/dist/chunk-TGVLNHUB.cjs.map +1 -0
- package/dist/chunk-TLLRW6S3.js +74 -0
- package/dist/chunk-TLLRW6S3.js.map +1 -0
- package/dist/chunk-TRAIXZ6M.cjs +140 -0
- package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
- package/dist/chunk-U74A5VK5.cjs +74 -0
- package/dist/chunk-U74A5VK5.cjs.map +1 -0
- package/dist/chunk-UAVDLBTA.cjs +74 -0
- package/dist/chunk-UAVDLBTA.cjs.map +1 -0
- package/dist/chunk-UJWS6TRV.js +354 -0
- package/dist/chunk-UJWS6TRV.js.map +1 -0
- package/dist/chunk-UUJMUPB3.cjs +531 -0
- package/dist/chunk-UUJMUPB3.cjs.map +1 -0
- package/dist/chunk-VTKHZIJB.cjs +549 -0
- package/dist/chunk-VTKHZIJB.cjs.map +1 -0
- package/dist/chunk-YXPAWUXO.js +51 -0
- package/dist/chunk-YXPAWUXO.js.map +1 -0
- package/dist/chunk-ZD64SCZB.js +80 -0
- package/dist/chunk-ZD64SCZB.js.map +1 -0
- package/dist/core.cjs +28 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +22 -0
- package/dist/core.d.ts +22 -0
- package/dist/core.js +3 -0
- package/dist/core.js.map +1 -0
- package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
- package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
- package/package.json +32 -52
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/table.tsx","../src/components/charts/DataTable/filteredRows.ts","../src/components/charts/DataTable/DataTableBody.tsx","../src/components/charts/DataTable/components/ColumnFilter.tsx","../src/components/charts/DataTable/DataTableHeader.tsx","../src/components/charts/DataTable/DataTableToolbar.tsx","../src/components/charts/DataTable/DataTable.tsx","../src/components/charts/DataTable/DataTableSettingsPanel.tsx","../src/components/charts/DataTable/definition.ts"],"names":["jsx","index","jsxs","useMemo","e","Fragment","FilterIcon","useState","useRef","useEffect","width"],"mappings":"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","file":"chunk-6U5DOIQM.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div className=\"relative w-full overflow-auto\">\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-0.5 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import { LiveItem } from \"@/hooks/CrossfilterWrapper\";\nimport { IdType } from \"@/providers/DataLayerProvider\";\nimport { applyFilter } from \"@/hooks/applyFilter\";\nimport type { datum } from \"@/types/ChartTypes\";\nimport type { DataTableSettings } from \"./definition\";\n\nexport type DataTableRow = { __ID: IdType; [key: string]: datum };\n\nexport function getFilteredRows(\n data: DataTableRow[],\n liveItems: LiveItem | undefined,\n settings: DataTableSettings\n): DataTableRow[] {\n const ids = new Set(\n liveItems?.items.filter((item) => item.value > 0).map((item) => item.key)\n );\n const rows = data.filter((row) => ids.has(row.__ID));\n const search = settings.globalSearch.toLowerCase();\n\n const filtered = rows.filter((row) => {\n if (\n search &&\n !Object.entries(row).some(\n ([field, value]) =>\n field !== \"__ID\" &&\n value !== null &&\n value !== undefined &&\n String(value).toLowerCase().includes(search)\n )\n ) {\n return false;\n }\n\n return settings.filters.every((filter) =>\n applyFilter(row[filter.field], filter)\n );\n });\n if (settings.sortBy) {\n const field = settings.sortBy;\n filtered.sort((a, b) => {\n const comparison = compareValues(a[field], b[field]);\n return settings.sortDirection === \"desc\" ? -comparison : comparison;\n });\n }\n return filtered;\n}\n\n// Helper function to check if a value is numeric\nfunction isNumeric(value: datum): boolean {\n if (typeof value === \"number\") {\n return true;\n }\n if (typeof value !== \"string\") {\n return false;\n }\n return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n}\n\n// Helper function to compare values with natural sort\nfunction compareValues(a: datum, b: datum): number {\n if (a == null && b == null) return 0;\n // Handle null/undefined values\n if (a === null || a === undefined) {\n return 1;\n }\n if (b === null || b === undefined) {\n return -1;\n }\n if (a === b) {\n return 0;\n }\n\n // Convert to strings for comparison if not numeric\n const aStr = String(a);\n const bStr = String(b);\n\n // If both values are numeric, compare as numbers\n if (isNumeric(a) && isNumeric(b)) {\n return Number(a) - Number(b);\n }\n\n // For strings, use localeCompare for natural sort\n return aStr.localeCompare(bStr, undefined, { numeric: true });\n}\n","import { CalculatedFieldBadge } from \"@/components/calculations/CalculatedFieldBadge\";\nimport { useMemo } from \"react\";\nimport { TableBody, TableCell, TableRow } from \"@/components/ui/table\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\n\nimport { DataTableSettings } from \"./definition\";\nimport { DataTableRow, getFilteredRows } from \"./filteredRows\";\n\ninterface DataTableBodyProps {\n settings: DataTableSettings;\n rows?: DataTableRow[];\n scrollTop?: number;\n viewportHeight?: number;\n}\n\n// Helper function to check if a row matches the global search\nexport function DataTableBody({\n settings,\n rows,\n scrollTop = 0,\n viewportHeight = 400,\n}: DataTableBodyProps) {\n const calculations = useDataLayer((state) => state.calculations) ?? [];\n const manager = useDataLayer((state) => state.calculationManager);\n const data = useDataLayer((state) => state.data);\n const formatFieldValue = useDataLayer((state) => state.formatFieldValue);\n const fieldSettings = useDataLayer((state) => state.fieldSettings);\n const format =\n formatFieldValue ?? ((_: string, value: unknown) => String(value ?? \"—\"));\n void fieldSettings;\n const liveItems = useDataLayer((state) => state.getLiveItems(settings));\n\n const filteredByColumns = useMemo(\n () => rows ?? getFilteredRows(data, liveItems, settings),\n [rows, data, liveItems, settings]\n );\n\n const sortedData = filteredByColumns;\n\n // Fixed-height rows keep the scroll position stable. Render one viewport plus overscan.\n const start = Math.min(\n Math.max(0, Math.floor((scrollTop - 36) / 30) - 6),\n Math.max(0, sortedData.length - 1)\n );\n const end = Math.min(\n sortedData.length,\n start + Math.ceil(viewportHeight / 30) + 12\n );\n const visibleRows = sortedData.slice(start, end);\n const spacer = (count: number, key: string) =>\n count > 0 && (\n <tr key={key} aria-hidden=\"true\" className=\"eda-table-spacer\">\n <td\n colSpan={settings.columns.length}\n style={{ height: count * 30, padding: 0, border: 0 }}\n />\n </tr>\n );\n\n return (\n <TableBody>\n {spacer(start, \"before\")}\n {visibleRows.length > 0 ? (\n visibleRows.map((row, index) => (\n <TableRow key={String(row.__ID)} aria-rowindex={start + index + 2}>\n {settings.columns.map((column, index) => (\n <TableCell\n key={column.id}\n className={\n index === 0 ? \"sticky left-0 z-10 bg-background\" : \"\"\n }\n style={{\n width: column.width,\n textAlign:\n typeof row[column.field] === \"number\" ? \"right\" : \"left\",\n }}\n >\n {calculations.some(\n (calc) => calc.resultColumnName === column.field\n ) ? (\n <CalculatedFieldBadge field={column.field} rowId={row.__ID}>\n {manager?.getErrors(column.field).has(row.__ID)\n ? \"Error\"\n : format(column.field, row[column.field])}\n </CalculatedFieldBadge>\n ) : (\n format(column.field, row[column.field])\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={settings.columns.length} className=\"text-center\">\n No rows match the current filters.\n </TableCell>\n </TableRow>\n )}\n {spacer(sortedData.length - end, \"after\")}\n </TableBody>\n );\n}\n","import {\n categoryEqual,\n categoryIncludes,\n categoryKey,\n categoryLabel,\n} from \"@/lib/categories\";\nimport { Input } from \"@/components/ui/input\";\nimport { Button } from \"@/components/ui/button\";\nimport type { FieldProfile } from \"@/lib/fieldProfiles\";\nimport type { datum } from \"@/types/ChartTypes\";\nimport type { Filter, TextFilter } from \"@/types/FilterTypes\";\nimport { FilterX } from \"lucide-react\";\n\nconst MAX_VALUE_FILTER_OPTIONS = 10;\n\ninterface ColumnFilterProps {\n columnId: string;\n columnLabel: string;\n profile: FieldProfile;\n filter?: Filter;\n onChange: (columnId: string, filter?: Filter) => void;\n onClear: () => void;\n local?: boolean;\n}\n\nexport function ColumnFilter({\n columnId,\n columnLabel,\n profile,\n filter,\n onChange,\n onClear,\n local = false,\n}: ColumnFilterProps) {\n const updateRange = (\n type: \"range\" | \"date-range\",\n key: \"min\" | \"max\",\n raw: string\n ) => {\n const current =\n filter?.type === type ? filter : { type, field: profile.name };\n const value = raw === \"\" ? undefined : type === \"range\" ? Number(raw) : raw;\n if (value !== undefined && type === \"range\" && !Number.isFinite(value)) {\n return;\n }\n const next = { ...current, [key]: value } as Filter;\n if (\n (next.type === \"range\" || next.type === \"date-range\") &&\n next.min === undefined &&\n next.max === undefined\n ) {\n onChange(columnId);\n } else {\n onChange(columnId, next);\n }\n };\n\n const updateValues = (value: datum, checked: boolean) => {\n const selected = filter?.type === \"value\" ? filter.values : [];\n const next = checked\n ? [...selected, value]\n : selected.filter((item) => !categoryEqual(item, value));\n onChange(\n columnId,\n next.length > 0\n ? { type: \"value\", field: profile.name, values: next }\n : undefined\n );\n };\n\n const textFilter: TextFilter =\n filter?.type === \"text\"\n ? filter\n : { type: \"text\", field: profile.name, operator: \"contains\", value: \"\" };\n const rangeFilter = filter?.type === \"range\" ? filter : undefined;\n const dateFilter = filter?.type === \"date-range\" ? filter : undefined;\n const lowCardinality =\n profile.dataType === \"boolean\" ||\n (profile.dataType === \"categorical\" &&\n profile.uniqueCount <= MAX_VALUE_FILTER_OPTIONS);\n const updateText = (next: TextFilter) =>\n onChange(columnId, next.value === \"\" ? undefined : next);\n\n return (\n <div\n className=\"grid w-64 max-w-full gap-3 text-sm\"\n onClick={(event) => event.stopPropagation()}\n >\n <div>\n <h3 className=\"font-semibold\">Filter {columnLabel}</h3>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {local ? \"Filters only this table.\" : \"Filters all charts and rows.\"}{\" \"}\n Changes apply immediately.\n </p>\n </div>\n {lowCardinality ? (\n <div className=\"flex max-h-56 flex-col gap-2 overflow-auto py-1\">\n {(profile.categories?.distribution ?? []).map(({ value }) => {\n const label = categoryLabel(value);\n return (\n <label\n key={categoryKey(value)}\n className=\"flex items-center gap-2 text-sm\"\n >\n <input\n type=\"checkbox\"\n checked={\n filter?.type === \"value\" &&\n categoryIncludes(filter.values, value)\n }\n onChange={(event) =>\n updateValues(value, event.currentTarget.checked)\n }\n />\n {label}\n </label>\n );\n })}\n {profile.nullCount > 0 && (\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={\n filter?.type === \"value\" &&\n filter.values.some((item) => item == null)\n }\n onChange={(event) =>\n updateValues(null, event.currentTarget.checked)\n }\n />\n Missing\n </label>\n )}\n </div>\n ) : profile.dataType === \"numeric\" ? (\n <div className=\"grid gap-3\">\n <label className=\"grid gap-1 text-xs\">\n Minimum (inclusive)\n <Input\n type=\"number\"\n aria-label={`Minimum ${columnLabel}`}\n placeholder=\"Min\"\n value={rangeFilter?.min ?? \"\"}\n onChange={(event) =>\n updateRange(\"range\", \"min\", event.target.value)\n }\n className=\"h-8 w-full\"\n />\n </label>\n <label className=\"grid gap-1 text-xs\">\n Maximum (inclusive)\n <Input\n type=\"number\"\n aria-label={`Maximum ${columnLabel}`}\n placeholder=\"Max\"\n value={rangeFilter?.max ?? \"\"}\n onChange={(event) =>\n updateRange(\"range\", \"max\", event.target.value)\n }\n className=\"h-8 w-full\"\n />\n </label>\n </div>\n ) : profile.dataType === \"datetime\" ? (\n <div className=\"grid gap-3\">\n <label className=\"grid gap-1 text-xs\">\n From (inclusive)\n <Input\n type=\"date\"\n aria-label={`Start date ${columnLabel}`}\n value={dateFilter?.min ?? \"\"}\n onInput={(event) =>\n updateRange(\"date-range\", \"min\", event.currentTarget.value)\n }\n className=\"h-8 w-full\"\n />\n </label>\n <label className=\"grid gap-1 text-xs\">\n Through (inclusive)\n <Input\n type=\"date\"\n aria-label={`End date ${columnLabel}`}\n value={dateFilter?.max ?? \"\"}\n onInput={(event) =>\n updateRange(\"date-range\", \"max\", event.currentTarget.value)\n }\n className=\"h-8 w-full\"\n />\n </label>\n </div>\n ) : (\n <>\n <label className=\"grid gap-1 text-xs\">\n Match\n <select\n aria-label={`Text operator ${columnLabel}`}\n value={textFilter.operator}\n onChange={(event) =>\n updateText({\n ...textFilter,\n operator: event.target.value as TextFilter[\"operator\"],\n })\n }\n className=\"h-8 rounded-md border bg-transparent px-2 text-sm\"\n >\n <option value=\"contains\">Contains</option>\n <option value=\"equals\">Equals</option>\n <option value=\"startsWith\">Starts with</option>\n <option value=\"endsWith\">Ends with</option>\n </select>\n </label>\n <label className=\"grid gap-1 text-xs\">\n Text\n <Input\n aria-label={`Filter text ${columnLabel}`}\n placeholder={`Filter ${columnLabel}...`}\n value={textFilter.value}\n onChange={(event) =>\n updateText({ ...textFilter, value: event.target.value })\n }\n className=\"h-8 w-full\"\n />\n </label>\n </>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-self-start\"\n aria-label={`Clear filter for ${columnLabel}`}\n onClick={onClear}\n >\n <FilterX className=\"h-4 w-4\" /> Clear filter\n </Button>\n </div>\n );\n}\n","import { CalculatedFieldBadge } from \"@/components/calculations/CalculatedFieldBadge\";\nimport { ActionTooltip } from \"@/components/ui/tooltip\";\nimport { Button } from \"@/components/ui/button\";\nimport { TableHead, TableHeader, TableRow } from \"@/components/ui/table\";\nimport { buildFieldProfile, type FieldProfile } from \"@/lib/fieldProfiles\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { Filter } from \"@/types/FilterTypes\";\nimport {\n ChevronDown,\n ChevronUp,\n Filter as FilterIcon,\n Settings2,\n} from \"lucide-react\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { ColumnFilter } from \"./components/ColumnFilter\";\nimport { DataTableSettings } from \"./definition\";\nimport { FieldInspector } from \"@/components/SummaryTable/components/FieldInspector\";\n\ninterface DataTableHeaderProps {\n settings: DataTableSettings;\n onSettingsChange?: (settings: Partial<DataTableSettings>) => void;\n localFilters?: boolean;\n onColumnResize?: (id: string, width: number | null) => void;\n}\n\nexport function DataTableHeader({\n settings,\n onSettingsChange,\n onColumnResize,\n localFilters = false,\n}: DataTableHeaderProps) {\n const { columns, sortBy, sortDirection, filters } = settings;\n const updateChart = useDataLayer((state) => state.updateChart);\n const update =\n onSettingsChange ??\n ((next: Partial<DataTableSettings>) => updateChart(settings.id, next));\n const fieldProfiles = useDataLayer((state) => state.fieldProfiles) ?? [];\n const calculations = useDataLayer((state) => state.calculations) ?? [];\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n const fieldSettings = useDataLayer((state) => state.fieldSettings);\n const label = getFieldLabel ?? ((field: string) => field);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const nonce = useDataLayer((state) => state.nonce);\n const profiles = useMemo(\n () => [\n ...fieldProfiles,\n ...calculations\n .filter((calc) =>\n columns.some((column) => column.field === calc.resultColumnName)\n )\n .map((calc) =>\n buildFieldProfile(\n calc.resultColumnName,\n getColumnData(calc.resultColumnName)\n )\n ),\n ],\n [fieldProfiles, calculations, columns, getColumnData, nonce, fieldSettings]\n );\n const [activeFilter, setActiveFilter] = useState<string | null>(null);\n const [resizingColumn, setResizingColumn] = useState<string | null>(null);\n const [tempWidths, setTempWidths] = useState<Record<string, number>>({});\n const resizeCleanup = useRef<(() => void) | null>(null);\n\n useEffect(() => () => resizeCleanup.current?.(), []);\n\n const handleSort = (field: string) => {\n if (sortBy === field) {\n // Toggle sort direction\n update({\n sortDirection: sortDirection === \"asc\" ? \"desc\" : \"asc\",\n });\n } else {\n // Set new sort column\n update({\n sortBy: field,\n sortDirection: \"asc\",\n });\n }\n };\n\n const handleFilterChange = (columnId: string, filter?: Filter) => {\n const column = columns.find((col) => col.id === columnId);\n if (!column) {\n return;\n }\n\n const newFilters = filters.filter((f: Filter) => f.field !== column.field);\n if (filter) {\n newFilters.push({ ...filter, field: column.field });\n }\n\n update({\n filters: newFilters,\n });\n };\n\n const handleFilterClear = (columnId: string) => {\n const column = columns.find((col) => col.id === columnId);\n if (!column) {\n return;\n }\n\n const newFilters = filters.filter((f: Filter) => f.field !== column.field);\n\n update({\n filters: newFilters,\n });\n };\n\n const handleResizeStart = (e: React.PointerEvent, columnId: string) => {\n e.preventDefault();\n e.stopPropagation();\n e.currentTarget.setPointerCapture?.(e.pointerId);\n resizeCleanup.current?.();\n setResizingColumn(columnId);\n\n const startX = e.clientX;\n const column = columns.find((col) => col.id === columnId);\n const startWidth =\n e.currentTarget.parentElement?.getBoundingClientRect().width ||\n column?.width ||\n 120;\n let width = startWidth;\n\n const handleMouseMove = (e: PointerEvent) => {\n width = Math.max(50, startWidth + e.clientX - startX);\n setTempWidths((prev) => ({ ...prev, [columnId]: width }));\n onColumnResize?.(columnId, width);\n };\n\n const handleCancel = () => resizeCleanup.current?.();\n const handleMouseUp = () => {\n const newColumns = columns.map((col) =>\n col.id === columnId ? { ...col, width } : col\n );\n update({ columns: newColumns });\n resizeCleanup.current = null;\n setResizingColumn(null);\n setTempWidths({});\n onColumnResize?.(columnId, null);\n window.removeEventListener(\"pointermove\", handleMouseMove);\n window.removeEventListener(\"pointerup\", handleMouseUp);\n window.removeEventListener(\"pointercancel\", handleCancel);\n };\n\n resizeCleanup.current = () => {\n window.removeEventListener(\"pointermove\", handleMouseMove);\n window.removeEventListener(\"pointerup\", handleMouseUp);\n window.removeEventListener(\"pointercancel\", handleCancel);\n setResizingColumn(null);\n setTempWidths({});\n onColumnResize?.(columnId, null);\n resizeCleanup.current = null;\n };\n\n window.addEventListener(\"pointermove\", handleMouseMove);\n window.addEventListener(\"pointerup\", handleMouseUp);\n window.addEventListener(\"pointercancel\", handleCancel);\n };\n\n return (\n <>\n <TableHeader>\n <TableRow>\n {columns.map((column, index) => {\n const profile = profiles.find(\n (fieldProfile: FieldProfile) => fieldProfile.name === column.field\n ) ?? {\n name: column.field,\n dataType: \"categorical\" as const,\n totalCount: 0,\n uniqueCount: 11,\n nullCount: 0,\n };\n const filter = filters.find(\n (f: Filter) => f.field === column.field\n );\n\n return (\n <TableHead\n key={column.id}\n className={`relative select-none ${index === 0 ? \"sticky left-0 z-20 bg-background\" : \"\"}`}\n style={{\n width:\n resizingColumn === column.id\n ? tempWidths[column.id] || column.width\n : column.width,\n }}\n aria-sort={\n sortBy === column.field\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n }\n >\n <div className=\"eda-column-heading\">\n <button\n type=\"button\"\n className=\"flex min-w-0 flex-1 items-center gap-1 text-left\"\n aria-label={`Sort by ${column.field}`}\n onClick={() => handleSort(column.field)}\n >\n <span className=\"truncate\">{label(column.field)}</span>\n {sortBy === column.field &&\n (sortDirection === \"asc\" ? (\n <ChevronUp className=\"h-4 w-4\" />\n ) : (\n <ChevronDown className=\"h-4 w-4\" />\n ))}\n </button>\n <div className=\"eda-column-actions\">\n <CalculatedFieldBadge field={column.field} />\n <FieldInspector field={column.field}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n aria-label={`Inspect ${column.field}`}\n >\n <Settings2 className=\"h-3.5 w-3.5\" />\n </Button>\n </FieldInspector>\n <Popover\n open={activeFilter === column.id}\n onOpenChange={(open) =>\n setActiveFilter(open ? column.id : null)\n }\n >\n <ActionTooltip content={`Filter ${label(column.field)}`}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={`eda-column-filter ${filter ? \"is-active\" : \"\"}`}\n aria-label={`Filter ${column.field}`}\n aria-expanded={activeFilter === column.id}\n onClick={(event) => {\n event.stopPropagation();\n setActiveFilter(\n activeFilter === column.id ? null : column.id\n );\n }}\n >\n <FilterIcon className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n </ActionTooltip>\n <PopoverContent\n className=\"w-auto max-w-[calc(100vw-24px)]\"\n align=\"start\"\n collisionPadding={12}\n >\n <ColumnFilter\n local={localFilters}\n columnId={column.id}\n columnLabel={label(column.field)}\n profile={profile}\n filter={filter}\n onChange={handleFilterChange}\n onClear={() => handleFilterClear(column.id)}\n />\n </PopoverContent>\n </Popover>\n </div>\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${column.field} column`}\n className=\"eda-column-resize\"\n data-resizing={resizingColumn === column.id}\n tabIndex={0}\n aria-valuemin={50}\n aria-valuenow={tempWidths[column.id] ?? column.width ?? 120}\n onKeyDown={(event) => {\n if (\n event.key !== \"ArrowLeft\" &&\n event.key !== \"ArrowRight\"\n ) {\n return;\n }\n event.preventDefault();\n const width = Math.max(\n 50,\n event.currentTarget.parentElement!.getBoundingClientRect()\n .width + (event.key === \"ArrowRight\" ? 16 : -16)\n );\n update({\n columns: columns.map((item) =>\n item.id === column.id ? { ...item, width } : item\n ),\n });\n }}\n onPointerDown={(e) => handleResizeStart(e, column.id)}\n />\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n </>\n );\n}\n","import { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Columns3, Download, Search, X } from \"lucide-react\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { DataTableSettings } from \"./definition\";\nimport { DataTableRow, getFilteredRows } from \"./filteredRows\";\nimport { useState } from \"react\";\nimport { ActionTooltip } from \"@/components/ui/tooltip\";\nimport { FieldMetadata, resolveFieldProfile } from \"@/components/FieldMetadata\";\n\ninterface DataTableToolbarProps {\n settings: DataTableSettings;\n rows?: DataTableRow[];\n onSettingsChange?: (settings: Partial<DataTableSettings>) => void;\n compact?: boolean;\n localFilters?: boolean;\n}\n\nexport function DataTableToolbar({\n settings,\n rows,\n onSettingsChange,\n compact = false,\n localFilters = false,\n}: DataTableToolbarProps) {\n const [fieldSearch, setFieldSearch] = useState(\"\");\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const fieldProfiles = useDataLayer((state) => state.fieldProfiles);\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n const updateChart = useDataLayer((state) => state.updateChart);\n const data = useDataLayer((state) => state.data);\n const liveItems = useDataLayer((state) => state.getLiveItems(settings));\n const getColumnNames = useDataLayer((state) => state.getColumnNames);\n\n const filteredData = rows ?? getFilteredRows(data, liveItems, settings);\n const handleSearch = (globalSearch: string) => {\n if (onSettingsChange) onSettingsChange({ globalSearch });\n else updateChart(settings.id, { globalSearch });\n };\n\n const handleExport = () => {\n const csvContent = toTableCsv(\n filteredData,\n settings.columns.map((column) => column.field)\n );\n const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8;\" });\n const link = document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n link.setAttribute(\"href\", url);\n link.setAttribute(\n \"download\",\n `table-export-${new Date().toISOString()}.csv`\n );\n link.style.visibility = \"hidden\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n const search = (\n <div className=\"eda-table-search relative min-w-0\">\n <Input\n className=\"h-8 text-xs\"\n placeholder=\"Search this table…\"\n aria-label=\"Search table\"\n value={settings.globalSearch}\n onChange={(event) => handleSearch(event.target.value)}\n />\n {settings.globalSearch && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-0 top-0 h-8 w-8\"\n aria-label=\"Clear table search\"\n onClick={() => handleSearch(\"\")}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n );\n\n return (\n <div\n className={compact ? \"eda-table-toolbar-compact\" : \"eda-table-toolbar\"}\n >\n {!compact && search}\n {localFilters && (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"eda-columns-trigger\"\n aria-label=\"Choose visible columns\"\n >\n <Columns3 className=\"h-3.5 w-3.5\" /> Columns{\" \"}\n <span className=\"tabular-nums\">{settings.columns.length}</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n aria-label=\"Visible columns\"\n className=\"w-96 space-y-3\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"text-sm font-semibold\">Visible columns</h3>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n onSettingsChange?.({\n columns: getColumnNames()\n .filter((field) => field !== \"__ID\")\n .map(\n (field) =>\n settings.columns.find(\n (column) => column.field === field\n ) ?? { id: field, field }\n ),\n })\n }\n >\n Show all\n </Button>\n </div>\n <Input\n aria-label=\"Find columns\"\n placeholder=\"Find a column…\"\n value={fieldSearch}\n onChange={(event) => setFieldSearch(event.target.value)}\n />\n <div className=\"grid max-h-72 gap-1 overflow-y-auto\">\n {getColumnNames()\n .filter(\n (field) =>\n field !== \"__ID\" &&\n field.toLowerCase().includes(fieldSearch.toLowerCase())\n )\n .map((field) => {\n const checked = settings.columns.some(\n (column) => column.field === field\n );\n return (\n <label\n key={field}\n className=\"flex min-w-0 cursor-pointer items-center gap-2 rounded px-2 py-2 hover:bg-muted\"\n >\n <input\n type=\"checkbox\"\n checked={checked}\n aria-label={getFieldLabel(field)}\n onChange={(event) =>\n onSettingsChange?.({\n columns: event.target.checked\n ? [...settings.columns, { id: field, field }]\n : settings.columns.filter(\n (column) => column.field !== field\n ),\n })\n }\n />\n <FieldMetadata\n profile={resolveFieldProfile(\n field,\n fieldProfiles,\n getColumnData\n )}\n label={getFieldLabel(field)}\n compact\n />\n </label>\n );\n })}\n </div>\n </PopoverContent>\n </Popover>\n )}\n <span\n className=\"ml-auto whitespace-nowrap text-muted-foreground tabular-nums\"\n aria-live=\"polite\"\n >\n {filteredData.length.toLocaleString()}{\" \"}\n {filteredData.length === 1 ? \"row\" : \"rows\"}\n </span>\n\n {compact && (\n <Popover>\n <ActionTooltip content=\"Search rows\">\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={\n settings.globalSearch\n ? `Search rows: ${settings.globalSearch}`\n : \"Search rows\"\n }\n className={\n settings.globalSearch ? \"text-primary bg-accent\" : \"\"\n }\n >\n <Search className=\"h-3.5 w-3.5\" />\n </Button>\n </PopoverTrigger>\n </ActionTooltip>\n <PopoverContent\n align=\"end\"\n className=\"eda-table-search-popover w-64 p-2\"\n >\n {search}\n </PopoverContent>\n </Popover>\n )}\n <ActionTooltip content=\"Export rows as CSV\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleExport}\n aria-label=\"Export rows as CSV\"\n >\n <Download className=\"h-3.5 w-3.5\" />\n </Button>\n </ActionTooltip>\n </div>\n );\n}\n\nexport function toTableCsv(rows: DataTableRow[], fields: string[]): string {\n const cell = (value: unknown) => {\n const text = String(value ?? \"\");\n return /[\",\\r\\n]/.test(text) ? `\"${text.replace(/\"/g, '\"\"')}\"` : text;\n };\n return [\n fields.map(cell).join(\",\"),\n ...rows.map((row) => fields.map((field) => cell(row[field])).join(\",\")),\n ].join(\"\\n\");\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { BaseChartProps } from \"@/types/ChartTypes\";\nimport { DataTableBody } from \"./DataTableBody\";\nimport { DataTableHeader } from \"./DataTableHeader\";\nimport { DataTableToolbar } from \"./DataTableToolbar\";\nimport { DataTableSettings } from \"./definition\";\nimport { getFilteredRows, DataTableRow } from \"./filteredRows\";\nimport { getChartSummary } from \"../chartAccessibility\";\n\ninterface DataTableProps extends BaseChartProps {\n settings: DataTableSettings;\n rows?: DataTableRow[];\n onSettingsChange?: (settings: Partial<DataTableSettings>) => void;\n}\n\nexport function DataTable({\n settings,\n height,\n width,\n rows,\n onSettingsChange,\n toolbarTarget,\n}: DataTableProps) {\n const data = useDataLayer((state) => state.data);\n const liveItems = useDataLayer((state) => state.getLiveItems(settings));\n const updateChart = useDataLayer((state) => state.updateChart);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const calculations = useDataLayer((state) => state.calculations);\n const nonce = useDataLayer((state) => state.nonce);\n const resolvedRows = useMemo(() => {\n void nonce;\n const source = rows ?? data;\n if (!calculations.length) {\n return source;\n }\n const columns = calculations.map(\n (calc) =>\n [calc.resultColumnName, getColumnData(calc.resultColumnName)] as const\n );\n return source.map((row) => ({\n ...row,\n ...Object.fromEntries(\n columns.map(([name, values]) => [name, values[row.__ID]])\n ),\n }));\n }, [rows, data, calculations, getColumnData, nonce]);\n const scrollRef = useRef<HTMLDivElement>(null);\n const [scrollTop, setScrollTop] = useState(0);\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n const update =\n onSettingsChange ??\n ((next: Partial<DataTableSettings>) => updateChart(settings.id, next));\n const filteredRows = useMemo(\n () =>\n getFilteredRows(\n resolvedRows,\n rows\n ? {\n items: rows.map((row) => ({ key: row.__ID, value: 1 })),\n nonce: 0,\n }\n : liveItems,\n settings\n ),\n [resolvedRows, rows, liveItems, settings]\n );\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = 0;\n }\n setScrollTop(0);\n }, [\n settings.globalSearch,\n settings.filters,\n settings.sortBy,\n settings.sortDirection,\n filteredRows.length,\n ]);\n\n const toolbar = (\n <DataTableToolbar\n settings={settings}\n rows={filteredRows}\n onSettingsChange={update}\n compact={toolbarTarget !== undefined}\n localFilters={rows !== undefined}\n />\n );\n\n return (\n <div\n className=\"eda-table-view flex min-h-0 flex-col w-full\"\n style={{ height }}\n >\n {toolbarTarget === undefined\n ? toolbar\n : toolbarTarget && createPortal(toolbar, toolbarTarget)}\n <div\n ref={scrollRef}\n className=\"eda-table-scroll relative min-h-0 flex-1 overflow-auto\"\n tabIndex={0}\n aria-label=\"Data rows, scroll to see more\"\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}\n >\n <table\n className=\"eda-data-table border-collapse\"\n aria-rowcount={filteredRows.length + 1}\n style={{\n tableLayout: \"fixed\",\n width: Math.max(\n width,\n settings.columns.reduce(\n (sum, column) =>\n sum +\n (columnWidths[column.id] ??\n column.width ??\n Math.max(110, column.field.length * 7 + 42)),\n 0\n )\n ),\n }}\n >\n <caption className=\"sr-only\">{getChartSummary(settings)}</caption>\n <colgroup>\n {settings.columns.map((column) => (\n <col\n key={column.id}\n style={{\n width:\n columnWidths[column.id] ??\n column.width ??\n Math.max(110, column.field.length * 7 + 42),\n }}\n />\n ))}\n </colgroup>\n <DataTableHeader\n localFilters={rows !== undefined}\n settings={settings}\n onSettingsChange={update}\n onColumnResize={(id, width) =>\n setColumnWidths((current) => {\n const next = { ...current };\n if (width === null) {\n delete next[id];\n } else {\n next[id] = width;\n }\n return next;\n })\n }\n />\n <DataTableBody\n settings={settings}\n rows={filteredRows}\n scrollTop={scrollTop}\n viewportHeight={height - (toolbarTarget === undefined ? 38 : 0)}\n />\n </table>\n </div>\n </div>\n );\n}\n","import { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport MultiSelect, { Option } from \"@/components/ui/multi-select\";\nimport { ChartSettingsPanelProps } from \"@/types/ChartTypes\";\nimport { useColumnNames } from \"../PivotTable/useColumnNames\";\nimport { DataTableSettings } from \"./definition\";\n\nexport function DataTableSettingsPanel({\n settings,\n onSettingsChange,\n}: ChartSettingsPanelProps<DataTableSettings>) {\n const availableFields = useColumnNames();\n\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label>Columns</Label>\n <MultiSelect\n options={availableFields.map((f) => ({\n label: f,\n value: f,\n }))}\n value={settings.columns.map((col) => ({\n label: col.field,\n value: col.field,\n }))}\n onChange={(values: Option[]) =>\n onSettingsChange({\n ...settings,\n columns: values.map(\n (v) =>\n settings.columns.find(\n (column) => column.field === v.value\n ) ?? {\n id: v.value,\n field: v.value,\n }\n ),\n })\n }\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label>Global Search</Label>\n <Input\n placeholder=\"Search all columns...\"\n value={settings.globalSearch}\n onChange={(e) =>\n onSettingsChange({\n ...settings,\n globalSearch: e.target.value,\n })\n }\n />\n </div>\n </div>\n );\n}\n","import { BaseChartSettings, ChartDefinition, datum } from \"@/types/ChartTypes\";\nimport { DEFAULT_CHART_SETTINGS } from \"@/utils/defaultSettings\";\nimport { Table } from \"lucide-react\";\n\nimport { applyFilter } from \"@/hooks/applyFilter\";\nimport { IdType } from \"@/providers/DataLayerProvider\";\nimport { Filter } from \"@/types/FilterTypes\";\nimport { DataTable } from \"./DataTable\";\nimport { DataTableSettingsPanel } from \"./DataTableSettingsPanel\";\n\nexport interface DataTableSettings extends BaseChartSettings {\n type: \"data-table\";\n columns: Array<{\n id: string;\n field: string;\n width?: number;\n }>;\n\n sortBy?: string;\n sortDirection: \"asc\" | \"desc\";\n filters: Filter[];\n globalSearch: string;\n}\n\nexport const dataTableDefinition: ChartDefinition<DataTableSettings> = {\n type: \"data-table\",\n name: \"Data Table\",\n description: \"Interactive data table with sorting and filtering\",\n icon: Table,\n\n component: DataTable,\n settingsPanel: DataTableSettingsPanel,\n\n createDefaultSettings: (layout) => ({\n ...DEFAULT_CHART_SETTINGS,\n id: crypto.randomUUID(),\n type: \"data-table\",\n title: \"Data Table\",\n layout,\n margin: { top: 5, right: 5, bottom: 5, left: 5 },\n columns: [],\n\n sortDirection: \"asc\",\n filters: [],\n globalSearch: \"\",\n }),\n\n validateSettings: (settings) => {\n return settings.columns.length > 0;\n },\n\n getFilterFunction: (\n settings: DataTableSettings,\n fieldGetter: (name: string) => Record<IdType, datum>\n ) => {\n // If no filters are active, return true\n if (settings.filters.length === 0) {\n return () => true;\n }\n\n // Create filter functions for each active filter\n const filterFunctions = settings.filters.map((filter) => {\n const column = settings.columns.find((col) => col.field === filter.field);\n if (!column) {\n return () => true;\n }\n\n const dataHash = fieldGetter(column.field);\n\n return (d: IdType) => {\n const value = dataHash[d];\n return applyFilter(value, filter);\n };\n });\n\n // Combine all filter functions with AND logic\n return (d: IdType) => filterFunctions.every((fn) => fn(d));\n },\n};\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
// src/charts/registry.ts
|
|
6
|
+
function isSettingsForType(settings, type) {
|
|
7
|
+
return settings.type === type;
|
|
8
|
+
}
|
|
9
|
+
function registerable(definition) {
|
|
10
|
+
const component = (props) => {
|
|
11
|
+
if (!isSettingsForType(props.settings, definition.type)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return react.createElement(definition.component, {
|
|
15
|
+
...props,
|
|
16
|
+
settings: props.settings
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const settingsPanel = (props) => {
|
|
20
|
+
if (!isSettingsForType(props.settings, definition.type)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return react.createElement(definition.settingsPanel, {
|
|
24
|
+
...props,
|
|
25
|
+
settings: props.settings
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
...definition,
|
|
30
|
+
component,
|
|
31
|
+
settingsPanel,
|
|
32
|
+
createDefaultSettings: definition.createDefaultSettings,
|
|
33
|
+
validateSettings: (settings) => isSettingsForType(settings, definition.type) && definition.validateSettings(settings),
|
|
34
|
+
getFilterFunction: (settings, fieldGetter) => isSettingsForType(settings, definition.type) ? definition.getFilterFunction(settings, fieldGetter) : () => false
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
var ChartRegistryImpl = class {
|
|
38
|
+
definitions = /* @__PURE__ */ new Map();
|
|
39
|
+
register(definition) {
|
|
40
|
+
if (this.definitions.has(definition.type)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.definitions.set(definition.type, registerable(definition));
|
|
44
|
+
}
|
|
45
|
+
get(type) {
|
|
46
|
+
return this.definitions.get(type);
|
|
47
|
+
}
|
|
48
|
+
getAll() {
|
|
49
|
+
return Array.from(this.definitions.values());
|
|
50
|
+
}
|
|
51
|
+
has(type) {
|
|
52
|
+
return this.definitions.has(type);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
var chartRegistry = new ChartRegistryImpl();
|
|
56
|
+
function registerChart(definition) {
|
|
57
|
+
chartRegistry.register(definition);
|
|
58
|
+
}
|
|
59
|
+
function getChartDefinition(type) {
|
|
60
|
+
const def = chartRegistry.get(type);
|
|
61
|
+
if (!def) {
|
|
62
|
+
throw new Error(`Chart type ${type} not registered`);
|
|
63
|
+
}
|
|
64
|
+
return def;
|
|
65
|
+
}
|
|
66
|
+
function useChartDefinition(type) {
|
|
67
|
+
const definition = chartRegistry.get(type);
|
|
68
|
+
if (!definition) {
|
|
69
|
+
throw new Error(`Chart type ${type} not registered`);
|
|
70
|
+
}
|
|
71
|
+
return definition;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
exports.ChartRegistryImpl = ChartRegistryImpl;
|
|
75
|
+
exports.chartRegistry = chartRegistry;
|
|
76
|
+
exports.getChartDefinition = getChartDefinition;
|
|
77
|
+
exports.registerChart = registerChart;
|
|
78
|
+
exports.useChartDefinition = useChartDefinition;
|
|
79
|
+
//# sourceMappingURL=chunk-7GBZIK2R.cjs.map
|
|
80
|
+
//# sourceMappingURL=chunk-7GBZIK2R.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/registry.ts"],"names":["createElement"],"mappings":"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","file":"chunk-7GBZIK2R.cjs","sourcesContent":["import {\n ChartDefinition,\n ChartSettings,\n ChartType,\n ChartSettingsPanelProps,\n BaseChartProps,\n} from \"@/types/ChartTypes\";\nimport { createElement } from \"react\";\n\nfunction isSettingsForType<T extends ChartSettings>(\n settings: ChartSettings,\n type: T[\"type\"]\n): settings is T {\n return settings.type === type;\n}\n\nfunction registerable<T extends ChartSettings>(\n definition: ChartDefinition<T>\n): ChartDefinition<ChartSettings> {\n const component = (props: BaseChartProps<ChartSettings>) => {\n if (!isSettingsForType<T>(props.settings, definition.type)) {\n return null;\n }\n return createElement(definition.component, {\n ...props,\n settings: props.settings,\n });\n };\n const settingsPanel = (props: ChartSettingsPanelProps<ChartSettings>) => {\n if (!isSettingsForType<T>(props.settings, definition.type)) {\n return null;\n }\n return createElement(definition.settingsPanel, {\n ...props,\n settings: props.settings,\n });\n };\n\n return {\n ...definition,\n component,\n settingsPanel,\n createDefaultSettings: definition.createDefaultSettings,\n validateSettings: (settings) =>\n isSettingsForType<T>(settings, definition.type) &&\n definition.validateSettings(settings),\n getFilterFunction: (settings, fieldGetter) =>\n isSettingsForType<T>(settings, definition.type)\n ? definition.getFilterFunction(settings, fieldGetter)\n : () => false,\n };\n}\n\nexport interface ChartRegistry {\n register<TSettings extends ChartSettings>(\n definition: ChartDefinition<TSettings>\n ): void;\n get(type: ChartType): ChartDefinition<ChartSettings> | undefined;\n getAll(): ChartDefinition<ChartSettings>[];\n has(type: ChartType): boolean;\n}\n\nexport class ChartRegistryImpl implements ChartRegistry {\n private definitions = new Map<ChartType, ChartDefinition<ChartSettings>>();\n\n register<TSettings extends ChartSettings>(\n definition: ChartDefinition<TSettings>\n ): void {\n if (this.definitions.has(definition.type)) {\n return;\n }\n this.definitions.set(definition.type, registerable(definition));\n }\n\n get(type: ChartType): ChartDefinition<ChartSettings> | undefined {\n return this.definitions.get(type);\n }\n\n getAll(): ChartDefinition<ChartSettings>[] {\n return Array.from(this.definitions.values());\n }\n\n has(type: ChartType): boolean {\n return this.definitions.has(type);\n }\n}\n\n// Singleton instance\nexport const chartRegistry = new ChartRegistryImpl();\n\n// Helper functions\nexport function registerChart<TSettings extends ChartSettings>(\n definition: ChartDefinition<TSettings>\n): void {\n chartRegistry.register(definition);\n}\n\nexport function getChartDefinition(\n type: ChartType\n): ChartDefinition<ChartSettings> {\n const def = chartRegistry.get(type);\n if (!def) {\n throw new Error(`Chart type ${type} not registered`);\n }\n return def;\n}\n\nexport function useChartDefinition(type: ChartType) {\n const definition = chartRegistry.get(type);\n\n if (!definition) {\n throw new Error(`Chart type ${type} not registered`);\n }\n\n return definition;\n}\n"]}
|