@carto/ps-react-ui 4.11.0 → 4.11.1

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 (53) hide show
  1. package/dist/{change-column-BiuuHCDN.js → change-column-DjjwoPt1.js} +256 -269
  2. package/dist/change-column-DjjwoPt1.js.map +1 -0
  3. package/dist/{data-zoom-layout--YiY6ko_.js → data-zoom-layout-CkVnm6ej.js} +4 -5
  4. package/dist/{data-zoom-layout--YiY6ko_.js.map → data-zoom-layout-CkVnm6ej.js.map} +1 -1
  5. package/dist/{png-item-CS4z1iSH.js → png-item-BE9uEqlD.js} +2 -2
  6. package/dist/png-item-BE9uEqlD.js.map +1 -0
  7. package/dist/{spread-CPis22AE.js → spread-DYNpzgh_.js} +9 -11
  8. package/dist/{spread-CPis22AE.js.map → spread-DYNpzgh_.js.map} +1 -1
  9. package/dist/{table-CQCAnDLb.js → table-C9IMbTr0.js} +50 -53
  10. package/dist/table-C9IMbTr0.js.map +1 -0
  11. package/dist/widgets-v2/actions.js +2 -2
  12. package/dist/widgets-v2/bar.js +8 -10
  13. package/dist/widgets-v2/bar.js.map +1 -1
  14. package/dist/widgets-v2/category.js +27 -29
  15. package/dist/widgets-v2/category.js.map +1 -1
  16. package/dist/widgets-v2/formula.js +24 -25
  17. package/dist/widgets-v2/formula.js.map +1 -1
  18. package/dist/widgets-v2/histogram.js +10 -13
  19. package/dist/widgets-v2/histogram.js.map +1 -1
  20. package/dist/widgets-v2/markdown.js +25 -27
  21. package/dist/widgets-v2/markdown.js.map +1 -1
  22. package/dist/widgets-v2/pie.js +7 -10
  23. package/dist/widgets-v2/pie.js.map +1 -1
  24. package/dist/widgets-v2/scatterplot.js +9 -12
  25. package/dist/widgets-v2/scatterplot.js.map +1 -1
  26. package/dist/widgets-v2/spread.js +14 -16
  27. package/dist/widgets-v2/spread.js.map +1 -1
  28. package/dist/widgets-v2/table.js +38 -40
  29. package/dist/widgets-v2/table.js.map +1 -1
  30. package/dist/widgets-v2/timeseries.js +8 -11
  31. package/dist/widgets-v2/timeseries.js.map +1 -1
  32. package/dist/widgets-v2/utils.js +1 -1
  33. package/dist/widgets-v2.js +42 -45
  34. package/dist/widgets-v2.js.map +1 -1
  35. package/package.json +3 -3
  36. package/src/widgets-v2/actions/brush-toggle/brush-toggle.tsx +1 -1
  37. package/src/widgets-v2/actions/change-column/sortable-column-item.tsx +1 -1
  38. package/src/widgets-v2/actions/download/download.tsx +1 -1
  39. package/src/widgets-v2/actions/download/icons.tsx +1 -1
  40. package/src/widgets-v2/actions/fullscreen/fullscreen.tsx +3 -3
  41. package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +2 -2
  42. package/src/widgets-v2/actions/relative-data/relative-data.tsx +1 -1
  43. package/src/widgets-v2/actions/searcher/searcher-toggle.tsx +1 -1
  44. package/src/widgets-v2/actions/searcher/searcher.tsx +2 -2
  45. package/src/widgets-v2/actions/show-all/show-all.tsx +1 -1
  46. package/src/widgets-v2/actions/stack-toggle/stack-toggle.tsx +1 -1
  47. package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.tsx +1 -1
  48. package/src/widgets-v2/table/table-ui.tsx +4 -4
  49. package/src/widgets-v2/toolbox/toolbox.tsx +1 -1
  50. package/src/widgets-v2/wrapper/widget-wrapper.tsx +1 -1
  51. package/dist/change-column-BiuuHCDN.js.map +0 -1
  52. package/dist/png-item-CS4z1iSH.js.map +0 -1
  53. package/dist/table-CQCAnDLb.js.map +0 -1
@@ -1,45 +1,43 @@
1
- import { s as d, t as g } from "../table-CQCAnDLb.js";
2
- import { D as q, a as J, b as K, T as M, c as Q, d as W, e as X, p as Y, r as ee, f as te } from "../table-CQCAnDLb.js";
1
+ import { s as d, t as g } from "../table-C9IMbTr0.js";
2
+ import { D as z, a as N, b as q, T as J, c as K, d as M, e as Q, p as W, r as X, f as Y } from "../table-C9IMbTr0.js";
3
3
  import { jsx as r, jsxs as v } from "react/jsx-runtime";
4
4
  import { c as _ } from "react/compiler-runtime";
5
- import { TableHead as w, TableRow as p, TableBody as x, TableCell as u, Skeleton as h, Box as E, Table as A } from "@mui/material";
5
+ import { TableHead as w, TableRow as u, TableBody as x, TableCell as h, Skeleton as p, Box as E, Table as A } from "@mui/material";
6
6
  import "react";
7
- import "@mui/icons-material/FileDownload";
7
+ import "@mui/icons-material";
8
8
  import "../lasso-tool-CDFj4zKY.js";
9
9
  import "../cjs-D4KH3azB.js";
10
- import "@mui/icons-material";
11
10
  import "@carto/ps-utils";
12
11
  import "html2canvas";
13
- import "@mui/icons-material/ImageOutlined";
14
- import { b as L } from "../png-item-CS4z1iSH.js";
15
- function H(t) {
12
+ import { b as L } from "../png-item-BE9uEqlD.js";
13
+ function V(t) {
16
14
  const e = _(11), {
17
15
  rows: n,
18
16
  columns: c,
19
- size: o
20
- } = t, b = n === void 0 ? 5 : n, l = c === void 0 ? 4 : c;
17
+ size: l
18
+ } = t, b = n === void 0 ? 5 : n, o = c === void 0 ? 4 : c;
21
19
  let a;
22
- e[0] !== l ? (a = /* @__PURE__ */ r(w, { children: /* @__PURE__ */ r(p, { children: Array.from({
23
- length: l
24
- }).map(C) }) }), e[0] = l, e[1] = a) : a = e[1];
25
- let i;
26
- e[2] !== b ? (i = Array.from({
27
- length: b
28
- }), e[2] = b, e[3] = i) : i = e[3];
20
+ e[0] !== o ? (a = /* @__PURE__ */ r(w, { children: /* @__PURE__ */ r(u, { children: Array.from({
21
+ length: o
22
+ }).map(C) }) }), e[0] = o, e[1] = a) : a = e[1];
29
23
  let s;
30
- e[4] !== l || e[5] !== i ? (s = /* @__PURE__ */ r(x, { children: i.map((R, f) => /* @__PURE__ */ r(p, { sx: d.row, children: Array.from({
31
- length: l
32
- }).map((D, T) => /* @__PURE__ */ r(u, { children: /* @__PURE__ */ r(h, { variant: "text", width: "70%", height: 20 }) }, `cell-${f}-${T}`)) }, `row-${f}`)) }), e[4] = l, e[5] = i, e[6] = s) : s = e[6];
24
+ e[2] !== b ? (s = Array.from({
25
+ length: b
26
+ }), e[2] = b, e[3] = s) : s = e[3];
27
+ let i;
28
+ e[4] !== o || e[5] !== s ? (i = /* @__PURE__ */ r(x, { children: s.map((R, f) => /* @__PURE__ */ r(u, { sx: d.row, children: Array.from({
29
+ length: o
30
+ }).map((D, T) => /* @__PURE__ */ r(h, { children: /* @__PURE__ */ r(p, { variant: "text", width: "70%", height: 20 }) }, `cell-${f}-${T}`)) }, `row-${f}`)) }), e[4] = o, e[5] = s, e[6] = i) : i = e[6];
33
31
  let m;
34
- return e[7] !== o || e[8] !== a || e[9] !== s ? (m = /* @__PURE__ */ r(E, { sx: d.container, "aria-label": "Table skeleton", children: /* @__PURE__ */ v(A, { size: o, sx: d.table, stickyHeader: !0, children: [
32
+ return e[7] !== l || e[8] !== a || e[9] !== i ? (m = /* @__PURE__ */ r(E, { sx: d.container, "aria-label": "Table skeleton", children: /* @__PURE__ */ v(A, { size: l, sx: d.table, stickyHeader: !0, children: [
35
33
  a,
36
- s
37
- ] }) }), e[7] = o, e[8] = a, e[9] = s, e[10] = m) : m = e[10], m;
34
+ i
35
+ ] }) }), e[7] = l, e[8] = a, e[9] = i, e[10] = m) : m = e[10], m;
38
36
  }
39
37
  function C(t, e) {
40
- return /* @__PURE__ */ r(u, { sx: d.headerCell, children: /* @__PURE__ */ r(h, { variant: "text", width: "80%", height: 24 }) }, `head-${e}`);
38
+ return /* @__PURE__ */ r(h, { sx: d.headerCell, children: /* @__PURE__ */ r(p, { variant: "text", width: "80%", height: 24 }) }, `head-${e}`);
41
39
  }
