@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget-store-BFPKYm4R.js","names":[],"sources":["../src/widgets/stores/widget-store.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type {\n WidgetState,\n WidgetStore,\n ToolRegistration,\n WidgetStoreActions,\n} from './types'\n\n// Track active pipeline executions for cancellation\nconst activePipelines = new Map<string, number>()\nconst activeConfigPipelines = new Map<string, number>()\n\n/**\n * Zustand store for managing widget state across the application.\n *\n * Provides centralized state management for all widget UI components, including\n * data/config transformation pipelines via registered tools.\n *\n * **Performance optimizations:**\n * - `registerTool` skips the store update when structural properties (order, enabled,\n * type, disables) haven't changed — only `fn` is updated via direct mutation,\n * avoiding a new `registeredTools` array reference and WidgetLoader pipeline cascades.\n * - `setToolEnabled` skips the store update when the enabled state is already the\n * requested value.\n * - `executeToolPipeline` / `executeConfigPipeline` skip the final `set()` when\n * the transformed data/config is referentially identical to what's already in the store.\n * - Both pipelines support cancellation — newer executions for the same widget\n * automatically cancel in-progress ones.\n *\n * @example Reading widget state (prefer useWidgetSelector for performance)\n * ```tsx\n * import { useWidgetSelector } from '@carto/ps-react-ui/widgets'\n *\n * function MyWidget({ id }: { id: string }) {\n * const { title, data } = useWidgetSelector(id, (w) => ({\n * title: w?.title,\n * data: w?.data,\n * }))\n * return <div>{title}: {JSON.stringify(data)}</div>\n * }\n * ```\n *\n * @example Writing widget state\n * ```tsx\n * import { widgetStoreActions } from '@carto/ps-react-ui/widgets'\n *\n * const { setWidget } = widgetStoreActions\n * setWidget('my-widget', { type: 'formula', isLoading: false, data: { value: 1000 } })\n * ```\n */\nexport const useWidgetStore = create<WidgetStore>()((set, get) => ({\n // State\n widgets: {},\n\n // Actions\n\n /** Merges partial state into the widget entry. Creates the widget if it doesn't exist. */\n setWidget: (id, widget) => {\n set((state) => {\n const prev = state.widgets[id] ?? ({} as WidgetStore['widgets'][string])\n return {\n widgets: {\n ...state.widgets,\n [id]: {\n ...prev,\n ...widget,\n id,\n },\n },\n }\n })\n },\n\n removeWidget: (id) =>\n set((state) => {\n const widgets = { ...state.widgets }\n\n delete widgets[id]\n\n return { widgets }\n }),\n\n clearWidgets: () =>\n set({\n widgets: {},\n }),\n\n getWidget: <T extends WidgetState>(id: string) => {\n return get().widgets[id] as T | undefined\n },\n\n /**\n * Registers a transformation tool for a widget's data or config pipeline.\n *\n * **No-op optimization:** When a tool with the same `id` already exists and its\n * structural properties (`order`, `enabled`, `type`, `disables`) are unchanged,\n * only `fn` is updated via direct mutation — no store update is triggered. This\n * allows action components to include all reactive dependencies in their\n * `useEffect` arrays without causing WidgetLoader pipeline cascades.\n */\n registerTool: (widgetId: string, tool: ToolRegistration) => {\n const current = get().widgets[widgetId]\n const existingTool = current?.registeredTools?.find(\n (t: ToolRegistration) => t.id === tool.id,\n )\n\n // No-op: structural properties unchanged — update fn via direct mutation.\n // Safe because fn is only consumed imperatively during pipeline execution.\n if (\n existingTool?.order === tool.order &&\n existingTool.enabled === tool.enabled &&\n existingTool.type === tool.type &&\n existingTool.disables === tool.disables\n ) {\n existingTool.fn = tool.fn\n return\n }\n\n set((state) => {\n const widget = state.widgets[widgetId] ?? ({} as WidgetState)\n const registeredTools = widget.registeredTools ?? []\n\n // Remove existing tool with same id if present\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== tool.id,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...widget,\n id: widgetId,\n registeredTools: [...filteredTools, tool],\n },\n },\n }\n })\n },\n\n unregisterTool: (widgetId: string, toolId: string) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== toolId,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: filteredTools,\n },\n },\n }\n }),\n\n /**\n * Triggers pipeline re-execution by creating a new `registeredTools` reference.\n * This is a lightweight operation that only bumps the array reference without\n * modifying any tool.\n */\n triggerToolPipeline: (widgetId: string) =>\n set((state) => {\n const widget = state.widgets[widgetId]\n if (!widget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...widget,\n registeredTools: [...(widget.registeredTools ?? [])],\n },\n },\n }\n }),\n\n /**\n * Updates a tool's enabled state.\n *\n * **No-op optimization:** Skips the store update if the tool already has the\n * requested enabled value.\n */\n setToolEnabled: (widgetId: string, toolId: string, enabled: boolean) => {\n const current = get().widgets[widgetId]\n if (current) {\n const tool = current.registeredTools?.find(\n (t: ToolRegistration) => t.id === toolId,\n )\n if (tool?.enabled === enabled) return\n }\n\n set((state) => {\n const widget = state.widgets[widgetId]\n if (!widget) return state\n\n const registeredTools = widget.registeredTools ?? []\n const updatedTools = registeredTools.map((tool: ToolRegistration) =>\n tool.id === toolId ? { ...tool, enabled } : tool,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...widget,\n registeredTools: updatedTools,\n },\n },\n }\n })\n },\n\n /**\n * Executes the data transformation pipeline for a widget.\n *\n * Filters to enabled data-type tools (respecting `disables`), sorts by `order`,\n * and chains their `fn` calls. Supports async tools.\n *\n * **Cancellation:** Newer executions for the same widget automatically cancel\n * in-progress ones via a version counter.\n *\n * **No-op optimization:** Skips the final `set()` if the transformed data is\n * referentially identical (`Object.is`) to what's already in the store.\n */\n executeToolPipeline: async (widgetId: string, sourceData: unknown) => {\n const widget = get().widgets[widgetId]\n if (!widget) return\n\n // Cancel any in-progress pipeline for this widget\n const currentExecution = (activePipelines.get(widgetId) ?? 0) + 1\n activePipelines.set(widgetId, currentExecution)\n\n const widgetWithTools = widget\n\n // Build set of tool IDs that should be disabled\n const disabledToolIds = new Set<string>()\n for (const tool of widgetWithTools.registeredTools ?? []) {\n if (tool.enabled && tool.disables) {\n tool.disables.forEach((id) => disabledToolIds.add(id))\n }\n }\n\n // Sort tools by order and filter enabled data-only tools, excluding disabled tools\n const sortedTools = [...(widgetWithTools.registeredTools ?? [])]\n .filter(\n (tool) =>\n (tool.type ?? 'data') === 'data' &&\n tool.enabled &&\n !disabledToolIds.has(tool.id),\n )\n .sort((a, b) => a.order - b.order)\n\n // Execute pipeline - handle both sync and async tools\n let transformedData = sourceData\n for (const tool of sortedTools) {\n // Check if this execution was cancelled\n if (activePipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n try {\n // Call tool function (may return Promise or direct value)\n transformedData = await tool.fn(transformedData)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Tool ${tool.id} failed for widget ${widgetId}:`, error)\n // Continue with current data to prevent one tool from breaking all\n }\n }\n\n // Skip store update if neither data nor sourceData changed\n const widgetAfter = get().widgets[widgetId]\n if (\n widgetAfter &&\n Object.is(widgetAfter.data, transformedData) &&\n Object.is(widgetAfter.sourceData, sourceData)\n ) {\n if (activePipelines.get(widgetId) === currentExecution) {\n activePipelines.delete(widgetId)\n }\n return\n }\n\n // Single store update with final transformed data\n set((state) => {\n const currentWidget = state.widgets[widgetId]\n if (!currentWidget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...currentWidget,\n sourceData,\n data: transformedData,\n },\n },\n }\n })\n\n // Clean up tracking\n if (activePipelines.get(widgetId) === currentExecution) {\n activePipelines.delete(widgetId)\n }\n },\n\n /**\n * Executes the config transformation pipeline for a widget.\n *\n * Filters to enabled config-type tools (respecting `disables`), sorts by `order`,\n * and chains their `fn` calls. The transformed config is spread into the widget state.\n *\n * **Cancellation:** Newer executions for the same widget automatically cancel\n * in-progress ones via a version counter.\n *\n * **No-op optimization:** Skips the final `set()` when the config object is unchanged\n * and all its properties already match what's in the store.\n */\n executeConfigPipeline: async (widgetId: string, baseConfig: object) => {\n const widget = get().widgets[widgetId]\n if (!widget) return\n\n // Cancel any in-progress config pipeline for this widget\n const currentExecution = (activeConfigPipelines.get(widgetId) ?? 0) + 1\n activeConfigPipelines.set(widgetId, currentExecution)\n\n // Build set of tool IDs that should be disabled (cross-type disabling works)\n const disabledToolIds = new Set<string>()\n for (const tool of widget.registeredTools ?? []) {\n if (tool.enabled && tool.disables) {\n tool.disables.forEach((id) => disabledToolIds.add(id))\n }\n }\n\n // Filter to config tools only, sort by order\n const sortedTools = [...(widget.registeredTools ?? [])]\n .filter(\n (tool) =>\n tool.type === 'config' &&\n tool.enabled &&\n !disabledToolIds.has(tool.id),\n )\n .sort((a, b) => a.order - b.order)\n\n // Chain config tools\n let transformedConfig: unknown = baseConfig\n for (const tool of sortedTools) {\n if (activeConfigPipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n try {\n transformedConfig = await tool.fn(transformedConfig)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `Config tool ${tool.id} failed for widget ${widgetId}:`,\n error,\n )\n }\n }\n\n // Build a patch that only includes properties the pipeline should set.\n // A property is applied when:\n // 1. A config tool explicitly changed it (transformedConfig[k] !== baseConfig[k])\n // 2. First pipeline run for this widget (no _lastConfig yet)\n // 3. The widget value still matches what the pipeline last set — meaning the\n // user hasn't modified it via setWidget, so it's safe to overwrite.\n // A property is SKIPPED when the widget value differs from _lastConfig,\n // meaning the user (or a hook) changed it since the last pipeline run.\n const base = baseConfig as Record<string, unknown>\n const result = transformedConfig as Record<string, unknown>\n const widgetNow = get().widgets[widgetId] as unknown as Record<\n string,\n unknown\n >\n const lastConfig = widgetNow?._lastConfig as\n Record<string, unknown> | undefined\n\n const patch: Record<string, unknown> = {}\n for (const key of Object.keys(result)) {\n const toolChanged = !Object.is(result[key], base[key])\n const isFirstRun = !lastConfig || !(key in lastConfig)\n const userUnmodified =\n !isFirstRun && Object.is(widgetNow[key], lastConfig[key])\n\n if (toolChanged || isFirstRun || userUnmodified) {\n patch[key] = result[key]\n }\n }\n\n // Skip store update if every patch value already matches the widget\n const hasChanges = Object.keys(patch).some(\n (k) => !Object.is(widgetNow?.[k], patch[k]),\n )\n const configRefChanged = !Object.is(transformedConfig, lastConfig)\n\n if (!hasChanges && !configRefChanged) {\n if (activeConfigPipelines.get(widgetId) === currentExecution) {\n activeConfigPipelines.delete(widgetId)\n }\n return\n }\n\n // Apply the patch and store the pipeline output for next run's comparison\n set((state) => {\n const currentWidget = state.widgets[widgetId]\n if (!currentWidget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...currentWidget,\n ...patch,\n _lastConfig: transformedConfig,\n },\n },\n }\n })\n\n if (activeConfigPipelines.get(widgetId) === currentExecution) {\n activeConfigPipelines.delete(widgetId)\n }\n },\n}))\n\n/**\n * Stable references to store actions, accessible without creating a subscription.\n *\n * Use this instead of `useWidgetStore((state) => state.setWidget)` to avoid\n * unnecessary subscriber evaluations. Actions are stable functions that never\n * change, so subscribing to them wastes cycles on every store update.\n *\n * @example\n * ```tsx\n * import { widgetStoreActions } from '@carto/ps-react-ui/widgets'\n *\n * const { setWidget, registerTool } = widgetStoreActions\n *\n * useEffect(() => {\n * registerTool(id, { id: 'my-tool', order: 10, enabled: true, fn: (d) => d })\n * return () => widgetStoreActions.unregisterTool(id, 'my-tool')\n * }, [id])\n * ```\n */\nexport const widgetStoreActions: WidgetStoreActions = {\n get setWidget() {\n return useWidgetStore.getState().setWidget\n },\n get removeWidget() {\n return useWidgetStore.getState().removeWidget\n },\n get clearWidgets() {\n return useWidgetStore.getState().clearWidgets\n },\n get getWidget() {\n return useWidgetStore.getState().getWidget\n },\n get registerTool() {\n return useWidgetStore.getState().registerTool\n },\n get unregisterTool() {\n return useWidgetStore.getState().unregisterTool\n },\n get setToolEnabled() {\n return useWidgetStore.getState().setToolEnabled\n },\n get triggerToolPipeline() {\n return useWidgetStore.getState().triggerToolPipeline\n },\n get executeToolPipeline() {\n return useWidgetStore.getState().executeToolPipeline\n },\n get executeConfigPipeline() {\n return useWidgetStore.getState().executeConfigPipeline\n },\n} as WidgetStoreActions\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"category.js","names":["{\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps","selected = true","selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }","<Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>","{\n name,\n value,\n maxValue,\n color,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps","selected = true","onClick\n ? () =>\n onClick({\n name,\n })\n : undefined","labelFormatter ? labelFormatter(name) : name","<Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>","formatter(value)","<Typography sx={styles.rowValue}>{formatter(value)}</Typography>","<Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>","<CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />","<Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>","{\n name,\n values,\n maxValue,\n colors,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps","selected = true","onClick ? () => onClick({ name }) : undefined","labelFormatter ? labelFormatter(name) : name","<Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>","values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))","colors.length","(value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n )","<Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>","<Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>","{\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps","otherLabel = 'Other'","otherCountLabel = '{count} more'","otherCountLabel.replace('{count}', String(hiddenCount))","<Typography sx={styles.otherLabel}>{otherLabel}</Typography>","<Typography sx={styles.otherCount}>({countText})</Typography>","<Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>","{ series, colors }: CategoryLegendProps","series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))","colors.length","(item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n )","<Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>","{ id }: CategoryUIProps","(w) => {\n const cw = w as CategoryWidgetState | undefined\n return {\n _formatter: cw?.formatter,\n _labelFormatter: cw?.labelFormatter,\n _series: cw?.series,\n data: cw?.data,\n maxItems: cw?.maxItems,\n labels: cw?.labels,\n onRowClick: cw?.onRowClick,\n selected: cw?.selected,\n max: cw?.max,\n }\n }","_series ?? []","series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]","bold","secondary","series.length","Box","styles.list","{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }","isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n />\n ))","ref","{\n ...styles.root,\n }","length","(item) => item.values","hiddenCount === 0 ? 'auto' : 'hidden'","item","hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )","other","otherCount","<Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>","series.length > 0 && <CategoryLegend series={series} colors={colors} />","<Box\n ref={ref}\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>","<Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>","(_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n )"],"sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n width: '100%',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\n/**\n * Renders a single horizontal bar fill proportional to its value relative to the maximum.\n */\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a single-series category row with a label, formatted value, and proportional bar.\n */\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a multi-series category row with a label and multiple color-coded bars stacked vertically.\n */\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\n/**\n * Renders an \"Other\" summary row indicating how many additional categories are hidden beyond `maxItems`.\n */\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\n/**\n * Renders a color-coded legend for multi-series category widgets.\n */\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport { CategoryRowSingle } from './components/category-row-single'\nimport { CategoryRowMulti } from './components/category-row-multi'\nimport { CategoryRowOther } from './components/category-row-other'\nimport { CategoryLegend } from './components/category-legend'\nimport { useState } from 'react'\nimport { defaultFormatter, defaultLabelFormatter } from '../utils/formatter'\nimport { useWidgetRef } from '../../hooks'\n\n/**\n * Renders a category widget displaying horizontal bars for categorical data with support for single and multi-series layouts, selection, and overflow grouping.\n */\nexport function CategoryUI({ id }: CategoryUIProps) {\n const { ref } = useWidgetRef<HTMLDivElement>(id)\n const theme = useTheme()\n\n // Single consolidated subscription instead of 9 separate ones.\n const {\n _formatter,\n _labelFormatter,\n _series,\n data,\n maxItems,\n labels,\n onRowClick,\n selected,\n max,\n } = useWidgetSelector(id, (w) => {\n const cw = w as CategoryWidgetState | undefined\n return {\n _formatter: cw?.formatter,\n _labelFormatter: cw?.labelFormatter,\n _series: cw?.series,\n data: cw?.data,\n maxItems: cw?.maxItems,\n labels: cw?.labels,\n onRowClick: cw?.onRowClick,\n selected: cw?.selected,\n max: cw?.max,\n }\n })\n\n const formatter = _formatter ?? defaultFormatter\n const labelFormatter = _labelFormatter ?? defaultLabelFormatter\n const series = _series ?? []\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n ref={ref}\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n} from './types'\n\ninterface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\n/**\n * Creates download configuration for category widgets, supporting PNG (screenshot) and CSV (data) exports. CSV output groups values by category across multiple series.\n *\n * @param props - Configuration with `refUI` reference and optional `series` for CSV column headers.\n * @returns Array of download items for use with the Download action.\n */\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for category list widgets, including empty series and a default `maxItems` of 10.\n *\n * @returns Default category widget config.\n */\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"mappings":"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"}
|
package/dist/widgets/error.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { t as e } from "../use-widget-selector-VSPhfhNm.js";
|
|
2
|
-
import { c as t } from "react/compiler-runtime";
|
|
3
|
-
import { Alert as n, AlertTitle as r } from "@mui/material";
|
|
4
|
-
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
-
//#region src/widgets/error/error.tsx
|
|
6
|
-
function o(o) {
|
|
7
|
-
let c = t(5), { id: l, children: u, title: d, description: f } = o, { isLoading: p, isFetching: m, error: h } = e(l, s);
|
|
8
|
-
if (p || m) return u;
|
|
9
|
-
if (h) {
|
|
10
|
-
let e = d ?? h.title ?? "Error", t = f ?? h.message ?? "An error occurred while loading the widget. Please try again.", o;
|
|
11
|
-
c[0] === e ? o = c[1] : (o = /* @__PURE__ */ i(r, { children: e }), c[0] = e, c[1] = o);
|
|
12
|
-
let s;
|
|
13
|
-
return c[2] !== t || c[3] !== o ? (s = /* @__PURE__ */ a(n, {
|
|
14
|
-
severity: "error",
|
|
15
|
-
children: [o, t]
|
|
16
|
-
}), c[2] = t, c[3] = o, c[4] = s) : s = c[4], s;
|
|
17
|
-
}
|
|
18
|
-
return u;
|
|
19
|
-
}
|
|
20
|
-
function s(e) {
|
|
21
|
-
return {
|
|
22
|
-
isLoading: e?.isLoading,
|
|
23
|
-
isFetching: e?.isFetching,
|
|
24
|
-
error: e?.error
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
export { o as WidgetError };
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=error.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","names":["{\n id,\n children,\n title: titleProp,\n description,\n}: WidgetErrorProps","(w) => ({\n isLoading: w?.isLoading,\n isFetching: w?.isFetching,\n error: w?.error,\n })","<AlertTitle>{errorTitle}</AlertTitle>","<Alert severity='error'>\n <AlertTitle>{errorTitle}</AlertTitle>\n {errorMessage}\n </Alert>"],"sources":["../../src/widgets/error/error.tsx"],"sourcesContent":["import { Alert, AlertTitle } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport type { WidgetErrorProps } from './types'\n\n/**\n * Displays an error alert when a widget encounters an error during data loading. Reads error state from the widget store and hides errors during loading/fetching to prevent flashing.\n *\n * @example\n * ```tsx\n * <WidgetError id=\"my-widget\">\n * <WidgetContent />\n * </WidgetError>\n * ```\n */\nexport function WidgetError({\n id,\n children,\n title: titleProp,\n description,\n}: WidgetErrorProps) {\n // Single consolidated subscription instead of 3 separate ones.\n const { isLoading, isFetching, error } = useWidgetSelector(id, (w) => ({\n isLoading: w?.isLoading,\n isFetching: w?.isFetching,\n error: w?.error,\n }))\n\n // Don't show error during loading/fetching states\n if (isLoading || isFetching) {\n return children\n }\n\n // Show error UI if error exists\n if (error) {\n const errorTitle = titleProp ?? error.title ?? 'Error'\n const errorMessage =\n description ??\n error.message ??\n 'An error occurred while loading the widget. Please try again.'\n\n return (\n <Alert severity='error'>\n <AlertTitle>{errorTitle}</AlertTitle>\n {errorMessage}\n </Alert>\n )\n }\n\n // No error, render children\n return children\n}\n"],"mappings":";;;;;AAcA,SAAgB,EAAA,GAKK;eALO,EAC1B,OACA,aACA,OAAO,GACP,mBAJ0BA,GAOpB,EAAE,cAAW,eAAY,aAAU,EAAkB,GAAIC,CAI7D;CAGF,IAAI,KAAa,GACf,OAAO;CAIT,IAAI,GAAO;EACT,IAAM,IAAa,KAAa,EAAM,SAAS,SACzC,IACJ,KACA,EAAM,WACN,iEAIEC;EAAa,AAAA,EAAA,OAAA,gBAAb,IAAA,kBAAC,GAAD,EAAA,UAAa,EAAuB,CAAA,GAAvB,EAAA,KAAA;EADfC,IAAAA;EADF,OAGK,EAAA,OAAA,KAAA,EAAA,OADDD,KADF,IAAA,kBAAC,GAAD;GAAO,UAAS;GAAhB,UAAA,CACEA,GACC,CACI;MADJ,EAAA,KAAA,GADDA,EAAAA,KAAAA,yBADFC;CAKJ;CAGA,OAAO;AACT;AA7BiE,SAAA,EAAC,GAAA;CAAO,OAAA;EACrE,WAAW,GAAG;EACd,YAAY,GAAG;EACf,OAAO,GAAG;CACZ"}
|
package/dist/widgets/loader.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { r as e } from "../rolldown-runtime-B0aSnxlc.js";
|
|
2
|
-
import { t } from "../cjs-CBrZjPCj.js";
|
|
3
|
-
import { n, t as r } from "../widget-store-BFPKYm4R.js";
|
|
4
|
-
import { c as i } from "react/compiler-runtime";
|
|
5
|
-
import { useEffect as a, useRef as o } from "react";
|
|
6
|
-
//#region src/widgets/loader/loader.tsx
|
|
7
|
-
function s(e) {
|
|
8
|
-
let t = i(25), s;
|
|
9
|
-
t[0] === e.id ? s = t[1] : (s = (t) => t.widgets[e.id]?.registeredTools, t[0] = e.id, t[1] = s);
|
|
10
|
-
let c = r(s), l = o(e.data), u = o(e.config), d = o(!1), f;
|
|
11
|
-
t[2] !== e.config || t[3] !== e.data ? (f = () => {
|
|
12
|
-
l.current = e.data, u.current = e.config;
|
|
13
|
-
}, t[2] = e.config, t[3] = e.data, t[4] = f) : f = t[4], a(f);
|
|
14
|
-
let p, m;
|
|
15
|
-
t[5] !== e.error || t[6] !== e.id || t[7] !== e.isFetching || t[8] !== e.isLoading || t[9] !== e.type ? (p = () => {
|
|
16
|
-
n.setWidget(e.id, {
|
|
17
|
-
type: e.type,
|
|
18
|
-
isLoading: e.isLoading ?? !1,
|
|
19
|
-
isFetching: e.isFetching ?? !1,
|
|
20
|
-
error: e.error
|
|
21
|
-
});
|
|
22
|
-
}, m = [
|
|
23
|
-
e.id,
|
|
24
|
-
e.type,
|
|
25
|
-
e.isLoading,
|
|
26
|
-
e.isFetching,
|
|
27
|
-
e.error
|
|
28
|
-
], t[5] = e.error, t[6] = e.id, t[7] = e.isFetching, t[8] = e.isLoading, t[9] = e.type, t[10] = p, t[11] = m) : (p = t[10], m = t[11]), a(p, m);
|
|
29
|
-
let h, g;
|
|
30
|
-
t[12] !== e.config || t[13] !== e.id ? (h = () => {
|
|
31
|
-
e.config && n.executeConfigPipeline(e.id, e.config);
|
|
32
|
-
}, g = [e.id, e.config], t[12] = e.config, t[13] = e.id, t[14] = h, t[15] = g) : (h = t[14], g = t[15]), a(h, g);
|
|
33
|
-
let _, v;
|
|
34
|
-
t[16] !== e.data || t[17] !== e.id ? (_ = () => {
|
|
35
|
-
n.executeToolPipeline(e.id, e.data);
|
|
36
|
-
}, v = [e.id, e.data], t[16] = e.data, t[17] = e.id, t[18] = _, t[19] = v) : (_ = t[18], v = t[19]), a(_, v);
|
|
37
|
-
let y;
|
|
38
|
-
t[20] === e.id ? y = t[21] : (y = () => {
|
|
39
|
-
if (!d.current) {
|
|
40
|
-
d.current = !0;
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
let t = requestAnimationFrame(() => {
|
|
44
|
-
let { executeToolPipeline: t, executeConfigPipeline: r } = n;
|
|
45
|
-
t(e.id, l.current), u.current && r(e.id, u.current);
|
|
46
|
-
});
|
|
47
|
-
return () => cancelAnimationFrame(t);
|
|
48
|
-
}, t[20] = e.id, t[21] = y);
|
|
49
|
-
let b;
|
|
50
|
-
return t[22] !== e.id || t[23] !== c ? (b = [c, e.id], t[22] = e.id, t[23] = c, t[24] = b) : b = t[24], a(y, b), e.children;
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
//#region src/widgets/loader/utils.ts
|
|
54
|
-
var c = /* @__PURE__ */ e(t(), 1);
|
|
55
|
-
function l(e, t, n) {
|
|
56
|
-
return typeof e == "function" ? e(t, n) : e;
|
|
57
|
-
}
|
|
58
|
-
function u(...e) {
|
|
59
|
-
return (0, c.default)(e[0] ?? {}, e[1] ?? {}, { arrayMerge(e, t) {
|
|
60
|
-
return t;
|
|
61
|
-
} });
|
|
62
|
-
}
|
|
63
|
-
//#endregion
|
|
64
|
-
export { s as WidgetLoader, u as mergeWidgetConfig, l as resolveConfig };
|
|
65
|
-
|
|
66
|
-
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","names":["(state) => state.widgets[props.id]?.registeredTools","id","() => {\n dataRef.current = props.data\n configRef.current = props.config\n }","config","data","() => {\n widgetStoreActions.setWidget<WrapperState>(props.id, {\n type: props.type,\n isLoading: props.isLoading ?? false,\n isFetching: props.isFetching ?? false,\n error: props.error,\n })\n }","[props.id, props.type, props.isLoading, props.isFetching, props.error]","error","isFetching","isLoading","type","() => {\n if (props.config) {\n void widgetStoreActions.executeConfigPipeline(props.id, props.config)\n }\n }","[props.id, props.config]","() => {\n void widgetStoreActions.executeToolPipeline(props.id, props.data)\n }","[props.id, props.data]","() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true\n return\n }\n\n const rafId = requestAnimationFrame(() => {\n const { executeToolPipeline, executeConfigPipeline } = widgetStoreActions\n void executeToolPipeline(props.id, dataRef.current)\n if (configRef.current) {\n void executeConfigPipeline(props.id, configRef.current)\n }\n })\n\n return () => cancelAnimationFrame(rafId)\n }","[registeredTools, props.id]"],"sources":["../../src/widgets/loader/loader.tsx","../../src/widgets/loader/utils.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport type { WidgetLoaderProps } from './types'\nimport { useWidgetStore, widgetStoreActions } from '../stores/widget-store'\nimport type { WrapperState } from '../wrapper'\n\n/**\n * Foundation component for all widgets that manages state initialization, synchronization with the widget store, and data transformation pipeline execution.\n *\n * @remarks\n * The WidgetLoader is stateless -- it manages data flow but does not render any UI. Always wrap it with WidgetWrapper for consistent widget appearance.\n *\n * @example\n * ```tsx\n * <WidgetLoader\n * id=\"sales-chart\"\n * type=\"bar\"\n * data={data}\n * isLoading={false}\n * isFetching={false}\n * config={barConfig({ data })}\n * >\n * <WidgetWrapper id=\"sales-chart\" title=\"Sales\">\n * <Echart id=\"sales-chart\" />\n * </WidgetWrapper>\n * </WidgetLoader>\n * ```\n */\nexport function WidgetLoader<T extends object = Record<string, unknown>>(\n props: WidgetLoaderProps<T>,\n) {\n // Subscribe only to this widget's registeredTools via Zustand selector.\n // The selector returns a stable reference when other widgets change,\n // avoiding unnecessary re-evaluations of Effect 4.\n const registeredTools = useWidgetStore(\n (state) => state.widgets[props.id]?.registeredTools,\n )\n\n const dataRef = useRef(props.data)\n const configRef = useRef(props.config)\n const isMountedRef = useRef(false)\n\n useEffect(() => {\n dataRef.current = props.data\n configRef.current = props.config\n })\n\n // Effect 1: Metadata — type, loading, and error states in a single setWidget call.\n // Merged to reduce store updates from 2 to 1 per widget during initialization.\n useEffect(() => {\n widgetStoreActions.setWidget<WrapperState>(props.id, {\n type: props.type,\n isLoading: props.isLoading ?? false,\n isFetching: props.isFetching ?? false,\n error: props.error,\n })\n }, [props.id, props.type, props.isLoading, props.isFetching, props.error])\n\n // Effect 2: Config updates — run through config pipeline\n useEffect(() => {\n if (props.config) {\n void widgetStoreActions.executeConfigPipeline(props.id, props.config)\n }\n }, [props.id, props.config])\n\n // Effect 3: Execute tool pipeline when props.data changes\n useEffect(() => {\n void widgetStoreActions.executeToolPipeline(props.id, props.data)\n }, [props.id, props.data])\n\n // Effect 4: Re-execute pipelines when registered tools change.\n // Uses requestAnimationFrame to coalesce rapid successive registeredTools\n // changes (e.g., 6 action components each calling registerTool on mount)\n // into a single pipeline execution instead of 6 pairs.\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true\n return\n }\n\n const rafId = requestAnimationFrame(() => {\n const { executeToolPipeline, executeConfigPipeline } = widgetStoreActions\n void executeToolPipeline(props.id, dataRef.current)\n if (configRef.current) {\n void executeConfigPipeline(props.id, configRef.current)\n }\n })\n\n return () => cancelAnimationFrame(rafId)\n }, [registeredTools, props.id])\n\n return props.children\n}\n","import deepmerge from 'deepmerge'\n\n/**\n * Config can be either an object or a function that receives baseConfig and data\n * and returns a partial config to be merged with the base.\n */\nexport type ConfigOrFn<TConfig, TData = unknown> =\n Partial<TConfig> | ((baseConfig: TConfig, data: TData) => Partial<TConfig>)\n\n/**\n * Resolves a widget config that may be either a partial object or a function receiving the computed base config and data. If it is a function, calls it with `baseConfig` and `data`; otherwise returns the value as-is.\n *\n * @param config - The config object or function to resolve.\n * @param baseConfig - The computed base configuration.\n * @param data - The widget data.\n * @returns Resolved partial config, or undefined.\n *\n * @example\n * ```tsx\n * const resolved = resolveConfig(\n * (base, data) => ({ maxItems: base.maxItems + 5 }),\n * baseConfig,\n * widgetData,\n * )\n * ```\n */\nexport function resolveConfig<TConfig, TData>(\n config: ConfigOrFn<TConfig, TData> | undefined,\n baseConfig: TConfig,\n data: TData,\n): Partial<TConfig> | undefined {\n if (typeof config === 'function') {\n return config(baseConfig, data)\n }\n return config\n}\n\n/**\n * Deep-merges two partial widget config objects using `deepmerge`, with arrays replaced rather than concatenated.\n *\n * @param options - A tuple of two partial configs to merge (base and override).\n * @returns The merged config object.\n *\n * @example\n * ```tsx\n * const finalConfig = mergeWidgetConfig(baseConfig, resolvedConfig)\n * ```\n */\nexport function mergeWidgetConfig<T>(\n ...options: [Partial<T> | undefined, Partial<T> | undefined]\n): T {\n return deepmerge(options[0] ?? {}, options[1] ?? {}, {\n arrayMerge(_, source) {\n return source as T[keyof T][]\n },\n })\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","names":["{ id }: MarkdownUIProps","(w) => (w?.data as MarkdownWidgetData | undefined)?.content","<MarkdownUI>{content}</MarkdownUI>","{ children, overrides }: MarkdownComponentProps","{\n ...COMPONENTS,\n ...overrides,\n }","<ReactMarkdown\n components={{\n ...COMPONENTS,\n ...overrides,\n }}\n >\n {children}\n </ReactMarkdown>","<Skeleton width='80%' height={24} sx={{ mb: 1 }} />","<Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />","<Box aria-label='Markdown skeleton'>\n <Skeleton width='80%' height={24} sx={{ mb: 1 }} />\n <Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='85%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='75%' height={20} />\n </Box>"],"sources":["../../src/widgets/markdown/markdown.tsx","../../src/widgets/markdown/style.ts","../../src/widgets/markdown/markdown-ui.tsx","../../src/widgets/markdown/skeleton.tsx","../../src/widgets/markdown/config.ts"],"sourcesContent":["import type { MarkdownUIProps } from './types'\nimport type { MarkdownWidgetData } from './types'\nimport { MarkdownUI } from '.'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\n\n/**\n * Stateful markdown widget component that reads content from the widget store and renders it as formatted rich text.\n */\nexport function Markdown({ id }: MarkdownUIProps) {\n const content = useWidgetSelector(\n id,\n (w) => (w?.data as MarkdownWidgetData | undefined)?.content,\n )\n\n if (!content) {\n return null\n }\n\n return <MarkdownUI>{content}</MarkdownUI>\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles: Record<string, SxProps<Theme>> = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(2),\n },\n markdown: {\n overflow: 'hidden',\n typography: ({ typography }) => ({\n ...typography.body1,\n }),\n },\n li: {\n display: 'list-item',\n paddingTop: 0,\n paddingBottom: 0,\n },\n ul: {\n listStyleType: 'disc',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n ol: {\n listStyleType: 'decimal',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n}\n","import { Link, List, ListItem, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport { styles } from '../markdown/style'\nimport type { MarkdownComponentProps } from './types'\n\nconst COMPONENTS: Components = {\n h1: ({ children }) => (\n <Typography variant='h4' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h2: ({ children }) => (\n <Typography variant='h5' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h3: ({ children }) => (\n <Typography variant='h6' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n p: ({ children }) => (\n <Typography paragraph color='inherit'>\n {children}\n </Typography>\n ),\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link href={href} target={target} rel={rel}>\n {children}\n </Link>\n ),\n ul: ({ children }) => <List sx={styles.ul}>{children}</List>,\n ol: ({ children }) => (\n <List component='ol' sx={styles.ol}>\n {children}\n </List>\n ),\n li: ({ children }) => <ListItem sx={styles.li}>{children}</ListItem>,\n}\n\n/**\n * Presentational component that renders a Markdown string as MUI-styled HTML using react-markdown.\n *\n * @remarks\n * Maps Markdown elements (headings, paragraphs, links, lists) to MUI Typography and Link components.\n * Custom component overrides can be passed via the `overrides` prop.\n */\nexport function MarkdownUI({ children, overrides }: MarkdownComponentProps) {\n return (\n <ReactMarkdown\n components={{\n ...COMPONENTS,\n ...overrides,\n }}\n >\n {children}\n </ReactMarkdown>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\n\nexport function MarkdownSkeleton() {\n return (\n <Box aria-label='Markdown skeleton'>\n <Skeleton width='80%' height={24} sx={{ mb: 1 }} />\n <Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='85%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='75%' height={20} />\n </Box>\n )\n}\n","import { downloadToCSV, type DownloadItem } from '../actions'\nimport type { MarkdownWidgetConfig, MarkdownWidgetData } from './types'\n\n/**\n * Creates download configuration for markdown widgets, supporting CSV export of text content. Does not require `refUI` since it only exports text.\n *\n * @returns Array of download items for use with the Download action.\n */\nexport function markdownDownloadConfig(): DownloadItem<MarkdownWidgetData>[] {\n return [\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const content = data?.content ?? ''\n return downloadToCSV.modifier([['Content'], [content]])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for markdown content display widgets.\n *\n * @returns Default markdown widget config (empty object).\n */\nexport function markdownConfig(): MarkdownWidgetConfig {\n return {}\n}\n"],"mappings":"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"}
|
package/dist/widgets/no-data.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { t as e } from "../use-widget-selector-VSPhfhNm.js";
|
|
2
|
-
import { c as t } from "react/compiler-runtime";
|
|
3
|
-
import { Box as n, Typography as r } from "@mui/material";
|
|
4
|
-
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
-
//#region src/widgets/no-data/style.ts
|
|
6
|
-
var o = { root: {
|
|
7
|
-
display: "flex",
|
|
8
|
-
flexDirection: "column",
|
|
9
|
-
gap: 1,
|
|
10
|
-
paddingTop: 1,
|
|
11
|
-
paddingBottom: 2,
|
|
12
|
-
paddingX: 2,
|
|
13
|
-
width: "100%",
|
|
14
|
-
minHeight: "100%"
|
|
15
|
-
} };
|
|
16
|
-
//#endregion
|
|
17
|
-
//#region src/widgets/no-data/no-data.tsx
|
|
18
|
-
function s(s) {
|
|
19
|
-
let u = t(7), { id: d, children: f, title: p, description: m, isEmpty: h } = s, g = p === void 0 ? "No data available" : p, _ = m === void 0 ? "There are no results for the combination of filters applied to your data. Try tweaking your filters, or zoom and pan the map to adjust filters" : m, v = h === void 0 ? l : h, { isLoading: y, isFetching: b, sourceData: x } = e(d, c);
|
|
20
|
-
if (y || b) return f;
|
|
21
|
-
if (v(x)) {
|
|
22
|
-
let e;
|
|
23
|
-
u[0] === g ? e = u[1] : (e = /* @__PURE__ */ i(r, {
|
|
24
|
-
variant: "body2",
|
|
25
|
-
color: "text.primary",
|
|
26
|
-
children: g
|
|
27
|
-
}), u[0] = g, u[1] = e);
|
|
28
|
-
let t;
|
|
29
|
-
u[2] === _ ? t = u[3] : (t = /* @__PURE__ */ i(r, {
|
|
30
|
-
variant: "caption",
|
|
31
|
-
color: "text.secondary",
|
|
32
|
-
children: _
|
|
33
|
-
}), u[2] = _, u[3] = t);
|
|
34
|
-
let s;
|
|
35
|
-
return u[4] !== e || u[5] !== t ? (s = /* @__PURE__ */ a(n, {
|
|
36
|
-
sx: o.root,
|
|
37
|
-
children: [e, t]
|
|
38
|
-
}), u[4] = e, u[5] = t, u[6] = s) : s = u[6], s;
|
|
39
|
-
}
|
|
40
|
-
return f;
|
|
41
|
-
}
|
|
42
|
-
function c(e) {
|
|
43
|
-
return {
|
|
44
|
-
isLoading: e?.isLoading,
|
|
45
|
-
isFetching: e?.isFetching,
|
|
46
|
-
sourceData: e?.sourceData
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function l(e) {
|
|
50
|
-
return e == null ? !0 : Array.isArray(e) ? !!(e.length === 0 || e.every((e) => Array.isArray(e) && e.length === 0)) : typeof e == "object" && Object.keys(e).length === 0;
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { s as WidgetNoData };
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=no-data.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-data.js","names":["{\n id,\n children,\n title = 'No data available',\n description = 'There are no results for the combination of filters applied to your data. Try tweaking your filters, or zoom and pan the map to adjust filters',\n isEmpty = defaultIsEmpty,\n}: WidgetNoDataProps","title = 'No data available'","description = 'There are no results for the combination of filters applied to your data. Try tweaking your filters, or zoom and pan the map to adjust filters'","isEmpty = defaultIsEmpty","(w) => ({\n isLoading: w?.isLoading,\n isFetching: w?.isFetching,\n sourceData: w?.sourceData,\n })","<Typography variant='body2' color='text.primary'>\n {title}\n </Typography>","<Typography variant='caption' color='text.secondary'>\n {description}\n </Typography>","<Box sx={styles.root}>\n <Typography variant='body2' color='text.primary'>\n {title}\n </Typography>\n <Typography variant='caption' color='text.secondary'>\n {description}\n </Typography>\n </Box>"],"sources":["../../src/widgets/no-data/style.ts","../../src/widgets/no-data/no-data.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Styles for NoData component matching Figma design specifications\n * Design reference: node 5781-11028\n */\nexport const styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1, // 8px\n paddingTop: 1, // 8px\n paddingBottom: 2, // 16px\n paddingX: 2, // 16px\n width: '100%',\n minHeight: '100%',\n },\n}\n","import { Box, Typography } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport type { WidgetNoDataProps } from './types'\nimport { styles } from './style'\n\n/**\n * NoData wrapper component that displays empty state UI when widget has no data\n *\n * Integrates with widget store to check loading/fetching state and source data availability.\n * Uses `sourceData` (pre-pipeline data) instead of `data` (post-pipeline) to distinguish\n * \"API returned nothing\" from \"pipeline tools filtered everything out\".\n *\n * @example Basic usage\n * ```tsx\n * <NoData id=\"my-widget\">\n * <WidgetContent id=\"my-widget\" />\n * </NoData>\n * ```\n *\n * @example With SkeletonLoader\n * ```tsx\n * <SkeletonLoader id=\"my-widget\" Skeleton={MySkeleton}>\n * <NoData id=\"my-widget\">\n * <WidgetContent id=\"my-widget\" />\n * </NoData>\n * </SkeletonLoader>\n * ```\n *\n * @example With custom messages\n * ```tsx\n * <NoData\n * id=\"my-widget\"\n * title=\"No results found\"\n * description=\"Try adjusting your filters\"\n * >\n * <WidgetContent id=\"my-widget\" />\n * </NoData>\n * ```\n */\nexport function WidgetNoData({\n id,\n children,\n title = 'No data available',\n description = 'There are no results for the combination of filters applied to your data. Try tweaking your filters, or zoom and pan the map to adjust filters',\n isEmpty = defaultIsEmpty,\n}: WidgetNoDataProps) {\n // Single consolidated subscription instead of 3 separate ones.\n // Reads sourceData (pre-pipeline) to check emptiness, not data (post-pipeline).\n const { isLoading, isFetching, sourceData } = useWidgetSelector(id, (w) => ({\n isLoading: w?.isLoading,\n isFetching: w?.isFetching,\n sourceData: w?.sourceData,\n }))\n\n // If loading or fetching, show children\n // SkeletonLoader handles loading state, this allows proper composition\n if (isLoading || isFetching) {\n return children\n }\n\n // Check if data is empty\n if (isEmpty(sourceData)) {\n return (\n <Box sx={styles.root}>\n <Typography variant='body2' color='text.primary'>\n {title}\n </Typography>\n <Typography variant='caption' color='text.secondary'>\n {description}\n </Typography>\n </Box>\n )\n }\n\n // Data exists, render children\n return children\n}\n\n/**\n * Default function to determine if data is empty\n * Handles various data structures commonly used in widgets\n */\nfunction defaultIsEmpty(data: unknown): boolean {\n // Null or undefined\n if (data == null) {\n return true\n }\n\n // Arrays (most common case)\n if (Array.isArray(data)) {\n // Empty array\n if (data.length === 0) {\n return true\n }\n\n // Array of arrays (CategoryWidget pattern: [[],[]])\n // Check if all inner arrays are empty\n if (data.every((item) => Array.isArray(item) && item.length === 0)) {\n return true\n }\n\n return false\n }\n\n // Objects\n if (typeof data === 'object') {\n return Object.keys(data).length === 0\n }\n\n // Primitives (numbers, strings, booleans) are considered valid data\n return false\n}\n"],"mappings":";;;;;AAMA,IAAa,IAAyC,EACpD,MAAM;CACJ,SAAS;CACT,eAAe;CACf,KAAK;CACL,YAAY;CACZ,eAAe;CACf,UAAU;CACV,OAAO;CACP,WAAW;AACb,EACF;;;ACsBA,SAAgB,EAAA,GAMM;eANO,EAC3B,OACA,aACA,OAAA,GACA,aAAA,GACA,SAAA,MAL2BA,GAG3B,IAAA,MAAA,KAAA,IAAQ,sBAARC,GACA,IAAA,MAAA,KAAA,IAAc,mJAAdC,GACA,IAAA,MAAA,KAAA,IAAU,IAAVC,GAIM,EAAE,cAAW,eAAY,kBAAe,EAAkB,GAAIC,CAIlE;CAIF,IAAI,KAAa,GACf,OAAO;CAIT,IAAI,EAAQ,CAAU,GAAG;EAGnBC,IAAAA;EACG,AAAA,EAAA,OAAA,gBADH,IAAA,kBAAC,GAAD;GAAY,SAAQ;GAAQ,OAAM;GAC/B,UAAA;EACS,CAAA,GADT,EAAA,KAAA;EAEHC,IAAAA;EACG,AAAA,EAAA,OAAA,gBADH,IAAA,kBAAC,GAAD;GAAY,SAAQ;GAAU,OAAM;GACjC,UAAA;EACS,CAAA,GADT,EAAA,KAAA;EALLC,IAAAA;EADF,OAEIF,EAAAA,OAAAA,KAAAA,EAAAA,OAGAC,KAJF,IAAA,kBAAC,GAAD;GAAK,IAAI,EAAO;GAAhB,UAAA,CACED,GAGAC,CAGG;MANHD,EAAAA,KAAAA,GAGAC,EAAAA,KAAAA,yBAJFC;CASJ;CAGA,OAAO;AACT;AA5BsE,SAAA,EAAC,GAAA;CAAO,OAAA;EAC1E,WAAW,GAAG;EACd,YAAY,GAAG;EACf,YAAY,GAAG;CACjB;;AA8BF,SAAS,EAAe,GAAwB;CA4B9C,OA1BI,KAAQ,OACH,KAIL,MAAM,QAAQ,CAAI,IAQpB,GANI,EAAK,WAAW,KAMhB,EAAK,OAAO,MAAS,MAAM,QAAQ,CAAI,KAAK,EAAK,WAAW,CAAC,KAQ/D,OAAO,KAAS,YACX,OAAO,KAAK,CAAI,CAAC,CAAC,WAAW;AAKxC"}
|
package/dist/widgets/note.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { c as e } from "react/compiler-runtime";
|
|
2
|
-
import { useEffect as t, useEffectEvent as n, useRef as r, useState as i } from "react";
|
|
3
|
-
import { Box as a, Button as o, Link as s, Typography as c } from "@mui/material";
|
|
4
|
-
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
5
|
-
import d from "react-markdown";
|
|
6
|
-
//#region src/widgets/note/style.ts
|
|
7
|
-
var f = {
|
|
8
|
-
root: {
|
|
9
|
-
typography: "caption",
|
|
10
|
-
color: (e) => e.palette.text.secondary,
|
|
11
|
-
marginBlockStart: ({ spacing: e }) => e(1)
|
|
12
|
-
},
|
|
13
|
-
clamped: {
|
|
14
|
-
display: "-webkit-box",
|
|
15
|
-
WebkitLineClamp: 3,
|
|
16
|
-
WebkitBoxOrient: "vertical",
|
|
17
|
-
overflow: "hidden"
|
|
18
|
-
},
|
|
19
|
-
expanded: { display: "block" },
|
|
20
|
-
linkButton: {
|
|
21
|
-
padding: 0,
|
|
22
|
-
minWidth: "auto",
|
|
23
|
-
textTransform: "none",
|
|
24
|
-
typography: "caption",
|
|
25
|
-
fontWeight: 500,
|
|
26
|
-
textDecoration: "none",
|
|
27
|
-
"&:hover": { backgroundColor: "transparent" }
|
|
28
|
-
}
|
|
29
|
-
}, p = {
|
|
30
|
-
showMore: "Show More",
|
|
31
|
-
showLess: "Show Less"
|
|
32
|
-
}, m = (t) => {
|
|
33
|
-
let n = e(2), { children: r } = t, i;
|
|
34
|
-
return n[0] === r ? i = n[1] : (i = /* @__PURE__ */ l(c, {
|
|
35
|
-
paragraph: !0,
|
|
36
|
-
color: "inherit",
|
|
37
|
-
variant: "caption",
|
|
38
|
-
children: r
|
|
39
|
-
}), n[0] = r, n[1] = i), i;
|
|
40
|
-
}, h = {
|
|
41
|
-
h1: m,
|
|
42
|
-
h2: m,
|
|
43
|
-
h3: m,
|
|
44
|
-
p: m,
|
|
45
|
-
a: ({ children: e, href: t, target: n = "_blank", rel: r = "noopener noreferrer" }) => /* @__PURE__ */ l(s, {
|
|
46
|
-
href: t,
|
|
47
|
-
target: n,
|
|
48
|
-
rel: r,
|
|
49
|
-
color: "text.primary",
|
|
50
|
-
underline: "always",
|
|
51
|
-
children: e
|
|
52
|
-
}),
|
|
53
|
-
img: () => null,
|
|
54
|
-
ul: m,
|
|
55
|
-
ol: m,
|
|
56
|
-
li: m
|
|
57
|
-
};
|
|
58
|
-
function g(s) {
|
|
59
|
-
let c = e(27), { children: m, labels: g } = s, _ = g === void 0 ? p : g, [v, y] = i(!1), [b, x] = i(!1), S = r(null), C;
|
|
60
|
-
c[0] === Symbol.for("react.memo_cache_sentinel") ? (C = () => {
|
|
61
|
-
if (S.current) {
|
|
62
|
-
let e = S.current.scrollHeight > S.current.clientHeight;
|
|
63
|
-
x(e);
|
|
64
|
-
}
|
|
65
|
-
}, c[0] = C) : C = c[0];
|
|
66
|
-
let w = n(C), T;
|
|
67
|
-
c[1] === w ? T = c[2] : (T = () => {
|
|
68
|
-
w();
|
|
69
|
-
}, c[1] = w, c[2] = T);
|
|
70
|
-
let E;
|
|
71
|
-
c[3] === m ? E = c[4] : (E = [m], c[3] = m, c[4] = E), t(T, E);
|
|
72
|
-
let D;
|
|
73
|
-
c[5] === w ? D = c[6] : (D = () => {
|
|
74
|
-
let e = S.current;
|
|
75
|
-
if (!e) return;
|
|
76
|
-
let t = new ResizeObserver(() => {
|
|
77
|
-
w();
|
|
78
|
-
});
|
|
79
|
-
return t.observe(e), () => {
|
|
80
|
-
t.disconnect();
|
|
81
|
-
};
|
|
82
|
-
}, c[5] = w, c[6] = D);
|
|
83
|
-
let O;
|
|
84
|
-
if (c[7] === Symbol.for("react.memo_cache_sentinel") ? (O = [], c[7] = O) : O = c[7], t(D, O), !m) return null;
|
|
85
|
-
let k;
|
|
86
|
-
c[8] === v ? k = c[9] : (k = () => {
|
|
87
|
-
y(!v);
|
|
88
|
-
}, c[8] = v, c[9] = k);
|
|
89
|
-
let A = k, j;
|
|
90
|
-
c[10] === _ ? j = c[11] : (j = {
|
|
91
|
-
...p,
|
|
92
|
-
..._
|
|
93
|
-
}, c[10] = _, c[11] = j);
|
|
94
|
-
let M = j, N = v ? f.expanded : f.clamped, P;
|
|
95
|
-
c[12] === N ? P = c[13] : (P = {
|
|
96
|
-
...f.root,
|
|
97
|
-
...N
|
|
98
|
-
}, c[12] = N, c[13] = P);
|
|
99
|
-
let F;
|
|
100
|
-
c[14] === m ? F = c[15] : (F = /* @__PURE__ */ l(d, {
|
|
101
|
-
components: h,
|
|
102
|
-
children: m
|
|
103
|
-
}), c[14] = m, c[15] = F);
|
|
104
|
-
let I;
|
|
105
|
-
c[16] !== P || c[17] !== F ? (I = /* @__PURE__ */ l(a, {
|
|
106
|
-
ref: S,
|
|
107
|
-
sx: P,
|
|
108
|
-
children: F
|
|
109
|
-
}), c[16] = P, c[17] = F, c[18] = I) : I = c[18];
|
|
110
|
-
let L;
|
|
111
|
-
c[19] !== A || c[20] !== v || c[21] !== M || c[22] !== b ? (L = (b || v) && /* @__PURE__ */ l(o, {
|
|
112
|
-
onClick: A,
|
|
113
|
-
variant: "text",
|
|
114
|
-
color: "primary",
|
|
115
|
-
sx: f.linkButton,
|
|
116
|
-
"aria-expanded": v,
|
|
117
|
-
"aria-label": v ? M.showLess : M.showMore,
|
|
118
|
-
"aria-controls": "note-content",
|
|
119
|
-
children: v ? M.showLess : M.showMore
|
|
120
|
-
}), c[19] = A, c[20] = v, c[21] = M, c[22] = b, c[23] = L) : L = c[23];
|
|
121
|
-
let R;
|
|
122
|
-
return c[24] !== I || c[25] !== L ? (R = /* @__PURE__ */ u(a, { children: [I, L] }), c[24] = I, c[25] = L, c[26] = R) : R = c[26], R;
|
|
123
|
-
}
|
|
124
|
-
//#endregion
|
|
125
|
-
export { g as WidgetNote };
|
|
126
|
-
|
|
127
|
-
//# sourceMappingURL=note.js.map
|
package/dist/widgets/note.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"note.js","names":["{ children }: { children?: React.ReactNode }","<Typography paragraph color='inherit' variant='caption'>\n {children}\n </Typography>","{\n children,\n labels = DEFAULT_LABELS,\n}: WidgetNoteProps","labels = DEFAULT_LABELS","() => {\n if (contentRef.current) {\n // Check if content overflows 3 lines\n const isOverflowing =\n contentRef.current.scrollHeight > contentRef.current.clientHeight\n setShouldShowToggle(isOverflowing)\n }\n }","() => {\n checkOverflow()\n }","[children]","() => {\n const element = contentRef.current\n if (!element) return\n\n const resizeObserver = new ResizeObserver(() => {\n checkOverflow()\n })\n\n resizeObserver.observe(element)\n\n return () => {\n resizeObserver.disconnect()\n }\n }","[]","() => {\n setIsExpanded(!isExpanded)\n }","{ ...DEFAULT_LABELS, ...labels }","{\n ...styles.root,\n ...(isExpanded ? styles.expanded : styles.clamped),\n }","isExpanded ? styles.expanded : styles.clamped","<ReactMarkdown components={COMPONENTS}>{children}</ReactMarkdown>","<Box\n ref={contentRef}\n sx={{\n ...styles.root,\n ...(isExpanded ? styles.expanded : styles.clamped),\n }}\n >\n <ReactMarkdown components={COMPONENTS}>{children}</ReactMarkdown>\n </Box>","(shouldShowToggle || isExpanded) && (\n <Button\n onClick={handleToggle}\n variant='text'\n color='primary'\n sx={styles.linkButton}\n aria-expanded={isExpanded}\n aria-label={\n isExpanded ? mergedLabels.showLess : mergedLabels.showMore\n }\n aria-controls='note-content'\n >\n {isExpanded ? mergedLabels.showLess : mergedLabels.showMore}\n </Button>\n )","mergedLabels.showLess","<Box>\n <Box\n ref={contentRef}\n sx={{\n ...styles.root,\n ...(isExpanded ? styles.expanded : styles.clamped),\n }}\n >\n <ReactMarkdown components={COMPONENTS}>{children}</ReactMarkdown>\n </Box>\n {(shouldShowToggle || isExpanded) && (\n <Button\n onClick={handleToggle}\n variant='text'\n color='primary'\n sx={styles.linkButton}\n aria-expanded={isExpanded}\n aria-label={\n isExpanded ? mergedLabels.showLess : mergedLabels.showMore\n }\n aria-controls='note-content'\n >\n {isExpanded ? mergedLabels.showLess : mergedLabels.showMore}\n </Button>\n )}\n </Box>"],"sources":["../../src/widgets/note/style.ts","../../src/widgets/note/note.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n typography: 'caption',\n color: (theme: Theme) => theme.palette.text.secondary,\n marginBlockStart: ({ spacing }) => spacing(1),\n },\n clamped: {\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n },\n expanded: {\n display: 'block',\n },\n linkButton: {\n padding: 0,\n minWidth: 'auto',\n textTransform: 'none',\n typography: 'caption',\n fontWeight: 500,\n textDecoration: 'none',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useState, useEffect, useRef, useEffectEvent } from 'react'\nimport { Box, Button, Link, Typography } from '@mui/material'\nimport type { WidgetNoteProps } from './types'\nimport { styles } from './style'\nimport ReactMarkdown, { type Components } from 'react-markdown'\n\nconst DEFAULT_LABELS = {\n showMore: 'Show More',\n showLess: 'Show Less',\n} as const\n\nconst DEFAULT_P = ({ children }: { children?: React.ReactNode }) => (\n <Typography paragraph color='inherit' variant='caption'>\n {children}\n </Typography>\n)\n\nconst COMPONENTS: Components = {\n h1: DEFAULT_P,\n h2: DEFAULT_P,\n h3: DEFAULT_P,\n p: DEFAULT_P,\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link\n href={href}\n target={target}\n rel={rel}\n color='text.primary'\n underline='always'\n >\n {children}\n </Link>\n ),\n img: () => null,\n ul: DEFAULT_P,\n ol: DEFAULT_P,\n li: DEFAULT_P,\n}\n\n/**\n * Displays text content with markdown support and automatic show more/less functionality for long content. Automatically detects content exceeding 3 lines and shows an expand/collapse button.\n *\n * @example\n * ```tsx\n * <WidgetNote>\n * {\"**Important:** This data is from Q4 2024.\"}\n * </WidgetNote>\n * ```\n */\nexport function WidgetNote({\n children,\n labels = DEFAULT_LABELS,\n}: WidgetNoteProps) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [shouldShowToggle, setShouldShowToggle] = useState(false)\n const contentRef = useRef<HTMLDivElement>(null)\n\n const checkOverflow = useEffectEvent(() => {\n if (contentRef.current) {\n // Check if content overflows 3 lines\n const isOverflowing =\n contentRef.current.scrollHeight > contentRef.current.clientHeight\n setShouldShowToggle(isOverflowing)\n }\n })\n\n useEffect(() => {\n checkOverflow()\n }, [children])\n\n useEffect(() => {\n const element = contentRef.current\n if (!element) return\n\n const resizeObserver = new ResizeObserver(() => {\n checkOverflow()\n })\n\n resizeObserver.observe(element)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [])\n\n if (!children) {\n return null\n }\n\n const handleToggle = () => {\n setIsExpanded(!isExpanded)\n }\n\n const mergedLabels = { ...DEFAULT_LABELS, ...labels }\n\n return (\n <Box>\n <Box\n ref={contentRef}\n sx={{\n ...styles.root,\n ...(isExpanded ? styles.expanded : styles.clamped),\n }}\n >\n <ReactMarkdown components={COMPONENTS}>{children}</ReactMarkdown>\n </Box>\n {(shouldShowToggle || isExpanded) && (\n <Button\n onClick={handleToggle}\n variant='text'\n color='primary'\n sx={styles.linkButton}\n aria-expanded={isExpanded}\n aria-label={\n isExpanded ? mergedLabels.showLess : mergedLabels.showMore\n }\n aria-controls='note-content'\n >\n {isExpanded ? mergedLabels.showLess : mergedLabels.showMore}\n </Button>\n )}\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","names":["{ id, index }: RangeItemProps","(w) => {\n const rw = w as RangeWidgetState | undefined\n return {\n item: rw?.data[index],\n onChange: rw?.onChange,\n formatter: rw?.formatter,\n }\n }","item ? (item.value ?? [item.min, item.max]) : [0, 0]","useMemo(\n () => (item ? (item.value ?? [item.min, item.max]) : [0, 0]),\n [item],\n )","(_: Event, newValue: number | number[]) => {\n if (Array.isArray(newValue)) {\n const [min, max] = newValue\n const data =\n widgetStoreActions.getWidget<RangeWidgetState>(id)?.data ?? []\n\n data[index] = {\n ...item,\n value: newValue,\n }\n\n widgetStoreActions.setWidget(id, {\n data,\n })\n\n onChange?.([min!, max!], index)\n }\n }","(e: FocusEvent<HTMLInputElement>) => {\n setIsEditing(e.target.name as EditingState)\n }","(e: FocusEvent<HTMLInputElement>) => {\n setIsEditing('')\n handleInputChange(e)\n }","0","1","max","min","data","newValue","e","(event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleInputBlur(event as unknown as FocusEvent<HTMLInputElement>)\n event.currentTarget.blur()\n }\n }","event","item.color && {\n color: item.color,\n }","color","{\n ...styles.slider,\n ...(item.color && {\n color: item.color,\n }),\n }","<Box sx={styles.sliderContainer}>\n <Slider\n value={currentValue}\n onChange={handleSliderChange}\n valueLabelDisplay='auto'\n valueLabelFormat={formatter}\n min={item.min}\n max={item.max}\n step={item.step}\n marks={item.marks}\n disabled={item.disabled}\n sx={{\n ...styles.slider,\n ...(item.color && {\n color: item.color,\n }),\n }}\n />\n </Box>","disabled","marks","step","{\n 'aria-label': 'Minimum value',\n }","<Input\n key={`min-${currentValue[0]}`}\n isEditing={isEditing}\n name='min'\n value={currentValue[0] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Minimum value',\n }}\n />","`min-${currentValue[0]}`","currentValue[0] ?? 0","{\n 'aria-label': 'Maximum value',\n }","<Input\n key={`max-${currentValue[1]}`}\n isEditing={isEditing}\n name='max'\n value={currentValue[1] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Maximum value',\n }}\n />","`max-${currentValue[1]}`","currentValue[1] ?? 0","<Box sx={styles.inputsRow}>\n <Input\n key={`min-${currentValue[0]}`}\n isEditing={isEditing}\n name='min'\n value={currentValue[0] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Minimum value',\n }}\n />\n <Input\n key={`max-${currentValue[1]}`}\n isEditing={isEditing}\n name='max'\n value={currentValue[1] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Maximum value',\n }}\n />\n </Box>","<Box sx={styles.rangeItem}>\n <Box sx={styles.sliderContainer}>\n <Slider\n value={currentValue}\n onChange={handleSliderChange}\n valueLabelDisplay='auto'\n valueLabelFormat={formatter}\n min={item.min}\n max={item.max}\n step={item.step}\n marks={item.marks}\n disabled={item.disabled}\n sx={{\n ...styles.slider,\n ...(item.color && {\n color: item.color,\n }),\n }}\n />\n </Box>\n\n <Box sx={styles.inputsRow}>\n <Input\n key={`min-${currentValue[0]}`}\n isEditing={isEditing}\n name='min'\n value={currentValue[0] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Minimum value',\n }}\n />\n <Input\n key={`max-${currentValue[1]}`}\n isEditing={isEditing}\n name='max'\n value={currentValue[1] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Maximum value',\n }}\n />\n </Box>\n </Box>","{\n isEditing,\n name,\n disabled,\n value,\n formatter,\n onFocus: onFocus,\n onBlur: onBlur,\n onKeyDown: onKeyDown,\n inputProps,\n}: {\n isEditing: EditingState\n name: 'min' | 'max'\n disabled?: boolean\n value: number\n formatter: (value: number) => string\n onFocus: (e: FocusEvent<HTMLInputElement>) => void\n onBlur: (e: FocusEvent<HTMLInputElement>) => void\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => void\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>\n}","formatter(Number(currentValue))","Number(currentValue)","useMemo(\n () => formatter(Number(currentValue)),\n [currentValue, formatter],\n )","(e) => {\n setCurrentValue(e.target.value)\n }","<TextField\n name={name}\n value={isEditing === name ? currentValue : displayMinValue}\n onChange={(e) => {\n setCurrentValue(e.target.value)\n }}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n disabled={disabled}\n size='small'\n sx={styles.input}\n inputProps={inputProps}\n />","isEditing === name ? currentValue : displayMinValue","({ index }) => <RangeItem id={props.id} index={index} />","id","{ index }","<Row id={props.id}>\n {({ index }) => <RangeItem id={props.id} index={index} />}\n </Row>","<Skeleton width='100%' height={32} />","<Box sx={styles.rangeItem} aria-label='Range skeleton'>\n <Skeleton width='100%' height={32} />\n <Box sx={styles.inputsRow}>\n <Skeleton width='100%' height={40} />\n <Skeleton width='100%' height={40} />\n </Box>\n </Box>"],"sources":["../../src/widgets/range/style.ts","../../src/widgets/range/components/range-item.tsx","../../src/widgets/range/range-ui.tsx","../../src/widgets/range/skeleton.tsx","../../src/widgets/range/config.ts","../../src/widgets/range/serializer.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(2),\n },\n rangeItem: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1.5),\n },\n sliderContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n px: (theme: Theme) => theme.spacing(1),\n },\n inputsRow: {\n display: 'flex',\n gap: (theme: Theme) => theme.spacing(2),\n alignItems: 'center',\n },\n input: {\n flex: 1,\n '& .MuiInputBase-input': {\n textAlign: 'center',\n },\n },\n slider: {\n width: '100%',\n '&.Mui-disabled': {\n color: (theme: Theme) => theme.palette.text.disabled,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Slider, TextField } from '@mui/material'\nimport { useState, useMemo, type FocusEvent, type KeyboardEvent } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { RangeItemProps, RangeWidgetState } from '../types'\nimport { styles } from '../style'\n\nimport { defaultFormatter } from '../../utils/formatter'\n\ntype EditingState = '' | 'min' | 'max'\n\n/**\n * Renders a single range slider with editable min/max text inputs, reading its configuration from the widget store.\n */\nexport function RangeItem({ id, index }: RangeItemProps) {\n const {\n item,\n onChange,\n formatter: _formatter,\n } = useWidgetSelector(id, (w) => {\n const rw = w as RangeWidgetState | undefined\n return {\n item: rw?.data[index],\n onChange: rw?.onChange,\n formatter: rw?.formatter,\n }\n })\n const formatter = _formatter ?? defaultFormatter\n\n const currentValue = useMemo(\n () => (item ? (item.value ?? [item.min, item.max]) : [0, 0]),\n [item],\n )\n\n // Local state for input values - track if user is editing\n const [isEditing, setIsEditing] = useState<EditingState>('')\n\n if (!item) return null\n\n const handleSliderChange = (_: Event, newValue: number | number[]) => {\n if (Array.isArray(newValue)) {\n const [min, max] = newValue\n const data =\n widgetStoreActions.getWidget<RangeWidgetState>(id)?.data ?? []\n\n data[index] = {\n ...item,\n value: newValue,\n }\n\n widgetStoreActions.setWidget(id, {\n data,\n })\n\n onChange?.([min!, max!], index)\n }\n }\n\n const handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n setIsEditing(e.target.name as EditingState)\n }\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = event.target\n\n let newValue: [number, number]\n if (name === 'min') {\n newValue = [\n Math.min(\n Math.max(item.min, parseFloat(value) || item.min),\n currentValue[1]!,\n ),\n currentValue[1] ?? 0,\n ]\n } else {\n newValue = [\n currentValue[0] ?? 0,\n Math.max(\n Math.min(item.max, parseFloat(value) || item.max),\n currentValue[0]!,\n ),\n ]\n }\n\n const data = widgetStoreActions.getWidget<RangeWidgetState>(id)?.data ?? []\n\n widgetStoreActions.setWidget(id, {\n data: data.map((d: RangeWidgetState['data'][number], i: number) =>\n i === index\n ? {\n ...d,\n value: newValue,\n }\n : d,\n ),\n })\n\n onChange?.([newValue[0], newValue[1]], index)\n }\n\n const handleInputBlur = (e: FocusEvent<HTMLInputElement>) => {\n setIsEditing('')\n handleInputChange(e)\n }\n\n const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n handleInputBlur(event as unknown as FocusEvent<HTMLInputElement>)\n event.currentTarget.blur()\n }\n }\n\n return (\n <Box sx={styles.rangeItem}>\n <Box sx={styles.sliderContainer}>\n <Slider\n value={currentValue}\n onChange={handleSliderChange}\n valueLabelDisplay='auto'\n valueLabelFormat={formatter}\n min={item.min}\n max={item.max}\n step={item.step}\n marks={item.marks}\n disabled={item.disabled}\n sx={{\n ...styles.slider,\n ...(item.color && {\n color: item.color,\n }),\n }}\n />\n </Box>\n\n <Box sx={styles.inputsRow}>\n <Input\n key={`min-${currentValue[0]}`}\n isEditing={isEditing}\n name='min'\n value={currentValue[0] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Minimum value',\n }}\n />\n <Input\n key={`max-${currentValue[1]}`}\n isEditing={isEditing}\n name='max'\n value={currentValue[1] ?? 0}\n formatter={formatter}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n disabled={item.disabled}\n inputProps={{\n 'aria-label': 'Maximum value',\n }}\n />\n </Box>\n </Box>\n )\n}\n\nfunction Input({\n isEditing,\n name,\n disabled,\n value,\n formatter,\n onFocus: onFocus,\n onBlur: onBlur,\n onKeyDown: onKeyDown,\n inputProps,\n}: {\n isEditing: EditingState\n name: 'min' | 'max'\n disabled?: boolean\n value: number\n formatter: (value: number) => string\n onFocus: (e: FocusEvent<HTMLInputElement>) => void\n onBlur: (e: FocusEvent<HTMLInputElement>) => void\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => void\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>\n}) {\n const [currentValue, setCurrentValue] = useState<string>(String(value))\n\n // Compute display values when not editing\n const displayMinValue = useMemo(\n () => formatter(Number(currentValue)),\n [currentValue, formatter],\n )\n\n return (\n <TextField\n name={name}\n value={isEditing === name ? currentValue : displayMinValue}\n onChange={(e) => {\n setCurrentValue(e.target.value)\n }}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n disabled={disabled}\n size='small'\n sx={styles.input}\n inputProps={inputProps}\n />\n )\n}\n","import type { RangeUIProps } from './types'\nimport { Row } from '../formula/components/row'\nimport { RangeItem } from './components/range-item'\n\n/**\n * Renders a range widget with one or more interactive dual-slider controls for selecting value ranges.\n */\nexport function RangeUI(props: RangeUIProps) {\n return (\n <Row id={props.id}>\n {({ index }) => <RangeItem id={props.id} index={index} />}\n </Row>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function RangeSkeleton() {\n return (\n <Box sx={styles.rangeItem} aria-label='Range skeleton'>\n <Skeleton width='100%' height={32} />\n <Box sx={styles.inputsRow}>\n <Skeleton width='100%' height={40} />\n <Skeleton width='100%' height={40} />\n </Box>\n </Box>\n )\n}\n","import type { RangeWidgetConfig } from './types'\n\n/**\n * Returns the default configuration for range (value range with labels) widgets.\n *\n * @returns Default range widget config.\n */\nexport function rangeConfig(): RangeWidgetConfig {\n return {}\n}\n","import type { RangeDataItem } from './types'\n\n/**\n * Sanitizes RangeDataItem by converting ReactNode note values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The RangeDataItem to sanitize\n * @returns A new RangeDataItem with ReactNode note values converted to undefined\n */\nexport function sanitizeRangeDataItem(item: RangeDataItem): RangeDataItem {\n return {\n ...item,\n note: typeof item.note === 'string' ? item.note : undefined,\n }\n}\n\n/**\n * Sanitizes an array of RangeDataItems by converting ReactNode note values to undefined.\n *\n * @param items - Array of RangeDataItems to sanitize\n * @returns A new array with sanitized RangeDataItems\n */\nexport function sanitizeRangeDataItems(\n items: RangeDataItem[] | undefined,\n): RangeDataItem[] | undefined {\n return items?.map(sanitizeRangeDataItem)\n}\n"],"mappings":"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"}
|