exploreda 0.0.6 → 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 -11288
- package/dist/ExplorEda.cjs.map +1 -1
- package/dist/ExplorEda.css +2282 -1689
- package/dist/ExplorEda.css.map +1 -1
- package/dist/ExplorEda.d.cts +124 -278
- package/dist/ExplorEda.d.ts +124 -278
- package/dist/ExplorEda.js +4479 -11166
- 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 +30 -52
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk5B23JVH3_cjs = require('./chunk-5B23JVH3.cjs');
|
|
4
|
+
var cmdk = require('cmdk');
|
|
5
|
+
var lucideReact = require('lucide-react');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function Command({
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
13
|
+
cmdk.Command,
|
|
14
|
+
{
|
|
15
|
+
"data-slot": "command",
|
|
16
|
+
className: chunk5B23JVH3_cjs.cn(
|
|
17
|
+
"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
|
|
18
|
+
className
|
|
19
|
+
),
|
|
20
|
+
...props
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
function CommandInput({
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}) {
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
29
|
+
"div",
|
|
30
|
+
{
|
|
31
|
+
"data-slot": "command-input-wrapper",
|
|
32
|
+
className: "flex h-9 items-center gap-2 border-b px-3",
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: "size-4 shrink-0 opacity-50" }),
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
36
|
+
cmdk.Command.Input,
|
|
37
|
+
{
|
|
38
|
+
"data-slot": "command-input",
|
|
39
|
+
className: chunk5B23JVH3_cjs.cn(
|
|
40
|
+
"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
|
|
41
|
+
className
|
|
42
|
+
),
|
|
43
|
+
...props
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
function CommandList({
|
|
51
|
+
className,
|
|
52
|
+
...props
|
|
53
|
+
}) {
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
55
|
+
cmdk.Command.List,
|
|
56
|
+
{
|
|
57
|
+
"data-slot": "command-list",
|
|
58
|
+
className: chunk5B23JVH3_cjs.cn(
|
|
59
|
+
"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
|
|
60
|
+
className
|
|
61
|
+
),
|
|
62
|
+
...props
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
function CommandEmpty({
|
|
67
|
+
...props
|
|
68
|
+
}) {
|
|
69
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
|
+
cmdk.Command.Empty,
|
|
71
|
+
{
|
|
72
|
+
"data-slot": "command-empty",
|
|
73
|
+
className: "py-6 text-center text-sm",
|
|
74
|
+
...props
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
function CommandGroup({
|
|
79
|
+
className,
|
|
80
|
+
...props
|
|
81
|
+
}) {
|
|
82
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
83
|
+
cmdk.Command.Group,
|
|
84
|
+
{
|
|
85
|
+
"data-slot": "command-group",
|
|
86
|
+
className: chunk5B23JVH3_cjs.cn(
|
|
87
|
+
"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
|
|
88
|
+
className
|
|
89
|
+
),
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
function CommandItem({
|
|
95
|
+
className,
|
|
96
|
+
...props
|
|
97
|
+
}) {
|
|
98
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
99
|
+
cmdk.Command.Item,
|
|
100
|
+
{
|
|
101
|
+
"data-slot": "command-item",
|
|
102
|
+
className: chunk5B23JVH3_cjs.cn(
|
|
103
|
+
"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled='true']:pointer-events-none data-[disabled='true']:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
104
|
+
className
|
|
105
|
+
),
|
|
106
|
+
...props
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
exports.Command = Command;
|
|
112
|
+
exports.CommandEmpty = CommandEmpty;
|
|
113
|
+
exports.CommandGroup = CommandGroup;
|
|
114
|
+
exports.CommandInput = CommandInput;
|
|
115
|
+
exports.CommandItem = CommandItem;
|
|
116
|
+
exports.CommandList = CommandList;
|
|
117
|
+
//# sourceMappingURL=chunk-L2Q2R43U.cjs.map
|
|
118
|
+
//# sourceMappingURL=chunk-L2Q2R43U.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/command.tsx"],"names":["jsx","CommandPrimitive","cn","jsxs","SearchIcon"],"mappings":";;;;;;;AAeA,SAAS,OAAQ,CAAA;AAAA,EACf,SAAA;AAAA,EACA,GAAG;AACL,CAAkD,EAAA;AAChD,EACE,uBAAAA,cAAA;AAAA,IAACC,YAAA;AAAA,IAAA;AAAA,MACC,WAAU,EAAA,SAAA;AAAA,MACV,SAAW,EAAAC,oBAAA;AAAA,QACT,2FAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AA0BA,SAAS,YAAa,CAAA;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAwD,EAAA;AACtD,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAU,EAAA,uBAAA;AAAA,MACV,SAAU,EAAA,2CAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAACH,cAAA,CAAAI,sBAAA,EAAA,EAAW,WAAU,4BAA6B,EAAA,CAAA;AAAA,wBACnDJ,cAAA;AAAA,UAACC,YAAiB,CAAA,KAAA;AAAA,UAAjB;AAAA,YACC,WAAU,EAAA,eAAA;AAAA,YACV,SAAW,EAAAC,oBAAA;AAAA,cACT,0JAAA;AAAA,cACA;AAAA,aACF;AAAA,YACC,GAAG;AAAA;AAAA;AACN;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,WAAY,CAAA;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAuD,EAAA;AACrD,EACE,uBAAAF,cAAA;AAAA,IAACC,YAAiB,CAAA,IAAA;AAAA,IAAjB;AAAA,MACC,WAAU,EAAA,cAAA;AAAA,MACV,SAAW,EAAAC,oBAAA;AAAA,QACT,6DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAa,CAAA;AAAA,EACpB,GAAG;AACL,CAAwD,EAAA;AACtD,EACE,uBAAAF,cAAA;AAAA,IAACC,YAAiB,CAAA,KAAA;AAAA,IAAjB;AAAA,MACC,WAAU,EAAA,eAAA;AAAA,MACV,SAAU,EAAA,0BAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAa,CAAA;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAwD,EAAA;AACtD,EACE,uBAAAD,cAAA;AAAA,IAACC,YAAiB,CAAA,KAAA;AAAA,IAAjB;AAAA,MACC,WAAU,EAAA,eAAA;AAAA,MACV,SAAW,EAAAC,oBAAA;AAAA,QACT,wNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAeA,SAAS,WAAY,CAAA;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAuD,EAAA;AACrD,EACE,uBAAAF,cAAA;AAAA,IAACC,YAAiB,CAAA,IAAA;AAAA,IAAjB;AAAA,MACC,WAAU,EAAA,cAAA;AAAA,MACV,SAAW,EAAAC,oBAAA;AAAA,QACT,yYAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-L2Q2R43U.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { SearchIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className=\"overflow-hidden p-0\">\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n );\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled='true']:pointer-events-none data-[disabled='true']:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"]}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from './chunk-NDF5LCST.js';
|
|
2
|
+
import { Popover, PopoverTrigger, PopoverContent, Label, Input } from './chunk-MJPDJ5AS.js';
|
|
3
|
+
import { useDataLayer, buildConversionPreview, getFieldSettingsError, ActionTooltip, Button, cn } from './chunk-JNO7OXCC.js';
|
|
4
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
5
|
+
import { Settings2, AlertCircle, ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';
|
|
6
|
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
7
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
function Select({
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ jsx(SelectPrimitive.Root, { "data-slot": "select", ...props });
|
|
13
|
+
}
|
|
14
|
+
function SelectValue({
|
|
15
|
+
...props
|
|
16
|
+
}) {
|
|
17
|
+
return /* @__PURE__ */ jsx(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
|
|
18
|
+
}
|
|
19
|
+
function SelectTrigger({
|
|
20
|
+
className,
|
|
21
|
+
children,
|
|
22
|
+
...props
|
|
23
|
+
}) {
|
|
24
|
+
return /* @__PURE__ */ jsxs(
|
|
25
|
+
SelectPrimitive.Trigger,
|
|
26
|
+
{
|
|
27
|
+
"data-slot": "select-trigger",
|
|
28
|
+
className: cn(
|
|
29
|
+
"border-input data-[placeholder]:text-muted-foreground aria-invalid:border-destructive ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:ring-0 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&>span]:line-clamp-1",
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
...props,
|
|
33
|
+
children: [
|
|
34
|
+
children,
|
|
35
|
+
/* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-50" }) })
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
function SelectContent({
|
|
41
|
+
className,
|
|
42
|
+
children,
|
|
43
|
+
position = "popper",
|
|
44
|
+
...props
|
|
45
|
+
}) {
|
|
46
|
+
return /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
|
|
47
|
+
SelectPrimitive.Content,
|
|
48
|
+
{
|
|
49
|
+
"data-slot": "select-content",
|
|
50
|
+
className: cn(
|
|
51
|
+
"bg-popover text-popover-foreground motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md",
|
|
52
|
+
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
53
|
+
className
|
|
54
|
+
),
|
|
55
|
+
position,
|
|
56
|
+
...props,
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ jsx(SelectScrollUpButton, {}),
|
|
59
|
+
/* @__PURE__ */ jsx(
|
|
60
|
+
SelectPrimitive.Viewport,
|
|
61
|
+
{
|
|
62
|
+
className: cn(
|
|
63
|
+
"p-1",
|
|
64
|
+
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
|
|
65
|
+
),
|
|
66
|
+
children
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsx(SelectScrollDownButton, {})
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
) });
|
|
73
|
+
}
|
|
74
|
+
function SelectItem({
|
|
75
|
+
className,
|
|
76
|
+
children,
|
|
77
|
+
...props
|
|
78
|
+
}) {
|
|
79
|
+
return /* @__PURE__ */ jsxs(
|
|
80
|
+
SelectPrimitive.Item,
|
|
81
|
+
{
|
|
82
|
+
"data-slot": "select-item",
|
|
83
|
+
className: cn(
|
|
84
|
+
"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
|
|
85
|
+
className
|
|
86
|
+
),
|
|
87
|
+
...props,
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
|
|
90
|
+
/* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
function SelectScrollUpButton({
|
|
96
|
+
className,
|
|
97
|
+
...props
|
|
98
|
+
}) {
|
|
99
|
+
return /* @__PURE__ */ jsx(
|
|
100
|
+
SelectPrimitive.ScrollUpButton,
|
|
101
|
+
{
|
|
102
|
+
"data-slot": "select-scroll-up-button",
|
|
103
|
+
className: cn(
|
|
104
|
+
"flex cursor-default items-center justify-center py-1",
|
|
105
|
+
className
|
|
106
|
+
),
|
|
107
|
+
...props,
|
|
108
|
+
children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4" })
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
function SelectScrollDownButton({
|
|
113
|
+
className,
|
|
114
|
+
...props
|
|
115
|
+
}) {
|
|
116
|
+
return /* @__PURE__ */ jsx(
|
|
117
|
+
SelectPrimitive.ScrollDownButton,
|
|
118
|
+
{
|
|
119
|
+
"data-slot": "select-scroll-down-button",
|
|
120
|
+
className: cn(
|
|
121
|
+
"flex cursor-default items-center justify-center py-1",
|
|
122
|
+
className
|
|
123
|
+
),
|
|
124
|
+
...props,
|
|
125
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4" })
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
var dataTypes = ["numeric", "categorical", "datetime", "boolean"];
|
|
130
|
+
var formats = [
|
|
131
|
+
"auto",
|
|
132
|
+
"number",
|
|
133
|
+
"currency",
|
|
134
|
+
"percent",
|
|
135
|
+
"date",
|
|
136
|
+
"datetime"
|
|
137
|
+
];
|
|
138
|
+
function FieldInspector({ field, children, open, onOpenChange }) {
|
|
139
|
+
const fieldSettings = useDataLayer((state) => state.fieldSettings);
|
|
140
|
+
const updateFieldSettings = useDataLayer(
|
|
141
|
+
(state) => state.updateFieldSettings
|
|
142
|
+
);
|
|
143
|
+
const getFieldConversionPreview = useDataLayer(
|
|
144
|
+
(state) => state.getFieldConversionPreview
|
|
145
|
+
);
|
|
146
|
+
const getFieldLabel = useDataLayer((state) => state.getFieldLabel);
|
|
147
|
+
const getColumnData = useDataLayer((state) => state.getColumnData);
|
|
148
|
+
const calculations = useDataLayer((state) => state.calculations);
|
|
149
|
+
const fieldProfiles = useDataLayer((state) => state.fieldProfiles);
|
|
150
|
+
const [draft, setDraft] = useState({});
|
|
151
|
+
const [showAllFailures, setShowAllFailures] = useState(false);
|
|
152
|
+
const [localOpen, setLocalOpen] = useState(false);
|
|
153
|
+
const isOpen = open ?? localOpen;
|
|
154
|
+
const setOpen = onOpenChange ?? setLocalOpen;
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (isOpen && field) {
|
|
157
|
+
setDraft((fieldSettings ?? {})[field] ?? {});
|
|
158
|
+
setShowAllFailures(false);
|
|
159
|
+
}
|
|
160
|
+
}, [isOpen, field, fieldSettings]);
|
|
161
|
+
const applied = field ? (fieldSettings ?? {})[field] ?? {} : {};
|
|
162
|
+
const isCalculated = Boolean(
|
|
163
|
+
field && (calculations ?? []).some(
|
|
164
|
+
(calculation) => calculation.resultColumnName === field
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
const calculatedProfile = (fieldProfiles ?? []).find(
|
|
168
|
+
(profile) => profile.name === field
|
|
169
|
+
);
|
|
170
|
+
const preview = useMemo(() => {
|
|
171
|
+
if (!isOpen || !field) return null;
|
|
172
|
+
if (!isCalculated) return getFieldConversionPreview(field, draft);
|
|
173
|
+
const values = getColumnData(field);
|
|
174
|
+
const rows = Object.values(values).map((value) => ({ [field]: value }));
|
|
175
|
+
return buildConversionPreview(
|
|
176
|
+
field,
|
|
177
|
+
rows,
|
|
178
|
+
draft,
|
|
179
|
+
calculatedProfile?.dataType ?? "categorical"
|
|
180
|
+
);
|
|
181
|
+
}, [
|
|
182
|
+
field,
|
|
183
|
+
getFieldConversionPreview,
|
|
184
|
+
getColumnData,
|
|
185
|
+
calculatedProfile?.dataType,
|
|
186
|
+
isCalculated,
|
|
187
|
+
isOpen,
|
|
188
|
+
draft
|
|
189
|
+
]);
|
|
190
|
+
const settingsError = getFieldSettingsError(draft);
|
|
191
|
+
const conversionChanged = !isCalculated && (draft.type !== applied.type || draft.datePreset !== applied.datePreset || JSON.stringify(draft.nullTokens ?? []) !== JSON.stringify(applied.nullTokens ?? []));
|
|
192
|
+
if (!field) return null;
|
|
193
|
+
const update = (next) => setDraft((current) => ({ ...current, ...next }));
|
|
194
|
+
return /* @__PURE__ */ jsxs(Popover, { open: isOpen, onOpenChange: setOpen, modal: false, children: [
|
|
195
|
+
/* @__PURE__ */ jsx(ActionTooltip, { content: `Inspect ${getFieldLabel(field)}`, children: /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: children ?? /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", "aria-label": `Inspect ${field}`, children: /* @__PURE__ */ jsx(Settings2, { className: "h-4 w-4" }) }) }) }),
|
|
196
|
+
/* @__PURE__ */ jsxs(
|
|
197
|
+
PopoverContent,
|
|
198
|
+
{
|
|
199
|
+
"aria-label": `Inspect field: ${getFieldLabel(field)}`,
|
|
200
|
+
align: "start",
|
|
201
|
+
side: "bottom",
|
|
202
|
+
collisionPadding: 12,
|
|
203
|
+
className: "w-[min(400px,calc(100vw-24px))] max-h-[min(480px,var(--radix-popover-content-available-height))] overflow-y-auto p-3",
|
|
204
|
+
children: [
|
|
205
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-3 space-y-1", children: [
|
|
206
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm font-semibold", children: [
|
|
207
|
+
/* @__PURE__ */ jsx(Settings2, { className: "h-4 w-4" }),
|
|
208
|
+
"Inspect field: ",
|
|
209
|
+
getFieldLabel(field)
|
|
210
|
+
] }),
|
|
211
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: field !== getFieldLabel(field) ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
212
|
+
"Source name: ",
|
|
213
|
+
/* @__PURE__ */ jsx("code", { children: field })
|
|
214
|
+
] }) : "Field settings for this analysis" })
|
|
215
|
+
] }),
|
|
216
|
+
preview && /* @__PURE__ */ jsxs("div", { className: "mb-3 flex flex-wrap gap-x-3 gap-y-1 rounded bg-muted/50 px-2 py-2 text-xs", children: [
|
|
217
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-x-3 gap-y-1", children: [
|
|
218
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
219
|
+
"Inferred: ",
|
|
220
|
+
/* @__PURE__ */ jsx("strong", { children: preview.inferredType })
|
|
221
|
+
] }),
|
|
222
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
223
|
+
"Effective: ",
|
|
224
|
+
/* @__PURE__ */ jsx("strong", { children: preview.effectiveType })
|
|
225
|
+
] }),
|
|
226
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
227
|
+
preview.validCount,
|
|
228
|
+
" valid"
|
|
229
|
+
] }),
|
|
230
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
231
|
+
preview.missingCount,
|
|
232
|
+
" missing"
|
|
233
|
+
] }),
|
|
234
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
235
|
+
preview.failedCount,
|
|
236
|
+
" failed"
|
|
237
|
+
] })
|
|
238
|
+
] }),
|
|
239
|
+
preview.failedCount > 0 && /* @__PURE__ */ jsx("div", { className: "mt-2 text-destructive", children: "Invalid values become missing. Review the failed rows below." })
|
|
240
|
+
] }),
|
|
241
|
+
/* @__PURE__ */ jsxs(Tabs, { defaultValue: "display", children: [
|
|
242
|
+
/* @__PURE__ */ jsxs(TabsList, { className: "grid h-8 w-full grid-cols-3", children: [
|
|
243
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "display", className: "text-xs", children: "Display" }),
|
|
244
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "type", className: "text-xs", children: "Type" }),
|
|
245
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "preview", className: "text-xs", children: "Preview" })
|
|
246
|
+
] }),
|
|
247
|
+
/* @__PURE__ */ jsxs(TabsContent, { value: "display", className: "mt-3 space-y-3", children: [
|
|
248
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
249
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "field-label", children: "Display label" }),
|
|
250
|
+
/* @__PURE__ */ jsx(
|
|
251
|
+
Input,
|
|
252
|
+
{
|
|
253
|
+
id: "field-label",
|
|
254
|
+
value: draft.label ?? "",
|
|
255
|
+
placeholder: field,
|
|
256
|
+
onChange: (event) => update({ label: event.target.value })
|
|
257
|
+
}
|
|
258
|
+
)
|
|
259
|
+
] }),
|
|
260
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
261
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "field-description", children: "Description" }),
|
|
262
|
+
/* @__PURE__ */ jsx(
|
|
263
|
+
Input,
|
|
264
|
+
{
|
|
265
|
+
id: "field-description",
|
|
266
|
+
value: draft.description ?? "",
|
|
267
|
+
onChange: (event) => update({ description: event.target.value })
|
|
268
|
+
}
|
|
269
|
+
)
|
|
270
|
+
] }),
|
|
271
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
|
|
272
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
273
|
+
/* @__PURE__ */ jsx(Label, { children: "Display format" }),
|
|
274
|
+
/* @__PURE__ */ jsxs(
|
|
275
|
+
Select,
|
|
276
|
+
{
|
|
277
|
+
value: draft.format ?? "auto",
|
|
278
|
+
onValueChange: (value) => update({ format: value }),
|
|
279
|
+
children: [
|
|
280
|
+
/* @__PURE__ */ jsx(SelectTrigger, { "aria-label": "Display format", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
281
|
+
/* @__PURE__ */ jsx(SelectContent, { children: formats.map((format) => /* @__PURE__ */ jsx(SelectItem, { value: format, children: format }, format)) })
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
)
|
|
285
|
+
] }),
|
|
286
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
287
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "field-precision", children: "Precision" }),
|
|
288
|
+
/* @__PURE__ */ jsx(
|
|
289
|
+
Input,
|
|
290
|
+
{
|
|
291
|
+
id: "field-precision",
|
|
292
|
+
type: "number",
|
|
293
|
+
min: 0,
|
|
294
|
+
max: 20,
|
|
295
|
+
value: draft.precision ?? "",
|
|
296
|
+
onChange: (event) => update({
|
|
297
|
+
precision: event.target.value === "" ? void 0 : Number(event.target.value)
|
|
298
|
+
})
|
|
299
|
+
}
|
|
300
|
+
)
|
|
301
|
+
] }),
|
|
302
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
303
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "field-unit", children: "Unit suffix" }),
|
|
304
|
+
/* @__PURE__ */ jsx(
|
|
305
|
+
Input,
|
|
306
|
+
{
|
|
307
|
+
id: "field-unit",
|
|
308
|
+
value: draft.unit ?? "",
|
|
309
|
+
placeholder: "kg, ms, USD",
|
|
310
|
+
onChange: (event) => update({ unit: event.target.value })
|
|
311
|
+
}
|
|
312
|
+
)
|
|
313
|
+
] }),
|
|
314
|
+
draft.format === "currency" && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
315
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "field-currency", children: "Currency code" }),
|
|
316
|
+
/* @__PURE__ */ jsx(
|
|
317
|
+
Input,
|
|
318
|
+
{
|
|
319
|
+
id: "field-currency",
|
|
320
|
+
value: draft.currency ?? "USD",
|
|
321
|
+
maxLength: 3,
|
|
322
|
+
onChange: (event) => update({ currency: event.target.value.toUpperCase() })
|
|
323
|
+
}
|
|
324
|
+
)
|
|
325
|
+
] })
|
|
326
|
+
] })
|
|
327
|
+
] }),
|
|
328
|
+
/* @__PURE__ */ jsxs(TabsContent, { value: "type", className: "mt-3 space-y-3", children: [
|
|
329
|
+
isCalculated && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "This is a calculated field. Its formula controls the runtime type. Use the formula editor for type changes; this inspector controls display settings and previews calculated values." }),
|
|
330
|
+
preview && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
331
|
+
" ",
|
|
332
|
+
/* @__PURE__ */ jsxs("p", { className: "mt-2 text-muted-foreground", children: [
|
|
333
|
+
"Automatic inference currently treats this field as",
|
|
334
|
+
" ",
|
|
335
|
+
/* @__PURE__ */ jsx("strong", { children: preview.inferredType }),
|
|
336
|
+
". An override changes runtime values, filters, calculations, and chart positions."
|
|
337
|
+
] })
|
|
338
|
+
] }),
|
|
339
|
+
!isCalculated && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
340
|
+
/* @__PURE__ */ jsx(Label, { children: "Type override" }),
|
|
341
|
+
/* @__PURE__ */ jsxs(
|
|
342
|
+
Select,
|
|
343
|
+
{
|
|
344
|
+
value: draft.type ?? "auto",
|
|
345
|
+
onValueChange: (value) => update({
|
|
346
|
+
type: value === "auto" ? void 0 : value
|
|
347
|
+
}),
|
|
348
|
+
children: [
|
|
349
|
+
/* @__PURE__ */ jsx(SelectTrigger, { "aria-label": "Type override", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
350
|
+
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
351
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "auto", children: "Automatic" }),
|
|
352
|
+
dataTypes.map((type) => /* @__PURE__ */ jsx(SelectItem, { value: type, children: type }, type))
|
|
353
|
+
] })
|
|
354
|
+
]
|
|
355
|
+
}
|
|
356
|
+
)
|
|
357
|
+
] }),
|
|
358
|
+
!isCalculated && draft.type === "datetime" && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
359
|
+
/* @__PURE__ */ jsx(Label, { children: "Date input preset" }),
|
|
360
|
+
/* @__PURE__ */ jsxs(
|
|
361
|
+
Select,
|
|
362
|
+
{
|
|
363
|
+
value: draft.datePreset ?? "iso",
|
|
364
|
+
onValueChange: (value) => update({ datePreset: value }),
|
|
365
|
+
children: [
|
|
366
|
+
/* @__PURE__ */ jsx(SelectTrigger, { "aria-label": "Date input preset", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
367
|
+
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
368
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "iso", children: "ISO" }),
|
|
369
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "month-day-year", children: "Month / day / year" }),
|
|
370
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "day-month-year", children: "Day / month / year" })
|
|
371
|
+
] })
|
|
372
|
+
]
|
|
373
|
+
}
|
|
374
|
+
)
|
|
375
|
+
] }),
|
|
376
|
+
!isCalculated && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
377
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "field-null-tokens", children: "Null tokens" }),
|
|
378
|
+
/* @__PURE__ */ jsx(
|
|
379
|
+
Input,
|
|
380
|
+
{
|
|
381
|
+
id: "field-null-tokens",
|
|
382
|
+
value: draft.nullTokens?.join(", ") ?? "",
|
|
383
|
+
placeholder: "NA, N/A, -",
|
|
384
|
+
onChange: (event) => update({
|
|
385
|
+
nullTokens: event.target.value.split(",").map((token) => token.trim()).filter(Boolean)
|
|
386
|
+
})
|
|
387
|
+
}
|
|
388
|
+
)
|
|
389
|
+
] }),
|
|
390
|
+
conversionChanged && /* @__PURE__ */ jsxs("div", { className: "flex gap-2 rounded-md border border-warning/40 bg-warning/10 p-3 text-xs", children: [
|
|
391
|
+
/* @__PURE__ */ jsx(AlertCircle, { className: "mt-0.5 h-4 w-4 shrink-0 text-warning" }),
|
|
392
|
+
"Applying a type, date preset, or null-token change clears filters for this field."
|
|
393
|
+
] })
|
|
394
|
+
] }),
|
|
395
|
+
/* @__PURE__ */ jsxs(TabsContent, { value: "preview", className: "mt-3", children: [
|
|
396
|
+
preview && preview.examples.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
397
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xs font-medium", children: "Conversion preview" }),
|
|
398
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded-md border", children: /* @__PURE__ */ jsxs("table", { className: "w-full text-xs", children: [
|
|
399
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { className: "border-b text-left", children: [
|
|
400
|
+
/* @__PURE__ */ jsx("th", { className: "p-2", children: "Row" }),
|
|
401
|
+
/* @__PURE__ */ jsx("th", { className: "p-2", children: "Raw" }),
|
|
402
|
+
/* @__PURE__ */ jsx("th", { className: "p-2", children: "Runtime" })
|
|
403
|
+
] }) }),
|
|
404
|
+
/* @__PURE__ */ jsx("tbody", { children: preview.examples.map((example) => /* @__PURE__ */ jsxs(
|
|
405
|
+
"tr",
|
|
406
|
+
{
|
|
407
|
+
className: "border-b last:border-0",
|
|
408
|
+
children: [
|
|
409
|
+
/* @__PURE__ */ jsx("td", { className: "p-2 tabular-nums", children: example.row + 1 }),
|
|
410
|
+
/* @__PURE__ */ jsx("td", { className: "p-2 font-mono", children: String(example.raw) }),
|
|
411
|
+
/* @__PURE__ */ jsx("td", { className: "p-2", children: String(example.value ?? "Missing") })
|
|
412
|
+
]
|
|
413
|
+
},
|
|
414
|
+
example.row
|
|
415
|
+
)) })
|
|
416
|
+
] }) })
|
|
417
|
+
] }),
|
|
418
|
+
preview && preview.failures.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-4 space-y-1.5 text-xs", children: [
|
|
419
|
+
/* @__PURE__ */ jsx("h3", { className: "font-medium text-destructive", children: "Failed rows" }),
|
|
420
|
+
/* @__PURE__ */ jsx("ul", { className: "max-h-24 overflow-y-auto text-muted-foreground", children: (showAllFailures ? preview.failures : preview.failures.slice(0, 12)).map((failure) => /* @__PURE__ */ jsxs("li", { children: [
|
|
421
|
+
"Row ",
|
|
422
|
+
failure.row + 1,
|
|
423
|
+
": ",
|
|
424
|
+
String(failure.raw),
|
|
425
|
+
" \u2014",
|
|
426
|
+
" ",
|
|
427
|
+
failure.reason
|
|
428
|
+
] }, failure.row)) }),
|
|
429
|
+
preview.failures.length > 12 && /* @__PURE__ */ jsx(
|
|
430
|
+
Button,
|
|
431
|
+
{
|
|
432
|
+
variant: "ghost",
|
|
433
|
+
size: "sm",
|
|
434
|
+
onClick: () => setShowAllFailures((current) => !current),
|
|
435
|
+
children: showAllFailures ? "Show fewer failed rows" : `Show all ${preview.failures.length} failed rows`
|
|
436
|
+
}
|
|
437
|
+
)
|
|
438
|
+
] }),
|
|
439
|
+
!preview?.examples.length && !preview?.failures.length && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "No conversion issues or sample rows." })
|
|
440
|
+
] })
|
|
441
|
+
] }),
|
|
442
|
+
settingsError && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-xs text-destructive", children: settingsError }),
|
|
443
|
+
/* @__PURE__ */ jsxs("div", { className: "sticky bottom-[-16px] mt-4 flex justify-end gap-2 border-t bg-popover py-3", children: [
|
|
444
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: () => setOpen(false), children: "Cancel" }),
|
|
445
|
+
/* @__PURE__ */ jsx(
|
|
446
|
+
Button,
|
|
447
|
+
{
|
|
448
|
+
size: "sm",
|
|
449
|
+
disabled: Boolean(settingsError),
|
|
450
|
+
onClick: () => {
|
|
451
|
+
updateFieldSettings(field, draft);
|
|
452
|
+
setOpen(false);
|
|
453
|
+
},
|
|
454
|
+
children: "Apply field settings"
|
|
455
|
+
}
|
|
456
|
+
)
|
|
457
|
+
] })
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
)
|
|
461
|
+
] });
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
export { FieldInspector };
|
|
465
|
+
//# sourceMappingURL=chunk-LBTZVERO.js.map
|
|
466
|
+
//# sourceMappingURL=chunk-LBTZVERO.js.map
|