@carto/ps-react-ui 5.3.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions-BWlS5tpP.js +1150 -0
- package/dist/actions-BWlS5tpP.js.map +1 -0
- package/dist/category-alzjKzvQ.js +839 -0
- package/dist/category-alzjKzvQ.js.map +1 -0
- package/dist/chat.js +548 -526
- package/dist/chat.js.map +1 -1
- package/dist/{components-FED-ArwH.js → components-CTUpdQuj.js} +1526 -1782
- package/dist/components-CTUpdQuj.js.map +1 -0
- package/dist/components.js +4 -5
- package/dist/{download-DGgFOaXj.js → download-B4sykOFm.js} +33 -23
- package/dist/download-B4sykOFm.js.map +1 -0
- package/dist/{echart-CwzbPElc.js → echart-CV8F50gn.js} +9 -9
- package/dist/echart-CV8F50gn.js.map +1 -0
- package/dist/formula-DJS-JLpk.js +276 -0
- package/dist/formula-DJS-JLpk.js.map +1 -0
- package/dist/legend.js +263 -258
- package/dist/legend.js.map +1 -1
- package/dist/{markdown-oo9mnJun.js → markdown-Bn2nKCbn.js} +13 -19
- package/dist/markdown-Bn2nKCbn.js.map +1 -0
- package/dist/{markdown-content-BWUqwx9F.js → markdown-content-kYNLOX0T.js} +2 -2
- package/dist/markdown-content-kYNLOX0T.js.map +1 -0
- package/dist/{chart-config-B_fdIcD3.js → option-builders-DQivvvbb.js} +10 -56
- package/dist/option-builders-DQivvvbb.js.map +1 -0
- package/dist/{range-BCMAl5xf.js → range-BpU2zBmq.js} +8 -8
- package/dist/range-BpU2zBmq.js.map +1 -0
- package/dist/smart-tooltip-Dc_rHhyI.js +51 -0
- package/dist/smart-tooltip-Dc_rHhyI.js.map +1 -0
- package/dist/{spread-CgCTKPQD.js → spread-CQwFIwuz.js} +12 -18
- package/dist/spread-CQwFIwuz.js.map +1 -0
- package/dist/{stores-tiFePP0A.js → stores-DcBOZlU3.js} +40 -34
- package/dist/stores-DcBOZlU3.js.map +1 -0
- package/dist/stores-mad-9yFn.js.map +1 -1
- package/dist/styles-BCEBm7xh.js +146 -0
- package/dist/styles-BCEBm7xh.js.map +1 -0
- package/dist/{table-lb5momun.js → table-DEdW_fDj.js} +17 -23
- package/dist/table-DEdW_fDj.js.map +1 -0
- package/dist/types/chat/bubbles/chat-suggestion-button.d.ts +1 -1
- package/dist/types/chat/types.d.ts +5 -2
- package/dist/types/components/index.d.ts +1 -3
- package/dist/types/components/lasso-tool/geometry-toolbar.d.ts +1 -1
- package/dist/types/components/lasso-tool/toolbar/context.d.ts +1 -1
- package/dist/types/components/types.d.ts +15 -0
- package/dist/types/legend/components/legend-actions/legend-actions.d.ts +2 -2
- package/dist/types/legend/components/legend-swatch/legend-swatch.d.ts +2 -1
- package/dist/types/legend/index.d.ts +1 -1
- package/dist/types/legend/provider/legend-provider.d.ts +2 -2
- package/dist/types/migration/v4/classes.d.ts +16 -0
- package/dist/types/migration/v4/icons.d.ts +31 -0
- package/dist/types/migration/v4/index.d.ts +17 -0
- package/dist/types/migration/v4/rules.d.ts +42 -0
- package/dist/types/migration/v4/transform.d.ts +4 -0
- package/dist/types/migration/v4/transforms/helpers.d.ts +97 -0
- package/dist/types/migration/v4/transforms/meridian-5.d.ts +22 -0
- package/dist/types/migration/v4/transforms/ps-react-ui.d.ts +20 -0
- package/dist/types/migration/v4/transforms/v5-v6.d.ts +27 -0
- package/dist/types/migration/v4/transforms/v6-v7.d.ts +54 -0
- package/dist/types/migration/v4/transforms/v7-v9-dom.d.ts +63 -0
- package/dist/types/migration/v4/transforms/v7-v9-props.d.ts +64 -0
- package/dist/types/migration/v4/widgets-v1.d.ts +12 -0
- package/dist/types/widgets/actions/brush-toggle/brush-toggle.d.ts +51 -24
- package/dist/types/widgets/actions/brush-toggle/style.d.ts +7 -16
- package/dist/types/widgets/actions/change-column/change-column-icon.d.ts +2 -1
- package/dist/types/widgets/actions/change-column/change-column.d.ts +26 -17
- package/dist/types/widgets/actions/change-column/sortable-column-item.d.ts +10 -5
- package/dist/types/widgets/actions/change-column/types.d.ts +9 -18
- package/dist/types/widgets/actions/download/download.d.ts +18 -13
- package/dist/types/widgets/actions/download/exports.d.ts +33 -17
- package/dist/types/{widgets-v2 → widgets}/actions/download/index.d.ts +1 -0
- package/dist/types/{widgets-v2 → widgets}/actions/download/png-item.d.ts +1 -1
- package/dist/types/widgets/actions/download/types.d.ts +41 -16
- package/dist/types/widgets/actions/download/widget-download.d.ts +26 -0
- package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +80 -10
- package/dist/types/widgets/actions/fullscreen/types.d.ts +13 -20
- package/dist/types/widgets/actions/index.d.ts +10 -20
- package/dist/types/widgets/actions/lock-selection/lock-selection.d.ts +54 -16
- package/dist/types/widgets/actions/relative-data/relative-data.d.ts +36 -21
- package/dist/types/{widgets-v2 → widgets}/actions/relative-data/transforms.d.ts +2 -2
- package/dist/types/widgets/actions/searcher/searcher-toggle.d.ts +24 -16
- package/dist/types/widgets/actions/searcher/searcher.d.ts +9 -19
- package/dist/types/widgets/actions/stack-toggle/stack-toggle.d.ts +10 -17
- package/dist/types/widgets/actions/zoom-toggle/style.d.ts +7 -8
- package/dist/types/widgets/actions/zoom-toggle/zoom-toggle.d.ts +31 -22
- package/dist/types/widgets/bar/download.d.ts +10 -0
- package/dist/types/widgets/bar/index.d.ts +3 -2
- package/dist/types/widgets/bar/skeleton.d.ts +5 -0
- package/dist/types/widgets/bar/types.d.ts +46 -9
- package/dist/types/widgets/category/category-ui.d.ts +94 -3
- package/dist/types/{widgets-v2 → widgets}/category/components/category-bar-stacked.d.ts +2 -1
- package/dist/types/widgets/category/components/category-bar.d.ts +18 -4
- package/dist/types/widgets/category/components/category-legend.d.ts +30 -4
- package/dist/types/widgets/category/components/category-row-multi.d.ts +27 -10
- package/dist/types/widgets/category/components/category-row-other.d.ts +19 -2
- package/dist/types/widgets/category/components/category-row-single.d.ts +23 -9
- package/dist/types/{widgets-v2 → widgets}/category/components/category-row-stacked.d.ts +2 -1
- package/dist/types/widgets/category/download.d.ts +11 -0
- package/dist/types/widgets/category/helpers.d.ts +10 -0
- package/dist/types/widgets/category/index.d.ts +10 -14
- package/dist/types/widgets/category/skeleton.d.ts +11 -1
- package/dist/types/widgets/category/style.d.ts +155 -83
- package/dist/types/widgets/category/types.d.ts +49 -29
- package/dist/types/widgets/echart/echart-ui.d.ts +44 -9
- package/dist/types/widgets/echart/echart.d.ts +80 -5
- package/dist/types/widgets/echart/index.d.ts +4 -5
- package/dist/types/widgets/echart/shared-resize-observer.d.ts +2 -9
- package/dist/types/widgets/formula/download.d.ts +10 -0
- package/dist/types/widgets/formula/formula-ui.d.ts +18 -3
- package/dist/types/widgets/formula/index.d.ts +11 -11
- package/dist/types/{widgets-v2 → widgets}/formula/series.d.ts +2 -1
- package/dist/types/widgets/formula/skeleton.d.ts +4 -1
- package/dist/types/widgets/formula/style.d.ts +20 -12
- package/dist/types/widgets/formula/types.d.ts +41 -39
- package/dist/types/{widgets-v2 → widgets}/formula/value.d.ts +2 -1
- package/dist/types/widgets/histogram/download.d.ts +12 -0
- package/dist/types/widgets/histogram/index.d.ts +5 -4
- package/dist/types/widgets/histogram/skeleton.d.ts +9 -1
- package/dist/types/widgets/histogram/types.d.ts +60 -12
- package/dist/types/{widgets-v2 → widgets}/index.d.ts +2 -2
- package/dist/types/widgets/markdown/download.d.ts +10 -0
- package/dist/types/widgets/markdown/index.d.ts +5 -4
- package/dist/types/widgets/markdown/markdown-ui.d.ts +10 -7
- package/dist/types/widgets/markdown/markdown.d.ts +4 -3
- package/dist/types/widgets/markdown/skeleton.d.ts +4 -1
- package/dist/types/widgets/markdown/style.d.ts +61 -2
- package/dist/types/widgets/markdown/types.d.ts +2 -16
- package/dist/types/widgets/note/style.d.ts +14 -16
- package/dist/types/widgets/pie/download.d.ts +12 -0
- package/dist/types/widgets/pie/index.d.ts +4 -3
- package/dist/types/widgets/pie/skeleton.d.ts +13 -1
- package/dist/types/widgets/pie/types.d.ts +57 -9
- package/dist/types/widgets/range/index.d.ts +4 -6
- package/dist/types/widgets/range/range-ui.d.ts +25 -3
- package/dist/types/widgets/range/skeleton.d.ts +9 -1
- package/dist/types/widgets/range/style.d.ts +40 -2
- package/dist/types/widgets/range/types.d.ts +26 -22
- package/dist/types/widgets/scatterplot/download.d.ts +11 -0
- package/dist/types/widgets/scatterplot/index.d.ts +5 -3
- package/dist/types/widgets/scatterplot/skeleton.d.ts +12 -1
- package/dist/types/widgets/scatterplot/types.d.ts +54 -9
- package/dist/types/widgets/selection-summary/selection-summary.d.ts +26 -10
- package/dist/types/widgets/selection-summary/style.d.ts +32 -3
- package/dist/types/widgets/spread/download.d.ts +9 -0
- package/dist/types/widgets/spread/index.d.ts +7 -9
- package/dist/types/widgets/spread/skeleton.d.ts +9 -1
- package/dist/types/widgets/spread/spread-ui.d.ts +16 -3
- package/dist/types/widgets/spread/types.d.ts +20 -35
- package/dist/types/widgets/stores/index.d.ts +8 -3
- package/dist/types/widgets/stores/types.d.ts +45 -172
- package/dist/types/{widgets-v2 → widgets}/stores/widget-store-registry.d.ts +14 -0
- package/dist/types/widgets/subheader/style.d.ts +5 -14
- package/dist/types/widgets/subheader/subheader.d.ts +9 -11
- package/dist/types/widgets/table/download.d.ts +12 -0
- package/dist/types/widgets/table/helpers.d.ts +28 -34
- package/dist/types/widgets/table/index.d.ts +8 -17
- package/dist/types/widgets/table/skeleton.d.ts +17 -5
- package/dist/types/widgets/table/style.d.ts +21 -14
- package/dist/types/widgets/table/table-ui.d.ts +41 -29
- package/dist/types/widgets/table/types.d.ts +34 -182
- package/dist/types/widgets/timeseries/download.d.ts +12 -0
- package/dist/types/widgets/timeseries/index.d.ts +4 -2
- package/dist/types/widgets/timeseries/skeleton.d.ts +7 -0
- package/dist/types/widgets/timeseries/types.d.ts +60 -9
- package/dist/types/{widgets-v2 → widgets}/types.d.ts +7 -6
- package/dist/types/widgets/utils/index.d.ts +3 -7
- package/dist/types/widgets/wrapper/index.d.ts +4 -6
- package/dist/types/{widgets-v2 → widgets}/wrapper/style.d.ts +2 -31
- package/dist/types/{widgets-v2 → widgets}/wrapper/widget-actions.d.ts +2 -2
- package/dist/types/{widgets-v2 → widgets}/wrapper/widget-wrapper.d.ts +2 -2
- package/dist/{utils-Dr6gf3vD.js → utils-C-eWwOhE.js} +5 -5
- package/dist/utils-C-eWwOhE.js.map +1 -0
- package/dist/widgets/actions.js +4 -2
- package/dist/widgets/bar.js +196 -132
- package/dist/widgets/bar.js.map +1 -1
- package/dist/widgets/category.js +2 -450
- package/dist/widgets/echart.js +2 -3
- package/dist/widgets/formula.js +2 -3
- package/dist/widgets/histogram.js +257 -160
- package/dist/widgets/histogram.js.map +1 -1
- package/dist/widgets/markdown.js +3 -148
- package/dist/widgets/pie.js +311 -197
- package/dist/widgets/pie.js.map +1 -1
- package/dist/widgets/range.js +2 -233
- package/dist/widgets/scatterplot.js +294 -196
- package/dist/widgets/scatterplot.js.map +1 -1
- package/dist/widgets/spread.js +2 -158
- package/dist/widgets/stores.js +2 -3
- package/dist/widgets/table.js +2 -599
- package/dist/widgets/timeseries.js +244 -136
- package/dist/widgets/timeseries.js.map +1 -1
- package/dist/widgets/utils.js +2 -18
- package/dist/widgets.js +911 -0
- package/dist/widgets.js.map +1 -0
- package/dist/{zoom-toggle-IsF8BnAp.js → zoom-toggle-MmLjMTEw.js} +5 -5
- package/dist/zoom-toggle-MmLjMTEw.js.map +1 -0
- package/package.json +43 -129
- package/src/chat/bubbles/chat-agent-message-markdown.tsx +1 -1
- package/src/chat/bubbles/chat-error-message.tsx +9 -3
- package/src/chat/bubbles/chat-suggestion-button.tsx +8 -3
- package/src/chat/containers/chat-footer.tsx +6 -2
- package/src/chat/containers/chat-starter.tsx +6 -4
- package/src/chat/feedback/chat-tool-full-view-dialog.tsx +3 -1
- package/src/chat/feedback/chat-tool-group.test.tsx +1 -1
- package/src/chat/feedback/chat-tool-group.tsx +40 -9
- package/src/chat/feedback/chat-tool-trace.tsx +55 -19
- package/src/chat/types.ts +5 -2
- package/src/components/basemaps/header.tsx +6 -1
- package/src/components/index.ts +2 -3
- package/src/components/lasso-tool/geometry-toolbar.tsx +1 -1
- package/src/components/lasso-tool/lasso-tool-inline.tsx +12 -4
- package/src/components/lasso-tool/lasso-tool.tsx +26 -15
- package/src/components/lasso-tool/layer-filters.tsx +36 -11
- package/src/components/lasso-tool/options-sections.test.tsx +13 -2
- package/src/components/lasso-tool/options-sections.tsx +17 -7
- package/src/components/lasso-tool/toolbar/connected.tsx +1 -1
- package/src/components/lasso-tool/toolbar/context.tsx +1 -1
- package/src/components/measurement-tools/measurement-tools.tsx +28 -13
- package/src/components/no-data-alert/no-data-alert.tsx +12 -2
- package/src/components/responsive-drawer/responsive-drawer.tsx +0 -1
- package/src/components/types.ts +17 -0
- package/src/components/zoom-controls/zoom-controls.tsx +3 -1
- package/src/legend/components/legend-actions/legend-actions.tsx +2 -2
- package/src/legend/components/legend-category/legend-category-ui.tsx +7 -3
- package/src/legend/components/legend-config-select/legend-config-select.tsx +6 -2
- package/src/legend/components/legend-group/legend-group.tsx +6 -2
- package/src/legend/components/legend-group/styles.ts +1 -1
- package/src/legend/components/legend-icon/legend-icon-ui.tsx +7 -3
- package/src/legend/components/legend-opacity/legend-opacity.tsx +9 -3
- package/src/legend/components/legend-proportion/legend-proportion-ui.tsx +19 -3
- package/src/legend/components/legend-ramp/legend-ramp-ui.tsx +31 -7
- package/src/legend/components/legend-row/legend-row.tsx +2 -2
- package/src/legend/components/legend-row/styles.ts +1 -1
- package/src/legend/components/legend-sortable/legend-sortable.tsx +7 -3
- package/src/legend/components/legend-swatch/legend-swatch.tsx +2 -1
- package/src/legend/components/legend-visible-layers/legend-visible-layers.tsx +18 -9
- package/src/legend/index.ts +1 -1
- package/src/legend/provider/legend-provider.tsx +2 -2
- package/src/legend/stores/legend-store-registry.ts +1 -1
- package/src/migration/v4/classes.ts +56 -0
- package/src/migration/v4/icons.ts +56 -0
- package/src/migration/v4/index.ts +17 -0
- package/src/migration/v4/migration.test.ts +772 -0
- package/src/migration/v4/rules.ts +444 -0
- package/src/migration/v4/transform.ts +92 -0
- package/src/migration/v4/transforms/helpers.ts +369 -0
- package/src/migration/v4/transforms/meridian-5.ts +163 -0
- package/src/migration/v4/transforms/ps-react-ui.ts +99 -0
- package/src/migration/v4/transforms/v5-v6.ts +161 -0
- package/src/migration/v4/transforms/v6-v7.ts +342 -0
- package/src/migration/v4/transforms/v7-v9-dom.ts +403 -0
- package/src/migration/v4/transforms/v7-v9-props.ts +529 -0
- package/src/migration/v4/widgets-v1.ts +199 -0
- package/src/{widgets-v2 → widgets}/PERFORMANCE.md +5 -5
- package/src/widgets/actions/brush-toggle/brush-toggle.test.tsx +144 -172
- package/src/widgets/actions/brush-toggle/brush-toggle.tsx +129 -108
- package/src/widgets/actions/brush-toggle/style.ts +5 -40
- package/src/widgets/actions/change-column/change-column-icon.tsx +14 -10
- package/src/widgets/actions/change-column/change-column.test.tsx +57 -288
- package/src/widgets/actions/change-column/change-column.tsx +116 -145
- package/src/widgets/actions/change-column/sortable-column-item.tsx +29 -17
- package/src/widgets/actions/change-column/types.ts +9 -18
- package/src/widgets/actions/download/download.test.tsx +290 -289
- package/src/widgets/actions/download/download.tsx +103 -89
- package/src/widgets/actions/download/exports.test.tsx +157 -247
- package/src/{widgets-v2 → widgets}/actions/download/exports.ts +1 -1
- package/src/{widgets-v2 → widgets}/actions/download/index.ts +1 -0
- package/src/{widgets-v2 → widgets}/actions/download/png-item.tsx +2 -2
- package/src/widgets/actions/download/types.ts +40 -15
- package/src/widgets/actions/download/widget-download.test.ts +30 -0
- package/src/widgets/actions/download/widget-download.ts +41 -0
- package/src/widgets/actions/fullscreen/fullscreen.test.tsx +162 -221
- package/src/widgets/actions/fullscreen/fullscreen.tsx +383 -76
- package/src/widgets/actions/fullscreen/types.ts +14 -31
- package/src/widgets/actions/index.ts +93 -68
- package/src/widgets/actions/lock-selection/lock-selection.test.tsx +259 -156
- package/src/widgets/actions/lock-selection/lock-selection.tsx +162 -102
- package/src/widgets/actions/relative-data/relative-data.test.tsx +65 -536
- package/src/widgets/actions/relative-data/relative-data.tsx +82 -163
- package/src/{widgets-v2 → widgets}/actions/relative-data/transforms.ts +2 -2
- package/src/widgets/actions/searcher/searcher-toggle.tsx +82 -55
- package/src/widgets/actions/searcher/searcher.tsx +96 -169
- package/src/widgets/actions/stack-toggle/stack-toggle.test.tsx +49 -402
- package/src/widgets/actions/stack-toggle/stack-toggle.tsx +39 -114
- package/src/widgets/actions/zoom-toggle/style.ts +5 -8
- package/src/widgets/actions/zoom-toggle/zoom-toggle.test.tsx +88 -303
- package/src/widgets/actions/zoom-toggle/zoom-toggle.tsx +87 -199
- package/src/widgets/bar/download.tsx +36 -0
- package/src/widgets/bar/index.ts +6 -5
- package/src/{widgets-v2 → widgets}/bar/options.ts +1 -1
- package/src/widgets/bar/skeleton.tsx +61 -52
- package/src/widgets/bar/types.ts +46 -11
- package/src/widgets/category/category-ui.test.tsx +846 -317
- package/src/widgets/category/category-ui.tsx +456 -127
- package/src/{widgets-v2 → widgets}/category/category.tsx +4 -4
- package/src/{widgets-v2 → widgets}/category/components/category-bar-stacked.tsx +2 -1
- package/src/widgets/category/components/category-bar.tsx +31 -12
- package/src/{widgets-v2 → widgets}/category/components/category-legend.test.tsx +7 -3
- package/src/widgets/category/components/category-legend.tsx +67 -18
- package/src/widgets/category/components/category-row-multi.tsx +66 -36
- package/src/widgets/category/components/category-row-other.tsx +63 -5
- package/src/widgets/category/components/category-row-single.tsx +48 -25
- package/src/{widgets-v2 → widgets}/category/components/category-row-stacked.tsx +2 -1
- package/src/widgets/category/download.ts +37 -0
- package/src/widgets/category/helpers.test.ts +17 -0
- package/src/widgets/category/helpers.ts +16 -0
- package/src/widgets/category/index.ts +25 -22
- package/src/widgets/category/skeleton.tsx +60 -10
- package/src/widgets/category/style.ts +267 -72
- package/src/widgets/category/types.ts +52 -32
- package/src/widgets/echart/echart-ui.test.tsx +250 -446
- package/src/widgets/echart/echart-ui.tsx +210 -52
- package/src/widgets/echart/echart.test.tsx +203 -518
- package/src/widgets/echart/echart.tsx +195 -52
- package/src/widgets/echart/index.ts +21 -15
- package/src/widgets/echart/shared-resize-observer.ts +30 -19
- package/src/{widgets-v2 → widgets}/echart/style.ts +3 -3
- package/src/{widgets-v2 → widgets}/formula/download.tsx +8 -29
- package/src/widgets/formula/formula-ui.test.tsx +68 -376
- package/src/widgets/formula/formula-ui.tsx +58 -22
- package/src/widgets/formula/index.ts +14 -21
- package/src/{widgets-v2 → widgets}/formula/note.tsx +8 -2
- package/src/{widgets-v2 → widgets}/formula/series.tsx +8 -25
- package/src/widgets/formula/skeleton.tsx +21 -4
- package/src/widgets/formula/style.ts +20 -12
- package/src/widgets/formula/types.ts +44 -45
- package/src/{widgets-v2 → widgets}/formula/value.tsx +2 -1
- package/src/{widgets-v2 → widgets}/histogram/download.ts +11 -25
- package/src/widgets/histogram/index.ts +10 -10
- package/src/{widgets-v2 → widgets}/histogram/options.ts +1 -1
- package/src/widgets/histogram/skeleton.tsx +63 -45
- package/src/widgets/histogram/types.ts +59 -18
- package/src/{widgets-v2 → widgets}/index.ts +3 -3
- package/src/{widgets-v2 → widgets}/markdown/download.tsx +9 -25
- package/src/widgets/markdown/index.ts +5 -13
- package/src/widgets/markdown/markdown-ui.test.tsx +53 -319
- package/src/widgets/markdown/markdown-ui.tsx +43 -47
- package/src/widgets/markdown/markdown.tsx +12 -15
- package/src/widgets/markdown/skeleton.tsx +26 -6
- package/src/widgets/markdown/style.ts +48 -23
- package/src/widgets/markdown/types.ts +2 -26
- package/src/widgets/note/style.ts +14 -17
- package/src/{widgets-v2 → widgets}/note/widget-note.tsx +15 -2
- package/src/{widgets-v2 → widgets}/pie/download.ts +10 -24
- package/src/widgets/pie/index.ts +7 -5
- package/src/{widgets-v2 → widgets}/pie/options.ts +1 -1
- package/src/widgets/pie/skeleton.tsx +84 -60
- package/src/widgets/pie/types.ts +57 -11
- package/src/widgets/range/index.ts +4 -16
- package/src/widgets/range/range-ui.test.tsx +115 -182
- package/src/widgets/range/range-ui.tsx +274 -8
- package/src/widgets/range/skeleton.tsx +41 -8
- package/src/widgets/range/style.ts +16 -12
- package/src/widgets/range/types.ts +26 -28
- package/src/widgets/scatterplot/download.ts +37 -0
- package/src/widgets/scatterplot/index.ts +11 -5
- package/src/{widgets-v2 → widgets}/scatterplot/options.ts +1 -1
- package/src/widgets/scatterplot/skeleton.tsx +76 -51
- package/src/widgets/scatterplot/types.ts +54 -12
- package/src/widgets/selection-summary/selection-summary.tsx +64 -39
- package/src/widgets/selection-summary/style.ts +30 -2
- package/src/widgets/spread/download.ts +41 -0
- package/src/widgets/spread/index.ts +11 -23
- package/src/widgets/spread/skeleton.tsx +32 -4
- package/src/widgets/spread/spread-ui.test.tsx +98 -358
- package/src/widgets/spread/spread-ui.tsx +44 -24
- package/src/widgets/spread/types.ts +21 -41
- package/src/{widgets-v2 → widgets}/state/widget-state.tsx +13 -3
- package/src/widgets/stores/index.ts +48 -10
- package/src/{widgets-v2 → widgets}/stores/transforms.ts +1 -1
- package/src/widgets/stores/types.ts +42 -181
- package/src/{widgets-v2 → widgets}/stores/use-transform.ts +1 -1
- package/src/{widgets-v2 → widgets}/stores/widget-store-registry.test.ts +25 -0
- package/src/{widgets-v2 → widgets}/stores/widget-store-registry.ts +24 -2
- package/src/widgets/subheader/style.ts +5 -13
- package/src/widgets/subheader/subheader.test.tsx +22 -37
- package/src/widgets/subheader/subheader.tsx +11 -30
- package/src/widgets/table/download.ts +29 -0
- package/src/widgets/table/helpers.test.ts +197 -208
- package/src/widgets/table/helpers.ts +108 -84
- package/src/widgets/table/index.ts +23 -54
- package/src/widgets/table/skeleton.tsx +38 -21
- package/src/widgets/table/style.ts +23 -14
- package/src/widgets/table/table-ui.tsx +348 -44
- package/src/widgets/table/types.ts +37 -205
- package/src/{widgets-v2 → widgets}/test-utils.ts +1 -1
- package/src/{widgets-v2 → widgets}/timeseries/download.ts +14 -28
- package/src/widgets/timeseries/index.ts +8 -5
- package/src/{widgets-v2 → widgets}/timeseries/options.ts +1 -1
- package/src/widgets/timeseries/skeleton.tsx +67 -46
- package/src/widgets/timeseries/types.ts +60 -12
- package/src/{widgets-v2 → widgets}/types.ts +8 -6
- package/src/widgets/utils/index.ts +3 -26
- package/src/widgets/wrapper/index.ts +14 -16
- package/src/{widgets-v2 → widgets}/wrapper/style.ts +2 -38
- package/src/{widgets-v2 → widgets}/wrapper/widget-actions.tsx +2 -2
- package/src/{widgets-v2 → widgets}/wrapper/widget-wrapper.test.tsx +2 -32
- package/src/{widgets-v2 → widgets}/wrapper/widget-wrapper.tsx +36 -58
- package/dist/actions-CGJD6q0t.js +0 -1318
- package/dist/actions-CGJD6q0t.js.map +0 -1
- package/dist/actions-Dhlz_adK.js +0 -1167
- package/dist/actions-Dhlz_adK.js.map +0 -1
- package/dist/category-D01ruG-l.js +0 -842
- package/dist/category-D01ruG-l.js.map +0 -1
- package/dist/chart-config-B_fdIcD3.js.map +0 -1
- package/dist/cjs-CBrZjPCj.js +0 -75
- package/dist/cjs-CBrZjPCj.js.map +0 -1
- package/dist/components-FED-ArwH.js.map +0 -1
- package/dist/copy-button-TTlZONkX.js +0 -34
- package/dist/copy-button-TTlZONkX.js.map +0 -1
- package/dist/csv-modifiers-D6HGC24b.js +0 -26
- package/dist/csv-modifiers-D6HGC24b.js.map +0 -1
- package/dist/download-DGgFOaXj.js.map +0 -1
- package/dist/echart-BkaV3V5G.js +0 -133
- package/dist/echart-BkaV3V5G.js.map +0 -1
- package/dist/echart-CwzbPElc.js.map +0 -1
- package/dist/formatter-wVO81tYk.js +0 -6
- package/dist/formatter-wVO81tYk.js.map +0 -1
- package/dist/formula-BIxJr1P3.js +0 -285
- package/dist/formula-BIxJr1P3.js.map +0 -1
- package/dist/formula-YfZmmuYX.js +0 -190
- package/dist/formula-YfZmmuYX.js.map +0 -1
- package/dist/hooks-zf5gKZYq.js +0 -22
- package/dist/hooks-zf5gKZYq.js.map +0 -1
- package/dist/markdown-content-BWUqwx9F.js.map +0 -1
- package/dist/markdown-oo9mnJun.js.map +0 -1
- package/dist/range-BCMAl5xf.js.map +0 -1
- package/dist/row-CvVGBuy_.js +0 -35
- package/dist/row-CvVGBuy_.js.map +0 -1
- package/dist/shared-resize-observer-BEiP2rQt.js +0 -157
- package/dist/shared-resize-observer-BEiP2rQt.js.map +0 -1
- package/dist/smart-tooltip-CwGHCqab.js +0 -34
- package/dist/smart-tooltip-CwGHCqab.js.map +0 -1
- package/dist/spread-CgCTKPQD.js.map +0 -1
- package/dist/stores-tiFePP0A.js.map +0 -1
- package/dist/styles-Y-qGBELO.js +0 -13
- package/dist/styles-Y-qGBELO.js.map +0 -1
- package/dist/table-lb5momun.js.map +0 -1
- package/dist/tooltip-DJUGNZxY.js +0 -23
- package/dist/tooltip-DJUGNZxY.js.map +0 -1
- package/dist/types/components/list-data/list-data-skeleton.d.ts +0 -5
- package/dist/types/components/list-data/list-data.d.ts +0 -19
- package/dist/types/components/list-data/styles.d.ts +0 -34
- package/dist/types/components/list-data/types.d.ts +0 -23
- package/dist/types/hooks/index.d.ts +0 -1
- package/dist/types/hooks/use-skeleton.d.ts +0 -1
- package/dist/types/hooks/use-widget-ref.d.ts +0 -21
- package/dist/types/widgets/actions/brush-toggle/brush-overlay.d.ts +0 -24
- package/dist/types/widgets/actions/brush-toggle/hit-test.d.ts +0 -19
- package/dist/types/widgets/actions/brush-toggle/types.d.ts +0 -73
- package/dist/types/widgets/actions/fullscreen/styles.d.ts +0 -16
- package/dist/types/widgets/actions/lock-selection/types.d.ts +0 -38
- package/dist/types/widgets/actions/relative-data/types.d.ts +0 -29
- package/dist/types/widgets/actions/relative-data/utils.d.ts +0 -9
- package/dist/types/widgets/actions/searcher/types.d.ts +0 -64
- package/dist/types/widgets/actions/shared/styles.d.ts +0 -11
- package/dist/types/widgets/actions/stack-toggle/grouped-bar-chart-icon.d.ts +0 -1
- package/dist/types/widgets/actions/stack-toggle/types.d.ts +0 -25
- package/dist/types/widgets/actions/zoom-toggle/types.d.ts +0 -41
- package/dist/types/widgets/bar/config.d.ts +0 -9
- package/dist/types/widgets/bar/style.d.ts +0 -37
- package/dist/types/widgets/category/config.d.ts +0 -20
- package/dist/types/widgets/echart/const.d.ts +0 -1
- package/dist/types/widgets/echart/options.d.ts +0 -9
- package/dist/types/widgets/echart/types.d.ts +0 -38
- package/dist/types/widgets/echart/utils.d.ts +0 -128
- package/dist/types/widgets/error/error.d.ts +0 -12
- package/dist/types/widgets/error/index.d.ts +0 -2
- package/dist/types/widgets/error/types.d.ts +0 -20
- package/dist/types/widgets/formula/components/item.d.ts +0 -5
- package/dist/types/widgets/formula/components/prefix.d.ts +0 -5
- package/dist/types/widgets/formula/components/row.d.ts +0 -5
- package/dist/types/widgets/formula/components/series.d.ts +0 -5
- package/dist/types/widgets/formula/components/suffix.d.ts +0 -5
- package/dist/types/widgets/formula/components/value.d.ts +0 -5
- package/dist/types/widgets/formula/config.d.ts +0 -15
- package/dist/types/widgets/formula/serializer.d.ts +0 -16
- package/dist/types/widgets/histogram/config.d.ts +0 -21
- package/dist/types/widgets/histogram/style.d.ts +0 -15
- package/dist/types/widgets/loader/index.d.ts +0 -3
- package/dist/types/widgets/loader/loader.d.ts +0 -24
- package/dist/types/widgets/loader/types.d.ts +0 -9
- package/dist/types/widgets/loader/utils.d.ts +0 -35
- package/dist/types/widgets/markdown/config.d.ts +0 -14
- package/dist/types/widgets/no-data/index.d.ts +0 -2
- package/dist/types/widgets/no-data/no-data.d.ts +0 -36
- package/dist/types/widgets/no-data/style.d.ts +0 -6
- package/dist/types/widgets/no-data/types.d.ts +0 -71
- package/dist/types/widgets/note/index.d.ts +0 -2
- package/dist/types/widgets/note/note.d.ts +0 -12
- package/dist/types/widgets/note/types.d.ts +0 -8
- package/dist/types/widgets/pie/config.d.ts +0 -9
- package/dist/types/widgets/pie/style.d.ts +0 -15
- package/dist/types/widgets/range/components/range-item.d.ts +0 -5
- package/dist/types/widgets/range/config.d.ts +0 -7
- package/dist/types/widgets/range/serializer.d.ts +0 -16
- package/dist/types/widgets/scatterplot/config.d.ts +0 -9
- package/dist/types/widgets/scatterplot/style.d.ts +0 -24
- package/dist/types/widgets/selection-summary/index.d.ts +0 -2
- package/dist/types/widgets/selection-summary/types.d.ts +0 -13
- package/dist/types/widgets/skeleton-loader/index.d.ts +0 -2
- package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +0 -12
- package/dist/types/widgets/skeleton-loader/types.d.ts +0 -7
- package/dist/types/widgets/spread/components/max-value.d.ts +0 -5
- package/dist/types/widgets/spread/components/min-value.d.ts +0 -5
- package/dist/types/widgets/spread/components/separator.d.ts +0 -5
- package/dist/types/widgets/spread/config.d.ts +0 -16
- package/dist/types/widgets/spread/style.d.ts +0 -21
- package/dist/types/widgets/stores/use-widget-selector.d.ts +0 -35
- package/dist/types/widgets/stores/widget-store.d.ts +0 -60
- package/dist/types/widgets/subheader/index.d.ts +0 -2
- package/dist/types/widgets/subheader/types.d.ts +0 -10
- package/dist/types/widgets/table/components/cell-header.d.ts +0 -5
- package/dist/types/widgets/table/components/cell.d.ts +0 -18
- package/dist/types/widgets/table/components/pagination-actions.d.ts +0 -5
- package/dist/types/widgets/table/components/pagination.d.ts +0 -5
- package/dist/types/widgets/table/components/row.d.ts +0 -5
- package/dist/types/widgets/table/config.d.ts +0 -21
- package/dist/types/widgets/table/hooks/use-pagination.d.ts +0 -41
- package/dist/types/widgets/table/hooks/use-selection.d.ts +0 -39
- package/dist/types/widgets/table/hooks/use-sort.d.ts +0 -30
- package/dist/types/widgets/table/serializer.d.ts +0 -16
- package/dist/types/widgets/timeseries/config.d.ts +0 -9
- package/dist/types/widgets/timeseries/style.d.ts +0 -38
- package/dist/types/widgets/toolbar-actions/index.d.ts +0 -2
- package/dist/types/widgets/toolbar-actions/styles.d.ts +0 -37
- package/dist/types/widgets/toolbar-actions/toolbar-actions.d.ts +0 -17
- package/dist/types/widgets/toolbar-actions/types.d.ts +0 -52
- package/dist/types/widgets/utils/chart-config/config-factory.d.ts +0 -38
- package/dist/types/widgets/utils/chart-config/csv-modifiers.d.ts +0 -19
- package/dist/types/widgets/utils/chart-config/download-config.d.ts +0 -3
- package/dist/types/widgets/utils/chart-config/index.d.ts +0 -9
- package/dist/types/widgets/utils/formatter.d.ts +0 -2
- package/dist/types/widgets/utils/skeleton/index.d.ts +0 -4
- package/dist/types/widgets/utils/skeleton/styles.d.ts +0 -19
- package/dist/types/widgets/wrapper/components/actions.d.ts +0 -5
- package/dist/types/widgets/wrapper/components/options.d.ts +0 -5
- package/dist/types/widgets/wrapper/components/title.d.ts +0 -9
- package/dist/types/widgets/wrapper/styles.d.ts +0 -89
- package/dist/types/widgets/wrapper/types.d.ts +0 -37
- package/dist/types/widgets/wrapper/wrapper-ui.d.ts +0 -16
- package/dist/types/widgets/wrapper/wrapper.d.ts +0 -16
- package/dist/types/widgets-v2/actions/brush-toggle/brush-toggle.d.ts +0 -56
- package/dist/types/widgets-v2/actions/change-column/change-column-icon.d.ts +0 -2
- package/dist/types/widgets-v2/actions/change-column/change-column.d.ts +0 -29
- package/dist/types/widgets-v2/actions/change-column/sortable-column-item.d.ts +0 -14
- package/dist/types/widgets-v2/actions/change-column/types.d.ts +0 -10
- package/dist/types/widgets-v2/actions/download/download.d.ts +0 -18
- package/dist/types/widgets-v2/actions/download/exports.d.ts +0 -37
- package/dist/types/widgets-v2/actions/download/types.d.ts +0 -46
- package/dist/types/widgets-v2/actions/fullscreen/fullscreen.d.ts +0 -85
- package/dist/types/widgets-v2/actions/fullscreen/types.d.ts +0 -14
- package/dist/types/widgets-v2/actions/index.d.ts +0 -10
- package/dist/types/widgets-v2/actions/lock-selection/lock-selection.d.ts +0 -57
- package/dist/types/widgets-v2/actions/relative-data/relative-data.d.ts +0 -39
- package/dist/types/widgets-v2/actions/searcher/searcher-toggle.d.ts +0 -23
- package/dist/types/widgets-v2/actions/searcher/searcher.d.ts +0 -11
- package/dist/types/widgets-v2/actions/stack-toggle/stack-toggle.d.ts +0 -10
- package/dist/types/widgets-v2/actions/stack-toggle/style.d.ts +0 -12
- package/dist/types/widgets-v2/actions/zoom-toggle/style.d.ts +0 -12
- package/dist/types/widgets-v2/actions/zoom-toggle/zoom-toggle.d.ts +0 -35
- package/dist/types/widgets-v2/bar/download.d.ts +0 -24
- package/dist/types/widgets-v2/bar/index.d.ts +0 -4
- package/dist/types/widgets-v2/bar/skeleton.d.ts +0 -6
- package/dist/types/widgets-v2/bar/types.d.ts +0 -46
- package/dist/types/widgets-v2/category/category-ui.d.ts +0 -96
- package/dist/types/widgets-v2/category/components/category-bar.d.ts +0 -23
- package/dist/types/widgets-v2/category/components/category-legend.d.ts +0 -34
- package/dist/types/widgets-v2/category/components/category-row-multi.d.ts +0 -31
- package/dist/types/widgets-v2/category/components/category-row-other.d.ts +0 -26
- package/dist/types/widgets-v2/category/components/category-row-single.d.ts +0 -28
- package/dist/types/widgets-v2/category/download.d.ts +0 -16
- package/dist/types/widgets-v2/category/index.d.ts +0 -10
- package/dist/types/widgets-v2/category/skeleton.d.ts +0 -11
- package/dist/types/widgets-v2/category/style.d.ts +0 -193
- package/dist/types/widgets-v2/category/types.d.ts +0 -55
- package/dist/types/widgets-v2/echart/echart-ui.d.ts +0 -44
- package/dist/types/widgets-v2/echart/echart.d.ts +0 -83
- package/dist/types/widgets-v2/echart/index.d.ts +0 -4
- package/dist/types/widgets-v2/echart/shared-resize-observer.d.ts +0 -5
- package/dist/types/widgets-v2/formula/download.d.ts +0 -20
- package/dist/types/widgets-v2/formula/formula-ui.d.ts +0 -20
- package/dist/types/widgets-v2/formula/index.d.ts +0 -11
- package/dist/types/widgets-v2/formula/skeleton.d.ts +0 -4
- package/dist/types/widgets-v2/formula/style.d.ts +0 -29
- package/dist/types/widgets-v2/formula/types.d.ts +0 -43
- package/dist/types/widgets-v2/histogram/download.d.ts +0 -17
- package/dist/types/widgets-v2/histogram/index.d.ts +0 -5
- package/dist/types/widgets-v2/histogram/skeleton.d.ts +0 -9
- package/dist/types/widgets-v2/histogram/types.d.ts +0 -60
- package/dist/types/widgets-v2/markdown/download.d.ts +0 -16
- package/dist/types/widgets-v2/markdown/index.d.ts +0 -6
- package/dist/types/widgets-v2/markdown/markdown-ui.d.ts +0 -12
- package/dist/types/widgets-v2/markdown/markdown.d.ts +0 -6
- package/dist/types/widgets-v2/markdown/skeleton.d.ts +0 -4
- package/dist/types/widgets-v2/markdown/style.d.ts +0 -61
- package/dist/types/widgets-v2/markdown/types.d.ts +0 -4
- package/dist/types/widgets-v2/note/style.d.ts +0 -26
- package/dist/types/widgets-v2/pie/download.d.ts +0 -17
- package/dist/types/widgets-v2/pie/index.d.ts +0 -4
- package/dist/types/widgets-v2/pie/skeleton.d.ts +0 -13
- package/dist/types/widgets-v2/pie/types.d.ts +0 -57
- package/dist/types/widgets-v2/range/index.d.ts +0 -4
- package/dist/types/widgets-v2/range/range-ui.d.ts +0 -27
- package/dist/types/widgets-v2/range/skeleton.d.ts +0 -9
- package/dist/types/widgets-v2/range/style.d.ts +0 -40
- package/dist/types/widgets-v2/range/types.d.ts +0 -37
- package/dist/types/widgets-v2/scatterplot/download.d.ts +0 -16
- package/dist/types/widgets-v2/scatterplot/index.d.ts +0 -5
- package/dist/types/widgets-v2/scatterplot/skeleton.d.ts +0 -12
- package/dist/types/widgets-v2/scatterplot/types.d.ts +0 -54
- package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +0 -29
- package/dist/types/widgets-v2/selection-summary/style.d.ts +0 -38
- package/dist/types/widgets-v2/spread/download.d.ts +0 -15
- package/dist/types/widgets-v2/spread/index.d.ts +0 -7
- package/dist/types/widgets-v2/spread/skeleton.d.ts +0 -9
- package/dist/types/widgets-v2/spread/spread-ui.d.ts +0 -18
- package/dist/types/widgets-v2/spread/types.d.ts +0 -25
- package/dist/types/widgets-v2/stores/index.d.ts +0 -8
- package/dist/types/widgets-v2/stores/types.d.ts +0 -55
- package/dist/types/widgets-v2/subheader/style.d.ts +0 -10
- package/dist/types/widgets-v2/subheader/subheader.d.ts +0 -11
- package/dist/types/widgets-v2/table/download.d.ts +0 -18
- package/dist/types/widgets-v2/table/helpers.d.ts +0 -32
- package/dist/types/widgets-v2/table/index.d.ts +0 -8
- package/dist/types/widgets-v2/table/skeleton.d.ts +0 -22
- package/dist/types/widgets-v2/table/style.d.ts +0 -40
- package/dist/types/widgets-v2/table/table-ui.d.ts +0 -44
- package/dist/types/widgets-v2/table/types.d.ts +0 -48
- package/dist/types/widgets-v2/timeseries/download.d.ts +0 -17
- package/dist/types/widgets-v2/timeseries/index.d.ts +0 -5
- package/dist/types/widgets-v2/timeseries/skeleton.d.ts +0 -8
- package/dist/types/widgets-v2/timeseries/types.d.ts +0 -60
- package/dist/types/widgets-v2/utils/index.d.ts +0 -3
- package/dist/types/widgets-v2/wrapper/index.d.ts +0 -4
- package/dist/use-widget-selector-VSPhfhNm.js +0 -12
- package/dist/use-widget-selector-VSPhfhNm.js.map +0 -1
- package/dist/utils-Dr6gf3vD.js.map +0 -1
- package/dist/widget-store-BFPKYm4R.js +0 -187
- package/dist/widget-store-BFPKYm4R.js.map +0 -1
- package/dist/widgets/category.js.map +0 -1
- package/dist/widgets/error.js +0 -30
- package/dist/widgets/error.js.map +0 -1
- package/dist/widgets/loader.js +0 -66
- package/dist/widgets/loader.js.map +0 -1
- package/dist/widgets/markdown.js.map +0 -1
- package/dist/widgets/no-data.js +0 -55
- package/dist/widgets/no-data.js.map +0 -1
- package/dist/widgets/note.js +0 -127
- package/dist/widgets/note.js.map +0 -1
- package/dist/widgets/range.js.map +0 -1
- package/dist/widgets/selection-summary.js +0 -41
- package/dist/widgets/selection-summary.js.map +0 -1
- package/dist/widgets/skeleton-loader.js +0 -24
- package/dist/widgets/skeleton-loader.js.map +0 -1
- package/dist/widgets/spread.js.map +0 -1
- package/dist/widgets/subheader.js +0 -51
- package/dist/widgets/subheader.js.map +0 -1
- package/dist/widgets/table.js.map +0 -1
- package/dist/widgets/toolbar-actions.js +0 -145
- package/dist/widgets/toolbar-actions.js.map +0 -1
- package/dist/widgets/utils.js.map +0 -1
- package/dist/widgets/wrapper.js +0 -273
- package/dist/widgets/wrapper.js.map +0 -1
- package/dist/widgets-v2/actions.js +0 -4
- package/dist/widgets-v2/bar.js +0 -260
- package/dist/widgets-v2/bar.js.map +0 -1
- package/dist/widgets-v2/category.js +0 -2
- package/dist/widgets-v2/echart.js +0 -2
- package/dist/widgets-v2/formula.js +0 -2
- package/dist/widgets-v2/histogram.js +0 -297
- package/dist/widgets-v2/histogram.js.map +0 -1
- package/dist/widgets-v2/markdown.js +0 -3
- package/dist/widgets-v2/pie.js +0 -373
- package/dist/widgets-v2/pie.js.map +0 -1
- package/dist/widgets-v2/range.js +0 -2
- package/dist/widgets-v2/scatterplot.js +0 -330
- package/dist/widgets-v2/scatterplot.js.map +0 -1
- package/dist/widgets-v2/spread.js +0 -2
- package/dist/widgets-v2/stores.js +0 -2
- package/dist/widgets-v2/table.js +0 -2
- package/dist/widgets-v2/timeseries.js +0 -294
- package/dist/widgets-v2/timeseries.js.map +0 -1
- package/dist/widgets-v2/utils.js +0 -2
- package/dist/widgets-v2.js +0 -952
- package/dist/widgets-v2.js.map +0 -1
- package/dist/zoom-toggle-IsF8BnAp.js.map +0 -1
- package/src/components/list-data/list-data-skeleton.test.tsx +0 -10
- package/src/components/list-data/list-data-skeleton.tsx +0 -40
- package/src/components/list-data/list-data.test.tsx +0 -167
- package/src/components/list-data/list-data.tsx +0 -124
- package/src/components/list-data/styles.ts +0 -37
- package/src/components/list-data/types.ts +0 -25
- package/src/hooks/index.ts +0 -1
- package/src/hooks/use-skeleton.test.tsx +0 -32
- package/src/hooks/use-skeleton.ts +0 -19
- package/src/hooks/use-widget-ref.ts +0 -34
- package/src/widgets/README.md +0 -277
- package/src/widgets/actions/brush-toggle/brush-overlay.test.tsx +0 -465
- package/src/widgets/actions/brush-toggle/brush-overlay.tsx +0 -408
- package/src/widgets/actions/brush-toggle/hit-test.test.ts +0 -65
- package/src/widgets/actions/brush-toggle/hit-test.ts +0 -45
- package/src/widgets/actions/brush-toggle/types.ts +0 -78
- package/src/widgets/actions/change-column/change-column-dnd.test.tsx +0 -193
- package/src/widgets/actions/change-column/sortable-column-item.test.tsx +0 -124
- package/src/widgets/actions/download/exports.tsx +0 -118
- package/src/widgets/actions/fullscreen/styles.ts +0 -17
- package/src/widgets/actions/lock-selection/types.ts +0 -43
- package/src/widgets/actions/relative-data/types.ts +0 -33
- package/src/widgets/actions/relative-data/utils.test.ts +0 -223
- package/src/widgets/actions/relative-data/utils.ts +0 -58
- package/src/widgets/actions/searcher/searcher-toggle.test.tsx +0 -354
- package/src/widgets/actions/searcher/types.ts +0 -72
- package/src/widgets/actions/shared/styles.ts +0 -12
- package/src/widgets/actions/stack-toggle/grouped-bar-chart-icon.tsx +0 -14
- package/src/widgets/actions/stack-toggle/types.ts +0 -29
- package/src/widgets/actions/zoom-toggle/types.ts +0 -44
- package/src/widgets/bar/config.ts +0 -140
- package/src/widgets/bar/style.ts +0 -33
- package/src/widgets/category/components/category-rows.test.tsx +0 -213
- package/src/widgets/category/config.ts +0 -86
- package/src/widgets/echart/const.ts +0 -1
- package/src/widgets/echart/options.ts +0 -57
- package/src/widgets/echart/types.ts +0 -45
- package/src/widgets/echart/utils.test.ts +0 -277
- package/src/widgets/echart/utils.ts +0 -244
- package/src/widgets/error/error.test.tsx +0 -331
- package/src/widgets/error/error.tsx +0 -51
- package/src/widgets/error/index.ts +0 -2
- package/src/widgets/error/types.ts +0 -24
- package/src/widgets/formula/components/item.test.tsx +0 -249
- package/src/widgets/formula/components/item.tsx +0 -21
- package/src/widgets/formula/components/prefix.test.tsx +0 -341
- package/src/widgets/formula/components/prefix.tsx +0 -19
- package/src/widgets/formula/components/row.test.tsx +0 -364
- package/src/widgets/formula/components/row.tsx +0 -24
- package/src/widgets/formula/components/series.tsx +0 -35
- package/src/widgets/formula/components/suffix.test.tsx +0 -383
- package/src/widgets/formula/components/suffix.tsx +0 -29
- package/src/widgets/formula/components/value.test.tsx +0 -329
- package/src/widgets/formula/components/value.tsx +0 -24
- package/src/widgets/formula/config.test.ts +0 -37
- package/src/widgets/formula/config.ts +0 -38
- package/src/widgets/formula/serializer.test.tsx +0 -144
- package/src/widgets/formula/serializer.ts +0 -28
- package/src/widgets/histogram/config.ts +0 -230
- package/src/widgets/histogram/style.ts +0 -8
- package/src/widgets/loader/index.ts +0 -4
- package/src/widgets/loader/loader.tsx +0 -92
- package/src/widgets/loader/types.ts +0 -13
- package/src/widgets/loader/utils.test.ts +0 -112
- package/src/widgets/loader/utils.ts +0 -57
- package/src/widgets/markdown/config.ts +0 -28
- package/src/widgets/no-data/index.ts +0 -2
- package/src/widgets/no-data/no-data.test.tsx +0 -497
- package/src/widgets/no-data/no-data.tsx +0 -112
- package/src/widgets/no-data/style.ts +0 -18
- package/src/widgets/no-data/types.ts +0 -76
- package/src/widgets/note/index.ts +0 -2
- package/src/widgets/note/note.test.tsx +0 -391
- package/src/widgets/note/note.tsx +0 -124
- package/src/widgets/note/types.ts +0 -9
- package/src/widgets/pie/config.ts +0 -245
- package/src/widgets/pie/style.ts +0 -8
- package/src/widgets/range/components/range-item.test.tsx +0 -243
- package/src/widgets/range/components/range-item.tsx +0 -214
- package/src/widgets/range/config.ts +0 -10
- package/src/widgets/range/serializer.test.ts +0 -70
- package/src/widgets/range/serializer.ts +0 -27
- package/src/widgets/scatterplot/config.ts +0 -136
- package/src/widgets/scatterplot/style.ts +0 -21
- package/src/widgets/selection-summary/index.ts +0 -6
- package/src/widgets/selection-summary/types.ts +0 -14
- package/src/widgets/skeleton-loader/index.ts +0 -2
- package/src/widgets/skeleton-loader/skeleton-loader.test.tsx +0 -139
- package/src/widgets/skeleton-loader/skeleton-loader.tsx +0 -35
- package/src/widgets/skeleton-loader/types.ts +0 -8
- package/src/widgets/spread/components/max-value.tsx +0 -29
- package/src/widgets/spread/components/min-value.tsx +0 -29
- package/src/widgets/spread/components/separator.tsx +0 -9
- package/src/widgets/spread/config.ts +0 -39
- package/src/widgets/spread/style.ts +0 -22
- package/src/widgets/stores/use-widget-selector.ts +0 -47
- package/src/widgets/stores/widget-store-branches.test.ts +0 -275
- package/src/widgets/stores/widget-store-performance.test.ts +0 -750
- package/src/widgets/stores/widget-store.test.ts +0 -942
- package/src/widgets/stores/widget-store.ts +0 -484
- package/src/widgets/subheader/index.ts +0 -3
- package/src/widgets/subheader/types.ts +0 -11
- package/src/widgets/table/components/cell-header.tsx +0 -58
- package/src/widgets/table/components/cell.tsx +0 -82
- package/src/widgets/table/components/pagination-actions.tsx +0 -67
- package/src/widgets/table/components/pagination.tsx +0 -41
- package/src/widgets/table/components/row.tsx +0 -65
- package/src/widgets/table/config.test.ts +0 -65
- package/src/widgets/table/config.ts +0 -75
- package/src/widgets/table/hooks/use-pagination.test.ts +0 -294
- package/src/widgets/table/hooks/use-pagination.ts +0 -148
- package/src/widgets/table/hooks/use-selection.test.ts +0 -504
- package/src/widgets/table/hooks/use-selection.ts +0 -194
- package/src/widgets/table/hooks/use-sort.test.ts +0 -296
- package/src/widgets/table/hooks/use-sort.ts +0 -131
- package/src/widgets/table/serializer.ts +0 -54
- package/src/widgets/timeseries/config.ts +0 -136
- package/src/widgets/timeseries/style.ts +0 -36
- package/src/widgets/toolbar-actions/index.ts +0 -6
- package/src/widgets/toolbar-actions/styles.ts +0 -38
- package/src/widgets/toolbar-actions/toolbar-actions.test.tsx +0 -691
- package/src/widgets/toolbar-actions/toolbar-actions.tsx +0 -145
- package/src/widgets/toolbar-actions/types.ts +0 -60
- package/src/widgets/utils/chart-config/config-factory.ts +0 -67
- package/src/widgets/utils/chart-config/csv-modifiers.ts +0 -56
- package/src/widgets/utils/chart-config/download-config.ts +0 -22
- package/src/widgets/utils/chart-config/index.ts +0 -29
- package/src/widgets/utils/formatter.ts +0 -2
- package/src/widgets/utils/skeleton/index.ts +0 -5
- package/src/widgets/utils/skeleton/styles.ts +0 -20
- package/src/widgets/wrapper/components/actions.test.tsx +0 -105
- package/src/widgets/wrapper/components/actions.tsx +0 -35
- package/src/widgets/wrapper/components/options.test.tsx +0 -331
- package/src/widgets/wrapper/components/options.tsx +0 -81
- package/src/widgets/wrapper/components/title.test.tsx +0 -126
- package/src/widgets/wrapper/components/title.tsx +0 -35
- package/src/widgets/wrapper/styles.ts +0 -98
- package/src/widgets/wrapper/types.ts +0 -55
- package/src/widgets/wrapper/wrapper-ui.test.tsx +0 -232
- package/src/widgets/wrapper/wrapper-ui.tsx +0 -72
- package/src/widgets/wrapper/wrapper.test.tsx +0 -365
- package/src/widgets/wrapper/wrapper.tsx +0 -60
- package/src/widgets-v2/actions/brush-toggle/brush-toggle.test.tsx +0 -180
- package/src/widgets-v2/actions/brush-toggle/brush-toggle.tsx +0 -154
- package/src/widgets-v2/actions/change-column/change-column-icon.tsx +0 -14
- package/src/widgets-v2/actions/change-column/change-column.test.tsx +0 -59
- package/src/widgets-v2/actions/change-column/change-column.tsx +0 -189
- package/src/widgets-v2/actions/change-column/sortable-column-item.tsx +0 -63
- package/src/widgets-v2/actions/change-column/types.ts +0 -11
- package/src/widgets-v2/actions/download/download.test.tsx +0 -327
- package/src/widgets-v2/actions/download/download.tsx +0 -146
- package/src/widgets-v2/actions/download/exports.test.tsx +0 -198
- package/src/widgets-v2/actions/download/types.ts +0 -46
- package/src/widgets-v2/actions/fullscreen/fullscreen.test.tsx +0 -210
- package/src/widgets-v2/actions/fullscreen/fullscreen.tsx +0 -416
- package/src/widgets-v2/actions/fullscreen/types.ts +0 -15
- package/src/widgets-v2/actions/index.ts +0 -96
- package/src/widgets-v2/actions/lock-selection/lock-selection.test.tsx +0 -301
- package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +0 -188
- package/src/widgets-v2/actions/relative-data/relative-data.test.tsx +0 -71
- package/src/widgets-v2/actions/relative-data/relative-data.tsx +0 -107
- package/src/widgets-v2/actions/searcher/searcher-toggle.tsx +0 -96
- package/src/widgets-v2/actions/searcher/searcher.tsx +0 -127
- package/src/widgets-v2/actions/stack-toggle/stack-toggle.test.tsx +0 -61
- package/src/widgets-v2/actions/stack-toggle/stack-toggle.tsx +0 -54
- package/src/widgets-v2/actions/stack-toggle/style.ts +0 -11
- package/src/widgets-v2/actions/zoom-toggle/style.ts +0 -11
- package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.test.tsx +0 -107
- package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.tsx +0 -106
- package/src/widgets-v2/bar/download.tsx +0 -61
- package/src/widgets-v2/bar/index.ts +0 -10
- package/src/widgets-v2/bar/skeleton.tsx +0 -69
- package/src/widgets-v2/bar/types.ts +0 -51
- package/src/widgets-v2/category/category-ui.test.tsx +0 -909
- package/src/widgets-v2/category/category-ui.tsx +0 -490
- package/src/widgets-v2/category/components/category-bar.tsx +0 -49
- package/src/widgets-v2/category/components/category-legend.tsx +0 -82
- package/src/widgets-v2/category/components/category-row-multi.tsx +0 -86
- package/src/widgets-v2/category/components/category-row-other.tsx +0 -84
- package/src/widgets-v2/category/components/category-row-single.tsx +0 -76
- package/src/widgets-v2/category/download.ts +0 -51
- package/src/widgets-v2/category/index.ts +0 -32
- package/src/widgets-v2/category/skeleton.tsx +0 -74
- package/src/widgets-v2/category/style.ts +0 -329
- package/src/widgets-v2/category/types.ts +0 -61
- package/src/widgets-v2/echart/echart-ui.test.tsx +0 -330
- package/src/widgets-v2/echart/echart-ui.tsx +0 -236
- package/src/widgets-v2/echart/echart.test.tsx +0 -229
- package/src/widgets-v2/echart/echart.tsx +0 -209
- package/src/widgets-v2/echart/index.ts +0 -22
- package/src/widgets-v2/echart/shared-resize-observer.ts +0 -56
- package/src/widgets-v2/formula/formula-ui.test.tsx +0 -91
- package/src/widgets-v2/formula/formula-ui.tsx +0 -66
- package/src/widgets-v2/formula/index.ts +0 -17
- package/src/widgets-v2/formula/skeleton.tsx +0 -27
- package/src/widgets-v2/formula/style.ts +0 -31
- package/src/widgets-v2/formula/types.ts +0 -48
- package/src/widgets-v2/histogram/index.ts +0 -13
- package/src/widgets-v2/histogram/skeleton.tsx +0 -70
- package/src/widgets-v2/histogram/types.ts +0 -64
- package/src/widgets-v2/markdown/index.ts +0 -6
- package/src/widgets-v2/markdown/markdown-ui.test.tsx +0 -75
- package/src/widgets-v2/markdown/markdown-ui.tsx +0 -55
- package/src/widgets-v2/markdown/markdown.tsx +0 -17
- package/src/widgets-v2/markdown/skeleton.tsx +0 -32
- package/src/widgets-v2/markdown/style.ts +0 -53
- package/src/widgets-v2/markdown/types.ts +0 -4
- package/src/widgets-v2/note/style.ts +0 -26
- package/src/widgets-v2/pie/index.ts +0 -10
- package/src/widgets-v2/pie/skeleton.tsx +0 -94
- package/src/widgets-v2/pie/types.ts +0 -62
- package/src/widgets-v2/range/index.ts +0 -4
- package/src/widgets-v2/range/range-ui.test.tsx +0 -136
- package/src/widgets-v2/range/range-ui.tsx +0 -278
- package/src/widgets-v2/range/skeleton.tsx +0 -47
- package/src/widgets-v2/range/style.ts +0 -41
- package/src/widgets-v2/range/types.ts +0 -37
- package/src/widgets-v2/scatterplot/download.ts +0 -51
- package/src/widgets-v2/scatterplot/index.ts +0 -14
- package/src/widgets-v2/scatterplot/skeleton.tsx +0 -84
- package/src/widgets-v2/scatterplot/types.ts +0 -59
- package/src/widgets-v2/selection-summary/selection-summary.tsx +0 -82
- package/src/widgets-v2/selection-summary/style.ts +0 -38
- package/src/widgets-v2/spread/download.ts +0 -56
- package/src/widgets-v2/spread/index.ts +0 -11
- package/src/widgets-v2/spread/skeleton.tsx +0 -38
- package/src/widgets-v2/spread/spread-ui.test.tsx +0 -108
- package/src/widgets-v2/spread/spread-ui.tsx +0 -52
- package/src/widgets-v2/spread/types.ts +0 -27
- package/src/widgets-v2/stores/index.ts +0 -49
- package/src/widgets-v2/stores/types.ts +0 -64
- package/src/widgets-v2/subheader/style.ts +0 -12
- package/src/widgets-v2/subheader/subheader.test.tsx +0 -30
- package/src/widgets-v2/subheader/subheader.tsx +0 -16
- package/src/widgets-v2/table/download.ts +0 -44
- package/src/widgets-v2/table/helpers.test.ts +0 -233
- package/src/widgets-v2/table/helpers.ts +0 -131
- package/src/widgets-v2/table/index.ts +0 -24
- package/src/widgets-v2/table/skeleton.tsx +0 -65
- package/src/widgets-v2/table/style.ts +0 -43
- package/src/widgets-v2/table/table-ui.tsx +0 -364
- package/src/widgets-v2/table/types.ts +0 -55
- package/src/widgets-v2/timeseries/index.ts +0 -11
- package/src/widgets-v2/timeseries/skeleton.tsx +0 -76
- package/src/widgets-v2/timeseries/types.ts +0 -65
- package/src/widgets-v2/utils/index.ts +0 -3
- package/src/widgets-v2/wrapper/index.ts +0 -14
- /package/dist/types/{widgets-v2 → widgets}/actions/brush-toggle/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/brush-toggle/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/brush-toggle/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/change-column/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/change-column/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/change-column/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/download/constants.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/download/csv-item.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/download/icons.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/download/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/download/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/fullscreen/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/fullscreen/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/fullscreen/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/lock-selection/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/lock-selection/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2/actions/brush-toggle → widgets/actions/lock-selection}/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/lock-selection/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/relative-data/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/relative-data/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2/actions/lock-selection → widgets/actions/relative-data}/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/searcher/filter.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/searcher/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/searcher/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/searcher/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/show-all/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/show-all/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/show-all/show-all.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/show-all/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/stack-toggle/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/stack-toggle/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2/actions/relative-data → widgets/actions/stack-toggle}/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/stack-toggle/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/zoom-toggle/index.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/zoom-toggle/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/actions/zoom-toggle/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/bar/options.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/category/category.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/echart/edge-label-clamp.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/echart/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/echart/use-chart-selection.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/formula/delta.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/formula/formula.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/formula/note.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/formula/prefix.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/formula/suffix.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/histogram/options.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/histogram/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/markdown/markdown-content.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/note/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/note/widget-note.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/pie/options.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/provider/widget-provider.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/range/range.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/scatterplot/options.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/scatterplot/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/selection-summary/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/spread/band.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/spread/separator.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/spread/spread.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/state/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/state/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/state/widget-state.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/stores/pipeline-middleware.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/stores/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/stores/use-echart-instance.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/stores/use-transform-enabled.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/stores/use-transform.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/stores/widget-context.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/table/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/table/table.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/table/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/timeseries/options.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/timeseries/transforms.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/toolbox/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/toolbox/style.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/toolbox/toolbox.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/utils/data-zoom-layout.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/utils/merge-options.d.ts +0 -0
- /package/dist/types/widgets/utils/{chart-config/option-builders.d.ts → option-builders.d.ts} +0 -0
- /package/dist/types/{widgets-v2 → widgets}/utils/resolve-theme-color.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/wrapper/labels.d.ts +0 -0
- /package/dist/types/{widgets-v2 → widgets}/wrapper/widget-content.d.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/brush-toggle/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/brush-toggle/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/brush-toggle/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/brush-toggle/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/change-column/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/change-column/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/change-column/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/constants.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/csv-item.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/csv-item.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/icons.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/png-item.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/download/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/fullscreen/fullscreen-store.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/fullscreen/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/fullscreen/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/fullscreen/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/lock-selection/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/lock-selection/labels.ts +0 -0
- /package/src/{widgets-v2/actions/brush-toggle → widgets/actions/lock-selection}/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/lock-selection/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/relative-data/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/relative-data/labels.ts +0 -0
- /package/src/{widgets-v2/actions/lock-selection → widgets/actions/relative-data}/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/relative-data/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/searcher/filter.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/searcher/filter.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/searcher/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/searcher/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/searcher/searcher.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/searcher/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/show-all/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/show-all/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/show-all/show-all.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/show-all/show-all.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/actions/show-all/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/stack-toggle/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/stack-toggle/labels.ts +0 -0
- /package/src/{widgets-v2/actions/relative-data → widgets/actions/stack-toggle}/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/stack-toggle/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/stack-toggle/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/zoom-toggle/index.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/zoom-toggle/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/zoom-toggle/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/actions/zoom-toggle/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/bar/download.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/bar/options.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/bar/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/category.relative-data.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/category.stack-toggle.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/category.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/components/category-bar-stacked.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/components/category-bar.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/components/category-row-other.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/components/category-row-stacked.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/category/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/category/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/echart/edge-label-clamp.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/echart/edge-label-clamp.ts +0 -0
- /package/src/{widgets-v2 → widgets}/echart/shared-resize-observer.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/echart/use-chart-selection.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/echart/use-chart-selection.ts +0 -0
- /package/src/{widgets-v2 → widgets}/formula/delta.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/download.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/formula.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/formula.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/prefix.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/subcomponents.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/formula/suffix.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/histogram/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/histogram/options.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/histogram/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/histogram/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/histogram/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/markdown/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/markdown/markdown-content.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/markdown/markdown-content.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/markdown/markdown.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/markdown/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/note/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/note/widget-note.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/pie/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/pie/options.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/pie/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/provider/widget-provider.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/provider/widget-provider.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/range/range.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/range/range.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/range/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/scatterplot/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/scatterplot/options.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/scatterplot/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/scatterplot/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/scatterplot/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/selection-summary/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/selection-summary/selection-summary.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/spread/band.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/spread/band.ts +0 -0
- /package/src/{widgets-v2 → widgets}/spread/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/spread/separator.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/spread/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/spread/spread.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/spread/spread.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/state/labels.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/state/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/state/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/state/widget-state.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/stores/pipeline-middleware.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/stores/pipeline-middleware.ts +0 -0
- /package/src/{widgets-v2 → widgets}/stores/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/stores/use-echart-instance.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/stores/use-echart-instance.ts +0 -0
- /package/src/{widgets-v2 → widgets}/stores/use-transform-enabled.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/stores/use-transform-enabled.ts +0 -0
- /package/src/{widgets-v2 → widgets}/stores/use-transform.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/stores/widget-context.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/stores/widget-context.ts +0 -0
- /package/src/{widgets-v2 → widgets}/table/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/table/labels.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/table/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/table/table-ui.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/table/table.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/table/table.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/table/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/table/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/timeseries/download.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/timeseries/options.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/timeseries/skeleton.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/timeseries/transforms.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/timeseries/transforms.ts +0 -0
- /package/src/{widgets-v2 → widgets}/toolbox/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/toolbox/style.ts +0 -0
- /package/src/{widgets-v2 → widgets}/toolbox/toolbox.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/toolbox/toolbox.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/utils/data-zoom-layout.ts +0 -0
- /package/src/{widgets-v2 → widgets}/utils/merge-options.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/utils/merge-options.ts +0 -0
- /package/src/widgets/utils/{chart-config/option-builders.test.ts → option-builders.test.ts} +0 -0
- /package/src/widgets/utils/{chart-config/option-builders.ts → option-builders.ts} +0 -0
- /package/src/{widgets-v2 → widgets}/utils/resolve-theme-color.test.ts +0 -0
- /package/src/{widgets-v2 → widgets}/utils/resolve-theme-color.ts +0 -0
- /package/src/{widgets-v2 → widgets}/wrapper/labels.ts +0 -0
- /package/src/{widgets-v2 → widgets}/wrapper/widget-actions.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/wrapper/widget-content.test.tsx +0 -0
- /package/src/{widgets-v2 → widgets}/wrapper/widget-content.tsx +0 -0
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { c as e } from "react/compiler-runtime";
|
|
2
|
-
import { IconButton as t } from "@mui/material";
|
|
3
|
-
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
-
import { ContentCopyOutlined as r } from "@mui/icons-material";
|
|
5
|
-
import { copy as i } from "@carto/ps-utils";
|
|
6
|
-
//#region src/components/copy-button/copy-button.tsx
|
|
7
|
-
function a(a) {
|
|
8
|
-
let o = e(17), s, c, l, u, d;
|
|
9
|
-
o[0] === a ? (s = o[1], c = o[2], l = o[3], u = o[4], d = o[5]) : ({copyText: c, onSuccess: u, onError: l, "aria-label": s, ...d} = a, o[0] = a, o[1] = s, o[2] = c, o[3] = l, o[4] = u, o[5] = d);
|
|
10
|
-
let f;
|
|
11
|
-
o[6] !== c || o[7] !== l || o[8] !== u ? (f = async function() {
|
|
12
|
-
try {
|
|
13
|
-
await i(c), u?.();
|
|
14
|
-
} catch (e) {
|
|
15
|
-
l?.(e);
|
|
16
|
-
}
|
|
17
|
-
}, o[6] = c, o[7] = l, o[8] = u, o[9] = f) : f = o[9];
|
|
18
|
-
let p = f, m;
|
|
19
|
-
o[10] === p ? m = o[11] : (m = () => void p(), o[10] = p, o[11] = m);
|
|
20
|
-
let h = s ?? "Copy", g;
|
|
21
|
-
o[12] === Symbol.for("react.memo_cache_sentinel") ? (g = /* @__PURE__ */ n(r, { fontSize: "small" }), o[12] = g) : g = o[12];
|
|
22
|
-
let _;
|
|
23
|
-
return o[13] !== d || o[14] !== m || o[15] !== h ? (_ = /* @__PURE__ */ n(t, {
|
|
24
|
-
size: "small",
|
|
25
|
-
onClick: m,
|
|
26
|
-
"aria-label": h,
|
|
27
|
-
...d,
|
|
28
|
-
children: g
|
|
29
|
-
}), o[13] = d, o[14] = m, o[15] = h, o[16] = _) : _ = o[16], _;
|
|
30
|
-
}
|
|
31
|
-
//#endregion
|
|
32
|
-
export { a as t };
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=copy-button-TTlZONkX.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copy-button-TTlZONkX.js","names":["{\n copyText,\n onSuccess,\n onError,\n 'aria-label': ariaLabel,\n ...props\n}: CopyButtonProps","async function onCopy() {\n try {\n await copy(copyText)\n onSuccess?.()\n } catch (err) {\n onError?.(err as Error)\n }\n }","err","() => void onCopy()","<ContentCopyOutlined fontSize='small' />","<IconButton\n size='small'\n onClick={() => void onCopy()}\n aria-label={ariaLabel ?? 'Copy'}\n {...props}\n >\n <ContentCopyOutlined fontSize='small' />\n </IconButton>","ariaLabel ?? 'Copy'"],"sources":["../src/components/copy-button/copy-button.tsx"],"sourcesContent":["import { IconButton } from '@mui/material'\nimport { ContentCopyOutlined } from '@mui/icons-material'\nimport type { CopyButtonProps } from './types'\nimport { copy } from '@carto/ps-utils'\n\nexport function CopyButton({\n copyText,\n onSuccess,\n onError,\n 'aria-label': ariaLabel,\n ...props\n}: CopyButtonProps) {\n async function onCopy() {\n try {\n await copy(copyText)\n onSuccess?.()\n } catch (err) {\n onError?.(err as Error)\n }\n }\n return (\n <IconButton\n size='small'\n onClick={() => void onCopy()}\n aria-label={ariaLabel ?? 'Copy'}\n {...props}\n >\n <ContentCopyOutlined fontSize='small' />\n </IconButton>\n )\n}\n"],"mappings":";;;;;;AAKA,SAAgB,EAAA,GAMI;gBAFJ,GAHd,GAEA,GADA,GAGG;CALsBA,AAAAA,EAAAA,OAAAA,0DACzB,wCAGA,cAAc,GACd,GAAA,KALyBA;CAOzBC,IAAAA;CAEe,AAAA,EAAA,OAAA,KAAA,EAAA,OAGX,KAAA,EAAA,OAFA,KAHJ,IAAA,iBAAwB;EACtB,IAAI;GAEF,AADA,MAAM,EAAK,CAAQ,GACnB,IAAY;EACd,SAASC,GAAK;GACZ,IAAU,CAAY;EACxB;CACF,GALe,EAAA,KAAA,GAGX,EAAA,KAAA,GAFA,EAAA,KAAA;CAHJ,IAAe,IAAfD,GAWaE;CAAW,AAAA,EAAA,QAAA,iBAAX,UAAM,KAAK,EAAO,GAAP,EAAA,MAAA;CACR,IAAA,IAAA,KAAa,QAGzBC;sDAAC,IAAA,kBAAA,GAAD,EAAqB,UAAS,QAAS,CAAA;CANzCC,IAAAA;CADF,OAKQ,EAAA,QAAA,KAAA,EAAA,QAFKF,KAAAA,EAAAA,QACGG,KAHd,IAAA,kBAAC,GAAD;EACE,MAAK;EACL,SAASH;EACT,cAAYG;EACZ,GAAI;EAEJF,UAAAA;CACU,CAAA,GAHN,EAAA,MAAA,GAFKD,EAAAA,MAAAA,GACGG,EAAAA,MAAAA,2BAHdD;AASJ"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
//#region src/widgets/utils/chart-config/csv-modifiers.ts
|
|
2
|
-
function e(e) {
|
|
3
|
-
let t = [];
|
|
4
|
-
if (e.length > 0 && (e[0]?.length ?? 0) > 0) {
|
|
5
|
-
let n = e?.[0]?.[0] ?? {}, r = Object.keys(n);
|
|
6
|
-
t.push(r);
|
|
7
|
-
}
|
|
8
|
-
return e.forEach((e) => {
|
|
9
|
-
e.forEach((e) => {
|
|
10
|
-
let n = Object.values(e).map((e) => String(e));
|
|
11
|
-
t.push(n);
|
|
12
|
-
});
|
|
13
|
-
}), t;
|
|
14
|
-
}
|
|
15
|
-
function t(e) {
|
|
16
|
-
let t = [];
|
|
17
|
-
return t.push(["x", "y"]), e.forEach((e) => {
|
|
18
|
-
e.forEach((e) => {
|
|
19
|
-
t.push([String(e[0]), String(e[1])]);
|
|
20
|
-
});
|
|
21
|
-
}), t;
|
|
22
|
-
}
|
|
23
|
-
//#endregion
|
|
24
|
-
export { t as n, e as t };
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=csv-modifiers-D6HGC24b.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csv-modifiers-D6HGC24b.js","names":[],"sources":["../src/widgets/utils/chart-config/csv-modifiers.ts"],"sourcesContent":["/**\n * Shared CSV export modifiers for chart widgets\n */\n\n/**\n * Flattens object array data into CSV-ready rows.\n * Used by bar, pie, histogram, and timeseries widgets.\n *\n * @param data - Array of series, where each series is an array of data objects\n * @returns CSV rows with headers and values\n */\nexport function flattenObjectArrayToCSV<T extends Record<string, unknown>>(\n data: T[][],\n): string[][] {\n const rows: string[][] = []\n\n // Add headers from first data point if available\n if (data.length > 0 && (data[0]?.length ?? 0) > 0) {\n const firstDataPoint = data?.[0]?.[0] ?? {}\n const headers = Object.keys(firstDataPoint)\n rows.push(headers)\n }\n\n // Add data rows from all series\n data.forEach((series) => {\n series.forEach((dataPoint) => {\n const values = Object.values(dataPoint).map((v) => String(v))\n rows.push(values)\n })\n })\n\n return rows\n}\n\n/**\n * Creates CSV rows for scatterplot data.\n * Scatterplot uses array format [x, y] instead of objects.\n *\n * @param data - Array of series, where each series is an array of [x, y] tuples\n * @returns CSV rows with ['x', 'y'] headers\n */\nexport function scatterplotDataToCSV(data: number[][][]): string[][] {\n const rows: string[][] = []\n\n // Add headers\n rows.push(['x', 'y'])\n\n // Add data rows from all series\n data.forEach((series) => {\n series.forEach((dataPoint) => {\n rows.push([String(dataPoint[0]), String(dataPoint[1])])\n })\n })\n\n return rows\n}\n"],"mappings":";AAWA,SAAgB,EACd,GACY;CACZ,IAAM,IAAmB,CAAC;CAG1B,IAAI,EAAK,SAAS,MAAM,EAAK,EAAE,EAAE,UAAU,KAAK,GAAG;EACjD,IAAM,IAAiB,IAAO,EAAE,GAAG,MAAM,CAAC,GACpC,IAAU,OAAO,KAAK,CAAc;EAC1C,EAAK,KAAK,CAAO;CACnB;CAUA,OAPA,EAAK,SAAS,MAAW;EACvB,EAAO,SAAS,MAAc;GAC5B,IAAM,IAAS,OAAO,OAAO,CAAS,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,CAAC;GAC5D,EAAK,KAAK,CAAM;EAClB,CAAC;CACH,CAAC,GAEM;AACT;AASA,SAAgB,EAAqB,GAAgC;CACnE,IAAM,IAAmB,CAAC;CAY1B,OATA,EAAK,KAAK,CAAC,KAAK,GAAG,CAAC,GAGpB,EAAK,SAAS,MAAW;EACvB,EAAO,SAAS,MAAc;GAC5B,EAAK,KAAK,CAAC,OAAO,EAAU,EAAE,GAAG,OAAO,EAAU,EAAE,CAAC,CAAC;EACxD,CAAC;CACH,CAAC,GAEM;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"download-DGgFOaXj.js","names":["Icon = DownloadIcon","{\n items,\n labels,\n icon: Icon = DownloadIcon,\n iconProps,\n onError,\n}: DownloadProps","{ ...DEFAULT_DOWNLOAD_LABELS, ...labels }","(e: React.MouseEvent<HTMLButtonElement>) => {\n // Clear any prior error when the user re-engages the menu — the next\n // attempt is a fresh interaction, not a continuation of the failed one.\n setError(null)\n setAnchorEl(e.currentTarget)\n }","useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n // Clear any prior error when the user re-engages the menu — the next\n // attempt is a fresh interaction, not a continuation of the failed one.\n setError(null)\n setAnchorEl(e.currentTarget)\n }, [])","() => setAnchorEl(null)","useCallback(() => setAnchorEl(null), [])","(item: DownloadItem) => {\n // Single-flight: ignore re-entry while a download is already in flight.\n // The trigger is `disabled` and the menu is closed during that window,\n // so this guard mostly defends against future call sites that bypass\n // the menu (e.g. keyboard shortcuts).\n if (item.disabled || isDownloading) return\n close()\n setIsDownloading(true)\n setError(null)\n item\n .resolve({ id })\n .then(({ url, filename, revoke }) => {\n // `item.filename` overrides what `resolve()` returns — lets consumers\n // template the filename with widget metadata declaratively.\n triggerLinkDownload({ url, filename: item.filename ?? filename })\n // Defer revoke past the current task so Safari / Firefox-on-slow-disk\n // can dispatch the download before the blob URL is invalidated.\n // Synchronous revoke here can silently cancel the download.\n if (revoke) setTimeout(revoke, 0)\n })\n .catch((err: unknown) => {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n onError?.(e)\n })\n .finally(() => {\n setIsDownloading(false)\n })\n }","{ url, filename, revoke }","e","useCallback(\n (item: DownloadItem) => {\n // Single-flight: ignore re-entry while a download is already in flight.\n // The trigger is `disabled` and the menu is closed during that window,\n // so this guard mostly defends against future call sites that bypass\n // the menu (e.g. keyboard shortcuts).\n if (item.disabled || isDownloading) return\n close()\n setIsDownloading(true)\n setError(null)\n item\n .resolve({ id })\n .then(({ url, filename, revoke }) => {\n // `item.filename` overrides what `resolve()` returns — lets consumers\n // template the filename with widget metadata declaratively.\n triggerLinkDownload({ url, filename: item.filename ?? filename })\n // Defer revoke past the current task so Safari / Firefox-on-slow-disk\n // can dispatch the download before the blob URL is invalidated.\n // Synchronous revoke here can silently cancel the download.\n if (revoke) setTimeout(revoke, 0)\n })\n .catch((err: unknown) => {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n onError?.(e)\n })\n .finally(() => {\n setIsDownloading(false)\n })\n },\n [close, id, isDownloading, onError],\n )","isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n <Icon fontSize='small' {...iconProps} />\n )","<IconButton\n size='small'\n aria-label={triggerLabel}\n aria-haspopup='true'\n aria-expanded={anchorEl ? 'true' : undefined}\n aria-busy={isDownloading || undefined}\n data-error={error ? 'true' : undefined}\n disabled={isDownloading || items.length === 0}\n onClick={open}\n className={triggerActive ? 'active' : undefined}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n <Icon fontSize='small' {...iconProps} />\n )}\n </IconButton>","triggerActive ? 'active' : undefined","anchorEl ? 'true' : undefined","isDownloading || undefined","error ? 'true' : undefined","isDownloading || items.length === 0","<Tooltip title={triggerLabel}>\n <IconButton\n size='small'\n aria-label={triggerLabel}\n aria-haspopup='true'\n aria-expanded={anchorEl ? 'true' : undefined}\n aria-busy={isDownloading || undefined}\n data-error={error ? 'true' : undefined}\n disabled={isDownloading || items.length === 0}\n onClick={open}\n className={triggerActive ? 'active' : undefined}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n <Icon fontSize='small' {...iconProps} />\n )}\n </IconButton>\n </Tooltip>","{\n vertical: 'bottom',\n horizontal: 'right',\n }","{\n vertical: 'top',\n horizontal: 'right',\n }","items.map((item) => (\n <MenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={() => void onSelect(item)}\n >\n {item.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {item.icon}\n </ListItemIcon>\n )}\n <ListItemText>{item.label}</ListItemText>\n </MenuItem>\n ))","(item) => (\n <MenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={() => void onSelect(item)}\n >\n {item.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {item.icon}\n </ListItemIcon>\n )}\n <ListItemText>{item.label}</ListItemText>\n </MenuItem>\n )","item","<Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={close}\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n {items.map((item) => (\n <MenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={() => void onSelect(item)}\n >\n {item.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {item.icon}\n </ListItemIcon>\n )}\n <ListItemText>{item.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>","Boolean(anchorEl)","<>\n <Tooltip title={triggerLabel}>\n <IconButton\n size='small'\n aria-label={triggerLabel}\n aria-haspopup='true'\n aria-expanded={anchorEl ? 'true' : undefined}\n aria-busy={isDownloading || undefined}\n data-error={error ? 'true' : undefined}\n disabled={isDownloading || items.length === 0}\n onClick={open}\n className={triggerActive ? 'active' : undefined}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n <Icon fontSize='small' {...iconProps} />\n )}\n </IconButton>\n </Tooltip>\n <Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={close}\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n {items.map((item) => (\n <MenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={() => void onSelect(item)}\n >\n {item.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {item.icon}\n </ListItemIcon>\n )}\n <ListItemText>{item.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>","<ImageOutlined {...props} />","<ArticleOutlined {...props} />","<path\n fill='currentColor'\n d='M4.313 11.25h2.25v-1.125H4.688v-2.25h1.875V6.75h-2.25a.726.726 0 0 0-.535.216.726.726 0 0 0-.216.534v3c0 .213.072.39.216.534a.726.726 0 0 0 .534.216Zm2.925 0h2.25c.212 0 .39-.072.534-.216a.726.726 0 0 0 .216-.534V9.375a.931.931 0 0 0-.216-.59.658.658 0 0 0-.534-.273H8.363v-.637h1.875V6.75h-2.25a.726.726 0 0 0-.535.216.726.726 0 0 0-.216.534v1.125c0 .213.072.403.216.572a.675.675 0 0 0 .534.253h1.126v.675H7.238v1.125Zm4.95 0h1.124l1.313-4.5H13.5l-.75 2.588L12 6.75h-1.125l1.313 4.5ZM3 15c-.413 0-.766-.147-1.06-.44a1.445 1.445 0 0 1-.44-1.06v-9c0-.412.147-.766.44-1.06C2.235 3.148 2.588 3 3 3h12c.412 0 .766.147 1.06.44.293.294.44.648.44 1.06v9c0 .412-.147.766-.44 1.06-.294.293-.647.44-1.06.44H3Zm0-1.5h12v-9H3v9Z'\n />","<SvgIcon viewBox='0 0 18 18' {...props}>\n <path\n fill='currentColor'\n d='M4.313 11.25h2.25v-1.125H4.688v-2.25h1.875V6.75h-2.25a.726.726 0 0 0-.535.216.726.726 0 0 0-.216.534v3c0 .213.072.39.216.534a.726.726 0 0 0 .534.216Zm2.925 0h2.25c.212 0 .39-.072.534-.216a.726.726 0 0 0 .216-.534V9.375a.931.931 0 0 0-.216-.59.658.658 0 0 0-.534-.273H8.363v-.637h1.875V6.75h-2.25a.726.726 0 0 0-.535.216.726.726 0 0 0-.216.534v1.125c0 .213.072.403.216.572a.675.675 0 0 0 .534.253h1.126v.675H7.238v1.125Zm4.95 0h1.124l1.313-4.5H13.5l-.75 2.588L12 6.75h-1.125l1.313 4.5ZM3 15c-.413 0-.766-.147-1.06-.44a1.445 1.445 0 0 1-.44-1.06v-9c0-.412.147-.766.44-1.06C2.235 3.148 2.588 3 3 3h12c.412 0 .766.147 1.06.44.293.294.44.648.44 1.06v9c0 .412-.147.766-.44 1.06-.294.293-.647.44-1.06.44H3Zm0-1.5h12v-9H3v9Z'\n />\n </SvgIcon>"],"sources":["../src/widgets-v2/actions/download/exports.ts","../src/widgets-v2/actions/download/labels.ts","../src/widgets-v2/actions/download/download.tsx","../src/widgets-v2/actions/download/icons.tsx","../src/widgets-v2/actions/download/constants.ts","../src/widgets-v2/actions/download/png-item.tsx","../src/widgets-v2/actions/download/csv-item.tsx"],"sourcesContent":["/**\n * Pure download helpers — no React, no DOM lifecycle outside the link click.\n * Component layer in {@link ./download.tsx} orchestrates these.\n */\n\nimport html2canvas from 'html2canvas'\n\nexport interface DownloadHandle {\n url: string\n revoke: () => void\n}\n\n// Leading characters that Excel / Sheets / Numbers interpret as a formula\n// when the CSV is opened. Prefixing the cell with a single quote forces the\n// spreadsheet app to render it as plain text. Tab and CR are included\n// because some tooling strips leading whitespace before formula evaluation.\nconst CSV_FORMULA_PREFIX = /^[=+\\-@\\t\\r]/\n\nexport function toCsvString(rows: readonly (readonly unknown[])[]): string {\n const escape = (cell: unknown): string => {\n if (cell == null) return ''\n let value =\n typeof cell === 'string'\n ? cell\n : typeof cell === 'number' || typeof cell === 'boolean'\n ? String(cell)\n : JSON.stringify(cell)\n if (CSV_FORMULA_PREFIX.test(value)) value = `'${value}`\n if (/[\",\\n\\r]/.test(value)) return `\"${value.replace(/\"/g, '\"\"')}\"`\n return value\n }\n return rows.map((row) => row.map(escape).join(',')).join('\\n')\n}\n\nexport function downloadToCSV(\n rows: readonly (readonly unknown[])[],\n): DownloadHandle {\n const csv = toCsvString(rows)\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n return { url, revoke: () => URL.revokeObjectURL(url) }\n}\n\n// Path separators, NUL, and ASCII control chars. Filenames containing these\n// can confuse the browser download stack and historically enabled\n// Content-Disposition-style trickery.\n// eslint-disable-next-line no-control-regex\nconst UNSAFE_FILENAME_CHARS = /[\\\\/\\x00-\\x1f\\x7f]/g\nconst MAX_FILENAME_LENGTH = 200\n\nexport function sanitizeFilename(name: string): string {\n return (\n (name ?? '')\n .replace(UNSAFE_FILENAME_CHARS, '_')\n .slice(0, MAX_FILENAME_LENGTH) || 'download'\n )\n}\n\n/**\n * Triggers a browser download for the given URL by synthesizing an anchor,\n * clicking it, and removing it. Pure DOM — no React. The filename is run\n * through {@link sanitizeFilename} before being assigned to `a.download`.\n */\nexport function triggerLinkDownload(args: {\n url: string\n filename: string\n}): void {\n const { url, filename } = args\n const a = document.createElement('a')\n a.href = url\n a.download = sanitizeFilename(filename)\n a.style.display = 'none'\n document.body.appendChild(a)\n a.click()\n a.remove()\n}\n\nexport interface DownloadDOMToPNGOptions {\n element: HTMLElement\n /** html2canvas `scale`. Default 2 — crisp on hi-DPI displays. */\n pixelRatio?: number\n /**\n * html2canvas `backgroundColor`. Default `null` (transparent) so the PNG\n * inherits whatever surface it lands on when the user pastes it.\n */\n backgroundColor?: string | null\n}\n\n/**\n * Rasterise an HTMLElement to PNG via `html2canvas` and wrap the result in\n * a `DownloadHandle`. The caller is responsible for calling `handle.revoke`\n * after the link click is dispatched. Used by per-widget download configs\n * to power the PNG menu item.\n */\nexport async function downloadDOMToPNG(\n opts: DownloadDOMToPNGOptions,\n): Promise<DownloadHandle> {\n const { element, pixelRatio = 2, backgroundColor = null } = opts\n const canvas = await html2canvas(element, {\n scale: pixelRatio,\n backgroundColor,\n useCORS: true,\n logging: false,\n })\n return new Promise<DownloadHandle>((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (!blob) {\n reject(new Error('[widgets-v2] toBlob() returned null'))\n return\n }\n const url = URL.createObjectURL(blob)\n resolve({ url, revoke: () => URL.revokeObjectURL(url) })\n }, 'image/png')\n })\n}\n","export interface DownloadLabels {\n trigger: string\n /** Tooltip / aria-label shown on the trigger while a download is in flight. */\n loading: string\n /**\n * Tooltip / aria-label shown on the trigger after a download failed. Cleared\n * the next time the menu opens.\n */\n error: string\n}\n\nexport const DEFAULT_DOWNLOAD_LABELS: DownloadLabels = {\n trigger: 'Download',\n loading: 'Downloading…',\n error: 'Download failed',\n}\n","import { useCallback, useContext, useState, type ComponentType } from 'react'\nimport {\n CircularProgress,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n type SvgIconProps,\n} from '@mui/material'\nimport { FileDownload as DownloadIcon } from '@mui/icons-material'\nimport { Tooltip } from '../../../components'\nimport { WidgetContext } from '../../stores'\nimport { triggerLinkDownload } from './exports'\nimport type { DownloadItem } from './types'\nimport { DEFAULT_DOWNLOAD_LABELS, type DownloadLabels } from './labels'\n\nexport interface DownloadProps {\n items: readonly DownloadItem[]\n labels?: Partial<DownloadLabels>\n icon?: ComponentType<SvgIconProps>\n iconProps?: SvgIconProps\n /**\n * Fires when an item's `resolve()` rejects (or any step in the click-through\n * path throws). The error is normalised to a real `Error` first. Surface\n * to your telemetry / toast layer here; the trigger already shows a visual\n * error indicator independently.\n */\n onError?: (err: Error) => void\n}\n\nexport function Download({\n items,\n labels,\n icon: Icon = DownloadIcon,\n iconProps,\n onError,\n}: DownloadProps) {\n const _labels = { ...DEFAULT_DOWNLOAD_LABELS, ...labels }\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const id = useContext(WidgetContext)\n const [isDownloading, setIsDownloading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const open = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n // Clear any prior error when the user re-engages the menu — the next\n // attempt is a fresh interaction, not a continuation of the failed one.\n setError(null)\n setAnchorEl(e.currentTarget)\n }, [])\n const close = useCallback(() => setAnchorEl(null), [])\n\n const onSelect = useCallback(\n (item: DownloadItem) => {\n // Single-flight: ignore re-entry while a download is already in flight.\n // The trigger is `disabled` and the menu is closed during that window,\n // so this guard mostly defends against future call sites that bypass\n // the menu (e.g. keyboard shortcuts).\n if (item.disabled || isDownloading) return\n close()\n setIsDownloading(true)\n setError(null)\n item\n .resolve({ id })\n .then(({ url, filename, revoke }) => {\n // `item.filename` overrides what `resolve()` returns — lets consumers\n // template the filename with widget metadata declaratively.\n triggerLinkDownload({ url, filename: item.filename ?? filename })\n // Defer revoke past the current task so Safari / Firefox-on-slow-disk\n // can dispatch the download before the blob URL is invalidated.\n // Synchronous revoke here can silently cancel the download.\n if (revoke) setTimeout(revoke, 0)\n })\n .catch((err: unknown) => {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n onError?.(e)\n })\n .finally(() => {\n setIsDownloading(false)\n })\n },\n [close, id, isDownloading, onError],\n )\n\n const triggerLabel = isDownloading\n ? _labels.loading\n : error\n ? _labels.error\n : _labels.trigger\n const triggerActive = Boolean(anchorEl) || isDownloading\n\n return (\n <>\n <Tooltip title={triggerLabel}>\n <IconButton\n size='small'\n aria-label={triggerLabel}\n aria-haspopup='true'\n aria-expanded={anchorEl ? 'true' : undefined}\n aria-busy={isDownloading || undefined}\n data-error={error ? 'true' : undefined}\n disabled={isDownloading || items.length === 0}\n onClick={open}\n className={triggerActive ? 'active' : undefined}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n <Icon fontSize='small' {...iconProps} />\n )}\n </IconButton>\n </Tooltip>\n <Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={close}\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n {items.map((item) => (\n <MenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={() => void onSelect(item)}\n >\n {item.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {item.icon}\n </ListItemIcon>\n )}\n <ListItemText>{item.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import { SvgIcon, type SvgIconProps } from '@mui/material'\nimport { ArticleOutlined, ImageOutlined } from '@mui/icons-material'\n\n/**\n * Generic \"image\" glyph used for the PNG download item. Wraps MUI's\n * `ImageOutlined` so callers can swap it via the per-widget download\n * config's `icon` override without pulling MUI directly.\n */\nexport function PNGIcon(props: SvgIconProps) {\n return <ImageOutlined {...props} />\n}\n\n/**\n * Generic \"document\" glyph used for the Markdown download item. Wraps MUI's\n * `ArticleOutlined`, mirroring {@link PNGIcon}, so the Markdown menu item\n * carries an icon consistent with the other download formats.\n */\nexport function MarkdownIcon(props: SvgIconProps) {\n return <ArticleOutlined {...props} />\n}\n\n/**\n * \"CSV\" rectangle with the letters spelled inside — matches v1 visual and is\n * easier to recognise in a download menu than a generic table glyph.\n */\nexport function CSVIcon(props: SvgIconProps) {\n return (\n <SvgIcon viewBox='0 0 18 18' {...props}>\n <path\n fill='currentColor'\n d='M4.313 11.25h2.25v-1.125H4.688v-2.25h1.875V6.75h-2.25a.726.726 0 0 0-.535.216.726.726 0 0 0-.216.534v3c0 .213.072.39.216.534a.726.726 0 0 0 .534.216Zm2.925 0h2.25c.212 0 .39-.072.534-.216a.726.726 0 0 0 .216-.534V9.375a.931.931 0 0 0-.216-.59.658.658 0 0 0-.534-.273H8.363v-.637h1.875V6.75h-2.25a.726.726 0 0 0-.535.216.726.726 0 0 0-.216.534v1.125c0 .213.072.403.216.572a.675.675 0 0 0 .534.253h1.126v.675H7.238v1.125Zm4.95 0h1.124l1.313-4.5H13.5l-.75 2.588L12 6.75h-1.125l1.313 4.5ZM3 15c-.413 0-.766-.147-1.06-.44a1.445 1.445 0 0 1-.44-1.06v-9c0-.412.147-.766.44-1.06C2.235 3.148 2.588 3 3 3h12c.412 0 .766.147 1.06.44.293.294.44.648.44 1.06v9c0 .412-.147.766-.44 1.06-.294.293-.647.44-1.06.44H3Zm0-1.5h12v-9H3v9Z'\n />\n </SvgIcon>\n )\n}\n","/**\n * Canonical `DownloadItem.id`s for the built-in download formats. Centralised\n * so the per-format builders — and anything that keys off the id (menu logic,\n * tests) — reference one source of truth instead of re-typing string literals.\n * The Markdown format keeps the short `'md'` id to match its `.md` extension.\n */\nexport const DOWNLOAD_ITEM_IDS = {\n png: 'png',\n csv: 'csv',\n markdown: 'md',\n} as const\n\nexport type DownloadItemId =\n (typeof DOWNLOAD_ITEM_IDS)[keyof typeof DOWNLOAD_ITEM_IDS]\n","import { DOWNLOAD_ITEM_IDS } from './constants'\nimport { downloadDOMToPNG } from './exports'\nimport { PNGIcon } from './icons'\nimport type { DownloadContext, DownloadItem } from './types'\n\nexport interface BuildPngDownloadItemArgs {\n /** Base filename (without extension). The item appends `.png`. */\n filename: string\n /**\n * Reads the capture element to rasterise. Called at click time so the\n * download config doesn't capture a stale reference. Wire it to\n * `() => getCaptureEl(id)` from `widgets-v2/stores`.\n */\n getCaptureEl: (ctx: DownloadContext) => HTMLElement | null\n /** html2canvas `scale`. Default 2. */\n pixelRatio?: number\n /** html2canvas `backgroundColor`. Default transparent (`null`). */\n backgroundColor?: string | null\n /** Override the menu label. Default `'PNG'`. */\n label?: string\n}\n\n/**\n * Builds the standard PNG `DownloadItem` used by every per-widget download\n * config. Centralised so the menu label, icon, error message, and filename\n * suffix stay consistent across widgets without each `create*DownloadConfig`\n * re-deriving the same shape.\n */\nexport function buildPngDownloadItem(\n args: BuildPngDownloadItemArgs,\n): DownloadItem {\n return {\n id: DOWNLOAD_ITEM_IDS.png,\n label: args.label ?? 'PNG',\n icon: <PNGIcon fontSize='small' />,\n resolve: async (ctx) => {\n const el = args.getCaptureEl(ctx)\n if (!el) {\n throw new Error('[widgets-v2] No PNG capture element available')\n }\n const handle = await downloadDOMToPNG({\n element: el,\n pixelRatio: args.pixelRatio,\n backgroundColor: args.backgroundColor,\n })\n return {\n url: handle.url,\n filename: `${args.filename}.png`,\n revoke: handle.revoke,\n }\n },\n }\n}\n","import { DOWNLOAD_ITEM_IDS } from './constants'\nimport { downloadToCSV } from './exports'\nimport { CSVIcon } from './icons'\nimport type { DownloadContext, DownloadItem } from './types'\n\ninterface BuildCsvDownloadItemBase {\n /** Base filename (without extension). The item appends `.csv`. */\n filename: string\n /** Override the menu label. Default `'CSV'`. */\n label?: string\n}\n\n/**\n * Args for {@link buildCsvDownloadItem}. A discriminated union: a caller must\n * supply exactly one content source — `getRows` (rows serialised through the\n * shared `toCsvString`) or `getCsv` (a pre-built CSV string). The `?: never`\n * arms make passing both — or neither — a compile-time error.\n */\nexport type BuildCsvDownloadItemArgs =\n | (BuildCsvDownloadItemBase & {\n /**\n * Builds the CSV rows at click time. Used by most widgets — rows are run\n * through `toCsvString` so escaping (incl. the spreadsheet\n * formula-injection guard) stays consistent across widgets.\n */\n getRows: (ctx: DownloadContext) => readonly (readonly unknown[])[]\n getCsv?: never\n })\n | (BuildCsvDownloadItemBase & {\n /**\n * Returns a pre-built CSV string at click time. Escape hatch for widgets\n * (e.g. Table) that already serialise their own CSV with bespoke\n * header/cell handling.\n */\n getCsv: (ctx: DownloadContext) => string\n getRows?: never\n })\n\n/**\n * Builds the standard CSV `DownloadItem` used by every per-widget download\n * config. Centralised so the menu label, icon, and `.csv` filename suffix stay\n * consistent across widgets — mirrors {@link buildPngDownloadItem} so neither\n * format can drift again.\n */\nexport function buildCsvDownloadItem(\n args: BuildCsvDownloadItemArgs,\n): DownloadItem {\n return {\n id: DOWNLOAD_ITEM_IDS.csv,\n label: args.label ?? 'CSV',\n icon: <CSVIcon fontSize='small' />,\n resolve: (ctx) => {\n if (args.getCsv) {\n const csv = args.getCsv(ctx)\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: `${args.filename}.csv`,\n revoke: () => URL.revokeObjectURL(url),\n })\n }\n const handle = downloadToCSV(args.getRows(ctx))\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n }\n}\n"],"mappings":"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"}
|
package/dist/echart-BkaV3V5G.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./use-widget-selector-VSPhfhNm.js";
|
|
2
|
-
import { t } from "./shared-resize-observer-BEiP2rQt.js";
|
|
3
|
-
import { t as n } from "./hooks-zf5gKZYq.js";
|
|
4
|
-
import { c as r } from "react/compiler-runtime";
|
|
5
|
-
import { useEffect as i, useImperativeHandle as a, useRef as o } from "react";
|
|
6
|
-
import { jsx as s } from "react/jsx-runtime";
|
|
7
|
-
import * as c from "echarts";
|
|
8
|
-
//#region src/widgets/echart/echart-ui.tsx
|
|
9
|
-
function l(e) {
|
|
10
|
-
let l = r(21), { id: u, ref: d, init: f, option: p, className: m, style: h, onEvents: g } = e, { ref: _, instance: v } = n(u), y = o(null), b, x;
|
|
11
|
-
l[0] === Symbol.for("react.memo_cache_sentinel") ? (b = () => y.current, x = [], l[0] = b, l[1] = x) : (b = l[0], x = l[1]), a(d, b, x);
|
|
12
|
-
let S, C;
|
|
13
|
-
l[2] !== v || l[3] !== _ || l[4] !== f ? (S = () => {
|
|
14
|
-
if (_.current) return y.current = c.init(_.current, null, {
|
|
15
|
-
renderer: "svg",
|
|
16
|
-
height: 304,
|
|
17
|
-
...f
|
|
18
|
-
}), v.current = y.current, () => {
|
|
19
|
-
y.current?.dispose(), y.current = null, v.current = null;
|
|
20
|
-
};
|
|
21
|
-
}, C = [
|
|
22
|
-
v,
|
|
23
|
-
_,
|
|
24
|
-
f
|
|
25
|
-
], l[2] = v, l[3] = _, l[4] = f, l[5] = S, l[6] = C) : (S = l[5], C = l[6]), i(S, C);
|
|
26
|
-
let w, T;
|
|
27
|
-
l[7] === p ? (w = l[8], T = l[9]) : (w = () => {
|
|
28
|
-
y.current?.setOption(p, {
|
|
29
|
-
lazyUpdate: !0,
|
|
30
|
-
notMerge: !0
|
|
31
|
-
});
|
|
32
|
-
}, T = [p], l[7] = p, l[8] = w, l[9] = T), i(w, T);
|
|
33
|
-
let E, D;
|
|
34
|
-
l[10] === _ ? (E = l[11], D = l[12]) : (E = () => {
|
|
35
|
-
if (_.current) return t(_.current, () => {
|
|
36
|
-
y.current?.resize();
|
|
37
|
-
});
|
|
38
|
-
}, D = [_], l[10] = _, l[11] = E, l[12] = D), i(E, D);
|
|
39
|
-
let O, k;
|
|
40
|
-
l[13] === g ? (O = l[14], k = l[15]) : (O = () => {
|
|
41
|
-
let e = { ...g ?? {} };
|
|
42
|
-
return e.click || (e.mousemove = () => {
|
|
43
|
-
y.current?.getZr().setCursorStyle("default");
|
|
44
|
-
}), Object.entries(e).forEach((e) => {
|
|
45
|
-
let [t, n] = e;
|
|
46
|
-
y.current?.on(t, n);
|
|
47
|
-
}), () => {
|
|
48
|
-
Object.entries(e).forEach((e) => {
|
|
49
|
-
let [t] = e;
|
|
50
|
-
y.current?.off(t);
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
}, k = [g], l[13] = g, l[14] = O, l[15] = k), i(O, k);
|
|
54
|
-
let A;
|
|
55
|
-
return l[16] !== _ || l[17] !== m || l[18] !== u || l[19] !== h ? (A = /* @__PURE__ */ s("div", {
|
|
56
|
-
id: u,
|
|
57
|
-
ref: _,
|
|
58
|
-
style: h,
|
|
59
|
-
className: m
|
|
60
|
-
}), l[16] = _, l[17] = m, l[18] = u, l[19] = h, l[20] = A) : A = l[20], A;
|
|
61
|
-
}
|
|
62
|
-
//#endregion
|
|
63
|
-
//#region src/widgets/echart/echart.tsx
|
|
64
|
-
function u(t) {
|
|
65
|
-
let n = r(12), { id: i, data: a, widgetOption: o, onEvents: c, init: u } = e(t.id, d), p;
|
|
66
|
-
n[0] === a ? p = n[1] : (p = f(a), n[0] = a, n[1] = p);
|
|
67
|
-
let m = p, h;
|
|
68
|
-
n[2] === m ? h = n[3] : (h = m && { dataset: m }, n[2] = m, n[3] = h);
|
|
69
|
-
let g;
|
|
70
|
-
n[4] !== h || n[5] !== o ? (g = {
|
|
71
|
-
...o,
|
|
72
|
-
...h
|
|
73
|
-
}, n[4] = h, n[5] = o, n[6] = g) : g = n[6];
|
|
74
|
-
let _ = g;
|
|
75
|
-
if (!i) return null;
|
|
76
|
-
let v;
|
|
77
|
-
return n[7] !== u || n[8] !== c || n[9] !== _ || n[10] !== t.id ? (v = /* @__PURE__ */ s(l, {
|
|
78
|
-
id: t.id,
|
|
79
|
-
option: _,
|
|
80
|
-
onEvents: c,
|
|
81
|
-
init: u
|
|
82
|
-
}), n[7] = u, n[8] = c, n[9] = _, n[10] = t.id, n[11] = v) : v = n[11], v;
|
|
83
|
-
}
|
|
84
|
-
function d(e) {
|
|
85
|
-
return {
|
|
86
|
-
id: e?.id,
|
|
87
|
-
data: e?.data,
|
|
88
|
-
widgetOption: e?.option,
|
|
89
|
-
onEvents: e?.onEvents,
|
|
90
|
-
init: e?.init
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function f(e) {
|
|
94
|
-
if (!(!e || e.length === 0)) return e.map((e) => ({ source: e }));
|
|
95
|
-
}
|
|
96
|
-
//#endregion
|
|
97
|
-
//#region src/widgets/echart/options.ts
|
|
98
|
-
function p({ theme: e }) {
|
|
99
|
-
return {
|
|
100
|
-
grid: {
|
|
101
|
-
left: parseInt(e.spacing(1)),
|
|
102
|
-
top: parseInt(e.spacing(3)),
|
|
103
|
-
right: parseInt(e.spacing(1)),
|
|
104
|
-
bottom: parseInt(e.spacing(4)),
|
|
105
|
-
containLabel: !0
|
|
106
|
-
},
|
|
107
|
-
toolbox: { show: !1 },
|
|
108
|
-
tooltip: {
|
|
109
|
-
axisPointer: { type: "line" },
|
|
110
|
-
backgroundColor: e.palette.grey[900],
|
|
111
|
-
borderWidth: 0,
|
|
112
|
-
padding: [parseInt(e.spacing(1)), parseInt(e.spacing(1))],
|
|
113
|
-
textStyle: {
|
|
114
|
-
color: e.palette.common.white,
|
|
115
|
-
fontSize: 11,
|
|
116
|
-
fontFamily: e.typography.caption.fontFamily
|
|
117
|
-
},
|
|
118
|
-
trigger: "axis"
|
|
119
|
-
},
|
|
120
|
-
legend: {
|
|
121
|
-
type: "scroll",
|
|
122
|
-
bottom: 0
|
|
123
|
-
},
|
|
124
|
-
axisPointer: { lineStyle: { color: e.palette.grey[400] } },
|
|
125
|
-
xAxis: {},
|
|
126
|
-
yAxis: {},
|
|
127
|
-
color: [e.palette.secondary.main, ...Object.values(e.palette.qualitative?.bold ?? {})]
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
//#endregion
|
|
131
|
-
export { u as n, l as r, p as t };
|
|
132
|
-
|
|
133
|
-
//# sourceMappingURL=echart-BkaV3V5G.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"echart-BkaV3V5G.js","names":["() => chartInstance.current!","[]","() => {\n if (!chartRef.current) return\n\n chartInstance.current = echarts.init(chartRef.current, null, {\n renderer: 'svg',\n height: 304,\n ...init,\n })\n chartInstanceRef.current = chartInstance.current\n // Cleanup function\n return () => {\n chartInstance.current?.dispose()\n chartInstance.current = null\n chartInstanceRef.current = null\n }\n }","[chartInstanceRef, chartRef, init]","chartRef.current","() => {\n chartInstance.current?.setOption(option, {\n lazyUpdate: true,\n notMerge: true,\n })\n }","[option]","() => {\n if (!chartRef.current) return\n\n return observeResize(chartRef.current, () => {\n chartInstance.current?.resize()\n })\n }","[chartRef]","() => {\n const _onEvents = { ...(onEvents ?? {}) }\n if (!_onEvents.click) {\n _onEvents.mousemove = () => {\n chartInstance.current?.getZr().setCursorStyle('default')\n }\n }\n\n // Attach event listeners\n Object.entries(_onEvents).forEach(([event, handler]) => {\n chartInstance.current?.on(event, handler)\n })\n // Cleanup function to remove event listeners\n return () => {\n Object.entries(_onEvents).forEach(([event]) => {\n chartInstance.current?.off(event)\n })\n }\n }","[onEvents]","[event, handler]","event","[event]","<div id={id} ref={chartRef} style={style} className={className} />","(w) => ({\n id: w?.id,\n data: (w as EchartWidgetState | undefined)?.data as\n EchartWidgetData | undefined,\n widgetOption: (w as EchartWidgetState | undefined)?.option,\n onEvents: (w as EchartWidgetState | undefined)?.onEvents,\n init: (w as EchartWidgetState | undefined)?.init,\n })","buildDataset(data)","useMemo(() => buildDataset(data), [data])","dataset && { dataset }","{\n ...widgetOption,\n ...(dataset && { dataset }),\n }","useMemo<EchartOptionsProps>(\n () => ({\n ...widgetOption,\n ...(dataset && { dataset }),\n }),\n [widgetOption, dataset],\n )","<EchartUI id={props.id} option={option} onEvents={onEvents} init={init} />","id"],"sources":["../src/widgets/echart/echart-ui.tsx","../src/widgets/echart/echart.tsx","../src/widgets/echart/options.ts"],"sourcesContent":["import { useEffect, useRef, useImperativeHandle } from 'react'\nimport * as echarts from 'echarts'\nimport type { EchartUIProps } from './types'\nimport { useWidgetRef } from '../../hooks'\nimport { observeResize } from './shared-resize-observer'\n\n/**\n * Presentational component that initializes and manages an Apache ECharts instance.\n *\n * @remarks\n * Handles chart lifecycle (init, dispose), option updates, resize observation, and event listener management.\n * Uses SVG renderer with a default height of 304px.\n */\nexport function EchartUI(props: EchartUIProps) {\n const { id, ref, init, option, className, style, onEvents } = props\n\n const { ref: chartRef, instance: chartInstanceRef } =\n useWidgetRef<HTMLDivElement>(id)\n const chartInstance = useRef<echarts.ECharts>(null)\n\n useImperativeHandle(ref, () => chartInstance.current!, [])\n\n useEffect(() => {\n if (!chartRef.current) return\n\n chartInstance.current = echarts.init(chartRef.current, null, {\n renderer: 'svg',\n height: 304,\n ...init,\n })\n chartInstanceRef.current = chartInstance.current\n // Cleanup function\n return () => {\n chartInstance.current?.dispose()\n chartInstance.current = null\n chartInstanceRef.current = null\n }\n }, [chartInstanceRef, chartRef, init])\n\n // Update chart when options change\n useEffect(() => {\n chartInstance.current?.setOption(option, {\n lazyUpdate: true,\n notMerge: true,\n })\n }, [option])\n\n // Handle resize using shared ResizeObserver (single instance for all charts)\n useEffect(() => {\n if (!chartRef.current) return\n\n return observeResize(chartRef.current, () => {\n chartInstance.current?.resize()\n })\n }, [chartRef])\n\n useEffect(() => {\n const _onEvents = { ...(onEvents ?? {}) }\n if (!_onEvents.click) {\n _onEvents.mousemove = () => {\n chartInstance.current?.getZr().setCursorStyle('default')\n }\n }\n\n // Attach event listeners\n Object.entries(_onEvents).forEach(([event, handler]) => {\n chartInstance.current?.on(event, handler)\n })\n // Cleanup function to remove event listeners\n return () => {\n Object.entries(_onEvents).forEach(([event]) => {\n chartInstance.current?.off(event)\n })\n }\n }, [onEvents])\n\n return <div id={id} ref={chartRef} style={style} className={className} />\n}\n","import type {\n EchartProps,\n EchartWidgetState,\n EchartWidgetData,\n EchartOptionsProps,\n} from './types'\nimport { EchartUI } from './echart-ui'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport { useMemo } from 'react'\n\n/**\n * Stateful EChart widget component that reads data and options from the widget store and renders an ECharts chart.\n *\n * @remarks\n * Transforms widget data into ECharts dataset format and delegates rendering to {@link EchartUI}.\n */\nexport function Echart(props: EchartProps) {\n // Single consolidated subscription instead of 5 separate ones.\n const { id, data, widgetOption, onEvents, init } = useWidgetSelector(\n props.id,\n (w) => ({\n id: w?.id,\n data: (w as EchartWidgetState | undefined)?.data as\n EchartWidgetData | undefined,\n widgetOption: (w as EchartWidgetState | undefined)?.option,\n onEvents: (w as EchartWidgetState | undefined)?.onEvents,\n init: (w as EchartWidgetState | undefined)?.init,\n }),\n )\n\n // Memoize dataset transformation to avoid re-computing on every render\n const dataset = useMemo(() => buildDataset(data), [data])\n\n const option = useMemo<EchartOptionsProps>(\n () => ({\n ...widgetOption,\n ...(dataset && { dataset }),\n }),\n [widgetOption, dataset],\n )\n\n if (!id) {\n return null\n }\n\n return (\n <EchartUI id={props.id} option={option} onEvents={onEvents} init={init} />\n )\n}\n\n/**\n * Builds the dataset configuration from widget data\n * @param data - The widget data array\n * @returns The dataset configuration for ECharts\n */\nfunction buildDataset(\n data: EchartWidgetData | undefined,\n): EchartOptionsProps['dataset'] {\n if (!data || data.length === 0) {\n return undefined\n }\n\n return data.map((d) => ({\n source: d,\n }))\n}\n","import type { EchartOptionsProps, EchartWidgetOptionProps } from './types'\n\n/**\n * Returns the shared base ECharts options used across all EChart-based widgets (bar, pie, histogram, etc.).\n *\n * @remarks\n * Configures grid spacing, tooltip styling, legend, axis pointer, and the default color palette\n * derived from the MUI theme.\n */\nexport function getCommonOptions({\n theme,\n}: EchartWidgetOptionProps<unknown>): EchartOptionsProps {\n return {\n grid: {\n left: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n bottom: parseInt(theme.spacing(4)),\n containLabel: true,\n },\n toolbox: {\n show: false,\n },\n tooltip: {\n axisPointer: {\n type: 'line',\n },\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 trigger: 'axis',\n },\n legend: {\n type: 'scroll',\n bottom: 0,\n },\n axisPointer: {\n lineStyle: {\n color: theme.palette.grey[400],\n },\n },\n xAxis: {},\n yAxis: {},\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 }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"echart-CwzbPElc.js","names":["{\n option,\n replaceMerge,\n onEvents,\n init,\n onInstance,\n className,\n sx,\n}: EchartUIProps","(chart: echarts.ECharts | null): void => {\n onInstance?.(chart)\n }","() => {\n if (!containerRef.current) return undefined\n const chart = echarts.init(containerRef.current, null, {\n ...DEFAULT_INIT_OPTS,\n ...init,\n })\n chartRef.current = chart\n notifyInstance(chart)\n // Edge-label clamp: after each layout settles (option change OR resize both\n // end in a render → `finished`), measure the category x-axis edge labels\n // and anchor them inward only if they'd clip. `finished` (not rAF) so\n // `convertToPixel` sees the flushed `lazyUpdate` layout. Loop-safe: the\n // verdict is anchor-independent, so our own clamp setOption recomputes the\n // same result and the ref guard short-circuits.\n const onFinished = (): void => {\n edgeAlignRef.current = clampEdgeLabels(\n chart,\n optionRef.current,\n edgeAlignRef.current,\n )\n }\n chart.on('finished', onFinished)\n // Never let the legend end up with every item hidden — a user can click\n // series off one by one until the chart goes blank. `selected` on this\n // event is always the FULL name→boolean map (not just the clicked item),\n // so \"every value false\" reliably means \"nothing left visible\". Restore\n // all of them instead. `legendAllSelect` fires its own `legendselectall`\n // event, not `legendselectchanged`, so this can't re-trigger itself.\n // Always-on and independent of the consumer's `onEvents` — applies to\n // every ECharts widget in the library for free. A widget that disables\n // legend clicks entirely (e.g. Pie's `selectedMode: false`) never fires\n // `legendselectchanged`, so this is a no-op there.\n const onLegendSelectChanged = (params: unknown): void => {\n const { selected } = params as { selected?: Record<string, boolean> }\n if (!selected) return\n const names = Object.keys(selected)\n if (names.length > 0 && names.every((name) => !selected[name])) {\n chart.dispatchAction({ type: 'legendAllSelect' })\n }\n }\n chart.on('legendselectchanged', onLegendSelectChanged)\n return () => {\n chart.off('finished', onFinished)\n chart.off('legendselectchanged', onLegendSelectChanged)\n // Notify observers *before* disposal so any queued imperative\n // dispatches (e.g. ZoomToggle's `setOption` cleanup) see the\n // instance disappear before its DOM is torn down.\n notifyInstance(null)\n chart.dispose()\n chartRef.current = null\n }\n }","chart","[init]","() => {\n const seriesFp = computeSeriesFingerprint(option)\n const datasetFp = computeDatasetFingerprint(option)\n const augmented = new Set<string>(replaceMerge ?? [])\n if (seriesFp !== seriesFingerprintRef.current) augmented.add('series')\n if (datasetFp !== datasetFingerprintRef.current) augmented.add('dataset')\n seriesFingerprintRef.current = seriesFp\n datasetFingerprintRef.current = datasetFp\n // Expose the latest option to the `finished` clamp listener (bound once).\n optionRef.current = option\n chartRef.current?.setOption(option, {\n notMerge: false,\n lazyUpdate: true,\n replaceMerge: augmented.size > 0 ? Array.from(augmented) : undefined,\n })\n }","[option, replaceMerge]","() => {\n const node = containerRef.current\n if (!node) return undefined\n return observeResize(node, () => {\n chartRef.current?.resize()\n })\n }","[]","() => {\n const chart = chartRef.current\n if (!chart || !onEvents) return undefined\n for (const [event, handler] of Object.entries(onEvents)) {\n chart.on(event, handler)\n }\n return () => {\n for (const [event, handler] of Object.entries(onEvents)) {\n chart.off(event, handler)\n }\n }\n }","[onEvents]","event","handler","{ ...styles.root, ...sx }","<Box\n ref={containerRef}\n className={className}\n sx={{ ...styles.root, ...sx }}\n />","{\n optionFactory,\n onEvents,\n init,\n className,\n sx,\n}: EchartProps","(chart: echarts.ECharts | null) => setEchartInstance(id, chart)","useCallback(\n (chart: echarts.ECharts | null) => setEchartInstance(id, chart),\n [id],\n )","optionFactory(undefined, undefined)","useMemo(\n () => optionFactory(undefined, undefined),\n [optionFactory],\n )","applyTransforms(structural, configTransforms)","Array.from(keys).sort()","useMemo(() => {\n const keys = new Set<string>(DEFAULT_REPLACE_MERGE)\n for (const xf of configTransforms) {\n if (xf.enabled && xf.replaceMergeKeys?.length) {\n for (const k of xf.replaceMergeKeys) keys.add(k)\n }\n }\n return Array.from(keys).sort()\n }, [configTransforms])","optionFactory(transformed, sliceData, {\n formatter: sliceFormatter,\n labelFormatter: sliceLabelFormatter,\n })","useMemo(\n () =>\n optionFactory(transformed, sliceData, {\n formatter: sliceFormatter,\n labelFormatter: sliceLabelFormatter,\n }),\n [\n optionFactory,\n transformed,\n sliceData,\n sliceFormatter,\n sliceLabelFormatter,\n ],\n )","<EchartUI\n option={option}\n replaceMerge={replaceMerge}\n onEvents={onEvents}\n init={init}\n onInstance={onInstance}\n className={className}\n sx={sx}\n />","{\n selection,\n onSelectionChange,\n keyFromClick,\n keysFromBrush,\n}: UseChartSelectionOptions<K>","(event: unknown) => {\n if (!onSelectionChange) return\n const params = event as CallbackDataParams\n const key = keyFromClick(params)\n if (key == null) return\n const current = selection ?? []\n const idx = current.indexOf(key)\n const next =\n idx === -1\n ? [...current, key]\n : [...current.slice(0, idx), ...current.slice(idx + 1)]\n onSelectionChange(next)\n }","useCallback(\n (event: unknown) => {\n if (!onSelectionChange) return\n const params = event as CallbackDataParams\n const key = keyFromClick(params)\n if (key == null) return\n const current = selection ?? []\n const idx = current.indexOf(key)\n const next =\n idx === -1\n ? [...current, key]\n : [...current.slice(0, idx), ...current.slice(idx + 1)]\n onSelectionChange(next)\n },\n [selection, onSelectionChange, keyFromClick],\n )","[]","(event: unknown) => {\n const params = event as {\n batch?: {\n selected?: { seriesIndex: number; dataIndex: number[] }[]\n }[]\n }\n latestBrushedRef.current = params.batch?.[0]?.selected ?? []\n }","params","event","useCallback((event: unknown) => {\n const params = event as {\n batch?: {\n selected?: { seriesIndex: number; dataIndex: number[] }[]\n }[]\n }\n latestBrushedRef.current = params.batch?.[0]?.selected ?? []\n }, [])","() => {\n if (!onSelectionChange) return\n onSelectionChange(keysFromBrush(latestBrushedRef.current))\n }","useCallback(() => {\n if (!onSelectionChange) return\n onSelectionChange(keysFromBrush(latestBrushedRef.current))\n }, [onSelectionChange, keysFromBrush])","{\n click: handleClick,\n brushSelected: handleBrushSelected,\n brushEnd: handleBrushEnd,\n }","useMemo<Record<string, EchartsEventHandler>>(\n () => ({\n click: handleClick,\n brushSelected: handleBrushSelected,\n brushEnd: handleBrushEnd,\n }),\n [handleClick, handleBrushSelected, handleBrushEnd],\n )","{ onEvents, selection: wiringSelection }"],"sources":["../src/widgets-v2/echart/edge-label-clamp.ts","../src/widgets-v2/echart/shared-resize-observer.ts","../src/widgets-v2/echart/style.ts","../src/widgets-v2/echart/echart-ui.tsx","../src/widgets-v2/echart/echart.tsx","../src/widgets-v2/echart/use-chart-selection.ts"],"sourcesContent":["import * as echarts from 'echarts'\nimport type { ECharts, EChartsOption } from 'echarts'\n\n/**\n * Render-time clamp that stops the first/last **category x-axis** labels from\n * clipping at the chart edges — *only when they actually overflow*.\n *\n * ECharts centers each category label on its tick; the first/last ticks sit at\n * the plot boundary, so a wide edge label spills past the chart and is cut off.\n * `grid.containLabel` does not contain this horizontal overflow and the v6\n * `outerBounds` shrink is unreliable, so we measure at render time and anchor\n * the overflowing edge label inward (`alignMinLabel: 'left'` /\n * `alignMaxLabel: 'right'`). Labels that fit stay centered.\n *\n * Lives in the generic bridge because the verdict needs the laid-out chart\n * (`convertToPixel`, `getWidth`); everything else is read from the `option`.\n * Auto-targets bar + histogram (category x-axis); pie's horizontal-bar fallback\n * (category *y*-axis), scatterplot (value) and timeseries (time) are skipped.\n */\n\nexport interface EdgeAlignment {\n alignMinLabel: 'left' | null\n alignMaxLabel: 'right' | null\n}\n\nexport const CENTERED: EdgeAlignment = {\n alignMinLabel: null,\n alignMaxLabel: null,\n}\n\n// Small cushion biasing toward anchoring when borderline: clipping is worse\n// than a hair of off-centering, and the measured width can differ slightly\n// from the final render (mainly when the web font isn't loaded yet at measure\n// time). Kept to 1px — a wider margin anchored labels that only just clear the\n// edge, and an anchored edge label can then be dropped by the axis\n// `hideOverlap`, leaving a gap. 1px guards measurement error without that.\nconst SAFETY_MARGIN_PX = 1\n\n/**\n * Pure overflow decision. Inputs are anchor-independent (tick centers and text\n * width don't depend on the label's current `text-anchor`), so feeding the\n * result back via `setOption` doesn't change them — the next pass yields the\n * same verdict, keeping the clamp loop-stable.\n */\nexport function decideEdgeAlignment(args: {\n firstLabel: string\n lastLabel: string\n font: string\n firstTickX: number\n lastTickX: number\n width: number\n}): EdgeAlignment {\n const halfFirst =\n echarts.format.getTextRect(args.firstLabel, args.font).width / 2\n const halfLast =\n echarts.format.getTextRect(args.lastLabel, args.font).width / 2\n return {\n alignMinLabel:\n halfFirst + SAFETY_MARGIN_PX > args.firstTickX ? 'left' : null,\n alignMaxLabel:\n halfLast + SAFETY_MARGIN_PX > args.width - args.lastTickX\n ? 'right'\n : null,\n }\n}\n\ninterface AxisLabel {\n formatter?: (value: string | number) => string | number\n fontSize?: number | string\n fontFamily?: string\n fontWeight?: number | string\n}\n\ninterface CategoryXAxis {\n type?: string\n axisLabel?: AxisLabel\n}\n\ninterface SeriesLike {\n encode?: { x?: string | number }\n datasetIndex?: number\n}\n\ntype Cell = string | number | null | undefined\n\nfunction firstOf<T>(value: T | T[] | undefined): T | undefined {\n if (Array.isArray(value)) return value[0]\n return value\n}\n\nfunction firstXAxis(option: EChartsOption): CategoryXAxis | undefined {\n const axis = firstOf(\n option.xAxis as CategoryXAxis | CategoryXAxis[] | undefined,\n )\n return axis && typeof axis === 'object' ? axis : undefined\n}\n\nfunction hasDataZoom(option: EChartsOption): boolean {\n const dz = option.dataZoom\n return Array.isArray(dz) ? dz.length > 0 : dz != null\n}\n\nfunction cellToText(value: Cell, fmt: AxisLabel['formatter']): string {\n if (typeof fmt === 'function') return String(fmt(value ?? ''))\n return value == null ? '' : String(value)\n}\n\n/**\n * Extracts the displayed first/last category strings and the label font from\n * the option, reading categories generically via `series[0].encode.x` into the\n * referenced dataset (`'name'` for bar, `0` for histogram). Returns `null` when\n * the option isn't a measurable category x-axis (fewer than 2 categories, no\n * dataset, etc.).\n */\nexport function resolveEdgeLabels(option: EChartsOption): {\n firstLabel: string\n lastLabel: string\n font: string\n count: number\n} | null {\n const xAxis = firstXAxis(option)\n if (!xAxis) return null\n if (xAxis.type !== 'category') return null\n\n const series0 = firstOf(\n option.series as SeriesLike | SeriesLike[] | undefined,\n )\n const encodeX = series0?.encode?.x\n if (encodeX == null) return null\n\n const datasetIndex = series0?.datasetIndex ?? 0\n const allDatasets = option.dataset as\n { source?: unknown } | { source?: unknown }[] | undefined\n const dataset = Array.isArray(allDatasets)\n ? allDatasets[datasetIndex]\n : allDatasets\n const source = dataset?.source\n if (!Array.isArray(source) || source.length < 2) return null\n\n const rows = source as Record<string | number, Cell>[]\n const fmt = xAxis.axisLabel?.formatter\n const axisLabel = xAxis.axisLabel ?? {}\n const size =\n typeof axisLabel.fontSize === 'number'\n ? `${axisLabel.fontSize}px`\n : (axisLabel.fontSize ?? '12px')\n const family = axisLabel.fontFamily ?? 'sans-serif'\n const weight = axisLabel.fontWeight != null ? `${axisLabel.fontWeight} ` : ''\n\n return {\n firstLabel: cellToText(rows[0]?.[encodeX], fmt),\n lastLabel: cellToText(rows[rows.length - 1]?.[encodeX], fmt),\n font: `${weight}${size} ${family}`,\n count: source.length,\n }\n}\n\n/**\n * Measures the rendered chart and, when the edge labels would clip, applies\n * `alignMinLabel`/`alignMaxLabel` (or clears them) via an imperative merge\n * `setOption`. Returns the alignment now in effect so the caller can keep a\n * `prev` ref and skip redundant `setOption`s. Should be invoked from the\n * chart's `finished` event (layout is settled, so `convertToPixel` is valid).\n */\nexport function clampEdgeLabels(\n chart: ECharts,\n option: EChartsOption,\n prev: EdgeAlignment,\n): EdgeAlignment {\n const next = computeAlignment(chart, option)\n if (\n next.alignMinLabel === prev.alignMinLabel &&\n next.alignMaxLabel === prev.alignMaxLabel\n ) {\n return prev\n }\n chart.setOption({ xAxis: { axisLabel: { ...next } } } as EChartsOption, {\n lazyUpdate: true,\n })\n return next\n}\n\nfunction computeAlignment(\n chart: ECharts,\n option: EChartsOption,\n): EdgeAlignment {\n // Under dataZoom, convertToPixel on the absolute first/last index returns\n // off-plot pixels, so the overflow math is invalid — reset to centered.\n if (hasDataZoom(option)) return CENTERED\n\n const labels = resolveEdgeLabels(option)\n if (!labels) return CENTERED\n\n const firstTickX = chart.convertToPixel({ xAxisIndex: 0 }, 0)\n const lastTickX = chart.convertToPixel({ xAxisIndex: 0 }, labels.count - 1)\n const width = chart.getWidth()\n // Layout not measurable yet (defensive — `finished` normally fires after\n // layout). Fall back to centered; a later `finished` re-measures.\n if (\n typeof firstTickX !== 'number' ||\n typeof lastTickX !== 'number' ||\n !Number.isFinite(firstTickX) ||\n !Number.isFinite(lastTickX) ||\n !width\n ) {\n return CENTERED\n }\n\n return decideEdgeAlignment({\n firstLabel: labels.firstLabel,\n lastLabel: labels.lastLabel,\n font: labels.font,\n firstTickX,\n lastTickX,\n width,\n })\n}\n","type ResizeCallback = () => void\n\nconst callbacks = new Map<Element, ResizeCallback>()\nlet observer: ResizeObserver | null = null\n\n/**\n * Returns the singleton ResizeObserver, lazily constructing it on first use.\n * Returns `null` when `ResizeObserver` is not available in the global scope\n * (SSR, very old browsers, or tests that intentionally remove it).\n */\nfunction getObserver(): ResizeObserver | null {\n if (typeof ResizeObserver === 'undefined') return null\n observer ??= new ResizeObserver((entries) => {\n for (const entry of entries) {\n const callback = callbacks.get(entry.target)\n callback?.()\n }\n })\n return observer\n}\n\nconst NOOP_CLEANUP = (): void => undefined\n\nexport function observeResize(\n element: Element,\n callback: ResizeCallback,\n): () => void {\n const ro = getObserver()\n // Gracefully degrade when no ResizeObserver is available — consumers\n // still see one initial measure() pass via their own effect; we just\n // skip the subsequent resize-driven re-measures.\n if (!ro) return NOOP_CLEANUP\n callbacks.set(element, callback)\n ro.observe(element)\n return () => {\n callbacks.delete(element)\n if (observer) {\n observer.unobserve(element)\n // Disconnect the singleton once the last subscriber leaves so the\n // observer doesn't outlive its consumers in SSR teardown / micro-\n // frontend unmount scenarios. A subsequent observeResize() will\n // lazily re-create it via getObserver().\n if (callbacks.size === 0) {\n observer.disconnect()\n observer = null\n }\n }\n }\n}\n\n/** @internal — for tests only. */\nexport function __resetSharedResizeObserver(): void {\n if (observer) observer.disconnect()\n callbacks.clear()\n observer = null\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n width: '100%',\n // `flex: 1` lets the chart fill a parent that has a definite height —\n // the fullscreen dialog. Inline it has none (Widget.Content is an\n // auto-height flex column), so flex-basis resolves to the content box,\n // which is empty until ECharts measures it: at `min-height: 0` the\n // container is 0px tall, ECharts draws nothing and the widget renders\n // blank. 304 is not a new magic number — it's the height `init.height`\n // used to pin, kept so cards look exactly as before. Override per widget\n // with `<Widget.Echart sx={{ minHeight }} />`.\n flex: 1,\n minHeight: 304,\n // ECharts puts its tooltip inside this box at `z-index: 9999999`. With\n // no stacking context of its own, that number competes page-wide and\n // beats MUI's modal layer — under `FullScreen.Slot` the card's chart\n // mirrors the dialog's tooltip (echarts.connect) and it painted over\n // the dialog. Isolating keeps the tooltip above its own chart only.\n isolation: 'isolate',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useEffect, useEffectEvent, useRef } from 'react'\nimport { Box, type SxProps, type Theme } from '@mui/material'\nimport * as echarts from 'echarts'\nimport {\n clampEdgeLabels,\n CENTERED,\n type EdgeAlignment,\n} from './edge-label-clamp'\nimport { observeResize } from './shared-resize-observer'\nimport { styles } from './style'\n\n// No `height`: a numeric height here is stored in zrender's init opts, and\n// every later `resize()` resolves back to it — the chart would stay that tall\n// inside a fullscreen dialog. Height comes from the container instead\n// (`styles.root`'s `min-height` inline, `flex: 1` when the parent has one).\nexport const DEFAULT_INIT_OPTS = {\n renderer: 'svg',\n} satisfies echarts.EChartsInitOpts\n\nexport type EchartsEventHandler = (event: unknown) => void\n\nexport interface EchartUIProps {\n option: echarts.EChartsOption\n /**\n * Keys to merge as arrays (replace by index) instead of by id. The middleware\n * memoizes this content-stably, so identical sets don't re-trigger setOption.\n */\n replaceMerge?: readonly string[]\n /**\n * Opaque ECharts event passthrough — handlers fire untransformed.\n *\n * **Must be referentially stable** (memoize it with `useMemo` /\n * `useCallback`, or hoist to module scope). The binding effect depends on\n * the `onEvents` object identity; an inline `{ click: handler }` literal\n * recreates the object on every render and causes every listener to be\n * detached and re-attached each commit.\n */\n onEvents?: Record<string, EchartsEventHandler>\n /**\n * Init options forwarded to echarts.init. Captured at mount only — to change\n * `renderer` or `height` after mount, unmount and remount the chart.\n * Defaults: `{ renderer: 'svg' }` — height is container-driven, so prefer\n * `sx={{ minHeight }}` over pinning `height` here.\n */\n init?: echarts.EChartsInitOpts\n /**\n * Optional callback fired once after the ECharts instance is created\n * (`onInstance(chart)`) and once when it's about to be disposed\n * (`onInstance(null)`). Used by `Widget.Echart` to publish the live\n * instance to the per-widget registry so other actions (e.g.\n * `ZoomToggle`'s disable handler) can reach it without DOM lookups.\n * No need to memoize — the bridge wraps it in `useEffectEvent` so an\n * unstable reference does not re-init the chart.\n */\n onInstance?: (chart: echarts.ECharts | null) => void\n className?: string\n sx?: SxProps<Theme>\n}\n\nexport function EchartUI({\n option,\n replaceMerge,\n onEvents,\n init,\n onInstance,\n className,\n sx,\n}: EchartUIProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const chartRef = useRef<echarts.ECharts | null>(null)\n\n // Structural fingerprint of the last applied series / dataset arrays.\n // Used to decide whether the next `setOption` should *replace* those\n // components (when their shape changed) or *merge* them (when only\n // styling-level fields differ — e.g. a new `itemStyle.color` callback\n // from a selection update). Replacing wipes ECharts' per-series runtime\n // state (hover, animation cache, brush areas), so we want to do it only\n // when the structure actually moved.\n const seriesFingerprintRef = useRef<string | null>(null)\n const datasetFingerprintRef = useRef<string | null>(null)\n\n // Latest applied option (read by the `finished` clamp listener, which is\n // bound once and must see the current option) + the edge-label alignment\n // currently applied to the chart (so the clamp skips redundant setOptions).\n const optionRef = useRef<echarts.EChartsOption>(option)\n const edgeAlignRef = useRef<EdgeAlignment>(CENTERED)\n\n // Stable notify wrapper — always reads the latest `onInstance` prop\n // without forcing the init effect below to re-run when the parent\n // passes a fresh function reference. The init effect now only fires\n // when `init` actually changes (documented as mount-only anyway).\n const notifyInstance = useEffectEvent(\n (chart: echarts.ECharts | null): void => {\n onInstance?.(chart)\n },\n )\n\n // Init / dispose. `init` is captured once at mount.\n useEffect(() => {\n if (!containerRef.current) return undefined\n const chart = echarts.init(containerRef.current, null, {\n ...DEFAULT_INIT_OPTS,\n ...init,\n })\n chartRef.current = chart\n notifyInstance(chart)\n // Edge-label clamp: after each layout settles (option change OR resize both\n // end in a render → `finished`), measure the category x-axis edge labels\n // and anchor them inward only if they'd clip. `finished` (not rAF) so\n // `convertToPixel` sees the flushed `lazyUpdate` layout. Loop-safe: the\n // verdict is anchor-independent, so our own clamp setOption recomputes the\n // same result and the ref guard short-circuits.\n const onFinished = (): void => {\n edgeAlignRef.current = clampEdgeLabels(\n chart,\n optionRef.current,\n edgeAlignRef.current,\n )\n }\n chart.on('finished', onFinished)\n // Never let the legend end up with every item hidden — a user can click\n // series off one by one until the chart goes blank. `selected` on this\n // event is always the FULL name→boolean map (not just the clicked item),\n // so \"every value false\" reliably means \"nothing left visible\". Restore\n // all of them instead. `legendAllSelect` fires its own `legendselectall`\n // event, not `legendselectchanged`, so this can't re-trigger itself.\n // Always-on and independent of the consumer's `onEvents` — applies to\n // every ECharts widget in the library for free. A widget that disables\n // legend clicks entirely (e.g. Pie's `selectedMode: false`) never fires\n // `legendselectchanged`, so this is a no-op there.\n const onLegendSelectChanged = (params: unknown): void => {\n const { selected } = params as { selected?: Record<string, boolean> }\n if (!selected) return\n const names = Object.keys(selected)\n if (names.length > 0 && names.every((name) => !selected[name])) {\n chart.dispatchAction({ type: 'legendAllSelect' })\n }\n }\n chart.on('legendselectchanged', onLegendSelectChanged)\n return () => {\n chart.off('finished', onFinished)\n chart.off('legendselectchanged', onLegendSelectChanged)\n // Notify observers *before* disposal so any queued imperative\n // dispatches (e.g. ZoomToggle's `setOption` cleanup) see the\n // instance disappear before its DOM is torn down.\n notifyInstance(null)\n chart.dispose()\n chartRef.current = null\n }\n }, [init])\n\n // Apply option / replaceMerge changes via merge mode (no remount required).\n useEffect(() => {\n const seriesFp = computeSeriesFingerprint(option)\n const datasetFp = computeDatasetFingerprint(option)\n const augmented = new Set<string>(replaceMerge ?? [])\n if (seriesFp !== seriesFingerprintRef.current) augmented.add('series')\n if (datasetFp !== datasetFingerprintRef.current) augmented.add('dataset')\n seriesFingerprintRef.current = seriesFp\n datasetFingerprintRef.current = datasetFp\n // Expose the latest option to the `finished` clamp listener (bound once).\n optionRef.current = option\n chartRef.current?.setOption(option, {\n notMerge: false,\n lazyUpdate: true,\n replaceMerge: augmented.size > 0 ? Array.from(augmented) : undefined,\n })\n }, [option, replaceMerge])\n\n // Resize via shared singleton observer.\n useEffect(() => {\n const node = containerRef.current\n if (!node) return undefined\n return observeResize(node, () => {\n chartRef.current?.resize()\n })\n }, [])\n\n // Bind / unbind opaque event handlers.\n useEffect(() => {\n const chart = chartRef.current\n if (!chart || !onEvents) return undefined\n for (const [event, handler] of Object.entries(onEvents)) {\n chart.on(event, handler)\n }\n return () => {\n for (const [event, handler] of Object.entries(onEvents)) {\n chart.off(event, handler)\n }\n }\n }, [onEvents])\n\n return (\n <Box\n ref={containerRef}\n className={className}\n sx={{ ...styles.root, ...sx }}\n />\n )\n}\n\n/**\n * Cheap structural digest of the option's `series` array — covers the fields\n * that actually demand a `replaceMerge` (length, type, datasetIndex, name,\n * stack, encode). Excludes runtime-style fields like `itemStyle` (callbacks\n * have unstable identity but don't change structure).\n */\nfunction computeSeriesFingerprint(option: echarts.EChartsOption): string {\n const series = option.series\n if (!Array.isArray(series)) return series ? '1' : ''\n return series\n .map((s) => {\n if (s == null || typeof s !== 'object') return String(s)\n const o = s as Record<string, unknown>\n return [\n o.type,\n o.datasetIndex,\n o.name,\n o.stack,\n // `encode` is small; stringify is cheap and stable for plain objects.\n JSON.stringify(o.encode ?? null),\n ].join('|')\n })\n .join('||')\n}\n\n/**\n * Structural digest of the option's `dataset` array — count is the only\n * thing that needs `replaceMerge` here. Row-level changes are picked up by\n * ECharts' default merge.\n */\nfunction computeDatasetFingerprint(option: echarts.EChartsOption): string {\n const dataset = option.dataset\n if (!Array.isArray(dataset)) return dataset ? '1' : ''\n return String(dataset.length)\n}\n","import { useCallback, useMemo } from 'react'\nimport type { SxProps, Theme } from '@mui/material'\nimport type * as echarts from 'echarts'\nimport {\n applyTransforms,\n setEchartInstance,\n useWidgetId,\n useWidgetShallow,\n type Transform,\n} from '../stores'\nimport { EchartUI, type EchartsEventHandler } from './echart-ui'\n\n/**\n * Default ECharts `replaceMerge` keys for every widget. `dataZoom` and\n * `brush` are omitted so ZoomToggle / BrushToggle's user-driven runtime\n * state (slider range, brushed areas in `multiple` mode) survives unrelated\n * re-renders. `series` and `dataset` are also omitted: EchartUI fingerprints\n * them per-render and adds them to `replaceMerge` only when their shape\n * actually changes, keeping ECharts' per-series runtime state alive when\n * only callback-style fields differ.\n *\n * Lives in this module (not the generic store) because it's an ECharts\n * concept. Module-private — callers should not need it.\n */\nconst DEFAULT_REPLACE_MERGE: readonly string[] = ['toolbox']\n\n/**\n * Reactive context passed to every {@link OptionFactory} call so the\n * factory can rebuild render-time pieces (axis label / tooltip formatters)\n * from the live store. Drives RelativeData / consumer-formatter changes\n * through to the chart without rebuilding the structural option.\n */\nexport interface OptionFactoryContext {\n formatter?: (value: number) => string\n labelFormatter?: (value: string | number) => string | number\n}\n\n/**\n * The per-widget option factory — a single callable that owns BOTH phases\n * of option construction:\n *\n * - **Structural phase** — when `option == null`, return the theme-aware\n * structural option (tooltip / legend / color palette / series\n * template, optionally merged with a consumer-supplied `optionsOverride`).\n * No data is read. `<Widget.Echart>` calls the factory with\n * `(undefined, undefined)` synchronously during render to derive the\n * structural base; `configTransforms` (Stack/Zoom/Brush) then mutate it\n * in the same render pass.\n * - **Merge phase** — when `option` is defined, fuse `data` into the\n * post-configTransforms option at fusion time. `<Widget.Echart>` calls\n * the factory with `(transformed, data, ctx)` on every render.\n *\n * The two phases share a closure (the factory creator captures `theme`,\n * `formatter`, `labelFormatter`, `seriesNames`, `selection`, `optionsOverride`,\n * …), so structural and merge agree on the same widget configuration.\n *\n * The third arg `ctx` carries the **live** store-side formatters at the\n * call site — distinct from the closure-time formatters because actions\n * like RelativeData can install a percent formatter on the store after\n * the factory was constructed. The merge phase reads from `ctx`; the\n * structural phase typically uses the closure-time values.\n */\nexport type OptionFactory = (\n option: echarts.EChartsOption | undefined,\n data: unknown,\n ctx?: OptionFactoryContext,\n) => echarts.EChartsOption\n\nexport interface EchartProps {\n /**\n * The per-widget {@link OptionFactory}. Required — `<Widget.Echart>`\n * derives the structural option from it (so configTransforms have a base\n * to mutate) and fuses `state.data` into the post-pipeline option at\n * render time. Wrap the factory creator in `useMemo` so its identity is\n * stable across renders.\n */\n optionFactory: OptionFactory\n onEvents?: Record<string, EchartsEventHandler>\n init?: echarts.EChartsInitOpts\n className?: string\n /**\n * Styles for the chart container — this is where its height comes from.\n * `min-height` defaults to the card height (304px) and `flex: 1` lets the\n * chart fill a taller parent; override either here, e.g.\n * `sx={{ minHeight: 400 }}` for a taller card.\n */\n sx?: SxProps<Theme>\n}\n\ninterface EchartSlice {\n data: unknown\n configTransforms: readonly Transform[]\n formatter?: (value: number) => string\n labelFormatter?: (value: string | number) => string | number\n}\n\nconst echartSelector = (s: {\n data: unknown\n configTransforms: readonly Transform[]\n formatter?: (value: number) => string\n labelFormatter?: (value: string | number) => string | number\n}): EchartSlice => ({\n data: s.data,\n configTransforms: s.configTransforms,\n formatter: s.formatter,\n labelFormatter: s.labelFormatter,\n})\n\n/**\n * Stateful Echart bridge — owns the entire ECharts coupling. The whole\n * option pipeline lives here, not in the store:\n *\n * 1. **Structural** — `optionFactory(undefined, undefined)` produces the\n * theme-aware base. Memoized on the factory identity, so the consumer's\n * `useMemo` ID gates the rebuild.\n * 2. **Transformed** — `applyTransforms(structural, configTransforms)`\n * applies any registered configTransforms (Stack/Zoom/Brush) over the\n * structural base. Memoized on `[structural, configTransforms]`.\n * 3. **`replaceMerge`** — derived from the enabled configTransforms'\n * `replaceMergeKeys`, deduped and sorted, seeded with\n * {@link DEFAULT_REPLACE_MERGE}. Memoized on `[configTransforms]` so\n * ECharts sees a stable array reference across non-transform changes.\n * 4. **Merge** — `optionFactory(transformed, data, ctx)` fuses post-\n * pipeline data into the option. Reactive `ctx` carries the live store\n * formatters so RelativeData's percent formatter flows through without\n * a structural rebuild.\n *\n * The `<Widget.Provider>` doesn't know about the factory at all: it stays\n * a renderer-agnostic shell. The `ProviderProps` surface has no ECharts\n * coupling, so non-Echart widgets don't transitively import the type.\n */\nexport function Echart({\n optionFactory,\n onEvents,\n init,\n className,\n sx,\n}: EchartProps) {\n const id = useWidgetId()\n const slice = useWidgetShallow(id, echartSelector)\n\n // Publish the live ECharts instance to the per-id registry so actions\n // (e.g. `ZoomToggle`'s disable handler) can reach it imperatively. The\n // callback identity is stable across renders (only `id` is in deps), so\n // EchartUI's init effect doesn't see a fresh `onInstance` and re-init.\n const onInstance = useCallback(\n (chart: echarts.ECharts | null) => setEchartInstance(id, chart),\n [id],\n )\n\n // Destructure so React Compiler sees specific deps instead of inferring\n // the whole `slice` object. `useWidgetShallow` already shallow-compares\n // the slice, so per-field deps drive each memo exactly when its inputs\n // change.\n const {\n data: sliceData,\n configTransforms,\n formatter: sliceFormatter,\n labelFormatter: sliceLabelFormatter,\n } = slice\n\n const structural = useMemo(\n () => optionFactory(undefined, undefined),\n [optionFactory],\n )\n\n const transformed = useMemo(\n () =>\n applyTransforms(structural, configTransforms) as echarts.EChartsOption,\n [structural, configTransforms],\n )\n\n const replaceMerge = useMemo(() => {\n const keys = new Set<string>(DEFAULT_REPLACE_MERGE)\n for (const xf of configTransforms) {\n if (xf.enabled && xf.replaceMergeKeys?.length) {\n for (const k of xf.replaceMergeKeys) keys.add(k)\n }\n }\n return Array.from(keys).sort()\n }, [configTransforms])\n\n const option = useMemo(\n () =>\n optionFactory(transformed, sliceData, {\n formatter: sliceFormatter,\n labelFormatter: sliceLabelFormatter,\n }),\n [\n optionFactory,\n transformed,\n sliceData,\n sliceFormatter,\n sliceLabelFormatter,\n ],\n )\n\n return (\n <EchartUI\n option={option}\n replaceMerge={replaceMerge}\n onEvents={onEvents}\n init={init}\n onInstance={onInstance}\n className={className}\n sx={sx}\n />\n )\n}\n","import { useCallback, useMemo, useRef } from 'react'\nimport type { CallbackDataParams } from 'echarts/types/dist/shared'\nimport type { EchartsEventHandler } from './echart-ui'\n\nexport type SelectionKey = string | number\n\nexport interface UseChartSelectionOptions<K extends SelectionKey> {\n /**\n * Controlled selection. `undefined`/`null`/an explicit `[]` all mean \"no\n * selection interaction\" — every current merger already treats an empty\n * selection as \"nothing excluded,\" so this hook collapses all three to\n * `null` rather than promising per-merger `[]` semantics it doesn't\n * implement.\n */\n selection?: readonly K[]\n /** Receives the next selection. When omitted the wiring is a no-op. */\n onSelectionChange?: (next: readonly K[]) => void\n /**\n * Pull a selection key out of an ECharts `click` event. Return `null` to\n * skip (e.g. a click on empty plot area). For Bar/Pie/Timeseries this is\n * usually `(p) => p.name`; for Histogram/Scatterplot it's the dataIndex.\n */\n keyFromClick: (params: CallbackDataParams) => K | null\n /**\n * Map a `brushSelected` payload's `selected[*]` entries (each carrying a\n * `seriesIndex` + `dataIndex[]`) into the full set of selection keys for\n * the brushed area. Called once per brush event.\n */\n keysFromBrush: (\n selected: readonly { seriesIndex: number; dataIndex: number[] }[],\n ) => K[]\n}\n\nexport interface ChartSelectionWiring<K extends SelectionKey> {\n /**\n * Pass straight to `<Widget.Echart onEvents={…}>`. Wires `click` and\n * `brushSelected` so the user's interactions reach `onSelectionChange`.\n */\n onEvents: Record<string, EchartsEventHandler>\n /**\n * The current selection — `null` for \"no selection interaction\"\n * (`undefined`/`null`/an explicit `[]`), or a non-empty array meaning\n * \"render only these as fully opaque, dim the rest\".\n */\n selection: readonly K[] | null\n}\n\n/**\n * Translate ECharts' click + brush events into a consumer-owned selection\n * with the expected dashboard semantics:\n *\n * - **Click toggles** — clicking an item adds it to the selection if\n * absent, removes it if present.\n * - **Brush replaces** — finishing a brush stroke overwrites the selection\n * with whatever the brush covered (drag-to-empty clears).\n *\n * Wire the returned `onEvents` into `<Widget.Echart>` and feed\n * `wiring.selection` to the widget's option factory so the merger can dim\n * non-selected rows at fusion time.\n */\nexport function useChartSelection<K extends SelectionKey>({\n selection,\n onSelectionChange,\n keyFromClick,\n keysFromBrush,\n}: UseChartSelectionOptions<K>): ChartSelectionWiring<K> {\n const handleClick = useCallback(\n (event: unknown) => {\n if (!onSelectionChange) return\n const params = event as CallbackDataParams\n const key = keyFromClick(params)\n if (key == null) return\n const current = selection ?? []\n const idx = current.indexOf(key)\n const next =\n idx === -1\n ? [...current, key]\n : [...current.slice(0, idx), ...current.slice(idx + 1)]\n onSelectionChange(next)\n },\n [selection, onSelectionChange, keyFromClick],\n )\n\n // ECharts fires `brushSelected` on every pointer-move while the user is\n // drawing a brush, but we only want to push to `onSelectionChange` once\n // the gesture ends. Cache the latest `brushSelected` payload here, then\n // commit on `brushEnd`.\n const latestBrushedRef = useRef<\n readonly { seriesIndex: number; dataIndex: number[] }[]\n >([])\n\n const handleBrushSelected = useCallback((event: unknown) => {\n const params = event as {\n batch?: {\n selected?: { seriesIndex: number; dataIndex: number[] }[]\n }[]\n }\n latestBrushedRef.current = params.batch?.[0]?.selected ?? []\n }, [])\n\n const handleBrushEnd = useCallback(() => {\n if (!onSelectionChange) return\n onSelectionChange(keysFromBrush(latestBrushedRef.current))\n }, [onSelectionChange, keysFromBrush])\n\n const onEvents = useMemo<Record<string, EchartsEventHandler>>(\n () => ({\n click: handleClick,\n brushSelected: handleBrushSelected,\n brushEnd: handleBrushEnd,\n }),\n [handleClick, handleBrushSelected, handleBrushEnd],\n )\n\n const wiringSelection = useMemo(\n () => (selection && selection.length > 0 ? selection : null),\n [selection],\n )\n\n return { onEvents, selection: wiringSelection }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatter-wVO81tYk.js","names":[],"sources":["../src/widgets/utils/formatter.ts"],"sourcesContent":["export const defaultFormatter = (value: number) => String(value)\nexport const defaultLabelFormatter = (value: string | number) => value\n"],"mappings":";AAAA,IAAa,KAAoB,MAAkB,OAAO,CAAK,GAClD,KAAyB,MAA2B"}
|