@carto/ps-react-ui 4.8.0 → 4.9.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 (75) hide show
  1. package/dist/range-l4fNHLEg.js +213 -0
  2. package/dist/range-l4fNHLEg.js.map +1 -0
  3. package/dist/resolve-theme-color-BdojIw0K.js +47 -0
  4. package/dist/resolve-theme-color-BdojIw0K.js.map +1 -0
  5. package/dist/table-CQCAnDLb.js +388 -0
  6. package/dist/table-CQCAnDLb.js.map +1 -0
  7. package/dist/types/widgets-v2/bar/types.d.ts +8 -3
  8. package/dist/types/widgets-v2/category/types.d.ts +8 -4
  9. package/dist/types/widgets-v2/formula/types.d.ts +10 -7
  10. package/dist/types/widgets-v2/histogram/types.d.ts +7 -3
  11. package/dist/types/widgets-v2/index.d.ts +1 -0
  12. package/dist/types/widgets-v2/pie/types.d.ts +10 -3
  13. package/dist/types/widgets-v2/range/range-ui.d.ts +12 -4
  14. package/dist/types/widgets-v2/range/range.d.ts +13 -8
  15. package/dist/types/widgets-v2/scatterplot/types.d.ts +7 -3
  16. package/dist/types/widgets-v2/table/style.d.ts +0 -4
  17. package/dist/types/widgets-v2/table/table-ui.d.ts +7 -1
  18. package/dist/types/widgets-v2/table/table.d.ts +1 -1
  19. package/dist/types/widgets-v2/table/types.d.ts +13 -2
  20. package/dist/types/widgets-v2/timeseries/types.d.ts +7 -3
  21. package/dist/types/widgets-v2/types.d.ts +25 -0
  22. package/dist/types/widgets-v2/utils/index.d.ts +1 -0
  23. package/dist/types/widgets-v2/utils/resolve-theme-color.d.ts +18 -0
  24. package/dist/types/widgets-v2/utils/resolve-theme-color.test.d.ts +1 -0
  25. package/dist/widgets-v2/bar.js +58 -55
  26. package/dist/widgets-v2/bar.js.map +1 -1
  27. package/dist/widgets-v2/histogram.js +65 -62
  28. package/dist/widgets-v2/histogram.js.map +1 -1
  29. package/dist/widgets-v2/pie.js +100 -94
  30. package/dist/widgets-v2/pie.js.map +1 -1
  31. package/dist/widgets-v2/range.js +1 -1
  32. package/dist/widgets-v2/scatterplot.js +107 -101
  33. package/dist/widgets-v2/scatterplot.js.map +1 -1
  34. package/dist/widgets-v2/table.js +2 -2
  35. package/dist/widgets-v2/timeseries.js +85 -79
  36. package/dist/widgets-v2/timeseries.js.map +1 -1
  37. package/dist/widgets-v2/utils.js +4 -3
  38. package/dist/widgets-v2.js +2 -2
  39. package/dist/widgets-v2.js.map +1 -1
  40. package/package.json +3 -3
  41. package/src/widgets-v2/bar/options.test.ts +19 -2
  42. package/src/widgets-v2/bar/options.ts +9 -3
  43. package/src/widgets-v2/bar/types.ts +8 -3
  44. package/src/widgets-v2/category/types.ts +9 -4
  45. package/src/widgets-v2/formula/types.ts +11 -7
  46. package/src/widgets-v2/histogram/options.test.ts +16 -2
  47. package/src/widgets-v2/histogram/options.ts +5 -4
  48. package/src/widgets-v2/histogram/types.ts +7 -3
  49. package/src/widgets-v2/index.ts +3 -0
  50. package/src/widgets-v2/pie/options.test.ts +20 -4
  51. package/src/widgets-v2/pie/options.ts +21 -17
  52. package/src/widgets-v2/pie/types.ts +10 -3
  53. package/src/widgets-v2/range/range-ui.test.tsx +8 -2
  54. package/src/widgets-v2/range/range-ui.tsx +81 -14
  55. package/src/widgets-v2/range/range.tsx +14 -8
  56. package/src/widgets-v2/scatterplot/options.test.ts +15 -3
  57. package/src/widgets-v2/scatterplot/options.ts +15 -11
  58. package/src/widgets-v2/scatterplot/types.ts +7 -3
  59. package/src/widgets-v2/table/style.ts +2 -5
  60. package/src/widgets-v2/table/table-ui.tsx +40 -7
  61. package/src/widgets-v2/table/table.tsx +6 -1
  62. package/src/widgets-v2/table/types.ts +13 -2
  63. package/src/widgets-v2/timeseries/options.test.ts +17 -2
  64. package/src/widgets-v2/timeseries/options.ts +10 -3
  65. package/src/widgets-v2/timeseries/types.ts +7 -3
  66. package/src/widgets-v2/types.ts +25 -0
  67. package/src/widgets-v2/utils/index.ts +1 -0
  68. package/src/widgets-v2/utils/resolve-theme-color.test.ts +43 -0
  69. package/src/widgets-v2/utils/resolve-theme-color.ts +34 -0
  70. package/dist/merge-options-DCkkHZIf.js +0 -34
  71. package/dist/merge-options-DCkkHZIf.js.map +0 -1
  72. package/dist/range-DsqTjSpg.js +0 -186
  73. package/dist/range-DsqTjSpg.js.map +0 -1
  74. package/dist/table-HIpXuq4G.js +0 -390
  75. package/dist/table-HIpXuq4G.js.map +0 -1