42
- function Z(t) {
40
+ function G(t) {
43
41
  const e = [];
44
42
  return t.getCaptureEl && e.push(L({
45
43
  filename: t.filename,
@@ -52,28 +50,28 @@ function Z(t) {
52
50
  resolve: () => {
53
51
  const n = g(t.getData(), t.columns), c = new Blob([n], {
54
52
  type: "text/csv;charset=utf-8;"
55
- }), o = URL.createObjectURL(c);
53
+ }), l = URL.createObjectURL(c);
56
54
  return Promise.resolve({
57
- url: o,
55
+ url: l,
58
56
  filename: `${t.filename}.csv`,
59
- revoke: () => URL.revokeObjectURL(o)
57
+ revoke: () => URL.revokeObjectURL(l)
60
58
  });
61
59
  }
62
60
  }), e;
63
61
  }
64
62
  export {
65
- q as DEFAULT_TABLE_LABELS,
66
- J as DEFAULT_TABLE_PAGE_SIZE,
67
- K as DEFAULT_TABLE_PAGE_SIZE_OPTIONS,
68
- M as Table,
69
- H as TableSkeleton,
70
- Q as TableUI,
71
- W as compareValues,
72
- Z as createTableDownloadConfig,
73
- X as deriveVisibleRows,
74
- Y as paginateRows,
75
- ee as resolveColumns,
76
- te as sortRows,
63
+ z as DEFAULT_TABLE_LABELS,
64
+ N as DEFAULT_TABLE_PAGE_SIZE,
65
+ q as DEFAULT_TABLE_PAGE_SIZE_OPTIONS,
66
+ J as Table,
67
+ V as TableSkeleton,
68
+ K as TableUI,
69
+ M as compareValues,
70
+ G as createTableDownloadConfig,
71
+ Q as deriveVisibleRows,
72
+ W as paginateRows,
73
+ X as resolveColumns,
74
+ Y as sortRows,
77
75
  g as tableDataToCsv
78
76
  };
79
77
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../src/widgets-v2/table/skeleton.tsx","../../src/widgets-v2/table/download.ts"],"sourcesContent":["import {\n Box,\n Skeleton,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableHead,\n TableRow as MuiTableRow,\n type TableProps as MuiTableProps,\n} from '@mui/material'\nimport { styles } from './style'\n\nexport interface TableSkeletonProps {\n /** Number of body rows to render. Defaults to `5` (matches v1). */\n rows?: number\n /** Number of columns to render. Defaults to `4` (matches v1). */\n columns?: number\n /**\n * Forwarded to MUI's `<Table size>` so the loading layout matches the\n * size you'll render in {@link TableUI}. Leave `undefined` (the\n * default) to use MUI's own default density.\n */\n size?: MuiTableProps['size']\n}\n\n/**\n * Loading placeholder for the Table widget. Renders the same MUI table\n * primitives that {@link TableUI} uses so the loading layout (column\n * widths, header band, row density) doesn't shift when data resolves.\n *\n * Mirrors the v1 widget's `<TableSkeleton>` structure with v2's themed\n * `styles.headerCell`.\n */\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n size,\n}: TableSkeletonProps) {\n return (\n <Box sx={styles.container} aria-label='Table skeleton'>\n <MuiTable size={size} sx={styles.table} stickyHeader>\n <TableHead>\n <MuiTableRow>\n {Array.from({ length: columns }).map((_, c) => (\n <TableCell key={`head-${c}`} sx={styles.headerCell}>\n <Skeleton variant='text' width='80%' height={24} />\n </TableCell>\n ))}\n </MuiTableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: rows }).map((_, r) => (\n <MuiTableRow key={`row-${r}`} sx={styles.row}>\n {Array.from({ length: columns }).map((__, c) => (\n <TableCell key={`cell-${r}-${c}`}>\n <Skeleton variant='text' width='70%' height={20} />\n </TableCell>\n ))}\n </MuiTableRow>\n ))}\n </TableBody>\n </MuiTable>\n </Box>\n )\n}\n","import { buildPngDownloadItem, type DownloadItem } from '../actions/download'\nimport { tableDataToCsv } from './helpers'\nimport type { TableColumn, TableWidgetData } from './types'\n\n/**\n * Download menu items for the Table widget. Always includes a CSV item\n * that pulls the latest data from the widget store via `getData()` (so\n * locked / sorted / filtered state is honored); headers come from\n * `column.label`, cells from `row[column.id]`. When `getCaptureEl` is\n * supplied, prepends a PNG item that rasterises the captured element via\n * `html2canvas`.\n */\nexport function createTableDownloadConfig(opts: {\n filename: string\n getData: () => TableWidgetData\n columns: readonly TableColumn[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (opts.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: opts.filename,\n getCaptureEl: opts.getCaptureEl,\n pixelRatio: opts.pngPixelRatio,\n backgroundColor: opts.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const csv = tableDataToCsv(opts.getData(), opts.columns)\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n return Promise.resolve({\n url,\n filename: `${opts.filename}.csv`,\n revoke: () => URL.revokeObjectURL(url),\n })\n },\n })\n return items\n}\n"],"names":["TableSkeleton","t0","$","_c","rows","t1","columns","t2","size","undefined","t3","jsx","TableHead","MuiTableRow","Array","from","length","map","_temp","t4","t5","TableBody","__0","r","styles","row","__","c_0","TableCell","Skeleton","c","t6","Box","container","jsxs","MuiTable","table","_","headerCell","createTableDownloadConfig","opts","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","backgroundColor","pngBackgroundColor","id","label","resolve","csv","tableDataToCsv","getData","blob","Blob","type","url","URL","createObjectURL","Promise","revoke","revokeObjectURL"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../src/widgets-v2/table/skeleton.tsx","../../src/widgets-v2/table/download.ts"],"sourcesContent":["import {\n Box,\n Skeleton,\n Table as MuiTable,\n TableBody,\n TableCell,\n TableHead,\n TableRow as MuiTableRow,\n type TableProps as MuiTableProps,\n} from '@mui/material'\nimport { styles } from './style'\n\nexport interface TableSkeletonProps {\n /** Number of body rows to render. Defaults to `5` (matches v1). */\n rows?: number\n /** Number of columns to render. Defaults to `4` (matches v1). */\n columns?: number\n /**\n * Forwarded to MUI's `<Table size>` so the loading layout matches the\n * size you'll render in {@link TableUI}. Leave `undefined` (the\n * default) to use MUI's own default density.\n */\n size?: MuiTableProps['size']\n}\n\n/**\n * Loading placeholder for the Table widget. Renders the same MUI table\n * primitives that {@link TableUI} uses so the loading layout (column\n * widths, header band, row density) doesn't shift when data resolves.\n *\n * Mirrors the v1 widget's `<TableSkeleton>` structure with v2's themed\n * `styles.headerCell`.\n */\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n size,\n}: TableSkeletonProps) {\n return (\n <Box sx={styles.container} aria-label='Table skeleton'>\n <MuiTable size={size} sx={styles.table} stickyHeader>\n <TableHead>\n <MuiTableRow>\n {Array.from({ length: columns }).map((_, c) => (\n <TableCell key={`head-${c}`} sx={styles.headerCell}>\n <Skeleton variant='text' width='80%' height={24} />\n </TableCell>\n ))}\n </MuiTableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: rows }).map((_, r) => (\n <MuiTableRow key={`row-${r}`} sx={styles.row}>\n {Array.from({ length: columns }).map((__, c) => (\n <TableCell key={`cell-${r}-${c}`}>\n <Skeleton variant='text' width='70%' height={20} />\n </TableCell>\n ))}\n </MuiTableRow>\n ))}\n </TableBody>\n </MuiTable>\n </Box>\n )\n}\n","import { buildPngDownloadItem, type DownloadItem } from '../actions/download'\nimport { tableDataToCsv } from './helpers'\nimport type { TableColumn, TableWidgetData } from './types'\n\n/**\n * Download menu items for the Table widget. Always includes a CSV item\n * that pulls the latest data from the widget store via `getData()` (so\n * locked / sorted / filtered state is honored); headers come from\n * `column.label`, cells from `row[column.id]`. When `getCaptureEl` is\n * supplied, prepends a PNG item that rasterises the captured element via\n * `html2canvas`.\n */\nexport function createTableDownloadConfig(opts: {\n filename: string\n getData: () => TableWidgetData\n columns: readonly TableColumn[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (opts.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: opts.filename,\n getCaptureEl: opts.getCaptureEl,\n pixelRatio: opts.pngPixelRatio,\n backgroundColor: opts.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const csv = tableDataToCsv(opts.getData(), opts.columns)\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n return Promise.resolve({\n url,\n filename: `${opts.filename}.csv`,\n revoke: () => URL.revokeObjectURL(url),\n })\n },\n })\n return items\n}\n"],"names":["TableSkeleton","t0","$","_c","rows","t1","columns","t2","size","undefined","t3","jsx","TableHead","MuiTableRow","Array","from","length","map","_temp","t4","t5","TableBody","__0","r","styles","row","__","c_0","TableCell","Skeleton","c","t6","Box","container","jsxs","MuiTable","table","_","headerCell","createTableDownloadConfig","opts","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","backgroundColor","pngBackgroundColor","id","label","resolve","csv","tableDataToCsv","getData","blob","Blob","type","url","URL","createObjectURL","Promise","revoke","revokeObjectURL"],"mappings":"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"}
@@ -15,7 +15,6 @@ import "@dnd-kit/core";
15
15
  import "@dnd-kit/sortable";
16
16
  import "@dnd-kit/utilities";
17
17
  import "react-dom";
18
- import "@mui/icons-material/ZoomIn";
19
18
  import "../widget-context-DTGO0Yta.js";
20
19
  import "zustand";
21
20
  import "zustand/vanilla";
@@ -23,11 +22,9 @@ import "zustand/middleware";
23
22
  import "zustand/react/shallow";
24
23
  import { Z as B } from "../transforms-Cdx4fkU5.js";
25
24
  import { m as H, r as U } from "../resolve-theme-color-BdojIw0K.js";
26
- import { p as W } from "../data-zoom-layout--YiY6ko_.js";
27
- import "@mui/icons-material/FileDownload";
25
+ import { p as W } from "../data-zoom-layout-CkVnm6ej.js";
28
26
  import { a as J } from "../exports-Cx-f6m6U.js";
