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.
Files changed (208) hide show
  1. package/README.md +144 -0
  2. package/dist/ExplorEda.cjs +4608 -11288
  3. package/dist/ExplorEda.cjs.map +1 -1
  4. package/dist/ExplorEda.css +2282 -1689
  5. package/dist/ExplorEda.css.map +1 -1
  6. package/dist/ExplorEda.d.cts +124 -278
  7. package/dist/ExplorEda.d.ts +124 -278
  8. package/dist/ExplorEda.js +4479 -11166
  9. package/dist/ExplorEda.js.map +1 -1
  10. package/dist/calculations.cjs +18 -0
  11. package/dist/calculations.cjs.map +1 -0
  12. package/dist/calculations.d.cts +63 -0
  13. package/dist/calculations.d.ts +63 -0
  14. package/dist/calculations.js +3 -0
  15. package/dist/calculations.js.map +1 -0
  16. package/dist/charts/bar.cjs +27 -0
  17. package/dist/charts/bar.cjs.map +1 -0
  18. package/dist/charts/bar.d.cts +2 -0
  19. package/dist/charts/bar.d.ts +2 -0
  20. package/dist/charts/bar.js +18 -0
  21. package/dist/charts/bar.js.map +1 -0
  22. package/dist/charts/box-plot.cjs +26 -0
  23. package/dist/charts/box-plot.cjs.map +1 -0
  24. package/dist/charts/box-plot.d.cts +2 -0
  25. package/dist/charts/box-plot.d.ts +2 -0
  26. package/dist/charts/box-plot.js +17 -0
  27. package/dist/charts/box-plot.js.map +1 -0
  28. package/dist/charts/color-legend.cjs +22 -0
  29. package/dist/charts/color-legend.cjs.map +1 -0
  30. package/dist/charts/color-legend.d.cts +2 -0
  31. package/dist/charts/color-legend.d.ts +2 -0
  32. package/dist/charts/color-legend.js +13 -0
  33. package/dist/charts/color-legend.js.map +1 -0
  34. package/dist/charts/data-table.cjs +22 -0
  35. package/dist/charts/data-table.cjs.map +1 -0
  36. package/dist/charts/data-table.d.cts +2 -0
  37. package/dist/charts/data-table.d.ts +2 -0
  38. package/dist/charts/data-table.js +13 -0
  39. package/dist/charts/data-table.js.map +1 -0
  40. package/dist/charts/line.cjs +30 -0
  41. package/dist/charts/line.cjs.map +1 -0
  42. package/dist/charts/line.d.cts +2 -0
  43. package/dist/charts/line.d.ts +2 -0
  44. package/dist/charts/line.js +17 -0
  45. package/dist/charts/line.js.map +1 -0
  46. package/dist/charts/markdown.cjs +16 -0
  47. package/dist/charts/markdown.cjs.map +1 -0
  48. package/dist/charts/markdown.css +77 -0
  49. package/dist/charts/markdown.css.map +1 -0
  50. package/dist/charts/markdown.d.cts +2 -0
  51. package/dist/charts/markdown.d.ts +2 -0
  52. package/dist/charts/markdown.js +7 -0
  53. package/dist/charts/markdown.js.map +1 -0
  54. package/dist/charts/pivot-table.cjs +23 -0
  55. package/dist/charts/pivot-table.cjs.map +1 -0
  56. package/dist/charts/pivot-table.d.cts +2 -0
  57. package/dist/charts/pivot-table.d.ts +2 -0
  58. package/dist/charts/pivot-table.js +14 -0
  59. package/dist/charts/pivot-table.js.map +1 -0
  60. package/dist/charts/row.cjs +27 -0
  61. package/dist/charts/row.cjs.map +1 -0
  62. package/dist/charts/row.d.cts +6 -0
  63. package/dist/charts/row.d.ts +6 -0
  64. package/dist/charts/row.js +18 -0
  65. package/dist/charts/row.js.map +1 -0
  66. package/dist/charts/scatter.cjs +24 -0
  67. package/dist/charts/scatter.cjs.map +1 -0
  68. package/dist/charts/scatter.d.cts +2 -0
  69. package/dist/charts/scatter.d.ts +2 -0
  70. package/dist/charts/scatter.js +15 -0
  71. package/dist/charts/scatter.js.map +1 -0
  72. package/dist/charts/summary-table.cjs +19 -0
  73. package/dist/charts/summary-table.cjs.map +1 -0
  74. package/dist/charts/summary-table.d.cts +2 -0
  75. package/dist/charts/summary-table.d.ts +2 -0
  76. package/dist/charts/summary-table.js +10 -0
  77. package/dist/charts/summary-table.js.map +1 -0
  78. package/dist/charts/three-d-scatter.cjs +24 -0
  79. package/dist/charts/three-d-scatter.cjs.map +1 -0
  80. package/dist/charts/three-d-scatter.d.cts +6 -0
  81. package/dist/charts/three-d-scatter.d.ts +6 -0
  82. package/dist/charts/three-d-scatter.js +15 -0
  83. package/dist/charts/three-d-scatter.js.map +1 -0
  84. package/dist/chunk-3PGYFLE3.cjs +499 -0
  85. package/dist/chunk-3PGYFLE3.cjs.map +1 -0
  86. package/dist/chunk-4HNDKMWF.js +167 -0
  87. package/dist/chunk-4HNDKMWF.js.map +1 -0
  88. package/dist/chunk-4QNENKTV.cjs +1214 -0
  89. package/dist/chunk-4QNENKTV.cjs.map +1 -0
  90. package/dist/chunk-54M32JJB.js +132 -0
  91. package/dist/chunk-54M32JJB.js.map +1 -0
  92. package/dist/chunk-5B23JVH3.cjs +2238 -0
  93. package/dist/chunk-5B23JVH3.cjs.map +1 -0
  94. package/dist/chunk-5LH6NSNL.js +456 -0
  95. package/dist/chunk-5LH6NSNL.js.map +1 -0
  96. package/dist/chunk-6DOKKCJ5.cjs +313 -0
  97. package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
  98. package/dist/chunk-6HZX5CBT.cjs +1074 -0
  99. package/dist/chunk-6HZX5CBT.cjs.map +1 -0
  100. package/dist/chunk-6U5DOIQM.js +1071 -0
  101. package/dist/chunk-6U5DOIQM.js.map +1 -0
  102. package/dist/chunk-7GBZIK2R.cjs +80 -0
  103. package/dist/chunk-7GBZIK2R.cjs.map +1 -0
  104. package/dist/chunk-7PTJNIOD.js +520 -0
  105. package/dist/chunk-7PTJNIOD.js.map +1 -0
  106. package/dist/chunk-AHZYQ7FN.js +319 -0
  107. package/dist/chunk-AHZYQ7FN.js.map +1 -0
  108. package/dist/chunk-AOODAOL4.cjs +55 -0
  109. package/dist/chunk-AOODAOL4.cjs.map +1 -0
  110. package/dist/chunk-ASKFIRMC.cjs +165 -0
  111. package/dist/chunk-ASKFIRMC.cjs.map +1 -0
  112. package/dist/chunk-B7OQUBH4.cjs +171 -0
  113. package/dist/chunk-B7OQUBH4.cjs.map +1 -0
  114. package/dist/chunk-BIMEHDLB.js +72 -0
  115. package/dist/chunk-BIMEHDLB.js.map +1 -0
  116. package/dist/chunk-C62KHV7S.js +1225 -0
  117. package/dist/chunk-C62KHV7S.js.map +1 -0
  118. package/dist/chunk-C7GQT65O.cjs +1119 -0
  119. package/dist/chunk-C7GQT65O.cjs.map +1 -0
  120. package/dist/chunk-CGDWDV4Z.js +1211 -0
  121. package/dist/chunk-CGDWDV4Z.js.map +1 -0
  122. package/dist/chunk-CJQQFNEY.js +69 -0
  123. package/dist/chunk-CJQQFNEY.js.map +1 -0
  124. package/dist/chunk-DHYLSXNR.js +964 -0
  125. package/dist/chunk-DHYLSXNR.js.map +1 -0
  126. package/dist/chunk-DKFA4KOJ.cjs +87 -0
  127. package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
  128. package/dist/chunk-DS5BS7PP.cjs +357 -0
  129. package/dist/chunk-DS5BS7PP.cjs.map +1 -0
  130. package/dist/chunk-EGMFQSGK.js +909 -0
  131. package/dist/chunk-EGMFQSGK.js.map +1 -0
  132. package/dist/chunk-EU5EFHO5.cjs +53 -0
  133. package/dist/chunk-EU5EFHO5.cjs.map +1 -0
  134. package/dist/chunk-FM46QSDM.js +837 -0
  135. package/dist/chunk-FM46QSDM.js.map +1 -0
  136. package/dist/chunk-GV2LRR32.cjs +843 -0
  137. package/dist/chunk-GV2LRR32.cjs.map +1 -0
  138. package/dist/chunk-H3XKFSA5.cjs +322 -0
  139. package/dist/chunk-H3XKFSA5.cjs.map +1 -0
  140. package/dist/chunk-H5AVMMCE.js +347 -0
  141. package/dist/chunk-H5AVMMCE.js.map +1 -0
  142. package/dist/chunk-JDMUN4VK.cjs +986 -0
  143. package/dist/chunk-JDMUN4VK.cjs.map +1 -0
  144. package/dist/chunk-JNO7OXCC.js +2171 -0
  145. package/dist/chunk-JNO7OXCC.js.map +1 -0
  146. package/dist/chunk-JQMG4ZR7.js +111 -0
  147. package/dist/chunk-JQMG4ZR7.js.map +1 -0
  148. package/dist/chunk-L2Q2R43U.cjs +118 -0
  149. package/dist/chunk-L2Q2R43U.cjs.map +1 -0
  150. package/dist/chunk-LBTZVERO.js +466 -0
  151. package/dist/chunk-LBTZVERO.js.map +1 -0
  152. package/dist/chunk-LUUGGTTK.cjs +1227 -0
  153. package/dist/chunk-LUUGGTTK.cjs.map +1 -0
  154. package/dist/chunk-MEEPH7ZC.cjs +911 -0
  155. package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
  156. package/dist/chunk-MJPDJ5AS.js +184 -0
  157. package/dist/chunk-MJPDJ5AS.js.map +1 -0
  158. package/dist/chunk-MJROUIDZ.cjs +219 -0
  159. package/dist/chunk-MJROUIDZ.cjs.map +1 -0
  160. package/dist/chunk-MUWSBYJS.js +528 -0
  161. package/dist/chunk-MUWSBYJS.js.map +1 -0
  162. package/dist/chunk-NDF5LCST.js +1088 -0
  163. package/dist/chunk-NDF5LCST.js.map +1 -0
  164. package/dist/chunk-NGWTPED4.js +311 -0
  165. package/dist/chunk-NGWTPED4.js.map +1 -0
  166. package/dist/chunk-PP4VCONW.js +739 -0
  167. package/dist/chunk-PP4VCONW.js.map +1 -0
  168. package/dist/chunk-PRMC2A6P.cjs +488 -0
  169. package/dist/chunk-PRMC2A6P.cjs.map +1 -0
  170. package/dist/chunk-PST6UU6S.cjs +742 -0
  171. package/dist/chunk-PST6UU6S.cjs.map +1 -0
  172. package/dist/chunk-Q7LK2UWH.js +33 -0
  173. package/dist/chunk-Q7LK2UWH.js.map +1 -0
  174. package/dist/chunk-SFV5LZPD.js +162 -0
  175. package/dist/chunk-SFV5LZPD.js.map +1 -0
  176. package/dist/chunk-SKXGYJJG.cjs +370 -0
  177. package/dist/chunk-SKXGYJJG.cjs.map +1 -0
  178. package/dist/chunk-SWLNKY6R.js +477 -0
  179. package/dist/chunk-SWLNKY6R.js.map +1 -0
  180. package/dist/chunk-TGVLNHUB.cjs +483 -0
  181. package/dist/chunk-TGVLNHUB.cjs.map +1 -0
  182. package/dist/chunk-TLLRW6S3.js +74 -0
  183. package/dist/chunk-TLLRW6S3.js.map +1 -0
  184. package/dist/chunk-TRAIXZ6M.cjs +140 -0
  185. package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
  186. package/dist/chunk-U74A5VK5.cjs +74 -0
  187. package/dist/chunk-U74A5VK5.cjs.map +1 -0
  188. package/dist/chunk-UAVDLBTA.cjs +74 -0
  189. package/dist/chunk-UAVDLBTA.cjs.map +1 -0
  190. package/dist/chunk-UJWS6TRV.js +354 -0
  191. package/dist/chunk-UJWS6TRV.js.map +1 -0
  192. package/dist/chunk-UUJMUPB3.cjs +531 -0
  193. package/dist/chunk-UUJMUPB3.cjs.map +1 -0
  194. package/dist/chunk-VTKHZIJB.cjs +549 -0
  195. package/dist/chunk-VTKHZIJB.cjs.map +1 -0
  196. package/dist/chunk-YXPAWUXO.js +51 -0
  197. package/dist/chunk-YXPAWUXO.js.map +1 -0
  198. package/dist/chunk-ZD64SCZB.js +80 -0
  199. package/dist/chunk-ZD64SCZB.js.map +1 -0
  200. package/dist/core.cjs +28 -0
  201. package/dist/core.cjs.map +1 -0
  202. package/dist/core.d.cts +22 -0
  203. package/dist/core.d.ts +22 -0
  204. package/dist/core.js +3 -0
  205. package/dist/core.js.map +1 -0
  206. package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
  207. package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
  208. package/package.json +30 -52