@@ -0,0 +1,213 @@
1
+ import { jsx as $, jsxs as G } from "react/jsx-runtime";
2
+ import { c as W } from "react/compiler-runtime";
3
+ import { u as V } from "./widget-context-DTGO0Yta.js";
4
+ import { u as X } from "./widget-store-registry-_W4Z4xp-.js";
5
+ import { useState as J } from "react";
6
+ import "zustand";
7
+ import { Box as N, Slider as Y, Typography as Z, TextField as ee } from "@mui/material";
8
+ const _ = {
9
+ root: {
10
+ display: "flex",
11
+ flexDirection: "column",
12
+ gap: 3,
13
+ py: 1
14
+ },
15
+ item: {
16
+ display: "flex",
17
+ flexDirection: "column",
18
+ gap: 1.5
19
+ },
20
+ sliderContainer: {
21
+ display: "flex",
22
+ flexDirection: "column",
23
+ gap: 1,
24
+ px: 1
25
+ },
26
+ slider: {
27
+ width: "100%",
28
+ "&.Mui-disabled": {
29
+ color: (a) => a.palette.text.disabled
30
+ }
31
+ },
32
+ inputsRow: {
33
+ display: "flex",
34
+ gap: 2,
35
+ alignItems: "center"
36
+ },
37
+ input: {
38
+ flex: 1,
39
+ "& .MuiInputBase-input": {
40
+ textAlign: "center"
41
+ }
42
+ },
43
+ note: {
44
+ color: "text.secondary"
45
+ }
46
+ };
47
+ function te(a) {
48
+ const e = W(11), {
49
+ items: n,
50
+ onChange: t,
51
+ onChangeCommitted: l,
52
+ formatter: s
53
+ } = a, o = s ?? ne;
54
+ let m;
55
+ if (e[0] !== o || e[1] !== n || e[2] !== t || e[3] !== l) {
56
+ let r;
57
+ e[5] !== o || e[6] !== t || e[7] !== l ? (r = (g, d) => /* @__PURE__ */ $(ie, { index: d, item: g, fmt: o, onChange: t, onChangeCommitted: l }, `range-${g.min}-${g.max}-${d}`), e[5] = o, e[6] = t, e[7] = l, e[8] = r) : r = e[8], m = n.map(r), e[0] = o, e[1] = n, e[2] = t, e[3] = l, e[4] = m;
58
+ } else
59
+ m = e[4];
60
+ let i;
61
+ return e[9] !== m ? (i = /* @__PURE__ */ $(N, { sx: _.root, children: m }), e[9] = m, e[10] = i) : i = e[10], i;
62
+ }
63
+ function ne(a) {
64
+ return String(a);
65
+ }
66
+ function ie(a) {
67
+ const e = W(70), {
68
+ index: n,
69
+ item: t,
70
+ fmt: l,
71
+ onChange: s,
72
+ onChangeCommitted: o
73
+ } = a;
74
+ let m;
75
+ e[0] !== t.max || e[1] !== t.min || e[2] !== t.value ? (m = t.value ?? [t.min, t.max], e[0] = t.max, e[1] = t.min, e[2] = t.value, e[3] = m) : m = e[3];
76
+ const i = m, [r, g] = J("");
77
+ let d;
78
+ e[4] !== t.max || e[5] !== t.min ? (d = (S) => {
79
+ const [f, j] = S, E = Math.min(Math.max(f, t.min), t.max), q = Math.min(Math.max(j, t.min), t.max);
80
+ return E <= q ? [E, q] : [q, E];
81
+ }, e[4] = t.max, e[5] = t.min, e[6] = d) : d = e[6];
82
+ const u = d;
83
+ let v;
84
+ e[7] !== n || e[8] !== u || e[9] !== s ? (v = (S) => {
85
+ s?.(n, u(S));
86
+ }, e[7] = n, e[8] = u, e[9] = s, e[10] = v) : v = e[10];
87
+ const A = v;
88
+ let x;
89
+ e[11] !== n || e[12] !== u || e[13] !== o ? (x = (S) => {
90
+ o?.(n, u(S));
91
+ }, e[11] = n, e[12] = u, e[13] = o, e[14] = x) : x = e[14];
92
+ const p = x;
93
+ let y;
94
+ e[15] !== n || e[16] !== u || e[17] !== s || e[18] !== o ? (y = (S) => {
95
+ const f = u(S);
96
+ s?.(n, f), o?.(n, f);
97
+ }, e[15] = n, e[16] = u, e[17] = s, e[18] = o, e[19] = y) : y = e[19];
98
+ const h = y;
99
+ let C;
100
+ e[20] !== A || e[21] !== t.max || e[22] !== t.min ? (C = (S, f) => {
101
+ if (!Array.isArray(f))
102
+ return;
103
+ const j = f[0] ?? t.min, E = f[1] ?? t.max;
104
+ A([j, E]);
105
+ }, e[20] = A, e[21] = t.max, e[22] = t.min, e[23] = C) : C = e[23];
106
+ const b = C;
107
+ let w;
108
+ e[24] !== p || e[25] !== t.max || e[26] !== t.min ? (w = (S, f) => {
109
+ if (!Array.isArray(f))
110
+ return;
111
+ const j = f[0] ?? t.min, E = f[1] ?? t.max;
112
+ p([j, E]);
113
+ }, e[24] = p, e[25] = t.max, e[26] = t.min, e[27] = w) : w = e[27];
114
+ const F = w;
115
+ let c;
116
+ e[28] !== t.color ? (c = t.color ? {
117
+ color: t.color
118
+ } : null, e[28] = t.color, e[29] = c) : c = e[29];
119
+ let R;
120
+ e[30] !== c ? (R = {
121
+ ..._.slider,
122
+ ...c
123
+ }, e[30] = c, e[31] = R) : R = e[31];
124
+ let M;
125
+ e[32] !== i ? (M = [...i], e[32] = i, e[33] = M) : M = e[33];
126
+ const K = t.min, Q = t.max, O = t.step ?? 1;
127
+ let D;
128
+ e[34] !== t.marks ? (D = le(t.marks), e[34] = t.marks, e[35] = D) : D = e[35];
129
+ let I;
130
+ e[36] !== l || e[37] !== b || e[38] !== F || e[39] !== t.disabled || e[40] !== t.max || e[41] !== t.min || e[42] !== M || e[43] !== O || e[44] !== D || e[45] !== R ? (I = /* @__PURE__ */ $(N, { sx: _.sliderContainer, children: /* @__PURE__ */ $(Y, { sx: R, value: M, min: K, max: Q, step: O, marks: D, disabled: t.disabled, valueLabelDisplay: "auto", valueLabelFormat: l, onChange: b, onChangeCommitted: F }) }), e[36] = l, e[37] = b, e[38] = F, e[39] = t.disabled, e[40] = t.max, e[41] = t.min, e[42] = M, e[43] = O, e[44] = D, e[45] = R, e[46] = I) : I = e[46];
131
+ const P = `min-${i[0]}`;
132
+ let L;
133
+ e[47] !== h || e[48] !== i || e[49] !== r || e[50] !== l || e[51] !== t || e[52] !== P ? (L = /* @__PURE__ */ $(H, { name: "min", value: i[0], item: t, fmt: l, editing: r, setEditing: g, commit: h, current: i, ariaLabel: "Minimum value" }, P), e[47] = h, e[48] = i, e[49] = r, e[50] = l, e[51] = t, e[52] = P, e[53] = L) : L = e[53];
134
+ const U = `max-${i[1]}`;
135
+ let B;
136
+ e[54] !== h || e[55] !== i || e[56] !== r || e[57] !== l || e[58] !== t || e[59] !== U ? (B = /* @__PURE__ */ $(H, { name: "max", value: i[1], item: t, fmt: l, editing: r, setEditing: g, commit: h, current: i, ariaLabel: "Maximum value" }, U), e[54] = h, e[55] = i, e[56] = r, e[57] = l, e[58] = t, e[59] = U, e[60] = B) : B = e[60];
137
+ let T;
138
+ e[61] !== L || e[62] !== B ? (T = /* @__PURE__ */ G(N, { sx: _.inputsRow, children: [
139
+ L,
140
+ B
141
+ ] }), e[61] = L, e[62] = B, e[63] = T) : T = e[63];
142
+ let k;
143
+ e[64] !== t.note ? (k = t.note ? /* @__PURE__ */ $(Z, { variant: "caption", sx: _.note, children: t.note }) : null, e[64] = t.note, e[65] = k) : k = e[65];
144
+ let z;
145
+ return e[66] !== I || e[67] !== T || e[68] !== k ? (z = /* @__PURE__ */ G(N, { sx: _.item, children: [
146
+ I,
147
+ T,
148
+ k
149
+ ] }), e[66] = I, e[67] = T, e[68] = k, e[69] = z) : z = e[69], z;
150
+ }
151
+ function H(a) {
152
+ const e = W(26), {
153
+ name: n,
154
+ value: t,
155
+ item: l,
156
+ fmt: s,
157
+ editing: o,
158
+ setEditing: m,
159
+ commit: i,
160
+ current: r,
161
+ ariaLabel: g
162
+ } = a, [d, u] = J(String(t));
163
+ let v;
164
+ e[0] !== n || e[1] !== m ? (v = () => {
165
+ m(n);
166
+ }, e[0] = n, e[1] = m, e[2] = v) : v = e[2];
167
+ const A = v;
168
+ let x, p;
169
+ if (e[3] !== i || e[4] !== r || e[5] !== n || e[6] !== m || e[7] !== t) {
170
+ let F = function(c) {
171
+ const R = parseFloat(c), M = Number.isFinite(R) ? R : t, K = n === "min" ? [M, r[1]] : [r[0], M];
172
+ i(K);
173
+ };
174
+ p = (c) => {
175
+ m(""), F(c.target.value);
176
+ }, x = (c) => {
177
+ c.key === "Enter" && (F(c.target.value), c.target.blur());
178
+ }, e[3] = i, e[4] = r, e[5] = n, e[6] = m, e[7] = t, e[8] = x, e[9] = p;
179
+ } else
180
+ x = e[8], p = e[9];
181
+ let y;
182
+ e[10] !== o || e[11] !== s || e[12] !== n || e[13] !== d ? (y = o === n ? d : s(Number(d)), e[10] = o, e[11] = s, e[12] = n, e[13] = d, e[14] = y) : y = e[14];
183
+ const h = y;
184
+ let C;
185
+ e[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (C = (F) => u(F.target.value), e[15] = C) : C = e[15];
186
+ let b;
187
+ e[16] !== g ? (b = {
188
+ "aria-label": g
189
+ }, e[16] = g, e[17] = b) : b = e[17];
190
+ let w;
191
+ return e[18] !== A || e[19] !== x || e[20] !== h || e[21] !== p || e[22] !== l.disabled || e[23] !== n || e[24] !== b ? (w = /* @__PURE__ */ $(ee, { name: n, value: h, onChange: C, onFocus: A, onBlur: p, onKeyDown: x, disabled: l.disabled, size: "small", sx: _.input, inputProps: b }), e[18] = A, e[19] = x, e[20] = h, e[21] = p, e[22] = l.disabled, e[23] = n, e[24] = b, e[25] = w) : w = e[25], w;
192
+ }
193
+ function le(a) {
194
+ if (a != null)
195
+ return typeof a == "boolean" ? a : [...a];
196
+ }
197
+ const oe = (a) => ({
198
+ data: a.data ?? [],
199
+ formatter: a.formatter
200
+ });
201
+ function ue(a) {
202
+ const e = W(5), {
203
+ onChange: n,
204
+ onChangeCommitted: t
205
+ } = a, l = V(), s = X(l, oe);
206
+ let o;
207
+ return e[0] !== n || e[1] !== t || e[2] !== s.data || e[3] !== s.formatter ? (o = /* @__PURE__ */ $(te, { items: s.data, formatter: s.formatter, onChange: n, onChangeCommitted: t }), e[0] = n, e[1] = t, e[2] = s.data, e[3] = s.formatter, e[4] = o) : o = e[4], o;
208
+ }
209
+ export {
210
+ ue as R,
211
+ te as a
212
+ };
213
+ //# sourceMappingURL=range-l4fNHLEg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-l4fNHLEg.js","sources":["../src/widgets-v2/range/style.ts","../src/widgets-v2/range/range-ui.tsx","../src/widgets-v2/range/range.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n py: 1,\n },\n item: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1.5,\n },\n sliderContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n px: 1,\n },\n slider: {\n width: '100%',\n '&.Mui-disabled': {\n color: (theme: Theme) => theme.palette.text.disabled,\n },\n },\n inputsRow: {\n display: 'flex',\n gap: 2,\n alignItems: 'center',\n },\n input: {\n flex: 1,\n '& .MuiInputBase-input': {\n textAlign: 'center',\n },\n },\n note: {\n color: 'text.secondary',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import {\n useCallback,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n} from 'react'\nimport { Box, Slider, TextField, Typography } from '@mui/material'\nimport type { RangeDataItem, RangeItemValue } from './types'\nimport { styles } from './style'\n\nexport interface RangeUIProps {\n items: readonly RangeDataItem[]\n /**\n * Fires on every pointer tick while a thumb is being dragged (mirrors\n * MUI `<Slider>`'s `onChange`). Use this to update local UI state —\n * not to persist expensive operations like remote queries.\n */\n onChange?: (index: number, value: RangeItemValue) => void\n /**\n * Fires once when the user *releases* a slider thumb after dragging,\n * after an arrow-key adjustment commits, or when the text inputs\n * blur / Enter. Mirrors MUI `<Slider>`'s `onChangeCommitted`. Use\n * this for side-effects you want to throttle to \"drag end\" — e.g.\n * writing the value to a source filter that triggers refetches.\n */\n onChangeCommitted?: (index: number, value: RangeItemValue) => void\n /** Number formatter for the slider tooltip and the text input display. */\n formatter?: (value: number) => string\n}\n\ntype Bound = 'min' | 'max'\n\n/**\n * Pure presentational component for the Range widget. Renders one MUI Slider\n * per item with editable min/max text inputs below — matching the Range v1\n * UX. Each item is always a two-thumb range; supply `value` to seed the\n * starting selection, otherwise it defaults to `[min, max]`.\n */\nexport function RangeUI({\n items,\n onChange,\n onChangeCommitted,\n formatter,\n}: RangeUIProps) {\n const fmt = formatter ?? ((n: number) => String(n))\n return (\n <Box sx={styles.root}>\n {items.map((item, i) => (\n // Composite of the row's track bounds — stable across reorders for\n // any realistic widget configuration. Falls back to a literal +\n // index when bounds collide (degenerate same-min-same-max rows).\n <RangeRow\n key={`range-${item.min}-${item.max}-${i}`}\n index={i}\n item={item}\n fmt={fmt}\n onChange={onChange}\n onChangeCommitted={onChangeCommitted}\n />\n ))}\n </Box>\n )\n}\n\ninterface RangeRowProps {\n index: number\n item: RangeDataItem\n fmt: (n: number) => string\n onChange?: (index: number, value: RangeItemValue) => void\n onChangeCommitted?: (index: number, value: RangeItemValue) => void\n}\n\nfunction RangeRow({\n index,\n item,\n fmt,\n onChange,\n onChangeCommitted,\n}: RangeRowProps) {\n const current: readonly [number, number] = item.value ?? [item.min, item.max]\n const [editing, setEditing] = useState<'' | Bound>('')\n\n // Clamp inside [min, max] and keep `low <= high`. Pulled out so both the\n // live `onChange` path and the commit path share the same normalization.\n const normalize = useCallback(\n (next: readonly [number, number]): readonly [number, number] => {\n const [lowRaw, highRaw] = next\n const low = Math.min(Math.max(lowRaw, item.min), item.max)\n const high = Math.min(Math.max(highRaw, item.min), item.max)\n return low <= high ? [low, high] : [high, low]\n },\n [item.min, item.max],\n )\n\n const commit = useCallback(\n (next: readonly [number, number]) => {\n onChange?.(index, normalize(next))\n },\n [index, normalize, onChange],\n )\n\n const commitFinal = useCallback(\n (next: readonly [number, number]) => {\n onChangeCommitted?.(index, normalize(next))\n },\n [index, normalize, onChangeCommitted],\n )\n\n // A text-input commit (blur / Enter) is both a value change AND a final\n // commit, so it fires `onChange` *and* `onChangeCommitted`. Firing both\n // keeps the widget responsive for consumers that only wired `onChange`\n // (the pre-`onChangeCommitted` API) — without it, typing a value and\n // pressing Enter would silently no-op for them.\n const commitText = useCallback(\n (next: readonly [number, number]) => {\n const value = normalize(next)\n onChange?.(index, value)\n onChangeCommitted?.(index, value)\n },\n [index, normalize, onChange, onChangeCommitted],\n )\n\n const handleSlider = (_: Event, raw: number | number[]) => {\n if (!Array.isArray(raw)) return\n // Hoist defaults out of the destructure: react-compiler can't safely\n // reorder MemberExpression defaults inside an array pattern.\n const low = raw[0] ?? item.min\n const high = raw[1] ?? item.max\n commit([low, high])\n }\n\n const handleSliderCommitted = (\n _: Event | React.SyntheticEvent,\n raw: number | number[],\n ) => {\n if (!Array.isArray(raw)) return\n const low = raw[0] ?? item.min\n const high = raw[1] ?? item.max\n commitFinal([low, high])\n }\n\n return (\n <Box sx={styles.item}>\n <Box sx={styles.sliderContainer}>\n <Slider\n sx={{\n ...styles.slider,\n ...(item.color ? { color: item.color } : null),\n }}\n value={[...current]}\n min={item.min}\n max={item.max}\n step={item.step ?? 1}\n marks={resolveMarks(item.marks)}\n disabled={item.disabled}\n valueLabelDisplay='auto'\n valueLabelFormat={fmt}\n onChange={handleSlider}\n onChangeCommitted={handleSliderCommitted}\n />\n </Box>\n <Box sx={styles.inputsRow}>\n {/* Text-input commits (blur / Enter) are final, but also notify\n `onChange` — see `commitText` — so consumers that only wired\n `onChange` still update on a typed value. */}\n <BoundInput\n // Bumping the key on a fresh external value resets the local\n // editing state — matches v1's RangeItem behaviour.\n key={`min-${current[0]}`}\n name='min'\n value={current[0]}\n item={item}\n fmt={fmt}\n editing={editing}\n setEditing={setEditing}\n commit={commitText}\n current={current}\n ariaLabel='Minimum value'\n />\n <BoundInput\n key={`max-${current[1]}`}\n name='max'\n value={current[1]}\n item={item}\n fmt={fmt}\n editing={editing}\n setEditing={setEditing}\n commit={commitText}\n current={current}\n ariaLabel='Maximum value'\n />\n </Box>\n {item.note ? (\n <Typography variant='caption' sx={styles.note}>\n {item.note}\n </Typography>\n ) : null}\n </Box>\n )\n}\n\ninterface BoundInputProps {\n name: Bound\n value: number\n item: RangeDataItem\n fmt: (n: number) => string\n editing: '' | Bound\n setEditing: (next: '' | Bound) => void\n /**\n * Called when the user commits a new value (blur / Enter). Text input\n * edits never produce intermediate \"live\" values, so the consumer\n * only needs one callback — the row wires this to `commitFinal`.\n */\n commit: (next: readonly [number, number]) => void\n current: readonly [number, number]\n ariaLabel: string\n}\n\nfunction BoundInput({\n name,\n value,\n item,\n fmt,\n editing,\n setEditing,\n commit,\n current,\n ariaLabel,\n}: BoundInputProps) {\n const [raw, setRaw] = useState<string>(String(value))\n\n const beginEditing = () => {\n setEditing(name)\n }\n const finishEditingAndCommit = (e: FocusEvent<HTMLInputElement>) => {\n setEditing('')\n commitFromText(e.target.value)\n }\n const commitOnEnter = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n commitFromText((e.target as HTMLInputElement).value)\n ;(e.target as HTMLInputElement).blur()\n }\n }\n\n function commitFromText(input: string) {\n const parsed = parseFloat(input)\n const safe = Number.isFinite(parsed) ? parsed : value\n const next: readonly [number, number] =\n name === 'min' ? [safe, current[1]] : [current[0], safe]\n commit(next)\n }\n\n const display = editing === name ? raw : fmt(Number(raw))\n\n return (\n <TextField\n name={name}\n value={display}\n onChange={(e) => setRaw(e.target.value)}\n onFocus={beginEditing}\n onBlur={finishEditingAndCommit}\n onKeyDown={commitOnEnter}\n disabled={item.disabled}\n size='small'\n sx={styles.input}\n inputProps={{ 'aria-label': ariaLabel }}\n />\n )\n}\n\nfunction resolveMarks(\n marks: RangeDataItem['marks'],\n): boolean | { value: number; label?: string }[] | undefined {\n if (marks == null) return undefined\n if (typeof marks === 'boolean') return marks\n return [...marks]\n}\n","import { useWidgetId, useWidgetShallow } from '../stores'\nimport { RangeUI } from './range-ui'\nimport type { RangeItemValue, RangeWidgetData } from './types'\n\ninterface RangeSlice {\n data: RangeWidgetData\n formatter?: (value: number) => string\n}\n\nconst rangeSelector = (s: {\n data: unknown\n formatter?: (value: number) => string\n}): RangeSlice => ({\n data: (s.data ?? []) as RangeWidgetData,\n formatter: s.formatter,\n})\n\nexport interface RangeProps {\n /**\n * Fires on every pointer tick while a thumb is being dragged. Use this\n * for cheap UI updates (local state, optimistic display).\n */\n onChange?: (index: number, value: RangeItemValue) => void\n /**\n * Fires once when the user *releases* a slider thumb (or when the text\n * inputs blur / Enter, or when an arrow-key adjustment settles). Use\n * this for expensive side-effects you want throttled to drag end —\n * e.g. writing the value to a source filter that refetches widgets.\n */\n onChangeCommitted?: (index: number, value: RangeItemValue) => void\n}\n\n/**\n * Stateful Range bridge — reads `data` (post-pipeline) and `formatter` from\n * the per-widget store and forwards them to the pure {@link RangeUI}. Per\n * the destination-owned principle, value changes flow back through\n * `onChange` (per-tick) and `onChangeCommitted` (drag end) — the consumer\n * is expected to update the data prop on `<Provider>`. Use `disabled` on\n * individual `RangeDataItem`s to disable specific rows.\n */\nexport function Range({ onChange, onChangeCommitted }: RangeProps) {\n const id = useWidgetId()\n const slice = useWidgetShallow(id, rangeSelector)\n return (\n <RangeUI\n items={slice.data}\n formatter={slice.formatter}\n onChange={onChange}\n onChangeCommitted={onChangeCommitted}\n />\n )\n}\n"],"names":["styles","root","display","flexDirection","gap","py","item","sliderContainer","px","slider","width","color","theme","palette","text","disabled","inputsRow","alignItems","input","flex","textAlign","note","RangeUI","t0","$","_c","items","onChange","onChangeCommitted","formatter","fmt","_temp","t1","t2","i","RangeRow","min","max","map","Box","n","String","index","value","current","editing","setEditing","useState","next","lowRaw","highRaw","low","Math","high","normalize","t3","next_0","commit","t4","next_1","commitFinal","t5","next_2","commitText","t6","_","raw","Array","isArray","low_0","high_0","handleSlider","t7","__0","raw_0","low_1","high_1","handleSliderCommitted","t8","t9","t10","t11","t12","t13","step","t14","marks","resolveMarks","t15","jsx","Slider","t16","t17","BoundInput","t18","t19","t20","t21","Typography","t22","jsxs","name","ariaLabel","setRaw","beginEditing","commitOnEnter","finishEditingAndCommit","commitFromText","parsed","parseFloat","safe","Number","isFinite","e","target","e_0","key","blur","Symbol","for","e_1","TextField","rangeSelector","s","data","Range","id","useWidgetId","slice","useWidgetShallow"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ function f(e, t) {
2
+ if (!t) return e;
3
+ const r = {
4
+ ...e
5
+ };
6
+ for (const n of Object.keys(t)) {
7
+ const o = e[n], i = t[n];
8
+ i !== void 0 && (r[n] = c(o, i));
9
+ }
10
+ return r;
11
+ }
12
+ function c(e, t) {
13
+ if (Array.isArray(e) && Array.isArray(t)) {
14
+ const r = Math.max(e.length, t.length), n = new Array(r);
15
+ for (let o = 0; o < r; o++) {
16
+ const i = e[o], s = t[o];
17
+ s === void 0 ? n[o] = i : i === void 0 ? n[o] = s : n[o] = c(i, s);
18
+ }
19
+ return n;
20
+ }
21
+ return u(e) && u(t) ? {
22
+ ...e,
23
+ ...t
24
+ } : t;
25
+ }
26
+ function u(e) {
27
+ if (e === null || typeof e != "object") return !1;
28
+ const t = Object.getPrototypeOf(e);
29
+ return t === Object.prototype || t === null;
30
+ }
31
+ function l(e, t) {
32
+ if (t == null) return;
33
+ if (!t.includes(".")) return t;
34
+ const r = t.split(".");
35
+ let n = e.palette;
36
+ for (const o of r) {
37
+ if (n == null || typeof n != "object")
38
+ return t;
39
+ n = n[o];
40
+ }
41
+ return typeof n == "string" ? n : t;
42
+ }
43
+ export {
44
+ f as m,
45
+ l as r
46
+ };
47
+ //# sourceMappingURL=resolve-theme-color-BdojIw0K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-theme-color-BdojIw0K.js","sources":["../src/widgets-v2/utils/merge-options.ts","../src/widgets-v2/utils/resolve-theme-color.ts"],"sourcesContent":["/**\n * Shallow-merges two ECharts option objects:\n * - Top-level keys from both are combined.\n * - Arrays are merged by index (element-wise shallow merge, primitive override).\n * - Plain objects are shallow-merged.\n * - Primitives are overridden by the override value.\n *\n * Designed for the two-stage memoization pattern: first build a base option\n * object from data + theme + formatters, then call `mergeOptions(base, override)`\n * inside a second `useMemo` keyed on `[base, override]`.\n */\nexport function mergeOptions<T extends Record<string, unknown>>(\n base: T,\n override?: Partial<T>,\n): T {\n if (!override) return base\n const out: Record<string, unknown> = { ...base }\n for (const key of Object.keys(override) as (keyof T)[]) {\n const a = base[key]\n const b = override[key]\n if (b === undefined) continue\n out[key as string] = mergeValue(a, b)\n }\n return out as T\n}\n\nfunction mergeValue(a: unknown, b: unknown): unknown {\n if (Array.isArray(a) && Array.isArray(b)) {\n const len = Math.max(a.length, b.length)\n const result = new Array<unknown>(len)\n for (let i = 0; i < len; i++) {\n const av: unknown = a[i]\n const bv: unknown = b[i]\n if (bv === undefined) result[i] = av\n else if (av === undefined) result[i] = bv\n else result[i] = mergeValue(av, bv)\n }\n return result\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n return { ...a, ...b }\n }\n return b\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n if (v === null || typeof v !== 'object') return false\n const proto = Object.getPrototypeOf(v) as unknown\n return proto === Object.prototype || proto === null\n}\n","import type { Theme } from '@mui/material'\n\n/**\n * Resolve a colour string against the MUI theme palette.\n *\n * - `'primary.main'`, `'secondary.dark'`, `'success.contrastText'`, … →\n * walks `theme.palette` along the dot-separated path and returns the\n * resolved string when traversal succeeds.\n * - `'#ff0000'`, `'rgb(255, 0, 0)'`, `'red'` → returned as-is (assumed\n * raw CSS; ECharts consumes them directly).\n * - `undefined` → `undefined` (callers fall back to ECharts' palette).\n *\n * Used by the echart option factories (Bar, Pie, Histogram, Scatterplot,\n * Timeseries) so per-series colours specified as theme paths in the\n * unified `WidgetSeries` shape paint correctly. Category, Formula, and\n * Spread render colours through MUI's `sx` resolver, which already\n * handles theme paths — they don't need this helper.\n */\nexport function resolveThemeColor(\n theme: Theme,\n raw: string | undefined,\n): string | undefined {\n if (raw == null) return undefined\n if (!raw.includes('.')) return raw\n const parts = raw.split('.')\n let cursor: unknown = theme.palette\n for (const part of parts) {\n if (cursor == null || typeof cursor !== 'object') {\n return raw\n }\n cursor = (cursor as Record<string, unknown>)[part]\n }\n return typeof cursor === 'string' ? cursor : raw\n}\n"],"names":["mergeOptions","base","override","out","key","Object","keys","a","b","undefined","mergeValue","Array","isArray","len","Math","max","length","result","i","av","bv","isPlainObject","v","proto","getPrototypeOf","prototype","resolveThemeColor","theme","raw","includes","parts","split","cursor","palette","part"],"mappings":"AAWO,SAASA,EACdC,GACAC,GACG;AACH,MAAI,CAACA,EAAU,QAAOD;AACtB,QAAME,IAA+B;AAAA,IAAE,GAAGF;AAAAA,EAAAA;AAC1C,aAAWG,KAAOC,OAAOC,KAAKJ,CAAQ,GAAkB;AACtD,UAAMK,IAAIN,EAAKG,CAAG,GACZI,IAAIN,EAASE,CAAG;AACtB,IAAII,MAAMC,WACVN,EAAIC,CAAa,IAAIM,EAAWH,GAAGC,CAAC;AAAA,EACtC;AACA,SAAOL;AACT;AAEA,SAASO,EAAWH,GAAYC,GAAqB;AACnD,MAAIG,MAAMC,QAAQL,CAAC,KAAKI,MAAMC,QAAQJ,CAAC,GAAG;AACxC,UAAMK,IAAMC,KAAKC,IAAIR,EAAES,QAAQR,EAAEQ,MAAM,GACjCC,IAAS,IAAIN,MAAeE,CAAG;AACrC,aAASK,IAAI,GAAGA,IAAIL,GAAKK,KAAK;AAC5B,YAAMC,IAAcZ,EAAEW,CAAC,GACjBE,IAAcZ,EAAEU,CAAC;AACvB,MAAIE,MAAOX,SAAWQ,EAAOC,CAAC,IAAIC,IACzBA,MAAOV,SAAWQ,EAAOC,CAAC,IAAIE,IAClCH,EAAOC,CAAC,IAAIR,EAAWS,GAAIC,CAAE;AAAA,IACpC;AACA,WAAOH;AAAAA,EACT;AACA,SAAII,EAAcd,CAAC,KAAKc,EAAcb,CAAC,IAC9B;AAAA,IAAE,GAAGD;AAAAA,IAAG,GAAGC;AAAAA,EAAAA,IAEbA;AACT;AAEA,SAASa,EAAcC,GAA0C;AAC/D,MAAIA,MAAM,QAAQ,OAAOA,KAAM,SAAU,QAAO;AAChD,QAAMC,IAAQlB,OAAOmB,eAAeF,CAAC;AACrC,SAAOC,MAAUlB,OAAOoB,aAAaF,MAAU;AACjD;AC/BO,SAASG,EACdC,GACAC,GACoB;AACpB,MAAIA,KAAO,KAAM;AACjB,MAAI,CAACA,EAAIC,SAAS,GAAG,EAAG,QAAOD;AAC/B,QAAME,IAAQF,EAAIG,MAAM,GAAG;AAC3B,MAAIC,IAAkBL,EAAMM;AAC5B,aAAWC,KAAQJ,GAAO;AACxB,QAAIE,KAAU,QAAQ,OAAOA,KAAW;AACtC,aAAOJ;AAETI,IAAAA,IAAUA,EAAmCE,CAAI;AAAA,EACnD;AACA,SAAO,OAAOF,KAAW,WAAWA,IAASJ;AAC/C;"}