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/hooks/useCreateCharts.ts","../src/components/SummaryTable/components/ChartActions.tsx","../src/components/SummaryTable/components/FieldDistribution.tsx","../src/components/SummaryTable/components/CompactSummaryTable.tsx","../src/components/charts/SummaryTable/SummaryTable.tsx","../src/components/charts/SummaryTable/SummaryTableSettingsPanel.tsx","../src/components/charts/SummaryTable/definition.ts"],"names":["useDataLayer","getChartDefinition","jsxs","jsx","ActionTooltip","Button","BarChart","Fragment","ScatterChart","Table2","useState","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","binValues","DISTRIBUTION_BINS","width","bars","categoryLabel","ArrowUpDown","ArrowUp","ArrowDown","getChartSummary","FieldMetadata","CalculatedFieldBadge","cn","FieldInspector","Settings2","toast","useMemo","emptyFieldProfile","buildFieldProfile","Download","createPortal","Info","DEFAULT_CHART_SETTINGS"],"mappings":"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","file":"chunk-PST6UU6S.cjs","sourcesContent":["import { getChartDefinition } from \"@/charts/registry\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { ChartLayout, ChartType } from \"@/types/ChartTypes\";\n\nexport function useCreateCharts() {\n const profiles = useDataLayer((s) => s.fieldProfiles);\n const charts = useDataLayer((s) => s.charts);\n const addChart = useDataLayer((s) => s.addChart);\n\n const createChart = (\n type: ChartType,\n field: string,\n initialLayout?: ChartLayout\n ) => {\n const layout = initialLayout ?? {\n x: 0,\n y: Math.max(0, ...charts.map((chart) => chart.layout.y + chart.layout.h)),\n w: 6,\n h: 4,\n };\n\n const definition = getChartDefinition(type);\n if (!definition) {\n throw new Error(`Chart type ${type} not registered`);\n }\n\n const numeric = profiles\n .filter((profile) => profile.dataType === \"numeric\")\n .map((profile) => profile.name);\n const categories = profiles\n .filter((profile) => profile.dataType !== \"numeric\")\n .map((profile) => profile.name);\n const selectedField =\n field ||\n (type === \"row\" ? categories[0] : numeric[0]) ||\n profiles[0]?.name ||\n \"\";\n const settings = definition.createDefaultSettings(layout, selectedField);\n if (settings.type === \"scatter\" || settings.type === \"3d-scatter\") {\n settings.xField = numeric[0] || \"__ID\";\n settings.yField = field || numeric[1] || numeric[0] || \"__ID\";\n settings.xAxisLabel = \"\";\n settings.yAxisLabel = \"\";\n if (settings.type === \"3d-scatter\")\n settings.zField = numeric[2] || numeric[0] || \"__ID\";\n }\n if (settings.type === \"line\") {\n settings.xField = \"__ID\";\n settings.seriesField = selectedField ? [selectedField] : [];\n settings.xAxisLabel = \"\";\n settings.yAxisLabel = \"\";\n }\n if (settings.type === \"data-table\")\n settings.columns = profiles\n .slice(0, 8)\n .map((profile) => ({ id: profile.name, field: profile.name }));\n if (settings.type === \"pivot\") {\n settings.rowFields = categories.slice(0, 1);\n settings.columnField = categories[1] || \"\";\n settings.valueFields = selectedField\n ? [{ field: selectedField, aggregation: \"count\" }]\n : [];\n }\n if (settings.type === \"color-legend\")\n settings.fields = categories.slice(0, 1);\n if (settings.type === \"bar\" || settings.type === \"row\") {\n settings.xAxisLabel = settings.type === \"row\" ? \"Records\" : \"\";\n settings.yAxisLabel = settings.type === \"bar\" ? \"Records\" : \"\";\n }\n if (settings.type === \"boxplot\") settings.yAxisLabel = \"\";\n settings.title = \"\";\n addChart(settings);\n };\n\n return { createChart };\n}\n","import { Button } from \"@/components/ui/button\";\nimport { ActionTooltip } from \"@/components/ui/tooltip\";\nimport { BarChart, ScatterChart, Table2 } from \"lucide-react\";\nimport { useCreateCharts } from \"@/hooks/useCreateCharts\";\n\ninterface ChartActionsProps {\n columnName: string;\n dataType: \"numeric\" | \"categorical\" | \"datetime\" | \"boolean\";\n}\n\nexport function ChartActions({ columnName, dataType }: ChartActionsProps) {\n const { createChart } = useCreateCharts();\n\n return (\n <div className=\"flex gap-1\">\n {dataType === \"categorical\" && (\n <ActionTooltip content=\"Create row chart\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n aria-label={`Create row chart for ${columnName}`}\n onClick={() => createChart(\"row\", columnName)}\n >\n <BarChart className=\"h-4 w-4 rotate-90\" />\n </Button>\n </ActionTooltip>\n )}\n\n {dataType === \"numeric\" && (\n <>\n <ActionTooltip content=\"Create bar chart\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n aria-label={`Create bar chart for ${columnName}`}\n onClick={() => createChart(\"bar\", columnName)}\n >\n <BarChart className=\"h-4 w-4\" />\n </Button>\n </ActionTooltip>\n\n <ActionTooltip content=\"Create scatter plot\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n aria-label={`Create scatter chart for ${columnName}`}\n onClick={() => createChart(\"scatter\", columnName)}\n >\n <ScatterChart className=\"h-4 w-4\" />\n </Button>\n </ActionTooltip>\n </>\n )}\n\n {(dataType === \"categorical\" || dataType === \"datetime\") && (\n <ActionTooltip content=\"Create pivot table\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n aria-label={`Create pivot table for ${columnName}`}\n onClick={() => createChart(\"pivot\", columnName)}\n >\n <Table2 className=\"h-4 w-4\" />\n </Button>\n </ActionTooltip>\n )}\n </div>\n );\n}\n","import { useState, type PointerEvent } from \"react\";\nimport { categoryLabel } from \"@/lib/categories\";\nimport type { FieldProfile } from \"@/lib/fieldProfiles\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { binValues, DISTRIBUTION_BINS } from \"../utils/statisticsCalculator\";\n\nconst WIDTH = 96;\nconst HEIGHT = 20;\nconst SHARE_SEGMENTS = 5;\nconst OTHER_LABEL = \"Other values\";\n\n/** One mark in a sparkline: a histogram bin or a category share. */\nexport type SparkBar = { label: string; count: number; muted?: boolean };\n\nexport type FieldSummary = {\n /** Visual shape of the values. Hidden from assistive technology. */\n graphic: React.ReactNode;\n /** Marks behind the graphic, used for its hover details. */\n bars: SparkBar[];\n /** Low end of a range, such as a minimum or first date. */\n low?: string;\n /** High end of a range, such as a maximum or last date. */\n high?: string;\n /** Text reading that spans the range columns, such as a top value. */\n label?: string;\n /** Name of the trailing statistic, such as \"median\". */\n statLabel?: string;\n /** Value of the trailing statistic. */\n stat?: string;\n /** Full sentence for screen readers. */\n description: string;\n};\n\nconst percent = (share: number) =>\n share > 0 && share < 0.01 ? \"<1%\" : `${Math.round(share * 100)}%`;\n\n/**\n * Wraps a sparkline so hovering a mark names its values and row count.\n * The marks stay hidden from assistive technology; the row already reads the\n * same summary aloud.\n */\nfunction SparkDetails({\n bars,\n total,\n fieldLabel,\n locate,\n children,\n}: {\n bars: SparkBar[];\n total: number;\n fieldLabel: string;\n locate: (fraction: number) => number;\n children: (active: number | undefined) => React.ReactNode;\n}) {\n const [active, setActive] = useState<number>();\n const bar = active === undefined ? undefined : bars[active];\n const onPointerMove = (event: PointerEvent<HTMLSpanElement>) => {\n const box = event.currentTarget.getBoundingClientRect();\n if (box.width <= 0) return;\n const fraction = (event.clientX - box.left) / box.width;\n const index = locate(Math.min(0.9999, Math.max(0, fraction)));\n setActive(index >= 0 && index < bars.length ? index : undefined);\n };\n return (\n <TooltipProvider>\n <Tooltip open={bar !== undefined}>\n <TooltipTrigger asChild>\n <span\n className=\"eda-summary-spark-hit\"\n aria-hidden=\"true\"\n onPointerMove={onPointerMove}\n onPointerLeave={() => setActive(undefined)}\n >\n {children(active)}\n </span>\n </TooltipTrigger>\n {bar && (\n <TooltipContent side=\"top\" collisionPadding={12}>\n <p className=\"text-muted-foreground\">{fieldLabel}</p>\n <p className=\"font-medium\">{bar.label}</p>\n <p className=\"tabular-nums\">\n {bar.count.toLocaleString()} {bar.count === 1 ? \"row\" : \"rows\"}\n {total > 0 && (\n <span className=\"text-muted-foreground\">\n {\" \"}\n · {percent(bar.count / total)}\n </span>\n )}\n </p>\n </TooltipContent>\n )}\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype SparkProps = { bars: SparkBar[]; total: number; fieldLabel: string };\n\nfunction Histogram({ bars, total, fieldLabel }: SparkProps) {\n const peak = Math.max(...bars.map((bar) => bar.count), 1);\n const step = WIDTH / Math.max(1, bars.length);\n const gap = bars.length > 1 ? Math.min(1, step * 0.2) : 0;\n return (\n <SparkDetails\n bars={bars}\n total={total}\n fieldLabel={fieldLabel}\n locate={(fraction) => Math.floor(fraction * bars.length)}\n >\n {(active) => (\n <svg\n className=\"eda-summary-spark\"\n viewBox={`0 0 ${WIDTH} ${HEIGHT}`}\n preserveAspectRatio=\"none\"\n focusable=\"false\"\n >\n {active !== undefined && (\n <rect\n className=\"eda-summary-spark-focus\"\n x={active * step}\n y={0}\n width={step}\n height={HEIGHT}\n />\n )}\n <line\n className=\"eda-summary-spark-base\"\n x1={0}\n x2={WIDTH}\n y1={HEIGHT - 0.5}\n y2={HEIGHT - 0.5}\n />\n {bars.map(({ count }, index) => {\n if (count === 0) return null;\n const height = Math.max(1.5, (count / peak) * (HEIGHT - 1));\n return (\n <rect\n key={index}\n className=\"eda-summary-spark-bar\"\n data-active={index === active || undefined}\n x={index * step + gap / 2}\n y={HEIGHT - height}\n width={Math.max(0.5, step - gap)}\n height={height}\n />\n );\n })}\n </svg>\n )}\n </SparkDetails>\n );\n}\n\nfunction ShareBar({ bars, total, fieldLabel }: SparkProps) {\n const shares = bars.map((bar) => (total > 0 ? bar.count / total : 0));\n const starts = shares.map((_, index) =>\n shares.slice(0, index).reduce((sum, share) => sum + share, 0)\n );\n return (\n <SparkDetails\n bars={bars}\n total={total}\n fieldLabel={fieldLabel}\n locate={(fraction) =>\n starts.findIndex(\n (start, index) =>\n fraction >= start && fraction < start + shares[index]!\n )\n }\n >\n {(active) => (\n <svg\n className=\"eda-summary-spark\"\n viewBox={`0 0 ${WIDTH} ${HEIGHT}`}\n preserveAspectRatio=\"none\"\n focusable=\"false\"\n >\n {bars.map((bar, index) => (\n <rect\n key={index}\n className={\n bar.muted ? \"eda-summary-share-rest\" : \"eda-summary-share\"\n }\n data-rank={index}\n data-active={index === active || undefined}\n x={starts[index]! * WIDTH}\n y={5}\n width={Math.max(0.5, shares[index]! * WIDTH - 1)}\n height={HEIGHT - 10}\n />\n ))}\n </svg>\n )}\n </SparkDetails>\n );\n}\n\nfunction dateBins(profile: FieldProfile) {\n const times: number[] = [];\n let first: { time: number; value: unknown } | undefined;\n let last: { time: number; value: unknown } | undefined;\n for (const { value, count } of profile.categories?.distribution ?? []) {\n const time = Date.parse(String(value));\n if (!Number.isFinite(time)) continue;\n for (let i = 0; i < count; i += 1) times.push(time);\n if (!first || time < first.time) first = { time, value };\n if (!last || time > last.time) last = { time, value };\n }\n if (!first || !last) return undefined;\n times.sort((a, b) => a - b);\n return {\n first: first.value,\n last: last.value,\n firstTime: first.time,\n lastTime: last.time,\n bins: binValues(times, first.time, last.time),\n };\n}\n\n/** Name each bin by the values it covers. */\nexport function labelBins(\n bins: number[],\n min: number,\n max: number,\n label: (value: number) => string\n): SparkBar[] {\n // binValues gives small integer ranges fewer bins, one per value.\n const oneBinPerValue =\n bins.length === 1 ||\n (bins.length < DISTRIBUTION_BINS &&\n Number.isInteger(min) &&\n bins.length === max - min + 1);\n const width = (max - min) / Math.max(1, bins.length);\n return bins.map((count, index) => {\n if (oneBinPerValue) return { label: label(min + index), count };\n const start = label(min + index * width);\n const end = label(\n index === bins.length - 1 ? max : min + (index + 1) * width\n );\n return { label: start === end ? start : `${start} – ${end}`, count };\n });\n}\n\nconst isoDate = (time: number) => new Date(time).toISOString().slice(0, 10);\n\nexport function summarizeField(\n profile: FieldProfile,\n format: (value: unknown) => string,\n fieldLabel = profile.name\n): FieldSummary | undefined {\n const present =\n profile.totalCount - profile.nullCount - (profile.excludedCount ?? 0);\n if (present <= 0) return undefined;\n\n if (profile.statistics) {\n const { min, max, median, bins = [] } = profile.statistics;\n const low = format(min);\n const high = format(max);\n const bars = labelBins(bins, min, max, format);\n const graphic = (\n <Histogram bars={bars} total={present} fieldLabel={fieldLabel} />\n );\n if (min === max) {\n return { graphic, bars, low, description: `Every value is ${low}` };\n }\n return {\n graphic,\n bars,\n low,\n high,\n statLabel: \"median\",\n stat: format(median),\n description: `Range ${low} to ${high}, median ${format(median)}`,\n };\n }\n\n if (profile.dataType === \"datetime\") {\n const dates = dateBins(profile);\n if (dates) {\n const first = format(dates.first);\n const last = format(dates.last);\n const bars = labelBins(\n dates.bins,\n dates.firstTime,\n dates.lastTime,\n isoDate\n );\n return {\n graphic: (\n <Histogram bars={bars} total={present} fieldLabel={fieldLabel} />\n ),\n bars,\n low: first,\n high: first === last ? undefined : last,\n description: `Dates from ${first} to ${last}`,\n };\n }\n }\n\n const top = profile.categories?.topValues ?? [];\n if (!top[0]) return undefined;\n\n if (profile.uniqueCount === present && present > 1) {\n const bars = [\n { label: \"Each value appears once\", count: present, muted: true },\n ];\n return {\n graphic: <ShareBar bars={bars} total={present} fieldLabel={fieldLabel} />,\n bars,\n label: \"All values unique\",\n description: `Every value is unique, for example ${categoryLabel(top[0].value)}`,\n };\n }\n\n const bars: SparkBar[] = top\n .slice(0, SHARE_SEGMENTS)\n .map(({ value, count }) => ({ label: categoryLabel(value), count }));\n const rest = present - bars.reduce((sum, bar) => sum + bar.count, 0);\n if (rest > 0) bars.push({ label: OTHER_LABEL, count: rest, muted: true });\n const leader = categoryLabel(top[0].value);\n const share = percent(top[0].count / present);\n return {\n graphic: <ShareBar bars={bars} total={present} fieldLabel={fieldLabel} />,\n bars,\n label: leader,\n statLabel: \"share\",\n stat: share,\n description: `Most common value ${leader}, ${share} of rows with a value`,\n };\n}\n","import type { CSSProperties } from \"react\";\nimport { CalculatedFieldBadge } from \"@/components/calculations/CalculatedFieldBadge\";\nimport { Button } from \"@/components/ui/button\";\nimport { ArrowDown, ArrowUp, ArrowUpDown, Settings2 } from \"lucide-react\";\nimport { FieldMetadata } from \"@/components/FieldMetadata\";\nimport { ChartActions } from \"./ChartActions\";\nimport { FieldInspector } from \"./FieldInspector\";\nimport { summarizeField, type FieldSummary } from \"./FieldDistribution\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport type { FieldProfile } from \"@/lib/fieldProfiles\";\nimport type { datum } from \"@/types/ChartTypes\";\nimport { cn } from \"@/lib/utils\";\nimport { getChartSummary } from \"../../charts/chartAccessibility\";\nimport type { SummaryTableSettings } from \"../../charts/SummaryTable/definition\";\n\nexport type SummarySortColumn = \"name\" | \"uniqueCount\" | \"nullCount\";\nexport type SummarySort = {\n column: SummarySortColumn | null;\n direction: \"asc\" | \"desc\";\n};\n\ninterface CompactSummaryTableProps {\n data: FieldProfile[];\n onSort: (column: SummarySortColumn) => void;\n sort?: SummarySort;\n settings: SummaryTableSettings;\n}\n\nconst MAX_TRACK = 16;\nconst width = (values: Array<string | undefined>) =>\n Math.min(\n MAX_TRACK,\n Math.max(0, ...values.map((value) => value?.length ?? 0))\n );\n\n/**\n * Size the reading tracks from the longest value in each, so ranges, medians,\n * and shares line up down the table instead of following each row's text.\n */\nfunction readingColumns(summaries: Array<FieldSummary | undefined>) {\n const present = summaries.filter(\n (summary): summary is FieldSummary => summary !== undefined\n );\n const measuredLow = width(present.map((summary) => summary.low));\n const high = width(present.map((summary) => summary.high));\n const label = width(present.map((summary) => summary.label));\n // Top values span the range tracks and truncate past them. A table of only\n // text fields gives the label its own width.\n const low = measuredLow === 0 && high === 0 ? label : measuredLow;\n return {\n \"--eda-summary-low\": `${low}ch`,\n \"--eda-summary-high\": `${high}ch`,\n \"--eda-summary-stat-label\": `${width(present.map((summary) => summary.statLabel))}ch`,\n \"--eda-summary-stat\": `${width(present.map((summary) => summary.stat))}ch`,\n } as CSSProperties;\n}\n\nfunction SortHeader({\n column,\n label,\n sort,\n onSort,\n className,\n}: {\n column: SummarySortColumn;\n label: string;\n sort?: SummarySort;\n onSort: (column: SummarySortColumn) => void;\n className?: string;\n}) {\n const active = sort?.column === column;\n const Icon = !active\n ? ArrowUpDown\n : sort.direction === \"asc\"\n ? ArrowUp\n : ArrowDown;\n return (\n <th\n scope=\"col\"\n className={className}\n aria-sort={\n active\n ? sort.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n }\n >\n <button\n type=\"button\"\n className=\"eda-summary-sort\"\n data-active={active || undefined}\n onClick={() => onSort(column)}\n >\n <span>{label}</span>\n <Icon aria-hidden=\"true\" />\n </button>\n </th>\n );\n}\n\nexport function CompactSummaryTable({\n data,\n onSort,\n sort,\n settings,\n}: CompactSummaryTableProps) {\n const formatValue = useDataLayer((state) => state.formatFieldValue);\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n const label = getFieldLabel ?? ((field: string) => field);\n const rows = data.map((profile) => ({\n profile,\n summary: summarizeField(\n profile,\n (value) => formatValue(profile.name, value as datum),\n label(profile.name)\n ),\n }));\n return (\n <table\n className=\"eda-summary-table\"\n style={readingColumns(rows.map((row) => row.summary))}\n >\n <caption className=\"sr-only\">{getChartSummary(settings)}</caption>\n <colgroup>\n <col className=\"eda-summary-col-field\" />\n <col className=\"eda-summary-col-count\" />\n <col className=\"eda-summary-col-count\" />\n <col />\n <col className=\"eda-summary-col-actions\" />\n </colgroup>\n <thead>\n <tr>\n <SortHeader column=\"name\" label=\"Field\" sort={sort} onSort={onSort} />\n <SortHeader\n column=\"uniqueCount\"\n label=\"Distinct\"\n sort={sort}\n onSort={onSort}\n className=\"eda-summary-num\"\n />\n <SortHeader\n column=\"nullCount\"\n label=\"Missing\"\n sort={sort}\n onSort={onSort}\n className=\"eda-summary-num\"\n />\n <th scope=\"col\">Values</th>\n <th scope=\"col\">\n <span className=\"sr-only\">Actions</span>\n </th>\n </tr>\n </thead>\n <tbody>\n {rows.map(({ profile, summary }) => {\n const fieldLabel = label(profile.name);\n const missingShare =\n profile.totalCount > 0 ? profile.nullCount / profile.totalCount : 0;\n return (\n <tr key={profile.name}>\n <th scope=\"row\" className=\"eda-summary-field\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <FieldMetadata\n profile={profile}\n label={fieldLabel}\n compact\n showDetail={false}\n className=\"min-w-0\"\n />\n <CalculatedFieldBadge field={profile.name} />\n </span>\n </th>\n <td className=\"eda-summary-num\">\n {profile.uniqueCount.toLocaleString()}\n </td>\n <td\n className={cn(\n \"eda-summary-num\",\n profile.nullCount > 0 && \"eda-summary-missing\"\n )}\n >\n {profile.nullCount > 0 ? (\n <>\n {profile.nullCount.toLocaleString()}\n <span className=\"eda-summary-share-label\">\n {missingShare < 0.01\n ? \"<1%\"\n : `${Math.round(missingShare * 100)}%`}\n </span>\n </>\n ) : (\n <>\n <span aria-hidden=\"true\" className=\"text-muted-foreground\">\n –\n </span>\n <span className=\"sr-only\">None</span>\n </>\n )}\n </td>\n <td className=\"eda-summary-values\">\n {summary ? (\n <div className=\"eda-summary-profile\">\n {summary.graphic}\n <span className=\"sr-only\">{summary.description}</span>\n <span aria-hidden=\"true\" className=\"eda-summary-reading\">\n <span className=\"eda-summary-range\">\n {summary.label !== undefined ? (\n <span className=\"eda-summary-label\">\n {summary.label}\n </span>\n ) : (\n <>\n <span className=\"eda-summary-low\">\n {summary.low}\n </span>\n {summary.high !== undefined && (\n <>\n <span className=\"eda-summary-sep\">–</span>\n <span className=\"eda-summary-high\">\n {summary.high}\n </span>\n </>\n )}\n </>\n )}\n </span>\n {summary.stat !== undefined && (\n <span className=\"eda-summary-stat-group\">\n <span className=\"eda-summary-stat-label\">\n {summary.statLabel}\n </span>\n <span className=\"eda-summary-stat\">\n {summary.stat}\n </span>\n </span>\n )}\n </span>\n </div>\n ) : (\n <span className=\"text-muted-foreground\">\n {profile.totalCount === 0\n ? \"No rows in the current filter\"\n : \"No values\"}\n </span>\n )}\n </td>\n <td className=\"eda-summary-actions-cell\">\n <div className=\"eda-summary-actions\">\n <FieldInspector field={profile.name}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`Inspect ${fieldLabel}`}\n >\n <Settings2 />\n </Button>\n </FieldInspector>\n <ChartActions\n columnName={profile.name}\n dataType={profile.dataType}\n />\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n}\n","import { categoryLabel } from \"@/lib/categories\";\nimport { BaseChartProps, datum } from \"@/types/ChartTypes\";\nimport { Button } from \"@/components/ui/button\";\nimport { ActionTooltip } from \"@/components/ui/tooltip\";\nimport {\n buildFieldProfile,\n emptyFieldProfile,\n FieldProfile,\n} from \"@/lib/fieldProfiles\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { Download } from \"lucide-react\";\nimport { useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { toast } from \"sonner\";\nimport {\n CompactSummaryTable,\n type SummarySort,\n type SummarySortColumn,\n} from \"../../SummaryTable/components/CompactSummaryTable\";\nimport type { SummaryTableSettings } from \"./definition\";\n\nconst exportToCSV = (profiles: FieldProfile[]) => {\n const headers = [\n \"Column\",\n \"Type\",\n \"Total\",\n \"Unique\",\n \"Missing\",\n \"Min\",\n \"Max\",\n \"Mean\",\n \"Median\",\n \"StdDev\",\n \"Top Values\",\n ];\n const rows = profiles.map((profile) => [\n profile.name,\n profile.dataType,\n profile.totalCount,\n profile.uniqueCount,\n profile.nullCount,\n profile.statistics?.min ?? \"\",\n profile.statistics?.max ?? \"\",\n profile.statistics?.mean ?? \"\",\n profile.statistics?.median ?? \"\",\n profile.statistics?.stdDev ?? \"\",\n profile.categories?.topValues\n .map((value) => `${categoryLabel(value.value)}(${value.count})`)\n .join(\"; \") ?? \"\",\n ]);\n\n const csvContent = [\n headers.join(\",\"),\n ...rows.map((row) =>\n row.map((cell) => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(\",\")\n ),\n ].join(\"\\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.href = url;\n link.download = \"summary_table.csv\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n toast.success(\"Summary table exported to CSV\");\n};\n\nexport function SummaryTable({\n height,\n settings,\n toolbarTarget,\n}: BaseChartProps<SummaryTableSettings>) {\n const sourceProfiles = useDataLayer((state) => state.fieldProfiles);\n const data = useDataLayer((state) => state.data);\n const calculations = useDataLayer((state) => state.calculations);\n const fieldSettings = useDataLayer((state) => state.fieldSettings);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const crossfilterWrapper = useDataLayer((state) => state.crossfilterWrapper);\n const liveItems = useDataLayer((state) => state.liveItems);\n const chartState = useDataLayer((state) => state.charts);\n const [sortConfig, setSortConfig] = useState<SummarySort>({\n column: null,\n direction: \"asc\",\n });\n\n const allProfiles = useMemo(() => {\n const filteredIds = new Set(\n chartState.length\n ? crossfilterWrapper.getFilteredRowIds()\n : data.map((row) => row.__ID)\n );\n const filteredRows = data.filter((row) => filteredIds.has(row.__ID));\n const profileColumn = (name: string) =>\n Object.fromEntries(\n filteredRows.map((row) => [row.__ID, row[name]])\n ) as Record<number, datum>;\n\n const source = sourceProfiles.map((profile) =>\n filteredRows.length === 0\n ? emptyFieldProfile(profile)\n : buildFieldProfile(\n profile.name,\n profileColumn(profile.name),\n profile.dataType\n )\n );\n const calculated = calculations.map((calculation) => {\n const allColumnData = getColumnData(calculation.resultColumnName);\n const filteredColumnData = Object.fromEntries(\n filteredRows.map((row) => [row.__ID, allColumnData[row.__ID]])\n ) as Record<number, datum>;\n const profile = buildFieldProfile(\n calculation.resultColumnName,\n allColumnData\n );\n return filteredRows.length === 0\n ? emptyFieldProfile(profile)\n : buildFieldProfile(\n calculation.resultColumnName,\n filteredColumnData,\n profile.dataType\n );\n });\n\n return [...source, ...calculated];\n }, [\n sourceProfiles,\n data,\n calculations,\n getColumnData,\n crossfilterWrapper,\n chartState,\n liveItems,\n fieldSettings,\n ]);\n\n const sortedProfiles = useMemo(() => {\n if (!sortConfig.column) {\n return allProfiles;\n }\n\n return [...allProfiles].sort((a, b) => {\n const aValue = a[sortConfig.column!];\n const bValue = b[sortConfig.column!];\n if (aValue === bValue) {\n return 0;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue == null) {\n return -1;\n }\n const result =\n typeof aValue === \"number\" && typeof bValue === \"number\"\n ? aValue - bValue\n : String(aValue).localeCompare(String(bValue));\n return sortConfig.direction === \"asc\" ? result : -result;\n });\n }, [allProfiles, sortConfig]);\n\n // Ascending, then descending, then back to source order.\n const handleSort = (column: SummarySortColumn) => {\n setSortConfig((current) => {\n if (current.column !== column) return { column, direction: \"asc\" };\n if (current.direction === \"asc\") return { column, direction: \"desc\" };\n return { column: null, direction: \"asc\" };\n });\n };\n\n const toolbar = (\n <div className=\"eda-table-toolbar-compact\">\n <span className=\"text-muted-foreground tabular-nums\">\n {(allProfiles[0]?.totalCount ?? 0).toLocaleString()} rows\n </span>\n <ActionTooltip content=\"Export summary as CSV\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Export summary as CSV\"\n onClick={() => exportToCSV(sortedProfiles)}\n >\n <Download className=\"h-3.5 w-3.5\" />\n </Button>\n </ActionTooltip>\n </div>\n );\n\n return (\n <div className=\"eda-summary-view overflow-auto\" style={{ height }}>\n {toolbarTarget === undefined\n ? toolbar\n : toolbarTarget && createPortal(toolbar, toolbarTarget)}\n <CompactSummaryTable\n data={sortedProfiles}\n onSort={handleSort}\n sort={sortConfig}\n settings={settings}\n />\n </div>\n );\n}\n","export function SummaryTableSettingsPanel() {\n // Summary table has no additional settings beyond the base settings\n return null;\n}\n","import { BaseChartSettings, ChartDefinition } from \"@/types/ChartTypes\";\nimport { DEFAULT_CHART_SETTINGS } from \"@/utils/defaultSettings\";\nimport { Info } from \"lucide-react\";\n\nimport { SummaryTable } from \"./SummaryTable\";\nimport { SummaryTableSettingsPanel } from \"./SummaryTableSettingsPanel\";\n\nexport interface SummaryTableSettings extends BaseChartSettings {\n type: \"summary\";\n // Summary table is a simple display of statistics\n // It inherits all base settings and doesn't need additional settings\n}\n\nexport const summaryTableDefinition: ChartDefinition<SummaryTableSettings> = {\n type: \"summary\",\n name: \"Summary Table\",\n description: \"Display summary statistics for your data\",\n icon: Info,\n\n component: SummaryTable,\n settingsPanel: SummaryTableSettingsPanel,\n\n createDefaultSettings: (layout) => ({\n ...DEFAULT_CHART_SETTINGS,\n id: crypto.randomUUID(),\n type: \"summary\",\n title: \"Summary Table\",\n layout,\n margin: { top: 20, right: 20, bottom: 20, left: 20 },\n }),\n\n validateSettings: () => {\n // Summary table is always valid as it shows basic statistics\n return true;\n },\n\n getFilterFunction: () => {\n // Summary table doesn't support filtering\n return () => true;\n },\n};\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { cn } from './chunk-JNO7OXCC.js';
|
|
2
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function Switch({
|
|
6
|
+
className,
|
|
7
|
+
...props
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
SwitchPrimitive.Root,
|
|
11
|
+
{
|
|
12
|
+
"data-slot": "switch",
|
|
13
|
+
className: cn(
|
|
14
|
+
"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 border-transparent shadow-xs transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-hidden focus-visible:outline-1 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:ring-0",
|
|
15
|
+
className
|
|
16
|
+
),
|
|
17
|
+
...props,
|
|
18
|
+
children: /* @__PURE__ */ jsx(
|
|
19
|
+
SwitchPrimitive.Thumb,
|
|
20
|
+
{
|
|
21
|
+
"data-slot": "switch-thumb",
|
|
22
|
+
className: cn(
|
|
23
|
+
"bg-background pointer-events-none block size-4 rounded-full ring-0 shadow-lg transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0"
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { Switch };
|
|
32
|
+
//# sourceMappingURL=chunk-Q7LK2UWH.js.map
|
|
33
|
+
//# sourceMappingURL=chunk-Q7LK2UWH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/switch.tsx"],"names":[],"mappings":";;;;AAKA,SAAS,MAAO,CAAA;AAAA,EACd,SAAA;AAAA,EACA,GAAG;AACL,CAAsD,EAAA;AACpD,EACE,uBAAA,GAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAU,EAAA,QAAA;AAAA,MACV,SAAW,EAAA,EAAA;AAAA,QACT,iaAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAiB,eAAA,CAAA,KAAA;AAAA,QAAhB;AAAA,UACC,WAAU,EAAA,cAAA;AAAA,UACV,SAAW,EAAA,EAAA;AAAA,YACT;AAAA;AACF;AAAA;AACF;AAAA,GACF;AAEJ","file":"chunk-Q7LK2UWH.js","sourcesContent":["import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 border-transparent shadow-xs transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-hidden focus-visible:outline-1 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:ring-0\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background pointer-events-none block size-4 rounded-full ring-0 shadow-lg transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"]}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { CalculatedFieldBadge, FieldMetadata, resolveFieldProfile } from './chunk-NDF5LCST.js';
|
|
2
|
+
import { Command, CommandInput, CommandGroup, CommandEmpty, CommandItem } from './chunk-JQMG4ZR7.js';
|
|
3
|
+
import { Popover, PopoverTrigger, PopoverContent, Label } from './chunk-MJPDJ5AS.js';
|
|
4
|
+
import { Button, cn, useDataLayer } from './chunk-JNO7OXCC.js';
|
|
5
|
+
import { ChevronsUpDown, Check, X } from 'lucide-react';
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
import { CommandList } from 'cmdk';
|
|
8
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
function ComboBox({
|
|
11
|
+
value,
|
|
12
|
+
options,
|
|
13
|
+
onChange,
|
|
14
|
+
optionToString = (option) => String(option),
|
|
15
|
+
optionToNode,
|
|
16
|
+
placeholder = "Select option...",
|
|
17
|
+
className,
|
|
18
|
+
id,
|
|
19
|
+
"aria-label": ariaLabel
|
|
20
|
+
}) {
|
|
21
|
+
const [open, setOpen] = useState(false);
|
|
22
|
+
const renderOption = (option) => {
|
|
23
|
+
if (optionToNode) {
|
|
24
|
+
return optionToNode(option);
|
|
25
|
+
}
|
|
26
|
+
return optionToString(option);
|
|
27
|
+
};
|
|
28
|
+
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
29
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
30
|
+
Button,
|
|
31
|
+
{
|
|
32
|
+
variant: "outline",
|
|
33
|
+
role: "combobox",
|
|
34
|
+
id,
|
|
35
|
+
"aria-label": ariaLabel,
|
|
36
|
+
"aria-expanded": open,
|
|
37
|
+
className: cn("w-full justify-between", className),
|
|
38
|
+
children: [
|
|
39
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: value ? optionToString(value) : placeholder }),
|
|
40
|
+
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
) }),
|
|
44
|
+
/* @__PURE__ */ jsx(PopoverContent, { className: "w-[max(18rem,var(--radix-popover-trigger-width))] p-0", children: /* @__PURE__ */ jsxs(Command, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx(CommandInput, { placeholder }),
|
|
46
|
+
/* @__PURE__ */ jsx(CommandGroup, { children: /* @__PURE__ */ jsxs(CommandList, { className: "max-h-72 overflow-y-auto", children: [
|
|
47
|
+
/* @__PURE__ */ jsx(CommandEmpty, { children: "No options found." }),
|
|
48
|
+
options.map((option, index) => {
|
|
49
|
+
return /* @__PURE__ */ jsxs(
|
|
50
|
+
CommandItem,
|
|
51
|
+
{
|
|
52
|
+
onSelect: () => {
|
|
53
|
+
onChange(option === value ? void 0 : option);
|
|
54
|
+
setOpen(false);
|
|
55
|
+
},
|
|
56
|
+
value: optionToString(option),
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
Check,
|
|
60
|
+
{
|
|
61
|
+
className: cn(
|
|
62
|
+
"mr-2 h-4 w-4",
|
|
63
|
+
value === option ? "opacity-100" : "opacity-0"
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
renderOption(option)
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
index
|
|
71
|
+
);
|
|
72
|
+
})
|
|
73
|
+
] }) })
|
|
74
|
+
] }) })
|
|
75
|
+
] });
|
|
76
|
+
}
|
|
77
|
+
function FieldSelector({
|
|
78
|
+
label,
|
|
79
|
+
value,
|
|
80
|
+
onChange,
|
|
81
|
+
fields,
|
|
82
|
+
placeholder = "Select field",
|
|
83
|
+
allowClear = false
|
|
84
|
+
}) {
|
|
85
|
+
const getColumnNames = useDataLayer((state) => state.getColumnNames);
|
|
86
|
+
const availableFields = fields ?? getColumnNames();
|
|
87
|
+
const calculations = useDataLayer((state) => state.calculations);
|
|
88
|
+
const fieldProfiles = useDataLayer((state) => state.fieldProfiles);
|
|
89
|
+
const getColumnData = useDataLayer((state) => state.getColumnData);
|
|
90
|
+
const getFieldLabel = useDataLayer((state) => state.getFieldLabel);
|
|
91
|
+
const fieldOptions = availableFields.map((field) => ({
|
|
92
|
+
value: field,
|
|
93
|
+
label: field
|
|
94
|
+
}));
|
|
95
|
+
const selectedOption = fieldOptions.find((option) => option.value === value);
|
|
96
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 gap-2 items-center", children: [
|
|
97
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
98
|
+
label && /* @__PURE__ */ jsx(Label, { htmlFor: label, children: label }),
|
|
99
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
100
|
+
/* @__PURE__ */ jsx("span", { className: "eda-field-selector-calc", children: /* @__PURE__ */ jsx(
|
|
101
|
+
CalculatedFieldBadge,
|
|
102
|
+
{
|
|
103
|
+
field: value,
|
|
104
|
+
hoverOpen: false,
|
|
105
|
+
side: window.innerWidth < 700 ? "bottom" : "left"
|
|
106
|
+
}
|
|
107
|
+
) }),
|
|
108
|
+
/* @__PURE__ */ jsx(
|
|
109
|
+
ComboBox,
|
|
110
|
+
{
|
|
111
|
+
value: selectedOption,
|
|
112
|
+
options: fieldOptions,
|
|
113
|
+
onChange: (option) => onChange(option?.value || value),
|
|
114
|
+
optionToString: (option) => getFieldLabel(option.value),
|
|
115
|
+
"aria-label": label || placeholder,
|
|
116
|
+
optionToNode: (option) => /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-1", children: [
|
|
117
|
+
calculations.some(
|
|
118
|
+
(calc) => calc.resultColumnName === option.value
|
|
119
|
+
) && /* @__PURE__ */ jsx(
|
|
120
|
+
"span",
|
|
121
|
+
{
|
|
122
|
+
className: "eda-calc-symbol",
|
|
123
|
+
"aria-label": "Calculated field",
|
|
124
|
+
children: "\u0192x"
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
/* @__PURE__ */ jsx(
|
|
128
|
+
FieldMetadata,
|
|
129
|
+
{
|
|
130
|
+
profile: resolveFieldProfile(
|
|
131
|
+
option.value,
|
|
132
|
+
fieldProfiles,
|
|
133
|
+
getColumnData
|
|
134
|
+
),
|
|
135
|
+
label: getFieldLabel(option.value),
|
|
136
|
+
compact: true,
|
|
137
|
+
tooltipSide: window.innerWidth < 700 ? "top" : "left"
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
] }),
|
|
141
|
+
placeholder
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
] })
|
|
145
|
+
] }),
|
|
146
|
+
allowClear && value && /* @__PURE__ */ jsx(
|
|
147
|
+
Button,
|
|
148
|
+
{
|
|
149
|
+
variant: "ghost",
|
|
150
|
+
size: "icon",
|
|
151
|
+
className: "h-8 w-8",
|
|
152
|
+
"aria-label": `Clear ${label}`,
|
|
153
|
+
onClick: () => onChange(""),
|
|
154
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
] });
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export { ComboBox, FieldSelector };
|
|
161
|
+
//# sourceMappingURL=chunk-SFV5LZPD.js.map
|
|
162
|
+
//# sourceMappingURL=chunk-SFV5LZPD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ComboBox.tsx","../src/components/FieldSelector.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"chunk-SFV5LZPD.js","sourcesContent":["\"use client\";\n\nimport { Check, ChevronsUpDown } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n} from \"@/components/ui/command\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\nimport { useState } from \"react\";\nimport { CommandList } from \"cmdk\";\n\ninterface ComboBoxProps<T> {\n value: T | undefined;\n options: T[];\n onChange: (value: T | undefined) => void;\n optionToString?: (option: T) => string;\n optionToNode?: (option: T) => React.ReactNode;\n placeholder?: string;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n}\n\nexport function ComboBox<T>({\n value,\n options,\n onChange,\n optionToString = (option) => String(option),\n optionToNode,\n placeholder = \"Select option...\",\n className,\n id,\n \"aria-label\": ariaLabel,\n}: ComboBoxProps<T>) {\n const [open, setOpen] = useState(false);\n\n const renderOption = (option: T) => {\n if (optionToNode) {\n return optionToNode(option);\n }\n return optionToString(option);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n id={id}\n aria-label={ariaLabel}\n aria-expanded={open}\n className={cn(\"w-full justify-between\", className)}\n >\n <span className=\"min-w-0 truncate\">\n {value ? optionToString(value) : placeholder}\n </span>\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[max(18rem,var(--radix-popover-trigger-width))] p-0\">\n <Command>\n <CommandInput placeholder={placeholder} />\n <CommandGroup>\n <CommandList className=\"max-h-72 overflow-y-auto\">\n <CommandEmpty>No options found.</CommandEmpty>\n {options.map((option, index) => {\n return (\n <CommandItem\n key={index}\n onSelect={() => {\n onChange(option === value ? undefined : option);\n setOpen(false);\n }}\n value={optionToString(option)}\n >\n <Check\n className={cn(\n \"mr-2 h-4 w-4\",\n value === option ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {renderOption(option)}\n </CommandItem>\n );\n })}\n </CommandList>\n </CommandGroup>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n","import { CalculatedFieldBadge } from \"./calculations/CalculatedFieldBadge\";\nimport { Button } from \"@/components/ui/button\";\nimport { ComboBox } from \"./ComboBox\";\nimport { Label } from \"./ui/label\";\nimport { X } from \"lucide-react\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { FieldMetadata, resolveFieldProfile } from \"./FieldMetadata\";\n\ninterface FieldSelectorProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n fields?: string[];\n placeholder?: string;\n allowClear?: boolean;\n}\n\nexport function FieldSelector({\n label,\n value,\n onChange,\n fields,\n placeholder = \"Select field\",\n allowClear = false,\n}: FieldSelectorProps) {\n const getColumnNames = useDataLayer((state) => state.getColumnNames);\n const availableFields = fields ?? getColumnNames();\n const calculations = useDataLayer((state) => state.calculations);\n const fieldProfiles = useDataLayer((state) => state.fieldProfiles);\n const getColumnData = useDataLayer((state) => state.getColumnData);\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n\n const fieldOptions = availableFields.map((field) => ({\n value: field,\n label: field,\n }));\n\n const selectedOption = fieldOptions.find((option) => option.value === value);\n\n return (\n <div className=\"flex min-w-0 gap-2 items-center\">\n <div className=\"min-w-0 flex-1\">\n {label && <Label htmlFor={label}>{label}</Label>}\n <div className=\"relative\">\n <span className=\"eda-field-selector-calc\">\n <CalculatedFieldBadge\n field={value}\n hoverOpen={false}\n side={window.innerWidth < 700 ? \"bottom\" : \"left\"}\n />\n </span>\n <ComboBox\n value={selectedOption}\n options={fieldOptions}\n onChange={(option) => onChange(option?.value || value)}\n optionToString={(option) => getFieldLabel(option.value)}\n aria-label={label || placeholder}\n optionToNode={(option) => (\n <span className=\"flex min-w-0 items-center gap-1\">\n {calculations.some(\n (calc) => calc.resultColumnName === option.value\n ) && (\n <span\n className=\"eda-calc-symbol\"\n aria-label=\"Calculated field\"\n >\n ƒx\n </span>\n )}\n <FieldMetadata\n profile={resolveFieldProfile(\n option.value,\n fieldProfiles,\n getColumnData\n )}\n label={getFieldLabel(option.value)}\n compact\n tooltipSide={window.innerWidth < 700 ? \"top\" : \"left\"}\n />\n </span>\n )}\n placeholder={placeholder}\n />\n </div>\n </div>\n {allowClear && value && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={`Clear ${label}`}\n onClick={() => onChange(\"\")}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n );\n}\n"]}
|