@@ -0,0 +1,140 @@
1
+ 'use strict';
2
+
3
+ var chunkUUJMUPB3_cjs = require('./chunk-UUJMUPB3.cjs');
4
+ var chunk5B23JVH3_cjs = require('./chunk-5B23JVH3.cjs');
5
+ var react = require('react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ var ApiContext = react.createContext(null);
9
+ var StateContext = react.createContext(null);
10
+ function ChartTraceScope({ children }) {
11
+ const sources = react.useRef(/* @__PURE__ */ new Map());
12
+ const [version, setVersion] = react.useState(0);
13
+ const [selection, setSelection] = react.useState(null);
14
+ const register = react.useCallback((owner2, source) => {
15
+ sources.current.set(owner2, source);
16
+ setVersion((value) => value + 1);
17
+ return () => {
18
+ if (sources.current.get(owner2) !== source) return;
19
+ sources.current.delete(owner2);
20
+ setVersion((value) => value + 1);
21
+ };
22
+ }, []);
23
+ const inspect = react.useCallback((owner2, kind, id) => {
24
+ const source = sources.current.get(owner2);
25
+ if (!source?.resolve(kind, id)) return false;
26
+ setSelection({ owner: owner2, kind, id, revision: source.revision });
27
+ return true;
28
+ }, []);
29
+ const chartOwner = () => [...sources.current].find(([, source]) => source.role === "chart")?.[0];
30
+ const inspectChart = react.useCallback((kind, id) => {
31
+ const owner2 = chartOwner();
32
+ return owner2 ? inspect(owner2, kind, id) : false;
33
+ }, [inspect]);
34
+ const findVisibleRow = react.useCallback(
35
+ (id) => {
36
+ for (const [owner2, source] of sources.current) {
37
+ if (source.role !== "chart") continue;
38
+ const found = source.findRow?.(id);
39
+ if (found && found !== "pending" && inspect(owner2, found.kind, found.id))
40
+ return true;
41
+ }
42
+ return false;
43
+ },
44
+ [inspect]
45
+ );
46
+ const findRow = react.useCallback(
47
+ (id) => {
48
+ if (findVisibleRow(id)) return true;
49
+ for (const source of sources.current.values()) {
50
+ if (source.role !== "chart" && source.findRow?.(id) === "pending")
51
+ return true;
52
+ }
53
+ return false;
54
+ },
55
+ [findVisibleRow]
56
+ );
57
+ const clear = react.useCallback(() => setSelection(null), []);
58
+ const api = react.useMemo(
59
+ () => ({ register, inspect, inspectChart, findVisibleRow, findRow, clear }),
60
+ [register, inspect, inspectChart, findVisibleRow, findRow, clear]
61
+ );
62
+ const owner = selection && sources.current.get(selection.owner);
63
+ const trace = selection && owner && owner.revision === selection.revision ? owner.resolve(selection.kind, selection.id) : void 0;
64
+ const stale = Boolean(selection && !trace);
65
+ react.useEffect(() => {
66
+ if (stale) setSelection(null);
67
+ }, [stale, version]);
68
+ const chart = [...sources.current.values()].find(
69
+ (source) => source.role === "chart"
70
+ );
71
+ const state = react.useMemo(
72
+ () => ({
73
+ selection: stale ? null : selection,
74
+ trace,
75
+ targets: [...sources.current].filter(
76
+ ([, source], index, all) => source.role === "chart" ? all.findIndex(([, item]) => item.role === "chart") === index : true
77
+ ).flatMap(
78
+ ([owner2, source]) => (source.targets?.() ?? []).map((target) => ({ ...target, owner: owner2 }))
79
+ ),
80
+ legendItems: chart?.legendItems,
81
+ version
82
+ }),
83
+ // The source map is a ref; version records each change to it.
84
+ // eslint-disable-next-line react-hooks/exhaustive-deps
85
+ [selection, stale, trace, version]
86
+ );
87
+ return /* @__PURE__ */ jsxRuntime.jsx(ApiContext.Provider, { value: api, children: /* @__PURE__ */ jsxRuntime.jsx(StateContext.Provider, { value: state, children }) });
88
+ }
89
+ function useChartTraceApi() {
90
+ return react.useContext(ApiContext);
91
+ }
92
+ function useChartTrace() {
93
+ return react.useContext(StateContext);
94
+ }
95
+ function useTraceSource(owner, source) {
96
+ const api = useChartTraceApi();
97
+ const register = api?.register;
98
+ react.useEffect(() => {
99
+ if (!source) return;
100
+ return register?.(owner, source);
101
+ }, [owner, register, source]);
102
+ }
103
+ function useTraceRevision(settings) {
104
+ const nonce = chunk5B23JVH3_cjs.useDataLayer((state) => state.nonce);
105
+ const liveNonce = chunk5B23JVH3_cjs.useDataLayer(
106
+ (state) => state.liveItems[settings.id]?.nonce ?? 0
107
+ );
108
+ return `${nonce}:${liveNonce}`;
109
+ }
110
+
111
+ // src/components/charts/trace/traceTypes.ts
112
+ function resolveGuideTrace(axes, id, revision) {
113
+ const found = chunkUUJMUPB3_cjs.findAxisGuide(axes, id);
114
+ return found && {
115
+ kind: "guide",
116
+ id,
117
+ revision,
118
+ guide: found.guide,
119
+ axis: found.axis,
120
+ axes
121
+ };
122
+ }
123
+ function guideTargets(axes) {
124
+ return [
125
+ ...axes.x.gridGuides,
126
+ ...axes.y.gridGuides,
127
+ ...axes.x.guides,
128
+ ...axes.y.guides
129
+ ].map((guide) => ({ kind: "guide", id: guide.id, label: guide.id }));
130
+ }
131
+
132
+ exports.ChartTraceScope = ChartTraceScope;
133
+ exports.guideTargets = guideTargets;
134
+ exports.resolveGuideTrace = resolveGuideTrace;
135
+ exports.useChartTrace = useChartTrace;
136
+ exports.useChartTraceApi = useChartTraceApi;
137
+ exports.useTraceRevision = useTraceRevision;
138
+ exports.useTraceSource = useTraceSource;
139
+ //# sourceMappingURL=chunk-TRAIXZ6M.cjs.map
140
+ //# sourceMappingURL=chunk-TRAIXZ6M.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/charts/trace/ChartTraceScope.tsx","../src/components/charts/trace/traceTypes.ts"],"names":["createContext","useRef","useState","useCallback","owner","useMemo","useEffect","jsx","useContext","useDataLayer","findAxisGuide"],"mappings":"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","file":"chunk-TRAIXZ6M.cjs","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport type { ChartSettings } from \"@/types/ChartTypes\";\nimport type {\n ChartTrace,\n TraceSelection,\n TraceSource,\n TraceTarget,\n} from \"./traceTypes\";\n\ninterface TraceApi {\n register: (owner: string, source: TraceSource) => () => void;\n inspect: (owner: string, kind: string, id: string) => boolean;\n inspectChart: (kind: string, id: string) => boolean;\n findVisibleRow: (id: number) => boolean;\n findRow: (id: number) => boolean;\n clear: () => void;\n}\n\ninterface TraceState {\n selection: TraceSelection | null;\n trace: ChartTrace | undefined;\n targets: (TraceTarget & { owner: string })[];\n legendItems: TraceSource[\"legendItems\"];\n version: number;\n}\n\nconst ApiContext = createContext<TraceApi | null>(null);\nconst StateContext = createContext<TraceState | null>(null);\n\n/**\n * One inspector for a chart panel. The chart, its facets, its legend and its\n * title register as sources. A selection keeps only an owner, a kind, an id\n * and the revision it was made under; its trace is resolved from the owner's\n * current plan on every render.\n */\nexport function ChartTraceScope({ children }: { children: ReactNode }) {\n const sources = useRef(new Map<string, TraceSource>());\n const [version, setVersion] = useState(0);\n const [selection, setSelection] = useState<TraceSelection | null>(null);\n\n const register = useCallback((owner: string, source: TraceSource) => {\n sources.current.set(owner, source);\n setVersion((value) => value + 1);\n return () => {\n if (sources.current.get(owner) !== source) return;\n sources.current.delete(owner);\n setVersion((value) => value + 1);\n };\n }, []);\n\n const inspect = useCallback((owner: string, kind: string, id: string) => {\n const source = sources.current.get(owner);\n if (!source?.resolve(kind, id)) return false;\n setSelection({ owner, kind, id, revision: source.revision });\n return true;\n }, []);\n\n const chartOwner = () =>\n [...sources.current].find(([, source]) => source.role === \"chart\")?.[0];\n\n const inspectChart = useCallback((kind: string, id: string) => {\n const owner = chartOwner();\n return owner ? inspect(owner, kind, id) : false;\n }, [inspect]);\n\n const findVisibleRow = useCallback(\n (id: number) => {\n for (const [owner, source] of sources.current) {\n if (source.role !== \"chart\") continue;\n const found = source.findRow?.(id);\n if (found && found !== \"pending\" && inspect(owner, found.kind, found.id))\n return true;\n }\n return false;\n },\n [inspect]\n );\n\n const findRow = useCallback(\n (id: number) => {\n if (findVisibleRow(id)) return true;\n for (const source of sources.current.values()) {\n if (source.role !== \"chart\" && source.findRow?.(id) === \"pending\")\n return true;\n }\n return false;\n },\n [findVisibleRow]\n );\n\n const clear = useCallback(() => setSelection(null), []);\n\n const api = useMemo(\n () => ({ register, inspect, inspectChart, findVisibleRow, findRow, clear }),\n [register, inspect, inspectChart, findVisibleRow, findRow, clear]\n );\n\n const owner = selection && sources.current.get(selection.owner);\n const trace =\n selection && owner && owner.revision === selection.revision\n ? owner.resolve(selection.kind, selection.id)\n : undefined;\n const stale = Boolean(selection && !trace);\n useEffect(() => {\n // One rule for every chart: a selection whose revision changed, or whose\n // object is no longer drawn, closes rather than showing an old trace.\n if (stale) setSelection(null);\n }, [stale, version]);\n\n const chart = [...sources.current.values()].find(\n (source) => source.role === \"chart\"\n );\n const state = useMemo(\n () => ({\n selection: stale ? null : selection,\n trace,\n targets: [...sources.current]\n .filter(([, source], index, all) =>\n source.role === \"chart\"\n ? all.findIndex(([, item]) => item.role === \"chart\") === index\n : true\n )\n .flatMap(([owner, source]) =>\n (source.targets?.() ?? []).map((target) => ({ ...target, owner }))\n ),\n legendItems: chart?.legendItems,\n version,\n }),\n // The source map is a ref; version records each change to it.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selection, stale, trace, version]\n );\n\n return (\n <ApiContext.Provider value={api}>\n <StateContext.Provider value={state}>{children}</StateContext.Provider>\n </ApiContext.Provider>\n );\n}\n\nexport function useChartTraceApi() {\n return useContext(ApiContext);\n}\n\nexport function useChartTrace() {\n return useContext(StateContext);\n}\n\n/** Registers a trace source while the component is mounted. */\nexport function useTraceSource(owner: string, source: TraceSource | null) {\n const api = useChartTraceApi();\n const register = api?.register;\n useEffect(() => {\n if (!source) return;\n return register?.(owner, source);\n }, [owner, register, source]);\n}\n\n/** The data revision every trace source uses: data edits and this chart's rows. */\nexport function useTraceRevision(settings: ChartSettings) {\n const nonce = useDataLayer((state) => state.nonce);\n const liveNonce = useDataLayer(\n (state) => state.liveItems[settings.id]?.nonce ?? 0\n );\n return `${nonce}:${liveNonce}`;\n}\n","import type { RowCalculationTrace } from \"@/lib/calculations/CalculationState\";\nimport type { planNumericalLegend } from \"@/lib/colorScaleMath\";\nimport type { datum } from \"@/types/ChartTypes\";\nimport {\n findAxisGuide,\n type AxisGuide,\n type AxisPlan,\n type ChartAxesPlan,\n} from \"../Axis/axisPlan\";\nimport type { FacetLayoutPlan } from \"../FacetRelated/facetLayout\";\nimport type { BarTrace } from \"../BarChart/barTrace\";\nimport type { ScatterTrace } from \"../ScatterPlot/scatterTrace\";\n\n/** A selected object. The owner's source resolves it against its current plan. */\nexport interface TraceSelection {\n owner: string;\n kind: string;\n id: string;\n revision: string;\n}\n\nexport interface TraceTarget {\n kind: string;\n id: string;\n label: string;\n}\n\nexport interface GuideTrace {\n kind: \"guide\";\n id: string;\n revision: string;\n guide: AxisGuide;\n axis: AxisPlan;\n axes: ChartAxesPlan;\n}\n\nexport interface TitleTrace {\n kind: \"title\";\n id: string;\n revision: string;\n text: string;\n source: \"chart-setting\" | \"field-label\";\n field?: string;\n}\n\nexport interface FacetHeadingTrace {\n field: string;\n value: datum;\n label: string;\n raw?: datum;\n sampleSourceId?: number;\n calculation?: RowCalculationTrace;\n}\n\nexport interface FacetTrace {\n kind: \"facet\";\n id: string;\n revision: string;\n role: \"panel\" | \"row-heading\" | \"column-heading\";\n row?: FacetHeadingTrace;\n column?: FacetHeadingTrace;\n layout: FacetLayoutPlan;\n sourceIds: number[];\n chartIds: number[];\n}\n\nexport interface LegendTrace {\n kind: \"legend\";\n id: string;\n revision: string;\n field: string;\n fieldLabel: string;\n scaleId: string;\n scaleType: \"categorical\" | \"numerical\";\n palette: string | string[];\n domain?: [number, number];\n item?: {\n id: string;\n label: string;\n color: string;\n count: number;\n selected: boolean;\n };\n rowIds: number[];\n numericalPlan?: ReturnType<typeof planNumericalLegend>;\n}\n\nexport type ChartTrace =\n | ScatterTrace\n | BarTrace\n | GuideTrace\n | TitleTrace\n | FacetTrace\n | LegendTrace;\n\n/** A planned legend entry that a chart owns, so the legend draws what the chart drew. */\nexport interface PlannedLegendItem {\n id: string;\n value: datum;\n label: string;\n count: number;\n color: string;\n selected: boolean;\n}\n\nexport interface TraceSource {\n role: \"chart\" | \"facets\" | \"legend\" | \"title\";\n /** Data revision. A selection made under another revision is stale. */\n revision: string;\n resolve(kind: string, id: string): ChartTrace | undefined;\n /** Returns the object that draws this source row, or \"pending\" while a view changes to show it. */\n findRow?(id: number): { kind: string; id: string } | \"pending\" | undefined;\n targets?(): TraceTarget[];\n legendItems?: PlannedLegendItem[];\n}\n\nexport function resolveGuideTrace(\n axes: ChartAxesPlan,\n id: string,\n revision: string\n): GuideTrace | undefined {\n const found = findAxisGuide(axes, id);\n return found && {\n kind: \"guide\",\n id,\n revision,\n guide: found.guide,\n axis: found.axis,\n axes,\n };\n}\n\nexport function guideTargets(axes: ChartAxesPlan): TraceTarget[] {\n return [\n ...axes.x.gridGuides,\n ...axes.y.gridGuides,\n ...axes.x.guides,\n ...axes.y.guides,\n ].map((guide) => ({ kind: \"guide\", id: guide.id, label: guide.id }));\n}\n"]}
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ var chunk7GBZIK2R_cjs = require('./chunk-7GBZIK2R.cjs');
4
+
5
+ // src/utils/defaultSettings.ts
6
+ var DEFAULT_AXIS_SETTINGS = {
7
+ scaleType: "linear",
8
+ grid: false,
9
+ min: 0,
10
+ max: 100
11
+ };
12
+ var DEFAULT_MARGIN_SETTINGS = {
13
+ top: 20,
14
+ right: 20,
15
+ bottom: 20,
16
+ left: 20
17
+ };
18
+ var DEFAULT_FACET_SETTINGS = {
19
+ enabled: false,
20
+ type: "wrap",
21
+ rowVariable: "",
22
+ columnCount: 2
23
+ };
24
+ var DEFAULT_CHART_SETTINGS = {
25
+ title: "",
26
+ type: "row",
27
+ field: "",
28
+ layout: { x: 0, y: 0, w: 12, h: 7 },
29
+ xAxis: DEFAULT_AXIS_SETTINGS,
30
+ yAxis: DEFAULT_AXIS_SETTINGS,
31
+ margin: DEFAULT_MARGIN_SETTINGS,
32
+ facet: DEFAULT_FACET_SETTINGS,
33
+ colorScaleId: void 0,
34
+ colorField: void 0,
35
+ xAxisLabel: "",
36
+ yAxisLabel: "",
37
+ xGridLines: 5,
38
+ yGridLines: 5,
39
+ filters: []
40
+ };
41
+ ({
42
+ ...DEFAULT_CHART_SETTINGS});
43
+ var DEFAULT_ROW_SETTINGS = {
44
+ ...DEFAULT_CHART_SETTINGS,
45
+ type: "row",
46
+ minRowHeight: 30,
47
+ maxRowHeight: 50,
48
+ filters: []
49
+ };
50
+ ({
51
+ ...DEFAULT_CHART_SETTINGS});
52
+ ({
53
+ ...DEFAULT_CHART_SETTINGS});
54
+ ({
55
+ ...DEFAULT_CHART_SETTINGS});
56
+ function mergeWithDefaultSettings(settings) {
57
+ const def = chunk7GBZIK2R_cjs.getChartDefinition(settings.type);
58
+ const defaults = def.createDefaultSettings(settings.layout, settings.field);
59
+ return {
60
+ ...defaults,
61
+ ...settings,
62
+ xAxis: { ...DEFAULT_AXIS_SETTINGS, ...settings.xAxis },
63
+ yAxis: { ...DEFAULT_AXIS_SETTINGS, ...settings.yAxis },
64
+ margin: { ...DEFAULT_MARGIN_SETTINGS, ...settings.margin },
65
+ facet: { ...DEFAULT_FACET_SETTINGS, ...settings.facet }
66
+ };
67
+ }
68
+
69
+ exports.DEFAULT_AXIS_SETTINGS = DEFAULT_AXIS_SETTINGS;
70
+ exports.DEFAULT_CHART_SETTINGS = DEFAULT_CHART_SETTINGS;
71
+ exports.DEFAULT_ROW_SETTINGS = DEFAULT_ROW_SETTINGS;
72
+ exports.mergeWithDefaultSettings = mergeWithDefaultSettings;
73
+ //# sourceMappingURL=chunk-U74A5VK5.cjs.map
74
+ //# sourceMappingURL=chunk-U74A5VK5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/defaultSettings.ts"],"names":["getChartDefinition"],"mappings":";;;;;AAeO,IAAM,qBAAsC,GAAA;AAAA,EACjD,SAAW,EAAA,QAAA;AAAA,EACX,IAAM,EAAA,KAAA;AAAA,EACN,GAAK,EAAA,CAAA;AAAA,EACL,GAAK,EAAA;AACP;AAEO,IAAM,uBAA0C,GAAA;AAAA,EACrD,GAAK,EAAA,EAAA;AAAA,EACL,KAAO,EAAA,EAAA;AAAA,EACP,MAAQ,EAAA,EAAA;AAAA,EACR,IAAM,EAAA;AACR,CAAA;AAEO,IAAM,sBAA4C,GAAA;AAAA,EACvD,OAAS,EAAA,KAAA;AAAA,EACT,IAAM,EAAA,MAAA;AAAA,EACN,WAAa,EAAA,EAAA;AAAA,EACb,WAAa,EAAA;AACf,CAAA;AAEO,IAAM,sBAAwD,GAAA;AAAA,EACnE,KAAO,EAAA,EAAA;AAAA,EACP,IAAM,EAAA,KAAA;AAAA,EACN,KAAO,EAAA,EAAA;AAAA,EACP,MAAA,EAAQ,EAAE,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,CAAA,EAAG,EAAI,EAAA,CAAA,EAAG,CAAE,EAAA;AAAA,EAClC,KAAO,EAAA,qBAAA;AAAA,EACP,KAAO,EAAA,qBAAA;AAAA,EACP,MAAQ,EAAA,uBAAA;AAAA,EACR,KAAO,EAAA,sBAAA;AAAA,EACP,YAAc,EAAA,MAAA;AAAA,EACd,UAAY,EAAA,MAAA;AAAA,EACZ,UAAY,EAAA,EAAA;AAAA,EACZ,UAAY,EAAA,EAAA;AAAA,EACZ,UAAY,EAAA,CAAA;AAAA,EACZ,UAAY,EAAA,CAAA;AAAA,EACZ,SAAS;AACX;CAEsE;AAAA,EACpE,GAAG,sBAKL;AAEO,IAAM,oBAAqD,GAAA;AAAA,EAChE,GAAG,sBAAA;AAAA,EACH,IAAM,EAAA,KAAA;AAAA,EACN,YAAc,EAAA,EAAA;AAAA,EACd,YAAc,EAAA,EAAA;AAAA,EACd,SAAS;AACX;CAEyE;AAAA,EACvE,GAAG,sBAKL;CAE0E;AAAA,EACxE,GAAG,sBAIL;CAE0E;AAAA,EACxE,GAAG,sBAOL;AAEO,SAAS,yBACd,QACG,EAAA;AACH,EAAM,MAAA,GAAA,GAAMA,oCAAmB,CAAA,QAAA,CAAS,IAAI,CAAA;AAC5C,EAAA,MAAM,WAAW,GAAI,CAAA,qBAAA,CAAsB,QAAS,CAAA,MAAA,EAAQ,SAAS,KAAK,CAAA;AAC1E,EAAO,OAAA;AAAA,IACL,GAAG,QAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,OAAO,EAAE,GAAG,qBAAuB,EAAA,GAAG,SAAS,KAAM,EAAA;AAAA,IACrD,OAAO,EAAE,GAAG,qBAAuB,EAAA,GAAG,SAAS,KAAM,EAAA;AAAA,IACrD,QAAQ,EAAE,GAAG,uBAAyB,EAAA,GAAG,SAAS,MAAO,EAAA;AAAA,IACzD,OAAO,EAAE,GAAG,sBAAwB,EAAA,GAAG,SAAS,KAAM;AAAA,GACxD;AACF","file":"chunk-U74A5VK5.cjs","sourcesContent":["import { getChartDefinition } from \"@/charts/registry\";\nimport {\n AxisSettings,\n BaseChartSettings,\n ChartSettings,\n MarginSettings,\n RowChartSettings,\n WrapFacetSettings,\n} from \"@/types/ChartTypes\";\nimport { Filter } from \"@/types/FilterTypes\";\nimport { DataTableSettings } from \"@/components/charts/DataTable/definition\";\nimport { PivotTableSettings } from \"@/components/charts/PivotTable/definition\";\nimport { ScatterPlotSettings } from \"@/components/charts/ScatterPlot/definition\";\nimport { SummaryTableSettings } from \"@/components/charts/SummaryTable/definition\";\n\nexport const DEFAULT_AXIS_SETTINGS: AxisSettings = {\n scaleType: \"linear\",\n grid: false,\n min: 0,\n max: 100,\n};\n\nexport const DEFAULT_MARGIN_SETTINGS: MarginSettings = {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n};\n\nexport const DEFAULT_FACET_SETTINGS: WrapFacetSettings = {\n enabled: false,\n type: \"wrap\",\n rowVariable: \"\",\n columnCount: 2,\n};\n\nexport const DEFAULT_CHART_SETTINGS: Omit<BaseChartSettings, \"id\"> = {\n title: \"\",\n type: \"row\",\n field: \"\",\n layout: { x: 0, y: 0, w: 12, h: 7 },\n xAxis: DEFAULT_AXIS_SETTINGS,\n yAxis: DEFAULT_AXIS_SETTINGS,\n margin: DEFAULT_MARGIN_SETTINGS,\n facet: DEFAULT_FACET_SETTINGS,\n colorScaleId: undefined,\n colorField: undefined,\n xAxisLabel: \"\",\n yAxisLabel: \"\",\n xGridLines: 5,\n yGridLines: 5,\n filters: [] as Filter[],\n};\n\nexport const DEFAULT_PIVOT_SETTINGS: Omit<PivotTableSettings, \"id\"> = {\n ...DEFAULT_CHART_SETTINGS,\n type: \"pivot\",\n rowFields: [],\n columnField: \"\",\n valueFields: [],\n};\n\nexport const DEFAULT_ROW_SETTINGS: Omit<RowChartSettings, \"id\"> = {\n ...DEFAULT_CHART_SETTINGS,\n type: \"row\",\n minRowHeight: 30,\n maxRowHeight: 50,\n filters: [],\n};\n\nexport const DEFAULT_SCATTER_SETTINGS: Omit<ScatterPlotSettings, \"id\"> = {\n ...DEFAULT_CHART_SETTINGS,\n type: \"scatter\",\n xField: \"\",\n yField: \"\",\n filters: [],\n};\n\nexport const DEFAULT_SUMMARY_SETTINGS: Omit<SummaryTableSettings, \"id\"> = {\n ...DEFAULT_CHART_SETTINGS,\n type: \"summary\",\n title: \"Data Summary\",\n layout: { x: 0, y: 0, w: 12, h: 8 },\n};\n\nexport const DEFAULT_DATA_TABLE_SETTINGS: Omit<DataTableSettings, \"id\"> = {\n ...DEFAULT_CHART_SETTINGS,\n type: \"data-table\",\n columns: [],\n\n sortDirection: \"asc\",\n filters: [] as Filter[],\n globalSearch: \"\",\n};\n\nexport function mergeWithDefaultSettings<T extends ChartSettings>(\n settings: T\n): T {\n const def = getChartDefinition(settings.type);\n const defaults = def.createDefaultSettings(settings.layout, settings.field);\n return {\n ...defaults,\n ...settings,\n xAxis: { ...DEFAULT_AXIS_SETTINGS, ...settings.xAxis },\n yAxis: { ...DEFAULT_AXIS_SETTINGS, ...settings.yAxis },\n margin: { ...DEFAULT_MARGIN_SETTINGS, ...settings.margin },\n facet: { ...DEFAULT_FACET_SETTINGS, ...settings.facet },\n } as T;\n}\n"]}
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ var chunkMJROUIDZ_cjs = require('./chunk-MJROUIDZ.cjs');
4
+ var chunk5B23JVH3_cjs = require('./chunk-5B23JVH3.cjs');
5
+ var react = require('react');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function NumericInputEnter({
9
+ id,
10
+ value,
11
+ onChange,
12
+ stepSmall = 1,
13
+ stepMedium = 10,
14
+ stepLarge = 100,
15
+ min,
16
+ max,
17
+ placeholder,
18
+ className
19
+ }) {
20
+ const [localValue, setLocalValue] = react.useState(value.toString());
21
+ react.useEffect(() => setLocalValue(value.toString()), [value]);
22
+ const handleKeyDown = (e) => {
23
+ let delta = 0;
24
+ if (e.key === "ArrowUp" || e.key === "ArrowDown") {
25
+ e.preventDefault();
26
+ const direction = e.key === "ArrowUp" ? 1 : -1;
27
+ if (e.shiftKey && e.altKey) {
28
+ delta = stepLarge * direction;
29
+ } else if (e.shiftKey) {
30
+ delta = stepMedium * direction;
31
+ } else {
32
+ delta = stepSmall * direction;
33
+ }
34
+ const newValue = Number(value) + delta;
35
+ const clampedValue = Math.min(
36
+ max ?? Infinity,
37
+ Math.max(min ?? -Infinity, newValue)
38
+ );
39
+ onChange(clampedValue);
40
+ setLocalValue(clampedValue.toString());
41
+ }
42
+ };
43
+ const handleChange = (e) => {
44
+ setLocalValue(e.target.value);
45
+ const newValue = parseFloat(e.target.value);
46
+ if (!isNaN(newValue)) {
47
+ if ((min === void 0 || newValue >= min) && (max === void 0 || newValue <= max)) {
48
+ onChange(newValue);
49
+ }
50
+ }
51
+ };
52
+ const handleBlur = () => {
53
+ setLocalValue(value.toString());
54
+ };
55
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk5B23JVH3_cjs.cn("relative max-w-[160px]", className), children: /* @__PURE__ */ jsxRuntime.jsx(
56
+ chunkMJROUIDZ_cjs.Input,
57
+ {
58
+ id,
59
+ type: "number",
60
+ value: localValue,
61
+ onChange: handleChange,
62
+ onKeyDown: handleKeyDown,
63
+ onBlur: handleBlur,
64
+ min,
65
+ max,
66
+ placeholder,
67
+ className: `w-full`
68
+ }
69
+ ) });
70
+ }
71
+
72
+ exports.NumericInputEnter = NumericInputEnter;
73
+ //# sourceMappingURL=chunk-UAVDLBTA.cjs.map
74
+ //# sourceMappingURL=chunk-UAVDLBTA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/NumericInputEnter.tsx"],"names":["useState","useEffect","cn","jsx","Input"],"mappings":";;;;;;;AAiBO,SAAS,iBAAkB,CAAA;AAAA,EAChC,EAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAY,GAAA,CAAA;AAAA,EACZ,UAAa,GAAA,EAAA;AAAA,EACb,SAAY,GAAA,GAAA;AAAA,EACZ,GAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,CAAC,UAAY,EAAA,aAAa,IAAIA,cAAiB,CAAA,KAAA,CAAM,UAAU,CAAA;AAErE,EAAUC,eAAA,CAAA,MAAM,cAAc,KAAM,CAAA,QAAA,EAAU,CAAG,EAAA,CAAC,KAAK,CAAC,CAAA;AAExD,EAAM,MAAA,aAAA,GAAgB,CAAC,CAAuC,KAAA;AAC5D,IAAA,IAAI,KAAQ,GAAA,CAAA;AAGZ,IAAA,IAAI,CAAE,CAAA,GAAA,KAAQ,SAAa,IAAA,CAAA,CAAE,QAAQ,WAAa,EAAA;AAChD,MAAA,CAAA,CAAE,cAAe,EAAA;AACjB,MAAA,MAAM,SAAY,GAAA,CAAA,CAAE,GAAQ,KAAA,SAAA,GAAY,CAAI,GAAA,EAAA;AAE5C,MAAI,IAAA,CAAA,CAAE,QAAY,IAAA,CAAA,CAAE,MAAQ,EAAA;AAC1B,QAAA,KAAA,GAAQ,SAAY,GAAA,SAAA;AAAA,OACtB,MAAA,IAAW,EAAE,QAAU,EAAA;AACrB,QAAA,KAAA,GAAQ,UAAa,GAAA,SAAA;AAAA,OAChB,MAAA;AACL,QAAA,KAAA,GAAQ,SAAY,GAAA,SAAA;AAAA;AAGtB,MAAM,MAAA,QAAA,GAAW,MAAO,CAAA,KAAK,CAAI,GAAA,KAAA;AAGjC,MAAA,MAAM,eAAe,IAAK,CAAA,GAAA;AAAA,QACxB,GAAO,IAAA,QAAA;AAAA,QACP,IAAK,CAAA,GAAA,CAAI,GAAO,IAAA,CAAA,QAAA,EAAW,QAAQ;AAAA,OACrC;AAEA,MAAA,QAAA,CAAS,YAAY,CAAA;AACrB,MAAc,aAAA,CAAA,YAAA,CAAa,UAAU,CAAA;AAAA;AACvC,GACF;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,CAA2C,KAAA;AAC/D,IAAc,aAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAE5B,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,CAAE,CAAA,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAI,IAAA,CAAC,KAAM,CAAA,QAAQ,CAAG,EAAA;AAEpB,MAAA,IAAA,CACG,QAAQ,MAAa,IAAA,QAAA,IAAY,SACjC,GAAQ,KAAA,MAAA,IAAa,YAAY,GAClC,CAAA,EAAA;AACA,QAAA,QAAA,CAAS,QAAQ,CAAA;AAAA;AACnB;AACF,GACF;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAc,aAAA,CAAA,KAAA,CAAM,UAAU,CAAA;AAAA,GAChC;AAEA,EAAA,sCACG,KAAI,EAAA,EAAA,SAAA,EAAWC,oBAAG,CAAA,wBAAA,EAA0B,SAAS,CACpD,EAAA,QAAA,kBAAAC,cAAA;AAAA,IAACC,uBAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,IAAK,EAAA,QAAA;AAAA,MACL,KAAO,EAAA,UAAA;AAAA,MACP,QAAU,EAAA,YAAA;AAAA,MACV,SAAW,EAAA,aAAA;AAAA,MACX,MAAQ,EAAA,UAAA;AAAA,MACR,GAAA;AAAA,MACA,GAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAW,EAAA,CAAA,MAAA;AAAA;AAAA,GAEf,EAAA,CAAA;AAEJ","file":"chunk-UAVDLBTA.cjs","sourcesContent":["import { cn } from \"@/lib/utils\";\nimport { Input } from \"./ui/input\";\nimport { KeyboardEvent, useEffect, useState } from \"react\";\n\nexport interface NumericInputEnterProps {\n id?: string;\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n stepSmall?: number;\n stepMedium?: number;\n stepLarge?: number;\n placeholder?: string;\n className?: string;\n}\n\nexport function NumericInputEnter({\n id,\n value,\n onChange,\n stepSmall = 1,\n stepMedium = 10,\n stepLarge = 100,\n min,\n max,\n placeholder,\n className,\n}: NumericInputEnterProps) {\n const [localValue, setLocalValue] = useState<string>(value.toString());\n\n useEffect(() => setLocalValue(value.toString()), [value]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n let delta = 0;\n\n // Handle arrow keys with modifiers\n if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n const direction = e.key === \"ArrowUp\" ? 1 : -1;\n\n if (e.shiftKey && e.altKey) {\n delta = stepLarge * direction;\n } else if (e.shiftKey) {\n delta = stepMedium * direction;\n } else {\n delta = stepSmall * direction;\n }\n\n const newValue = Number(value) + delta;\n\n // Clamp value within min/max bounds\n const clampedValue = Math.min(\n max ?? Infinity,\n Math.max(min ?? -Infinity, newValue)\n );\n\n onChange(clampedValue);\n setLocalValue(clampedValue.toString());\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n\n const newValue = parseFloat(e.target.value);\n if (!isNaN(newValue)) {\n // Only update if within bounds\n if (\n (min === undefined || newValue >= min) &&\n (max === undefined || newValue <= max)\n ) {\n onChange(newValue);\n }\n }\n };\n\n const handleBlur = () => {\n setLocalValue(value.toString());\n };\n\n return (\n <div className={cn(\"relative max-w-[160px]\", className)}>\n <Input\n id={id}\n type=\"number\"\n value={localValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n min={min}\n max={max}\n placeholder={placeholder}\n className={`w-full`}\n />\n </div>\n );\n}\n"]}