29
- import "@mui/icons-material/ImageOutlined";
30
- import { b as Q } from "../png-item-CS4z1iSH.js";
27
+ import { b as Q } from "../png-item-BE9uEqlD.js";
31
28
  function X({
32
29
  theme: e,
33
30
  formatter: o,
@@ -119,7 +116,7 @@ function X({
119
116
  }
120
117
  };
121
118
  }
122
- function je(e) {
119
+ function De(e) {
123
120
  const {
124
121
  theme: o,
125
122
  formatter: r,
@@ -292,7 +289,7 @@ const g = {
292
289
  }) => e(1.5)
293
290
  }
294
291
  };
295
- function Ne() {
292
+ function Oe() {
296
293
  const e = q(2);
297
294
  let o;
298
295
  e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ L(S, { sx: g.graph, children: [
@@ -312,7 +309,7 @@ function te(e) {
312
309
  /* @__PURE__ */ h(w, { width: 48, height: 8 })
313
310
  ] }, `legend-${e}`);
314
311
  }
315
- function Be(e) {
312
+ function Me(e) {
316
313
  const o = [];
317
314
  return e.getCaptureEl && o.push(Q({
318
315
  filename: e.filename,
@@ -351,9 +348,9 @@ function re(e) {
351
348
  return e instanceof Date ? e.toISOString() : typeof e == "number" ? new Date(e).toISOString() : e;
352
349
  }
353
350
  export {
354
- Ne as TimeseriesSkeleton,
355
- Be as createTimeseriesDownloadConfig,
356
- je as createTimeseriesOptionFactory,
351
+ Oe as TimeseriesSkeleton,
352
+ Me as createTimeseriesDownloadConfig,
353
+ De as createTimeseriesOptionFactory,
357
354
  X as timeseriesOptions
358
355
  };
359
356
  //# sourceMappingURL=timeseries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeseries.js","sources":["../../src/widgets-v2/timeseries/options.ts","../../src/widgets-v2/timeseries/skeleton.tsx","../../src/widgets-v2/timeseries/download.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport type { CallbackDataParams } from 'echarts/types/dist/shared'\nimport {\n buildGridConfig,\n buildLegendConfig,\n createTooltipFormatter,\n createTooltipPositioner,\n niceNum,\n} from '../../widgets/utils/chart-config'\nimport { ZOOM_LAYOUT } from '../actions/zoom-toggle'\nimport type { OptionFactory } from '../echart'\nimport { mergeOptions, resolveThemeColor } from '../utils'\nimport { positionDataZoomForLegend } from '../utils/data-zoom-layout'\nimport type {\n TimeseriesEChartsOption,\n TimeseriesOptionFactoryInput,\n TimeseriesOptionsInput,\n TimeseriesWidgetData,\n} from './types'\n\n/**\n * Builds the **structural** ECharts option for a timeseries widget —\n * time x-axis, value y-axis, themed tooltip, themed legend, CARTO color\n * palette. Mirrors {@link import('../bar/options').barOptions} so all\n * four ECharts widgets share v1 look-and-feel.\n *\n * Intentional deviations from bar (timeseries-specific):\n * - **X-axis is `type: 'time'`** (not 'category'). ECharts handles\n * uneven sample spacing and zoom-level-aware label formatting.\n * `labelFormatter` is wrapped so the consumer sees a `Date`, not\n * a numeric timestamp.\n * - **Tooltip body reads `{ name, value }` rows**, same as bar, but\n * the `name` may arrive as `Date | number | string`. The\n * `labelFormatter` receives a `Date` regardless.\n *\n * Intentionally data-agnostic: no series, no dataset, no `legend.show`\n * (those depend on data and are added by the option factory's merge\n * phase via {@link createTimeseriesOptionFactory}).\n */\nexport function timeseriesOptions({\n theme,\n formatter,\n labelFormatter,\n}: TimeseriesOptionsInput): TimeseriesEChartsOption {\n // Closure shared between yAxis min/max callbacks and the label formatter,\n // so only the rounded extents are labelled (matches v1 + bar).\n let niceMin = 0\n let niceMax = 1\n\n return {\n grid: {\n left: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n // Default: no legend. Merger bumps this when there are >1 series.\n ...buildGridConfig(false, theme),\n containLabel: true,\n },\n tooltip: {\n trigger: 'axis',\n backgroundColor: theme.palette.grey[900],\n borderWidth: 0,\n padding: [parseInt(theme.spacing(1)), parseInt(theme.spacing(1))],\n textStyle: {\n color: theme.palette.common.white,\n fontSize: 11,\n fontFamily: theme.typography.caption.fontFamily,\n },\n axisPointer: { type: 'line' },\n position: createTooltipPositioner(theme),\n formatter: buildTimeseriesTooltipFormatter(formatter, labelFormatter),\n },\n // Legend styling baked here; `show` is toggled by the merger based on\n // series count.\n legend: {\n ...buildLegendConfig({ hasLegend: false }),\n },\n axisPointer: { lineStyle: { color: theme.palette.grey[400] } },\n color: [\n theme.palette.secondary.main,\n ...Object.values(\n (theme.palette as { qualitative?: { bold?: Record<string, string> } })\n .qualitative?.bold ?? {},\n ),\n ],\n xAxis: {\n type: 'time',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n padding: [parseInt(theme.spacing(0.5)), 0, 0, 0],\n margin: 0,\n hideOverlap: true,\n ...(labelFormatter && {\n formatter: (value: number) => labelFormatter(new Date(value)),\n }),\n },\n },\n yAxis: {\n type: 'value',\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black?.[4] ?? theme.palette.divider },\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom',\n inside: true,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n },\n } as TimeseriesEChartsOption\n}\n\n/**\n * Returns the timeseries widget's {@link OptionFactory} — one closure\n * that owns BOTH phases of option construction:\n *\n * - **Structural phase** (`option == null`) — builds the theme-aware\n * structural option via {@link timeseriesOptions}, optionally merging\n * the consumer-supplied `optionsOverride`. Called once by Provider to\n * seed `rawOptions` in the store.\n * - **Merge phase** (`option != null`) — fuses post-pipeline `state.data`\n * (`TimeseriesWidgetData`) into the option via the dataset API: one\n * dataset per series, each series referencing its dataset by index,\n * encoded by `name` (x — time) and `value` (y). Mirrors {@link import('../bar/options').createBarOptionFactory}:\n * series-template merge for `addStack`, reactive formatters from\n * `ctx`, `niceNum`-rounded y-axis bounds at fusion time, and\n * `positionDataZoomForLegend` layout for ZoomToggle sliders.\n */\nexport function createTimeseriesOptionFactory(\n options: TimeseriesOptionFactoryInput,\n): OptionFactory {\n const { theme, formatter, labelFormatter, optionsOverride } = options\n const series = options.series\n const smooth = options.smooth ?? true\n const area = options.area ?? false\n const selection = options.selection\n const selectionSet =\n selection && selection.length > 0\n ? new Set<string | number>(selection)\n : null\n // `name` may be Date | number | string. Normalize to the same type the\n // selection is keyed on (Date → ms) so Set lookups match.\n const normalizeName = (n: Date | number | string): string | number =>\n n instanceof Date ? n.getTime() : n\n return (option, data, ctx) => {\n if (option == null) {\n const structural = timeseriesOptions({ theme, formatter, labelFormatter })\n return optionsOverride\n ? (mergeOptions(\n structural as unknown as Record<string, unknown>,\n optionsOverride as Partial<Record<string, unknown>>,\n ) as EChartsOption)\n : structural\n }\n\n const seriesArr = Array.isArray(data) ? (data as TimeseriesWidgetData) : []\n if (seriesArr.length === 0) {\n return { ...option, dataset: [], series: [] }\n }\n const hasLegend = seriesArr.length > 1\n const seriesTemplates = Array.isArray(option.series) ? option.series : []\n const broadcastTemplate = seriesTemplates[0] ?? {}\n const baseYAxis =\n typeof option.yAxis === 'object' && !Array.isArray(option.yAxis)\n ? option.yAxis\n : {}\n const baseGrid =\n typeof option.grid === 'object' && !Array.isArray(option.grid)\n ? option.grid\n : {}\n const baseTooltip =\n typeof option.tooltip === 'object' && !Array.isArray(option.tooltip)\n ? option.tooltip\n : {}\n const baseLegend =\n typeof option.legend === 'object' && !Array.isArray(option.legend)\n ? option.legend\n : {}\n\n // Reactive (live store) formatter from ctx — distinct from the\n // closure-time `formatter` captured for the structural-build branch\n // above. RelativeData can install a percent formatter on the store\n // after the factory was constructed; the merge phase reads `ctx` to\n // pick that up. `labelFormatter` (Date → string) is structural-only —\n // not relativizable — so the merge branch reads the closure-time value.\n const liveFormatter = ctx?.formatter\n\n const { niceMinVal, niceMaxVal } = computeTimeseriesNiceBounds(seriesArr)\n\n // Zoom slider layout: when ZoomToggle has installed `dataZoom`, push the\n // slider above the legend (if any) and reserve room in the grid below.\n const dataZoomLayout = positionDataZoomForLegend(option.dataZoom, hasLegend)\n const fallbackBottom =\n typeof baseGrid.bottom === 'number' ? baseGrid.bottom : 24\n const baseBottom = hasLegend ? 56 : fallbackBottom\n const gridBottom = dataZoomLayout\n ? baseBottom + ZOOM_LAYOUT.sliderHeight + ZOOM_LAYOUT.sliderGap\n : baseBottom\n\n // Dim non-selected points via `series.itemStyle.color`. Per-row\n // `itemStyle` on dataset object-rows is silently ignored when\n // `series.encode` is in play.\n //\n // We *always* emit `itemStyle.color` (a passthrough when nothing is\n // selected), not conditionally — dropping the key between renders\n // would let ECharts' default merge keep the previous callback alive\n // and points would stay dimmed forever after an external clear.\n // Always emitting lets normal merge swap the callback in place, no\n // `replaceMerge` and no entry-animation flash on selection on/off.\n const dimItemStyle = {\n color: (params: CallbackDataParams) => {\n const datum = params.value as\n | { name?: Date | number | string }\n | undefined\n const raw = datum?.name\n const base = params.color as string\n if (!selectionSet || raw == null) return base\n return selectionSet.has(normalizeName(raw))\n ? base\n : echarts.color.modifyAlpha(base, 0.15)\n },\n }\n\n return {\n ...option,\n dataset: seriesArr.map((s) => ({ source: s as readonly object[] })),\n series: seriesArr.map((_, i) => {\n const template =\n (seriesTemplates[i] as object | undefined) ??\n (broadcastTemplate as object)\n // For line series, set BOTH `series[i].color` (legend swatch +\n // markers) AND `series[i].lineStyle.color` (the line itself) so\n // the override paints everywhere a series has a colour slot.\n const overrideColor = resolveThemeColor(theme, series?.[i]?.color)\n return {\n ...(typeof template === 'object' ? template : {}),\n type: 'line' as const,\n datasetIndex: i,\n name: series?.[i]?.name ?? `Series ${i + 1}`,\n encode: { x: 'name', y: 'value' },\n smooth,\n // When a selection is active, surface markers so the per-point\n // color callback has something to dim — a continuous line would\n // hide the visual selection feedback.\n showSymbol: selectionSet != null,\n ...(area ? { areaStyle: {} } : {}),\n emphasis: { focus: 'series' },\n itemStyle: dimItemStyle,\n ...(overrideColor\n ? { color: overrideColor, lineStyle: { color: overrideColor } }\n : {}),\n }\n }),\n legend: { ...baseLegend, show: hasLegend },\n grid: { ...baseGrid, bottom: gridBottom },\n ...(dataZoomLayout ? { dataZoom: dataZoomLayout } : {}),\n yAxis: {\n ...baseYAxis,\n min: niceMinVal,\n max: niceMaxVal,\n axisLabel: {\n ...((baseYAxis as { axisLabel?: object }).axisLabel ?? {}),\n formatter: (value: number) => {\n if (value !== niceMaxVal && value !== niceMinVal) return ''\n if (value === 0) return ''\n return liveFormatter ? liveFormatter(value) : String(value)\n },\n },\n } as EChartsOption['yAxis'],\n tooltip: {\n ...baseTooltip,\n formatter: buildTimeseriesTooltipFormatter(\n liveFormatter,\n labelFormatter,\n ),\n },\n } as EChartsOption\n }\n}\n\n/**\n * Tooltip formatter for the timeseries `{ name, value }` row shape.\n * `name` arrives as `Date | number | string` (the time-axis stores the\n * raw value the consumer supplied). The consumer's `labelFormatter`\n * expects a `Date`, so we coerce non-Date values via `new Date(...)`\n * before invoking it.\n */\nfunction buildTimeseriesTooltipFormatter(\n formatter: ((value: number) => string) | undefined,\n labelFormatter: ((value: Date) => string) | undefined,\n) {\n return createTooltipFormatter((item) => {\n const row = item.value as\n | { name?: Date | number | string; value?: number }\n | undefined\n const raw = row?.value\n const formattedValue =\n typeof raw === 'number' && formatter ? formatter(raw) : (raw ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const rawName = row?.name ?? item.name\n const name =\n labelFormatter && rawName != null\n ? labelFormatter(rawName instanceof Date ? rawName : new Date(rawName))\n : (rawName ?? '')\n return { name: String(name), seriesName, marker, value: formattedValue }\n })\n}\n\nfunction computeTimeseriesNiceBounds(seriesArr: TimeseriesWidgetData): {\n niceMinVal: number\n niceMaxVal: number\n} {\n let min = 0\n let max = -Infinity\n for (const series of seriesArr) {\n for (const d of series) {\n if (typeof d?.value !== 'number' || !Number.isFinite(d.value)) continue\n if (d.value < min) min = d.value\n if (d.value > max) max = d.value\n }\n }\n const niceMinVal = min < 0 ? niceNum(min) : 0\n const niceMaxVal = max <= 0 ? 1 : niceNum(max)\n return { niceMinVal, niceMaxVal }\n}\n","import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(1),\n height: ({ spacing }) => spacing(38),\n },\n graph: {\n position: 'relative',\n flex: '1 1 auto',\n width: '100%',\n },\n segmentA: {\n position: 'absolute',\n left: 0,\n right: '70%',\n top: '60%',\n height: 4,\n },\n segmentB: {\n position: 'absolute',\n left: '25%',\n right: '40%',\n top: '35%',\n height: 4,\n },\n segmentC: {\n position: 'absolute',\n left: '55%',\n right: 0,\n top: '50%',\n height: 4,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n\n/**\n * Loading state for the Timeseries widget. Mirrors a line chart's\n * silhouette — three thin horizontal segments at staggered offsets to\n * suggest a moving line, plus a 2-dot legend stub. Sibling-consistent\n * with Bar / Histogram / Scatter skeletons (column-flex container with\n * legend strip below).\n */\nexport function TimeseriesSkeleton() {\n return (\n <Box sx={styles.container}>\n <Box sx={styles.graph}>\n <Skeleton variant='rectangular' sx={styles.segmentA} />\n <Skeleton variant='rectangular' sx={styles.segmentB} />\n <Skeleton variant='rectangular' sx={styles.segmentC} />\n </Box>\n <Box sx={styles.legend}>\n {[0, 1].map((i) => (\n <Box key={`legend-${i}`} sx={styles.legendItem}>\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import {\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { TimeseriesWidgetData } from './types'\n\n/**\n * Download menu items for the Timeseries widget. Always includes a CSV\n * item with `time, series_1, series_2, …` columns (one row per unique time\n * across all series; ISO-8601 strings for `Date`/numeric times). When\n * `getCaptureEl` is supplied, prepends a PNG item that rasterises the\n * captured element via `html2canvas`.\n */\nexport function createTimeseriesDownloadConfig(args: {\n filename: string\n getData: () => TimeseriesWidgetData\n seriesNames?: readonly string[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const data = args.getData()\n const seriesCount = data.length\n\n // Collect every unique time, preserving insertion order.\n const timeKeys: (Date | number | string)[] = []\n const seenKeys = new Set<string>()\n for (const series of data) {\n for (const point of series) {\n const key = String(point.name)\n if (!seenKeys.has(key)) {\n seenKeys.add(key)\n timeKeys.push(point.name)\n }\n }\n }\n\n // Build a quick lookup per series for O(rows × series) emit.\n const lookups = data.map(\n (series) => new Map(series.map((p) => [String(p.name), p.value])),\n )\n\n const header: unknown[] = ['time']\n for (let i = 0; i < seriesCount; i++) {\n header.push(args.seriesNames?.[i] ?? `series_${i + 1}`)\n }\n const rows: unknown[][] = [header]\n for (const key of timeKeys) {\n const row: unknown[] = [formatTime(key)]\n const lookupKey = String(key)\n for (const lookup of lookups) row.push(lookup.get(lookupKey) ?? '')\n rows.push(row)\n }\n\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n\nfunction formatTime(v: Date | number | string): string {\n if (v instanceof Date) return v.toISOString()\n if (typeof v === 'number') return new Date(v).toISOString()\n return v\n}\n"],"names":["timeseriesOptions","theme","formatter","labelFormatter","niceMin","niceMax","grid","left","parseInt","spacing","top","right","buildGridConfig","containLabel","tooltip","trigger","backgroundColor","palette","grey","borderWidth","padding","textStyle","color","common","white","fontSize","fontFamily","typography","caption","axisPointer","type","position","createTooltipPositioner","buildTimeseriesTooltipFormatter","legend","buildLegendConfig","hasLegend","lineStyle","secondary","main","Object","values","qualitative","bold","xAxis","axisLine","show","axisTick","axisLabel","margin","hideOverlap","value","Date","yAxis","min","extent","niceNum","max","splitLine","black","divider","overlineDelicate","showMaxLabel","showMinLabel","verticalAlign","inside","String","createTimeseriesOptionFactory","options","optionsOverride","series","smooth","area","selection","selectionSet","length","Set","normalizeName","n","getTime","option","data","ctx","structural","mergeOptions","seriesArr","Array","isArray","dataset","seriesTemplates","broadcastTemplate","baseYAxis","baseGrid","baseTooltip","baseLegend","liveFormatter","niceMinVal","niceMaxVal","computeTimeseriesNiceBounds","dataZoomLayout","positionDataZoomForLegend","dataZoom","fallbackBottom","bottom","baseBottom","gridBottom","ZOOM_LAYOUT","sliderHeight","sliderGap","dimItemStyle","params","raw","name","base","has","echarts","modifyAlpha","map","s","source","_","i","template","overrideColor","resolveThemeColor","datasetIndex","encode","x","y","showSymbol","areaStyle","emphasis","focus","itemStyle","createTooltipFormatter","item","row","formattedValue","marker","seriesName","rawName","d","Number","isFinite","styles","container","display","flexDirection","justifyContent","gap","height","graph","flex","width","segmentA","segmentB","segmentC","alignItems","legendItem","TimeseriesSkeleton","$","_c","t0","Symbol","for","jsxs","Box","jsx","Skeleton","t1","_temp","createTimeseriesDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","pngBackgroundColor","id","label","resolve","getData","seriesCount","timeKeys","seenKeys","point","key","add","lookups","Map","p","header","seriesNames","rows","formatTime","lookupKey","lookup","get","handle","downloadToCSV","Promise","url","revoke","v","toISOString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCO,SAASA,EAAkB;AAAA,EAChCC,OAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,gBAAAA;AACsB,GAA4B;AAGlD,MAAIC,IAAU,GACVC,IAAU;AAEd,SAAO;AAAA,IACLC,MAAM;AAAA,MACJC,MAAMC,SAASP,EAAMQ,QAAQ,CAAC,CAAC;AAAA,MAC/BC,KAAKF,SAASP,EAAMQ,QAAQ,CAAC,CAAC;AAAA,MAC9BE,OAAOH,SAASP,EAAMQ,QAAQ,CAAC,CAAC;AAAA;AAAA,MAEhC,GAAGG,EAAgB,IAAOX,CAAK;AAAA,MAC/BY,cAAc;AAAA,IAAA;AAAA,IAEhBC,SAAS;AAAA,MACPC,SAAS;AAAA,MACTC,iBAAiBf,EAAMgB,QAAQC,KAAK,GAAG;AAAA,MACvCC,aAAa;AAAA,MACbC,SAAS,CAACZ,SAASP,EAAMQ,QAAQ,CAAC,CAAC,GAAGD,SAASP,EAAMQ,QAAQ,CAAC,CAAC,CAAC;AAAA,MAChEY,WAAW;AAAA,QACTC,OAAOrB,EAAMgB,QAAQM,OAAOC;AAAAA,QAC5BC,UAAU;AAAA,QACVC,YAAYzB,EAAM0B,WAAWC,QAAQF;AAAAA,MAAAA;AAAAA,MAEvCG,aAAa;AAAA,QAAEC,MAAM;AAAA,MAAA;AAAA,MACrBC,UAAUC,EAAwB/B,CAAK;AAAA,MACvCC,WAAW+B,EAAgC/B,GAAWC,CAAc;AAAA,IAAA;AAAA;AAAA;AAAA,IAItE+B,QAAQ;AAAA,MACN,GAAGC,EAAkB;AAAA,QAAEC,WAAW;AAAA,MAAA,CAAO;AAAA,IAAA;AAAA,IAE3CP,aAAa;AAAA,MAAEQ,WAAW;AAAA,QAAEf,OAAOrB,EAAMgB,QAAQC,KAAK,GAAG;AAAA,MAAA;AAAA,IAAE;AAAA,IAC3DI,OAAO,CACLrB,EAAMgB,QAAQqB,UAAUC,MACxB,GAAGC,OAAOC,OACPxC,EAAMgB,QACJyB,aAAaC,QAAQ,CAAA,CAC1B,CAAC;AAAA,IAEHC,OAAO;AAAA,MACLd,MAAM;AAAA,MACNe,UAAU;AAAA,QAAEC,MAAM;AAAA,MAAA;AAAA,MAClBC,UAAU;AAAA,QAAED,MAAM;AAAA,MAAA;AAAA,MAClBE,WAAW;AAAA,QACT5B,SAAS,CAACZ,SAASP,EAAMQ,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QAC/CwC,QAAQ;AAAA,QACRC,aAAa;AAAA,QACb,GAAI/C,KAAkB;AAAA,UACpBD,WAAWA,CAACiD,MAAkBhD,EAAe,IAAIiD,KAAKD,CAAK,CAAC;AAAA,QAAA;AAAA,MAC9D;AAAA,IACF;AAAA,IAEFE,OAAO;AAAA,MACLvB,MAAM;AAAA,MACNwB,KAAKA,CAACC,OACJnD,IAAUmD,EAAOD,MAAM,IAAIE,EAAQD,EAAOD,GAAG,IAAI,GAC1ClD;AAAAA,MAETqD,KAAKA,CAACF,OACJlD,IAAUkD,EAAOE,OAAO,IAAI,IAAID,EAAQD,EAAOE,GAAG,GAC3CpD;AAAAA,MAETwC,UAAU;AAAA,QAAEC,MAAM;AAAA,MAAA;AAAA,MAClBC,UAAU;AAAA,QAAED,MAAM;AAAA,MAAA;AAAA,MAClBY,WAAW;AAAA,QACTZ,MAAM;AAAA,QACNT,WAAW;AAAA,UAAEf,OAAOrB,EAAMgB,QAAQ0C,QAAQ,CAAC,KAAK1D,EAAMgB,QAAQ2C;AAAAA,QAAAA;AAAAA,MAAQ;AAAA,MAExEZ,WAAW;AAAA,QACTvB,UAAUxB,EAAM0B,WAAWkC,kBAAkBpC;AAAAA,QAC7CC,YAAYzB,EAAM0B,WAAWkC,kBAAkBnC;AAAAA,QAC/CuB,QAAQzC,SAASP,EAAMQ,QAAQ,CAAC,CAAC;AAAA,QACjCqC,MAAM;AAAA,QACNgB,cAAc;AAAA,QACdC,cAAc;AAAA,QACdC,eAAe;AAAA,QACfC,QAAQ;AAAA,QACR/D,WAAWA,CAACiD,MACNA,MAAU9C,KAAW8C,MAAU/C,KAC/B+C,MAAU,IAAU,KACjBjD,IAAYA,EAAUiD,CAAK,IAAIe,OAAOf,CAAK;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAEJ;AAkBO,SAASgB,GACdC,GACe;AACf,QAAM;AAAA,IAAEnE,OAAAA;AAAAA,IAAOC,WAAAA;AAAAA,IAAWC,gBAAAA;AAAAA,IAAgBkE,iBAAAA;AAAAA,EAAAA,IAAoBD,GACxDE,IAASF,EAAQE,QACjBC,IAASH,EAAQG,UAAU,IAC3BC,IAAOJ,EAAQI,QAAQ,IACvBC,IAAYL,EAAQK,WACpBC,IACJD,KAAaA,EAAUE,SAAS,IAC5B,IAAIC,IAAqBH,CAAS,IAClC,MAGAI,IAAgBA,CAACC,MACrBA,aAAa1B,OAAO0B,EAAEC,YAAYD;AACpC,SAAO,CAACE,GAAQC,GAAMC,MAAQ;AAC5B,QAAIF,KAAU,MAAM;AAClB,YAAMG,IAAanF,EAAkB;AAAA,QAAEC,OAAAA;AAAAA,QAAOC,WAAAA;AAAAA,QAAWC,gBAAAA;AAAAA,MAAAA,CAAgB;AACzE,aAAOkE,IACFe,EACCD,GACAd,CACF,IACAc;AAAAA,IACN;AAEA,UAAME,IAAYC,MAAMC,QAAQN,CAAI,IAAKA,IAAgC,CAAA;AACzE,QAAII,EAAUV,WAAW;AACvB,aAAO;AAAA,QAAE,GAAGK;AAAAA,QAAQQ,SAAS,CAAA;AAAA,QAAIlB,QAAQ,CAAA;AAAA,MAAA;AAE3C,UAAMlC,IAAYiD,EAAUV,SAAS,GAC/Bc,IAAkBH,MAAMC,QAAQP,EAAOV,MAAM,IAAIU,EAAOV,SAAS,CAAA,GACjEoB,IAAoBD,EAAgB,CAAC,KAAK,CAAA,GAC1CE,IACJ,OAAOX,EAAO3B,SAAU,YAAY,CAACiC,MAAMC,QAAQP,EAAO3B,KAAK,IAC3D2B,EAAO3B,QACP,CAAA,GACAuC,IACJ,OAAOZ,EAAO1E,QAAS,YAAY,CAACgF,MAAMC,QAAQP,EAAO1E,IAAI,IACzD0E,EAAO1E,OACP,CAAA,GACAuF,IACJ,OAAOb,EAAOlE,WAAY,YAAY,CAACwE,MAAMC,QAAQP,EAAOlE,OAAO,IAC/DkE,EAAOlE,UACP,CAAA,GACAgF,IACJ,OAAOd,EAAO9C,UAAW,YAAY,CAACoD,MAAMC,QAAQP,EAAO9C,MAAM,IAC7D8C,EAAO9C,SACP,CAAA,GAQA6D,IAAgBb,GAAKhF,WAErB;AAAA,MAAE8F,YAAAA;AAAAA,MAAYC,YAAAA;AAAAA,IAAAA,IAAeC,GAA4Bb,CAAS,GAIlEc,IAAiBC,EAA0BpB,EAAOqB,UAAUjE,CAAS,GACrEkE,IACJ,OAAOV,EAASW,UAAW,WAAWX,EAASW,SAAS,IACpDC,IAAapE,IAAY,KAAKkE,GAC9BG,IAAaN,IACfK,IAAaE,EAAYC,eAAeD,EAAYE,YACpDJ,GAYEK,IAAe;AAAA,MACnBvF,OAAOA,CAACwF,MAA+B;AAIrC,cAAMC,IAHQD,EAAO3D,OAGF6D,MACbC,IAAOH,EAAOxF;AACpB,eAAI,CAACoD,KAAgBqC,KAAO,QACrBrC,EAAawC,IAAIrC,EAAckC,CAAG,CAAC,IADDE,IAGrCE,EAAQ7F,MAAM8F,YAAYH,GAAM,IAAI;AAAA,MAC1C;AAAA,IAAA;AAGF,WAAO;AAAA,MACL,GAAGjC;AAAAA,MACHQ,SAASH,EAAUgC,IAAKC,CAAAA,OAAO;AAAA,QAAEC,QAAQD;AAAAA,MAAAA,EAAyB;AAAA,MAClEhD,QAAQe,EAAUgC,IAAI,CAACG,GAAGC,MAAM;AAC9B,cAAMC,IACHjC,EAAgBgC,CAAC,KACjB/B,GAIGiC,IAAgBC,EAAkB3H,GAAOqE,IAASmD,CAAC,GAAGnG,KAAK;AACjE,eAAO;AAAA,UACL,GAAI,OAAOoG,KAAa,WAAWA,IAAW,CAAA;AAAA,UAC9C5F,MAAM;AAAA,UACN+F,cAAcJ;AAAAA,UACdT,MAAM1C,IAASmD,CAAC,GAAGT,QAAQ,UAAUS,IAAI,CAAC;AAAA,UAC1CK,QAAQ;AAAA,YAAEC,GAAG;AAAA,YAAQC,GAAG;AAAA,UAAA;AAAA,UACxBzD,QAAAA;AAAAA;AAAAA;AAAAA;AAAAA,UAIA0D,YAAYvD,KAAgB;AAAA,UAC5B,GAAIF,IAAO;AAAA,YAAE0D,WAAW,CAAA;AAAA,UAAC,IAAM,CAAA;AAAA,UAC/BC,UAAU;AAAA,YAAEC,OAAO;AAAA,UAAA;AAAA,UACnBC,WAAWxB;AAAAA,UACX,GAAIc,IACA;AAAA,YAAErG,OAAOqG;AAAAA,YAAetF,WAAW;AAAA,cAAEf,OAAOqG;AAAAA,YAAAA;AAAAA,UAAc,IAC1D,CAAA;AAAA,QAAC;AAAA,MAET,CAAC;AAAA,MACDzF,QAAQ;AAAA,QAAE,GAAG4D;AAAAA,QAAYhD,MAAMV;AAAAA,MAAAA;AAAAA,MAC/B9B,MAAM;AAAA,QAAE,GAAGsF;AAAAA,QAAUW,QAAQE;AAAAA,MAAAA;AAAAA,MAC7B,GAAIN,IAAiB;AAAA,QAAEE,UAAUF;AAAAA,MAAAA,IAAmB,CAAA;AAAA,MACpD9C,OAAO;AAAA,QACL,GAAGsC;AAAAA,QACHrC,KAAK0C;AAAAA,QACLvC,KAAKwC;AAAAA,QACLjD,WAAW;AAAA,UACT,GAAK2C,EAAqC3C,aAAa,CAAA;AAAA,UACvD9C,WAAWA,CAACiD,MACNA,MAAU8C,KAAc9C,MAAU6C,KAClC7C,MAAU,IAAU,KACjB4C,IAAgBA,EAAc5C,CAAK,IAAIe,OAAOf,CAAK;AAAA,QAC5D;AAAA,MACF;AAAA,MAEFrC,SAAS;AAAA,QACP,GAAG+E;AAAAA,QACH3F,WAAW+B,EACT8D,GACA5F,CACF;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AACF;AASA,SAAS8B,EACP/B,GACAC,GACA;AACA,SAAOmI,EAAwBC,CAAAA,MAAS;AACtC,UAAMC,IAAMD,EAAKpF,OAGX4D,IAAMyB,GAAKrF,OACXsF,IACJ,OAAO1B,KAAQ,YAAY7G,IAAYA,EAAU6G,CAAG,IAAKA,KAAO,IAC5D2B,IAAS,OAAOH,EAAKG,UAAW,WAAWH,EAAKG,SAAS,IACzDC,IAAaJ,EAAKI,aAAa,GAAGJ,EAAKI,UAAU,OAAO,IACxDC,IAAUJ,GAAKxB,QAAQuB,EAAKvB,MAC5BA,IACJ7G,KAAkByI,KAAW,OACzBzI,EAAeyI,aAAmBxF,OAAOwF,IAAU,IAAIxF,KAAKwF,CAAO,CAAC,IACnEA,KAAW;AAClB,WAAO;AAAA,MAAE5B,MAAM9C,OAAO8C,CAAI;AAAA,MAAG2B,YAAAA;AAAAA,MAAYD,QAAAA;AAAAA,MAAQvF,OAAOsF;AAAAA,IAAAA;AAAAA,EAC1D,CAAC;AACH;AAEA,SAASvC,GAA4Bb,GAGnC;AACA,MAAI/B,IAAM,GACNG,IAAM;AACV,aAAWa,KAAUe;AACnB,eAAWwD,KAAKvE;AACd,MAAI,OAAOuE,GAAG1F,SAAU,YAAY,CAAC2F,OAAOC,SAASF,EAAE1F,KAAK,MACxD0F,EAAE1F,QAAQG,MAAKA,IAAMuF,EAAE1F,QACvB0F,EAAE1F,QAAQM,MAAKA,IAAMoF,EAAE1F;AAG/B,QAAM6C,IAAa1C,IAAM,IAAIE,EAAQF,CAAG,IAAI,GACtC2C,IAAaxC,KAAO,IAAI,IAAID,EAAQC,CAAG;AAC7C,SAAO;AAAA,IAAEuC,YAAAA;AAAAA,IAAYC,YAAAA;AAAAA,EAAAA;AACvB;ACxVA,MAAM+C,IAAS;AAAA,EACbC,WAAW;AAAA,IACTC,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,gBAAgB;AAAA,IAChBC,KAAKA,CAAC;AAAA,MAAE5I,SAAAA;AAAAA,IAAAA,MAAcA,EAAQ,CAAC;AAAA,IAC/B6I,QAAQA,CAAC;AAAA,MAAE7I,SAAAA;AAAAA,IAAAA,MAAcA,EAAQ,EAAE;AAAA,EAAA;AAAA,EAErC8I,OAAO;AAAA,IACLxH,UAAU;AAAA,IACVyH,MAAM;AAAA,IACNC,OAAO;AAAA,EAAA;AAAA,EAETC,UAAU;AAAA,IACR3H,UAAU;AAAA,IACVxB,MAAM;AAAA,IACNI,OAAO;AAAA,IACPD,KAAK;AAAA,IACL4I,QAAQ;AAAA,EAAA;AAAA,EAEVK,UAAU;AAAA,IACR5H,UAAU;AAAA,IACVxB,MAAM;AAAA,IACNI,OAAO;AAAA,IACPD,KAAK;AAAA,IACL4I,QAAQ;AAAA,EAAA;AAAA,EAEVM,UAAU;AAAA,IACR7H,UAAU;AAAA,IACVxB,MAAM;AAAA,IACNI,OAAO;AAAA,IACPD,KAAK;AAAA,IACL4I,QAAQ;AAAA,EAAA;AAAA,EAEVpH,QAAQ;AAAA,IACNgH,SAAS;AAAA,IACTW,YAAY;AAAA,IACZR,KAAKA,CAAC;AAAA,MAAE5I,SAAAA;AAAAA,IAAAA,MAAcA,EAAQ,CAAC;AAAA,IAC/B6I,QAAQA,CAAC;AAAA,MAAE7I,SAAAA;AAAAA,IAAAA,MAAcA,EAAQ,CAAC;AAAA,EAAA;AAAA,EAEpCqJ,YAAY;AAAA,IACVZ,SAAS;AAAA,IACTW,YAAY;AAAA,IACZR,KAAKA,CAAC;AAAA,MAAE5I,SAAAA;AAAAA,IAAAA,MAAcA,EAAQ,GAAG;AAAA,EAAA;AAErC;AASO,SAAAsJ,KAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAAG,uBAAAC,IAAA,2BAAA,KAGDF,IAAA,gBAAAG,EAACC,GAAA,EAAQ,IAAAtB,EAAMO,OACb,UAAA;AAAA,IAAA,gBAAAgB,EAACC,GAAA,EAAiB,SAAA,eAAkB,IAAAxB,EAAMU,UAAS;AAAA,sBAClDc,GAAA,EAAiB,SAAA,eAAkB,IAAAxB,EAAMW,UAAS;AAAA,sBAClDa,GAAA,EAAiB,SAAA,eAAkB,IAAAxB,EAAMY,SAAAA,CAAS;AAAA,EAAA,GACrD,GAAMI,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,EAAA,CAAA,MAAAG,uBAAAC,IAAA,2BAAA,KALRK,sBAACH,GAAA,EAAQ,IAAAtB,EAAMC,WACbiB,UAAAA;AAAAA,IAAAA;AAAAA,IAKA,gBAAAK,EAACD,GAAA,EAAQ,IAAAtB,EAAM9G,mBACX,GAAG,CAAC,EAACmF,IAAKqD,EAKX,EAAA,CACH;AAAA,EAAA,GACF,GAAMV,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAdNS;AAcM;AAhBH,SAAAC,GAAAjD,GAAA;AAAA,SAUG,gBAAA4C,EAACC,GAAA,EAA4B,IAAAtB,EAAMc,YACjC,UAAA;AAAA,IAAA,gBAAAS,EAACC,KAAiB,SAAA,YAAkB,OAAA,GAAW,QAAA,GAAC;AAAA,IAChD,gBAAAD,EAACC,GAAA,EAAgB,OAAA,IAAY,QAAA,EAAA,CAAC;AAAA,EAAA,EAAA,GAFtB,UAAU/C,CAAC,EAGrB;AAAM;ACxDT,SAASkD,GAA+BC,GAO5B;AACjB,QAAMC,IAAwB,CAAA;AAC9B,SAAID,EAAKE,gBACPD,EAAME,KACJC,EAAqB;AAAA,IACnBC,UAAUL,EAAKK;AAAAA,IACfH,cAAcF,EAAKE;AAAAA,IACnBI,YAAYN,EAAKO;AAAAA,IACjBnK,iBAAiB4J,EAAKQ;AAAAA,EAAAA,CACvB,CACH,GAEFP,EAAME,KAAK;AAAA,IACTM,IAAI;AAAA,IACJC,OAAO;AAAA,IACPC,SAASA,MAAM;AACb,YAAMtG,IAAO2F,EAAKY,QAAAA,GACZC,IAAcxG,EAAKN,QAGnB+G,IAAuC,CAAA,GACvCC,wBAAe/G,IAAAA;AACrB,iBAAWN,KAAUW;AACnB,mBAAW2G,KAAStH,GAAQ;AAC1B,gBAAMuH,IAAM3H,OAAO0H,EAAM5E,IAAI;AAC7B,UAAK2E,EAASzE,IAAI2E,CAAG,MACnBF,EAASG,IAAID,CAAG,GAChBH,EAASX,KAAKa,EAAM5E,IAAI;AAAA,QAE5B;AAIF,YAAM+E,IAAU9G,EAAKoC,IAClB/C,OAAW,IAAI0H,IAAI1H,EAAO+C,IAAK4E,CAAAA,MAAM,CAAC/H,OAAO+H,EAAEjF,IAAI,GAAGiF,EAAE9I,KAAK,CAAC,CAAC,CAClE,GAEM+I,IAAoB,CAAC,MAAM;AACjC,eAASzE,IAAI,GAAGA,IAAIgE,GAAahE;AAC/ByE,QAAAA,EAAOnB,KAAKH,EAAKuB,cAAc1E,CAAC,KAAK,UAAUA,IAAI,CAAC,EAAE;AAExD,YAAM2E,IAAoB,CAACF,CAAM;AACjC,iBAAWL,KAAOH,GAAU;AAC1B,cAAMlD,IAAiB,CAAC6D,GAAWR,CAAG,CAAC,GACjCS,IAAYpI,OAAO2H,CAAG;AAC5B,mBAAWU,KAAUR,EAASvD,CAAAA,EAAIuC,KAAKwB,EAAOC,IAAIF,CAAS,KAAK,EAAE;AAClEF,QAAAA,EAAKrB,KAAKvC,CAAG;AAAA,MACf;AAEA,YAAMiE,IAASC,EAAcN,CAAI;AACjC,aAAOO,QAAQpB,QAAQ;AAAA,QACrBqB,KAAKH,EAAOG;AAAAA,QACZ3B,UAAU,GAAGL,EAAKK,QAAQ;AAAA,QAC1B4B,QAAQJ,EAAOI;AAAAA,MAAAA,CAChB;AAAA,IACH;AAAA,EAAA,CACD,GACMhC;AACT;AAEA,SAASwB,GAAWS,GAAmC;AACrD,SAAIA,aAAa1J,OAAa0J,EAAEC,YAAAA,IAC5B,OAAOD,KAAM,WAAiB,IAAI1J,KAAK0J,CAAC,EAAEC,YAAAA,IACvCD;AACT;"}
1
+ {"version":3,"file":"timeseries.js","sources":["../../src/widgets-v2/timeseries/options.ts","../../src/widgets-v2/timeseries/skeleton.tsx","../../src/widgets-v2/timeseries/download.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport type { CallbackDataParams } from 'echarts/types/dist/shared'\nimport {\n buildGridConfig,\n buildLegendConfig,\n createTooltipFormatter,\n createTooltipPositioner,\n niceNum,\n} from '../../widgets/utils/chart-config'\nimport { ZOOM_LAYOUT } from '../actions/zoom-toggle'\nimport type { OptionFactory } from '../echart'\nimport { mergeOptions, resolveThemeColor } from '../utils'\nimport { positionDataZoomForLegend } from '../utils/data-zoom-layout'\nimport type {\n TimeseriesEChartsOption,\n TimeseriesOptionFactoryInput,\n TimeseriesOptionsInput,\n TimeseriesWidgetData,\n} from './types'\n\n/**\n * Builds the **structural** ECharts option for a timeseries widget —\n * time x-axis, value y-axis, themed tooltip, themed legend, CARTO color\n * palette. Mirrors {@link import('../bar/options').barOptions} so all\n * four ECharts widgets share v1 look-and-feel.\n *\n * Intentional deviations from bar (timeseries-specific):\n * - **X-axis is `type: 'time'`** (not 'category'). ECharts handles\n * uneven sample spacing and zoom-level-aware label formatting.\n * `labelFormatter` is wrapped so the consumer sees a `Date`, not\n * a numeric timestamp.\n * - **Tooltip body reads `{ name, value }` rows**, same as bar, but\n * the `name` may arrive as `Date | number | string`. The\n * `labelFormatter` receives a `Date` regardless.\n *\n * Intentionally data-agnostic: no series, no dataset, no `legend.show`\n * (those depend on data and are added by the option factory's merge\n * phase via {@link createTimeseriesOptionFactory}).\n */\nexport function timeseriesOptions({\n theme,\n formatter,\n labelFormatter,\n}: TimeseriesOptionsInput): TimeseriesEChartsOption {\n // Closure shared between yAxis min/max callbacks and the label formatter,\n // so only the rounded extents are labelled (matches v1 + bar).\n let niceMin = 0\n let niceMax = 1\n\n return {\n grid: {\n left: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n // Default: no legend. Merger bumps this when there are >1 series.\n ...buildGridConfig(false, theme),\n containLabel: true,\n },\n tooltip: {\n trigger: 'axis',\n backgroundColor: theme.palette.grey[900],\n borderWidth: 0,\n padding: [parseInt(theme.spacing(1)), parseInt(theme.spacing(1))],\n textStyle: {\n color: theme.palette.common.white,\n fontSize: 11,\n fontFamily: theme.typography.caption.fontFamily,\n },\n axisPointer: { type: 'line' },\n position: createTooltipPositioner(theme),\n formatter: buildTimeseriesTooltipFormatter(formatter, labelFormatter),\n },\n // Legend styling baked here; `show` is toggled by the merger based on\n // series count.\n legend: {\n ...buildLegendConfig({ hasLegend: false }),\n },\n axisPointer: { lineStyle: { color: theme.palette.grey[400] } },\n color: [\n theme.palette.secondary.main,\n ...Object.values(\n (theme.palette as { qualitative?: { bold?: Record<string, string> } })\n .qualitative?.bold ?? {},\n ),\n ],\n xAxis: {\n type: 'time',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n padding: [parseInt(theme.spacing(0.5)), 0, 0, 0],\n margin: 0,\n hideOverlap: true,\n ...(labelFormatter && {\n formatter: (value: number) => labelFormatter(new Date(value)),\n }),\n },\n },\n yAxis: {\n type: 'value',\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black?.[4] ?? theme.palette.divider },\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom',\n inside: true,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n },\n } as TimeseriesEChartsOption\n}\n\n/**\n * Returns the timeseries widget's {@link OptionFactory} — one closure\n * that owns BOTH phases of option construction:\n *\n * - **Structural phase** (`option == null`) — builds the theme-aware\n * structural option via {@link timeseriesOptions}, optionally merging\n * the consumer-supplied `optionsOverride`. Called once by Provider to\n * seed `rawOptions` in the store.\n * - **Merge phase** (`option != null`) — fuses post-pipeline `state.data`\n * (`TimeseriesWidgetData`) into the option via the dataset API: one\n * dataset per series, each series referencing its dataset by index,\n * encoded by `name` (x — time) and `value` (y). Mirrors {@link import('../bar/options').createBarOptionFactory}:\n * series-template merge for `addStack`, reactive formatters from\n * `ctx`, `niceNum`-rounded y-axis bounds at fusion time, and\n * `positionDataZoomForLegend` layout for ZoomToggle sliders.\n */\nexport function createTimeseriesOptionFactory(\n options: TimeseriesOptionFactoryInput,\n): OptionFactory {\n const { theme, formatter, labelFormatter, optionsOverride } = options\n const series = options.series\n const smooth = options.smooth ?? true\n const area = options.area ?? false\n const selection = options.selection\n const selectionSet =\n selection && selection.length > 0\n ? new Set<string | number>(selection)\n : null\n // `name` may be Date | number | string. Normalize to the same type the\n // selection is keyed on (Date → ms) so Set lookups match.\n const normalizeName = (n: Date | number | string): string | number =>\n n instanceof Date ? n.getTime() : n\n return (option, data, ctx) => {\n if (option == null) {\n const structural = timeseriesOptions({ theme, formatter, labelFormatter })\n return optionsOverride\n ? (mergeOptions(\n structural as unknown as Record<string, unknown>,\n optionsOverride as Partial<Record<string, unknown>>,\n ) as EChartsOption)\n : structural\n }\n\n const seriesArr = Array.isArray(data) ? (data as TimeseriesWidgetData) : []\n if (seriesArr.length === 0) {\n return { ...option, dataset: [], series: [] }\n }\n const hasLegend = seriesArr.length > 1\n const seriesTemplates = Array.isArray(option.series) ? option.series : []\n const broadcastTemplate = seriesTemplates[0] ?? {}\n const baseYAxis =\n typeof option.yAxis === 'object' && !Array.isArray(option.yAxis)\n ? option.yAxis\n : {}\n const baseGrid =\n typeof option.grid === 'object' && !Array.isArray(option.grid)\n ? option.grid\n : {}\n const baseTooltip =\n typeof option.tooltip === 'object' && !Array.isArray(option.tooltip)\n ? option.tooltip\n : {}\n const baseLegend =\n typeof option.legend === 'object' && !Array.isArray(option.legend)\n ? option.legend\n : {}\n\n // Reactive (live store) formatter from ctx — distinct from the\n // closure-time `formatter` captured for the structural-build branch\n // above. RelativeData can install a percent formatter on the store\n // after the factory was constructed; the merge phase reads `ctx` to\n // pick that up. `labelFormatter` (Date → string) is structural-only —\n // not relativizable — so the merge branch reads the closure-time value.\n const liveFormatter = ctx?.formatter\n\n const { niceMinVal, niceMaxVal } = computeTimeseriesNiceBounds(seriesArr)\n\n // Zoom slider layout: when ZoomToggle has installed `dataZoom`, push the\n // slider above the legend (if any) and reserve room in the grid below.\n const dataZoomLayout = positionDataZoomForLegend(option.dataZoom, hasLegend)\n const fallbackBottom =\n typeof baseGrid.bottom === 'number' ? baseGrid.bottom : 24\n const baseBottom = hasLegend ? 56 : fallbackBottom\n const gridBottom = dataZoomLayout\n ? baseBottom + ZOOM_LAYOUT.sliderHeight + ZOOM_LAYOUT.sliderGap\n : baseBottom\n\n // Dim non-selected points via `series.itemStyle.color`. Per-row\n // `itemStyle` on dataset object-rows is silently ignored when\n // `series.encode` is in play.\n //\n // We *always* emit `itemStyle.color` (a passthrough when nothing is\n // selected), not conditionally — dropping the key between renders\n // would let ECharts' default merge keep the previous callback alive\n // and points would stay dimmed forever after an external clear.\n // Always emitting lets normal merge swap the callback in place, no\n // `replaceMerge` and no entry-animation flash on selection on/off.\n const dimItemStyle = {\n color: (params: CallbackDataParams) => {\n const datum = params.value as\n | { name?: Date | number | string }\n | undefined\n const raw = datum?.name\n const base = params.color as string\n if (!selectionSet || raw == null) return base\n return selectionSet.has(normalizeName(raw))\n ? base\n : echarts.color.modifyAlpha(base, 0.15)\n },\n }\n\n return {\n ...option,\n dataset: seriesArr.map((s) => ({ source: s as readonly object[] })),\n series: seriesArr.map((_, i) => {\n const template =\n (seriesTemplates[i] as object | undefined) ??\n (broadcastTemplate as object)\n // For line series, set BOTH `series[i].color` (legend swatch +\n // markers) AND `series[i].lineStyle.color` (the line itself) so\n // the override paints everywhere a series has a colour slot.\n const overrideColor = resolveThemeColor(theme, series?.[i]?.color)\n return {\n ...(typeof template === 'object' ? template : {}),\n type: 'line' as const,\n datasetIndex: i,\n name: series?.[i]?.name ?? `Series ${i + 1}`,\n encode: { x: 'name', y: 'value' },\n smooth,\n // When a selection is active, surface markers so the per-point\n // color callback has something to dim — a continuous line would\n // hide the visual selection feedback.\n showSymbol: selectionSet != null,\n ...(area ? { areaStyle: {} } : {}),\n emphasis: { focus: 'series' },\n itemStyle: dimItemStyle,\n ...(overrideColor\n ? { color: overrideColor, lineStyle: { color: overrideColor } }\n : {}),\n }\n }),\n legend: { ...baseLegend, show: hasLegend },\n grid: { ...baseGrid, bottom: gridBottom },\n ...(dataZoomLayout ? { dataZoom: dataZoomLayout } : {}),\n yAxis: {\n ...baseYAxis,\n min: niceMinVal,\n max: niceMaxVal,\n axisLabel: {\n ...((baseYAxis as { axisLabel?: object }).axisLabel ?? {}),\n formatter: (value: number) => {\n if (value !== niceMaxVal && value !== niceMinVal) return ''\n if (value === 0) return ''\n return liveFormatter ? liveFormatter(value) : String(value)\n },\n },\n } as EChartsOption['yAxis'],\n tooltip: {\n ...baseTooltip,\n formatter: buildTimeseriesTooltipFormatter(\n liveFormatter,\n labelFormatter,\n ),\n },\n } as EChartsOption\n }\n}\n\n/**\n * Tooltip formatter for the timeseries `{ name, value }` row shape.\n * `name` arrives as `Date | number | string` (the time-axis stores the\n * raw value the consumer supplied). The consumer's `labelFormatter`\n * expects a `Date`, so we coerce non-Date values via `new Date(...)`\n * before invoking it.\n */\nfunction buildTimeseriesTooltipFormatter(\n formatter: ((value: number) => string) | undefined,\n labelFormatter: ((value: Date) => string) | undefined,\n) {\n return createTooltipFormatter((item) => {\n const row = item.value as\n | { name?: Date | number | string; value?: number }\n | undefined\n const raw = row?.value\n const formattedValue =\n typeof raw === 'number' && formatter ? formatter(raw) : (raw ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const rawName = row?.name ?? item.name\n const name =\n labelFormatter && rawName != null\n ? labelFormatter(rawName instanceof Date ? rawName : new Date(rawName))\n : (rawName ?? '')\n return { name: String(name), seriesName, marker, value: formattedValue }\n })\n}\n\nfunction computeTimeseriesNiceBounds(seriesArr: TimeseriesWidgetData): {\n niceMinVal: number\n niceMaxVal: number\n} {\n let min = 0\n let max = -Infinity\n for (const series of seriesArr) {\n for (const d of series) {\n if (typeof d?.value !== 'number' || !Number.isFinite(d.value)) continue\n if (d.value < min) min = d.value\n if (d.value > max) max = d.value\n }\n }\n const niceMinVal = min < 0 ? niceNum(min) : 0\n const niceMaxVal = max <= 0 ? 1 : niceNum(max)\n return { niceMinVal, niceMaxVal }\n}\n","import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(1),\n height: ({ spacing }) => spacing(38),\n },\n graph: {\n position: 'relative',\n flex: '1 1 auto',\n width: '100%',\n },\n segmentA: {\n position: 'absolute',\n left: 0,\n right: '70%',\n top: '60%',\n height: 4,\n },\n segmentB: {\n position: 'absolute',\n left: '25%',\n right: '40%',\n top: '35%',\n height: 4,\n },\n segmentC: {\n position: 'absolute',\n left: '55%',\n right: 0,\n top: '50%',\n height: 4,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n\n/**\n * Loading state for the Timeseries widget. Mirrors a line chart's\n * silhouette — three thin horizontal segments at staggered offsets to\n * suggest a moving line, plus a 2-dot legend stub. Sibling-consistent\n * with Bar / Histogram / Scatter skeletons (column-flex container with\n * legend strip below).\n */\nexport function TimeseriesSkeleton() {\n return (\n <Box sx={styles.container}>\n <Box sx={styles.graph}>\n <Skeleton variant='rectangular' sx={styles.segmentA} />\n <Skeleton variant='rectangular' sx={styles.segmentB} />\n <Skeleton variant='rectangular' sx={styles.segmentC} />\n </Box>\n <Box sx={styles.legend}>\n {[0, 1].map((i) => (\n <Box key={`legend-${i}`} sx={styles.legendItem}>\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import {\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { TimeseriesWidgetData } from './types'\n\n/**\n * Download menu items for the Timeseries widget. Always includes a CSV\n * item with `time, series_1, series_2, …` columns (one row per unique time\n * across all series; ISO-8601 strings for `Date`/numeric times). When\n * `getCaptureEl` is supplied, prepends a PNG item that rasterises the\n * captured element via `html2canvas`.\n */\nexport function createTimeseriesDownloadConfig(args: {\n filename: string\n getData: () => TimeseriesWidgetData\n seriesNames?: readonly string[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const data = args.getData()\n const seriesCount = data.length\n\n // Collect every unique time, preserving insertion order.\n const timeKeys: (Date | number | string)[] = []\n const seenKeys = new Set<string>()\n for (const series of data) {\n for (const point of series) {\n const key = String(point.name)\n if (!seenKeys.has(key)) {\n seenKeys.add(key)\n timeKeys.push(point.name)\n }\n }\n }\n\n // Build a quick lookup per series for O(rows × series) emit.\n const lookups = data.map(\n (series) => new Map(series.map((p) => [String(p.name), p.value])),\n )\n\n const header: unknown[] = ['time']\n for (let i = 0; i < seriesCount; i++) {\n header.push(args.seriesNames?.[i] ?? `series_${i + 1}`)\n }\n const rows: unknown[][] = [header]\n for (const key of timeKeys) {\n const row: unknown[] = [formatTime(key)]\n const lookupKey = String(key)\n for (const lookup of lookups) row.push(lookup.get(lookupKey) ?? '')\n rows.push(row)\n }\n\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n\nfunction formatTime(v: Date | number | string): string {\n if (v instanceof Date) return v.toISOString()\n if (typeof v === 'number') return new Date(v).toISOString()\n return v\n}\n"],"names":["timeseriesOptions","theme","formatter","labelFormatter","niceMin","niceMax","grid","left","parseInt","spacing","top","right","buildGridConfig","containLabel","tooltip","trigger","backgroundColor","palette","grey","borderWidth","padding","textStyle","color","common","white","fontSize","fontFamily","typography","caption","axisPointer","type","position","createTooltipPositioner","buildTimeseriesTooltipFormatter","legend","buildLegendConfig","hasLegend","lineStyle","secondary","main","Object","values","qualitative","bold","xAxis","axisLine","show","axisTick","axisLabel","margin","hideOverlap","value","Date","yAxis","min","extent","niceNum","max","splitLine","black","divider","overlineDelicate","showMaxLabel","showMinLabel","verticalAlign","inside","String","createTimeseriesOptionFactory","options","optionsOverride","series","smooth","area","selection","selectionSet","length","Set","normalizeName","n","getTime","option","data","ctx","structural","mergeOptions","seriesArr","Array","isArray","dataset","seriesTemplates","broadcastTemplate","baseYAxis","baseGrid","baseTooltip","baseLegend","liveFormatter","niceMinVal","niceMaxVal","computeTimeseriesNiceBounds","dataZoomLayout","positionDataZoomForLegend","dataZoom","fallbackBottom","bottom","baseBottom","gridBottom","ZOOM_LAYOUT","sliderHeight","sliderGap","dimItemStyle","params","raw","name","base","has","echarts","modifyAlpha","map","s","source","_","i","template","overrideColor","resolveThemeColor","datasetIndex","encode","x","y","showSymbol","areaStyle","emphasis","focus","itemStyle","createTooltipFormatter","item","row","formattedValue","marker","seriesName","rawName","d","Number","isFinite","styles","container","display","flexDirection","justifyContent","gap","height","graph","flex","width","segmentA","segmentB","segmentC","alignItems","legendItem","TimeseriesSkeleton","$","_c","t0","Symbol","for","jsxs","Box","jsx","Skeleton","t1","_temp","createTimeseriesDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","pngBackgroundColor","id","label","resolve","getData","seriesCount","timeKeys","seenKeys","point","key","add","lookups","Map","p","header","seriesNames","rows","formatTime","lookupKey","lookup","get","handle","downloadToCSV","Promise","url","revoke","v","toISOString"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { m as r, r as m } from "../resolve-theme-color-BdojIw0K.js";
2
- import { p as a } from "../data-zoom-layout--YiY6ko_.js";
2
+ import { p as a } from "../data-zoom-layout-CkVnm6ej.js";
3
3
  export {
4
4
  r as mergeOptions,
5
5
  a as positionDataZoomForLegend,
@@ -2,31 +2,28 @@ import { jsx as a, jsxs as G, Fragment as re } from "react/jsx-runtime";
2
2
  import { c as T } from "react/compiler-runtime";
3
3
  import { useState as V, useLayoutEffect as ee, Children as ae, isValidElement as ce, Component as be, useEffect as de, useRef as ve } from "react";
4
4
  import { W as Se, u as pe } from "./widget-context-DTGO0Yta.js";
5
- import { j as we, i as Ee, e as Ce, n as Te, r as ke, q as Ie, v as _e, u as Ae, s as Le } from "./widget-store-registry-_W4Z4xp-.js";
5
+ import { j as we, i as Ee, e as Ce, n as Te, r as ke, q as _e, v as Ie, u as Ae, s as Le } from "./widget-store-registry-_W4Z4xp-.js";
6
6
  import "zustand";
7
7
  import { Box as W, LinearProgress as We, Typography as X, AccordionSummary as $e, AccordionDetails as De, Accordion as Fe, AlertTitle as Be, Alert as Oe, Button as Me, IconButton as Re, Divider as Pe, Popper as Ue, Grow as Ne, Paper as je, Link as fe } from "@mui/material";
8
- import ze from "@mui/icons-material/ExpandMore";
9
- import { S as He } from "./smart-tooltip-D4vwQpFf.js";
10
- import { createPortal as Ve } from "react-dom";
11
- import Ge from "@mui/icons-material/Close";
8
+ import { ExpandMore as ze, Close as He } from "@mui/icons-material";
9
+ import { S as Ve } from "./smart-tooltip-D4vwQpFf.js";
10
+ import { createPortal as Ge } from "react-dom";
12
11
  import { WidgetOptions as qe } from "@carto/meridian-ds/custom-icons";
13
12
  import "./lasso-tool-CDFj4zKY.js";
14
13
  import "./cjs-D4KH3azB.js";
15
14
  import { T as Xe } from "./tooltip-BDnrRKrp.js";
16
- import "@mui/icons-material";
17
15
  import "@carto/ps-utils";
18
16
  import { o as Ze, a as Ke, E as Ye } from "./echart-CU0KmClP.js";
19
- import { D as Fn } from "./echart-CU0KmClP.js";
17
+ import { D as Wn } from "./echart-CU0KmClP.js";
20
18
  import { a as Je, b as Qe, M as et } from "./markdown-BD1jcknS.js";
21
- import { C as tt, L as nt, F as ot, j as rt, R as it, B as lt, Z as st, m as at, n as ct, l as dt, k as pt } from "./change-column-BiuuHCDN.js";
19
+ import { C as tt, L as nt, F as ot, j as rt, R as it, B as lt, Z as st, m as at, n as ct, l as dt, k as pt } from "./change-column-DjjwoPt1.js";
22
20
  import "html2canvas";
23
- import "@mui/icons-material/ImageOutlined";
24
21
  import { a as ft, F as mt } from "./formula-DuC0NQLH.js";
25
22
  import "react-markdown";
26
- import { b as ut, a as gt } from "./spread-CPis22AE.js";
23
+ import { b as ut, a as gt } from "./spread-DYNpzgh_.js";
27
24
  import { a as ht, R as yt } from "./range-l4fNHLEg.js";
28
25
  import { f as xt, C as bt } from "./category-Dnd2_j0x.js";
29
- import { c as vt, T as St } from "./table-CQCAnDLb.js";
26
+ import { c as vt, T as St } from "./table-C9IMbTr0.js";
30
27
  function wt(t) {
31
28
  const e = T(31), {
32
29
  id: n,
@@ -56,7 +53,7 @@ function wt(t) {
56
53
  const [l] = V(g);
57
54
  let d, h;
58
55
  e[8] !== n || e[9] !== p || e[10] !== l ? (d = () => (ke(n, l), () => {
59
- Ie(n, {
56
+ _e(n, {
60
57
  keepAlive: p
61
58
  });
62
59
  }), h = [n, l, p], e[8] = n, e[9] = p, e[10] = l, e[11] = d, e[12] = h) : (d = e[11], h = e[12]), ee(d, h);
@@ -74,14 +71,14 @@ function wt(t) {
74
71
  error: s
75
72
  });
76
73
  }, w = [l, o, i, s], e[17] = s, e[18] = i, e[19] = o, e[20] = l, e[21] = b, e[22] = w) : (b = e[21], w = e[22]), ee(b, w);
77
- let k, I;
78
- e[23] !== c || e[24] !== f || e[25] !== l ? (I = () => {
74
+ let k, _;
75
+ e[23] !== c || e[24] !== f || e[25] !== l ? (_ = () => {
79
76
  l.setState({
80
77
  rawFormatter: c,
81
78
  formatter: c,
82
79
  labelFormatter: f
83
80
  });
84
- }, k = [l, c, f], e[23] = c, e[24] = f, e[25] = l, e[26] = k, e[27] = I) : (k = e[26], I = e[27]), ee(I, k);
81
+ }, k = [l, c, f], e[23] = c, e[24] = f, e[25] = l, e[26] = k, e[27] = _) : (k = e[26], _ = e[27]), ee(_, k);
85
82
  let A;
86
83
  return e[28] !== m || e[29] !== n ? (A = /* @__PURE__ */ a(Se.Provider, { value: n, children: m }), e[28] = m, e[29] = n, e[30] = A) : A = e[30], A;
87
84
  }
@@ -281,21 +278,21 @@ function kt(t) {
281
278
  iconProps: m,
282
279
  sx: p,
283
280
  children: g
284
- } = t, l = i === void 0 ? !1 : i, d = s === void 0 ? !1 : s, h = c === void 0 ? "elevation" : c, y = u === void 0 ? ze : u, x = pe(), b = _e(x, It), w = r !== void 0, [k, I] = V(l), A = w ? r : k;
281
+ } = t, l = i === void 0 ? !1 : i, d = s === void 0 ? !1 : s, h = c === void 0 ? "elevation" : c, y = u === void 0 ? ze : u, x = pe(), b = Ie(x, _t), w = r !== void 0, [k, _] = V(l), A = w ? r : k;
285
282
  let E;
286
283
  e[0] !== o ? (E = (H, N) => {
287
284
  const K = !N;
288
- o?.(K), I(K);
285
+ o?.(K), _(K);
289
286
  }, e[0] = o, e[1] = E) : E = e[1];
290
287
  const F = E;
291
- let _;
292
- e[2] !== f ? (_ = {
288
+ let I;
289
+ e[2] !== f ? (I = {
293
290
  ...Tt,
294
291
  ...f
295
- }, e[2] = f, e[3] = _) : _ = e[3];
296
- const L = _;
292
+ }, e[2] = f, e[3] = I) : I = e[3];
293
+ const L = I;
297
294
  let S;
298
- e[4] !== g ? (S = _t(g), e[4] = g, e[5] = S) : S = e[5];
295
+ e[4] !== g ? (S = It(g), e[4] = g, e[5] = S) : S = e[5];
299
296
  const {
300
297
  summary: v,
301
298
  details: q
@@ -317,7 +314,7 @@ function kt(t) {
317
314
  return /* @__PURE__ */ a(W, { sx: j.titleCell, children: /* @__PURE__ */ a(X, { ref: N, variant: "subtitle1", sx: j.titleText, textTransform: "none", children: n }) });
318
315
  }, e[13] = n, e[14] = P) : P = e[14];
319
316
  let U;
320
- e[15] !== P || e[16] !== n ? (U = /* @__PURE__ */ a(He, { title: n, children: P }), e[15] = P, e[16] = n, e[17] = U) : U = e[17];
317
+ e[15] !== P || e[16] !== n ? (U = /* @__PURE__ */ a(Ve, { title: n, children: P }), e[15] = P, e[16] = n, e[17] = U) : U = e[17];
321
318
  let $;
322
319
  e[18] !== te || e[19] !== v || e[20] !== R || e[21] !== U ? ($ = /* @__PURE__ */ G($e, { expandIcon: R, "aria-label": te, sx: j.summary, children: [
323
320
  U,
@@ -332,10 +329,10 @@ function kt(t) {
332
329
  D
333
330
  ] }), e[25] = d, e[26] = F, e[27] = O, e[28] = M, e[29] = $, e[30] = D, e[31] = B, e[32] = Z, e[33] = h, e[34] = z) : z = e[34], z;
334
331
  }
335
- function It(t) {
332
+ function _t(t) {
336
333
  return t.isFetching;
337
334
  }
338
- function _t(t) {
335
+ function It(t) {
339
336
  const e = [], n = [];
340
337
  for (const r of ae.toArray(t))
341
338
  se(r, me) || se(r, ue) ? e.push(r) : n.push(r);
@@ -649,23 +646,23 @@ function Ht(t) {
649
646
  ...r
650
647
  }, e[0] = r, e[1] = p) : p = e[1];
651
648
  const g = p, [l, d] = V(!1), [h, y] = V(null), [x, b] = V(null), [w, k] = V(null);
652
- let I;
653
- e[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (I = () => d(Xt), e[2] = I) : I = e[2];
654
- const A = I;
649
+ let _;
650
+ e[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (_ = () => d(Xt), e[2] = _) : _ = e[2];
651
+ const A = _;
655
652
  let E;
656
653
  e[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (E = (C) => {
657
654
  y(C);
658
655
  }, e[3] = E) : E = e[3];
659
656
  const F = E;
660
- let _, L;
661
- e[4] !== l ? (_ = () => {
657
+ let I, L;
658
+ e[4] !== l ? (I = () => {
662
659
  if (!l)
663
660
  return;
664
661
  const C = (J) => {
665
662
  J.key === "Escape" && d(!1);
666
663
  };
667
664
  return document.addEventListener("keydown", C), () => document.removeEventListener("keydown", C);
668
- }, L = [l], e[4] = l, e[5] = _, e[6] = L) : (_ = e[5], L = e[6]), de(_, L);
665
+ }, L = [l], e[4] = l, e[5] = I, e[6] = L) : (I = e[5], L = e[6]), de(I, L);
669
666
  const [S] = V(qt);
670
667
  let v, q;
671
668
  e[7] !== f ? (v = ae.toArray(f).filter(Gt), q = v.reduce(Vt, 0), e[7] = f, e[8] = v, e[9] = q) : (v = e[8], q = e[9]);
@@ -698,7 +695,7 @@ function Ht(t) {
698
695
  e[22] !== u || e[23] !== i || e[24] !== l || e[25] !== B || e[26] !== P ? (D = B && /* @__PURE__ */ G(re, { children: [
699
696
  /* @__PURE__ */ a(Xe, { title: P, children: /* @__PURE__ */ a(Re, { ref: F, size: "small", "aria-label": P, "aria-pressed": l, onClick: A, className: l ? "active" : void 0, sx: {
700
697
  ...l && ne.triggerActive
701
- }, children: l ? /* @__PURE__ */ a(Ge, { fontSize: "small" }) : /* @__PURE__ */ a(u, { fontSize: "small", ...i }) }) }),
698
+ }, children: l ? /* @__PURE__ */ a(He, { fontSize: "small" }) : /* @__PURE__ */ a(u, { fontSize: "small", ...i }) }) }),
702
699
  /* @__PURE__ */ a(Pe, { orientation: "vertical", flexItem: !0, sx: {
703
700
  mx: 0.5
704
701
  } })
@@ -721,7 +718,7 @@ function Ht(t) {
721
718
  }, children: /* @__PURE__ */ a(je, { ref: k, sx: ne.paper }) });
722
719
  } }), e[29] = h, e[30] = m, e[31] = l, e[32] = B, e[33] = H) : H = e[33];
723
720
  let N;
724
- e[34] !== S || e[35] !== O || e[36] !== v || e[37] !== l ? (N = S ? Ve(v.map((C, J) => {
721
+ e[34] !== S || e[35] !== O || e[36] !== v || e[37] !== l ? (N = S ? Ge(v.map((C, J) => {
725
722
  const le = l || !O || O.has(J), xe = C.key ?? J;
726
723
  return /* @__PURE__ */ a("div", { "data-toolbox-item-visible": le ? "true" : "false", style: {
727
724
  display: le ? "contents" : "none"
@@ -875,12 +872,12 @@ function ye(t) {
875
872
  let b;
876
873
  e[8] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (b = () => g(tn), e[8] = b) : b = e[8];
877
874
  const w = b, k = !p && !l;
878
- let I;
879
- e[9] !== k || e[10] !== n ? (I = k ? {
875
+ let _;
876
+ e[9] !== k || e[10] !== n ? (_ = k ? {
880
877
  ...oe.clamped,
881
878
  WebkitLineClamp: n
882
- } : null, e[9] = k, e[10] = n, e[11] = I) : I = e[11];
883
- const A = I;
879
+ } : null, e[9] = k, e[10] = n, e[11] = _) : _ = e[11];
880
+ const A = _;
884
881
  let E;
885
882
  e[12] !== A ? (E = A ?? {}, e[12] = A, e[13] = E) : E = e[13];
886
883
  let F;
@@ -888,20 +885,20 @@ function ye(t) {
888
885
  ...oe.text,
889
886
  ...E
890
887
  }, e[14] = E, e[15] = F) : F = e[15];
891
- let _;
892
- e[16] !== i || e[17] !== F ? (_ = /* @__PURE__ */ a(W, { ref: f, sx: F, children: i }), e[16] = i, e[17] = F, e[18] = _) : _ = e[18];
888
+ let I;
889
+ e[16] !== i || e[17] !== F ? (I = /* @__PURE__ */ a(W, { ref: f, sx: F, children: i }), e[16] = i, e[17] = F, e[18] = I) : I = e[18];
893
890
  let L;
894
891
  e[19] !== c || e[20] !== l || e[21] !== p || e[22] !== u ? (L = !l && (u || p) && /* @__PURE__ */ a(fe, { component: "button", variant: "caption", underline: "none", onClick: w, sx: oe.toggle, children: p ? c.showLess : c.showMore }), e[19] = c, e[20] = l, e[21] = p, e[22] = u, e[23] = L) : L = e[23];
895
892
  let S;
896
- return e[24] !== L || e[25] !== _ ? (S = /* @__PURE__ */ G(W, { sx: oe.root, children: [
897
- _,
893
+ return e[24] !== L || e[25] !== I ? (S = /* @__PURE__ */ G(W, { sx: oe.root, children: [
894
+ I,
898
895
  L
899
- ] }), e[24] = L, e[25] = _, e[26] = S) : S = e[26], S;
896
+ ] }), e[24] = L, e[25] = I, e[26] = S) : S = e[26], S;
900
897
  }
901
898
  function tn(t) {
902
899
  return !t;
903
900
  }
904
- const Wn = {
901
+ const In = {
905
902
  // Composition shell
906
903
  Provider: wt,
907
904
  Wrapper: kt,
@@ -947,12 +944,12 @@ const Wn = {
947
944
  TableUI: vt
948
945
  };
949
946
  export {
950
- Fn as DEFAULT_INIT_OPTS,
947
+ Wn as DEFAULT_INIT_OPTS,
951
948
  Kt as DEFAULT_NOTE_LABELS,
952
949
  Nt as DEFAULT_SELECTION_SUMMARY_LABELS,
953
950
  Dt as DEFAULT_STATE_LABELS,
954
951
  zt as DEFAULT_TOOLBOX_LABELS,
955
952
  Tt as DEFAULT_WRAPPER_LABELS,
956
- Wn as Widget
953
+ In as Widget
957
954
  };
958
955
  //# sourceMappingURL=widgets-v2.js.map