@carto/ps-react-ui 4.7.1 → 4.8.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/category-DwaeYjpX.js +656 -0
- package/dist/category-DwaeYjpX.js.map +1 -0
- package/dist/change-column-Cidl_M-4.js +1110 -0
- package/dist/change-column-Cidl_M-4.js.map +1 -0
- package/dist/data-zoom-layout-BH0LPwSy.js +28 -0
- package/dist/data-zoom-layout-BH0LPwSy.js.map +1 -0
- package/dist/echart-CU0KmClP.js +176 -0
- package/dist/echart-CU0KmClP.js.map +1 -0
- package/dist/exports-Cx-f6m6U.js +63 -0
- package/dist/exports-Cx-f6m6U.js.map +1 -0
- package/dist/formula-DuC0NQLH.js +79 -0
- package/dist/formula-DuC0NQLH.js.map +1 -0
- package/dist/markdown-BD1jcknS.js +8326 -0
- package/dist/markdown-BD1jcknS.js.map +1 -0
- package/dist/merge-options-DCkkHZIf.js +34 -0
- package/dist/merge-options-DCkkHZIf.js.map +1 -0
- package/dist/{styles-BYTyKQFP.js → option-builders-F-c9ELi1.js} +25 -45
- package/dist/option-builders-F-c9ELi1.js.map +1 -0
- package/dist/png-item-CS4z1iSH.js +45 -0
- package/dist/png-item-CS4z1iSH.js.map +1 -0
- package/dist/range-DsqTjSpg.js +186 -0
- package/dist/range-DsqTjSpg.js.map +1 -0
- package/dist/spread-CTuIXZSM.js +67 -0
- package/dist/spread-CTuIXZSM.js.map +1 -0
- package/dist/style-DVnT6HC1.js +131 -0
- package/dist/style-DVnT6HC1.js.map +1 -0
- package/dist/styles-cohnxh9F.js +23 -0
- package/dist/styles-cohnxh9F.js.map +1 -0
- package/dist/table-HIpXuq4G.js +390 -0
- package/dist/table-HIpXuq4G.js.map +1 -0
- package/dist/transforms-Cdx4fkU5.js +106 -0
- package/dist/transforms-Cdx4fkU5.js.map +1 -0
- package/dist/types/widgets/echart/utils.test.d.ts +1 -0
- package/dist/types/widgets/formula/config.test.d.ts +1 -0
- package/dist/types/widgets/stores/widget-store-branches.test.d.ts +1 -0
- package/dist/types/widgets/table/config.test.d.ts +1 -0
- package/dist/types/widgets-v2/actions/brush-toggle/brush-toggle.d.ts +56 -0
- package/dist/types/widgets-v2/actions/brush-toggle/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/brush-toggle/labels.d.ts +5 -0
- package/dist/types/widgets-v2/actions/brush-toggle/style.d.ts +12 -0
- package/dist/types/widgets-v2/actions/brush-toggle/transforms.d.ts +11 -0
- package/dist/types/widgets-v2/actions/brush-toggle/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/actions/change-column/change-column-icon.d.ts +2 -0
- package/dist/types/widgets-v2/actions/change-column/change-column.d.ts +29 -0
- package/dist/types/widgets-v2/actions/change-column/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/change-column/labels.d.ts +5 -0
- package/dist/types/widgets-v2/actions/change-column/sortable-column-item.d.ts +14 -0
- package/dist/types/widgets-v2/actions/change-column/style.d.ts +33 -0
- package/dist/types/widgets-v2/actions/change-column/types.d.ts +10 -0
- package/dist/types/widgets-v2/actions/download/download.d.ts +18 -0
- package/dist/types/widgets-v2/actions/download/exports.d.ts +37 -0
- package/dist/types/widgets-v2/actions/download/icons.d.ts +12 -0
- package/dist/types/widgets-v2/actions/download/index.d.ts +6 -0
- package/dist/types/widgets-v2/actions/download/labels.d.ts +11 -0
- package/dist/types/widgets-v2/actions/download/png-item.d.ts +24 -0
- package/dist/types/widgets-v2/actions/download/style.d.ts +1 -0
- package/dist/types/widgets-v2/actions/download/types.d.ts +35 -0
- package/dist/types/widgets-v2/actions/fullscreen/fullscreen.d.ts +59 -0
- package/dist/types/widgets-v2/actions/fullscreen/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/fullscreen/labels.d.ts +5 -0
- package/dist/types/widgets-v2/actions/fullscreen/style.d.ts +48 -0
- package/dist/types/widgets-v2/actions/fullscreen/types.d.ts +14 -0
- package/dist/types/widgets-v2/actions/index.d.ts +9 -0
- package/dist/types/widgets-v2/actions/lock-selection/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/lock-selection/labels.d.ts +6 -0
- package/dist/types/widgets-v2/actions/lock-selection/lock-selection.d.ts +36 -0
- package/dist/types/widgets-v2/actions/lock-selection/style.d.ts +12 -0
- package/dist/types/widgets-v2/actions/lock-selection/transforms.d.ts +6 -0
- package/dist/types/widgets-v2/actions/relative-data/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/relative-data/labels.d.ts +5 -0
- package/dist/types/widgets-v2/actions/relative-data/relative-data.d.ts +39 -0
- package/dist/types/widgets-v2/actions/relative-data/style.d.ts +12 -0
- package/dist/types/widgets-v2/actions/relative-data/transforms.d.ts +30 -0
- package/dist/types/widgets-v2/actions/relative-data/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/actions/searcher/filter.d.ts +6 -0
- package/dist/types/widgets-v2/actions/searcher/index.d.ts +4 -0
- package/dist/types/widgets-v2/actions/searcher/labels.d.ts +7 -0
- package/dist/types/widgets-v2/actions/searcher/searcher-toggle.d.ts +23 -0
- package/dist/types/widgets-v2/actions/searcher/searcher.d.ts +11 -0
- package/dist/types/widgets-v2/actions/searcher/style.d.ts +16 -0
- package/dist/types/widgets-v2/actions/stack-toggle/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/stack-toggle/labels.d.ts +5 -0
- package/dist/types/widgets-v2/actions/stack-toggle/stack-toggle.d.ts +10 -0
- package/dist/types/widgets-v2/actions/stack-toggle/style.d.ts +12 -0
- package/dist/types/widgets-v2/actions/stack-toggle/transforms.d.ts +13 -0
- package/dist/types/widgets-v2/actions/stack-toggle/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/actions/zoom-toggle/index.d.ts +3 -0
- package/dist/types/widgets-v2/actions/zoom-toggle/labels.d.ts +5 -0
- package/dist/types/widgets-v2/actions/zoom-toggle/style.d.ts +12 -0
- package/dist/types/widgets-v2/actions/zoom-toggle/transforms.d.ts +51 -0
- package/dist/types/widgets-v2/actions/zoom-toggle/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/actions/zoom-toggle/zoom-toggle.d.ts +35 -0
- package/dist/types/widgets-v2/bar/download.d.ts +24 -0
- package/dist/types/widgets-v2/bar/index.d.ts +4 -0
- package/dist/types/widgets-v2/bar/options.d.ts +43 -0
- package/dist/types/widgets-v2/bar/options.test.d.ts +1 -0
- package/dist/types/widgets-v2/bar/skeleton.d.ts +6 -0
- package/dist/types/widgets-v2/bar/types.d.ts +41 -0
- package/dist/types/widgets-v2/category/category-ui.d.ts +81 -0
- package/dist/types/widgets-v2/category/category.d.ts +48 -0
- package/dist/types/widgets-v2/category/components/category-bar-stacked.d.ts +28 -0
- package/dist/types/widgets-v2/category/components/category-bar.d.ts +23 -0
- package/dist/types/widgets-v2/category/components/category-legend.d.ts +18 -0
- package/dist/types/widgets-v2/category/components/category-row-multi.d.ts +31 -0
- package/dist/types/widgets-v2/category/components/category-row-other.d.ts +13 -0
- package/dist/types/widgets-v2/category/components/category-row-single.d.ts +28 -0
- package/dist/types/widgets-v2/category/components/category-row-stacked.d.ts +38 -0
- package/dist/types/widgets-v2/category/download.d.ts +16 -0
- package/dist/types/widgets-v2/category/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/category/index.d.ts +10 -0
- package/dist/types/widgets-v2/category/skeleton.d.ts +11 -0
- package/dist/types/widgets-v2/category/style.d.ts +166 -0
- package/dist/types/widgets-v2/category/types.d.ts +49 -0
- package/dist/types/widgets-v2/echart/echart-ui.d.ts +44 -0
- package/dist/types/widgets-v2/echart/echart.d.ts +75 -0
- package/dist/types/widgets-v2/echart/index.d.ts +4 -0
- package/dist/types/widgets-v2/echart/shared-resize-observer.d.ts +5 -0
- package/dist/types/widgets-v2/echart/shared-resize-observer.test.d.ts +1 -0
- package/dist/types/widgets-v2/echart/style.d.ts +6 -0
- package/dist/types/widgets-v2/echart/use-chart-selection.d.ts +51 -0
- package/dist/types/widgets-v2/formula/delta.d.ts +22 -0
- package/dist/types/widgets-v2/formula/download.d.ts +20 -0
- package/dist/types/widgets-v2/formula/formula-ui.d.ts +20 -0
- package/dist/types/widgets-v2/formula/formula.d.ts +8 -0
- package/dist/types/widgets-v2/formula/index.d.ts +11 -0
- package/dist/types/widgets-v2/formula/note.d.ts +11 -0
- package/dist/types/widgets-v2/formula/prefix.d.ts +12 -0
- package/dist/types/widgets-v2/formula/series.d.ts +16 -0
- package/dist/types/widgets-v2/formula/skeleton.d.ts +4 -0
- package/dist/types/widgets-v2/formula/style.d.ts +29 -0
- package/dist/types/widgets-v2/formula/suffix.d.ts +12 -0
- package/dist/types/widgets-v2/formula/types.d.ts +40 -0
- package/dist/types/widgets-v2/formula/value.d.ts +14 -0
- package/dist/types/widgets-v2/histogram/download.d.ts +17 -0
- package/dist/types/widgets-v2/histogram/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/histogram/index.d.ts +5 -0
- package/dist/types/widgets-v2/histogram/options.d.ts +42 -0
- package/dist/types/widgets-v2/histogram/options.test.d.ts +1 -0
- package/dist/types/widgets-v2/histogram/skeleton.d.ts +9 -0
- package/dist/types/widgets-v2/histogram/transforms.d.ts +17 -0
- package/dist/types/widgets-v2/histogram/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/histogram/types.d.ts +47 -0
- package/dist/types/widgets-v2/index.d.ts +107 -0
- package/dist/types/widgets-v2/markdown/download.d.ts +16 -0
- package/dist/types/widgets-v2/markdown/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/markdown/index.d.ts +6 -0
- package/dist/types/widgets-v2/markdown/markdown-content.d.ts +34 -0
- package/dist/types/widgets-v2/markdown/markdown-ui.d.ts +12 -0
- package/dist/types/widgets-v2/markdown/markdown.d.ts +6 -0
- package/dist/types/widgets-v2/markdown/skeleton.d.ts +4 -0
- package/dist/types/widgets-v2/markdown/style.d.ts +61 -0
- package/dist/types/widgets-v2/markdown/types.d.ts +4 -0
- package/dist/types/widgets-v2/note/labels.d.ts +5 -0
- package/dist/types/widgets-v2/note/style.d.ts +26 -0
- package/dist/types/widgets-v2/note/widget-note.d.ts +46 -0
- package/dist/types/widgets-v2/pie/download.d.ts +17 -0
- package/dist/types/widgets-v2/pie/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/pie/index.d.ts +4 -0
- package/dist/types/widgets-v2/pie/options.d.ts +35 -0
- package/dist/types/widgets-v2/pie/options.test.d.ts +1 -0
- package/dist/types/widgets-v2/pie/skeleton.d.ts +4 -0
- package/dist/types/widgets-v2/pie/types.d.ts +50 -0
- package/dist/types/widgets-v2/provider/widget-provider.d.ts +32 -0
- package/dist/types/widgets-v2/range/index.d.ts +4 -0
- package/dist/types/widgets-v2/range/range-ui.d.ts +19 -0
- package/dist/types/widgets-v2/range/range.d.ts +19 -0
- package/dist/types/widgets-v2/range/skeleton.d.ts +9 -0
- package/dist/types/widgets-v2/range/style.d.ts +40 -0
- package/dist/types/widgets-v2/range/types.d.ts +37 -0
- package/dist/types/widgets-v2/scatterplot/download.d.ts +16 -0
- package/dist/types/widgets-v2/scatterplot/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/scatterplot/index.d.ts +5 -0
- package/dist/types/widgets-v2/scatterplot/options.d.ts +42 -0
- package/dist/types/widgets-v2/scatterplot/options.test.d.ts +1 -0
- package/dist/types/widgets-v2/scatterplot/skeleton.d.ts +12 -0
- package/dist/types/widgets-v2/scatterplot/transforms.d.ts +17 -0
- package/dist/types/widgets-v2/scatterplot/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/scatterplot/types.d.ts +50 -0
- package/dist/types/widgets-v2/selection-summary/labels.d.ts +6 -0
- package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +22 -0
- package/dist/types/widgets-v2/selection-summary/style.d.ts +23 -0
- package/dist/types/widgets-v2/spread/download.d.ts +15 -0
- package/dist/types/widgets-v2/spread/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/spread/index.d.ts +6 -0
- package/dist/types/widgets-v2/spread/separator.d.ts +7 -0
- package/dist/types/widgets-v2/spread/skeleton.d.ts +9 -0
- package/dist/types/widgets-v2/spread/spread-ui.d.ts +18 -0
- package/dist/types/widgets-v2/spread/spread.d.ts +5 -0
- package/dist/types/widgets-v2/spread/types.d.ts +25 -0
- package/dist/types/widgets-v2/state/labels.d.ts +7 -0
- package/dist/types/widgets-v2/state/labels.test.d.ts +1 -0
- package/dist/types/widgets-v2/state/style.d.ts +19 -0
- package/dist/types/widgets-v2/state/widget-state.d.ts +19 -0
- package/dist/types/widgets-v2/stores/index.d.ts +8 -0
- package/dist/types/widgets-v2/stores/pipeline-middleware.d.ts +5 -0
- package/dist/types/widgets-v2/stores/pipeline-middleware.test.d.ts +1 -0
- package/dist/types/widgets-v2/stores/transforms.d.ts +4 -0
- package/dist/types/widgets-v2/stores/transforms.test.d.ts +1 -0
- package/dist/types/widgets-v2/stores/types.d.ts +55 -0
- package/dist/types/widgets-v2/stores/use-echart-instance.d.ts +15 -0
- package/dist/types/widgets-v2/stores/use-transform-enabled.d.ts +17 -0
- package/dist/types/widgets-v2/stores/use-transform.d.ts +12 -0
- package/dist/types/widgets-v2/stores/widget-context.d.ts +2 -0
- package/dist/types/widgets-v2/stores/widget-store-registry.d.ts +74 -0
- package/dist/types/widgets-v2/stores/widget-store-registry.test.d.ts +1 -0
- package/dist/types/widgets-v2/subheader/style.d.ts +10 -0
- package/dist/types/widgets-v2/subheader/subheader.d.ts +11 -0
- package/dist/types/widgets-v2/table/download.d.ts +18 -0
- package/dist/types/widgets-v2/table/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/table/helpers.d.ts +32 -0
- package/dist/types/widgets-v2/table/helpers.test.d.ts +1 -0
- package/dist/types/widgets-v2/table/index.d.ts +7 -0
- package/dist/types/widgets-v2/table/labels.d.ts +22 -0
- package/dist/types/widgets-v2/table/skeleton.d.ts +22 -0
- package/dist/types/widgets-v2/table/style.d.ts +44 -0
- package/dist/types/widgets-v2/table/table-ui.d.ts +38 -0
- package/dist/types/widgets-v2/table/table.d.ts +50 -0
- package/dist/types/widgets-v2/table/types.d.ts +37 -0
- package/dist/types/widgets-v2/test-utils.d.ts +52 -0
- package/dist/types/widgets-v2/timeseries/download.d.ts +17 -0
- package/dist/types/widgets-v2/timeseries/download.test.d.ts +1 -0
- package/dist/types/widgets-v2/timeseries/index.d.ts +4 -0
- package/dist/types/widgets-v2/timeseries/options.d.ts +39 -0
- package/dist/types/widgets-v2/timeseries/options.test.d.ts +1 -0
- package/dist/types/widgets-v2/timeseries/skeleton.d.ts +8 -0
- package/dist/types/widgets-v2/timeseries/types.d.ts +56 -0
- package/dist/types/widgets-v2/toolbox/labels.d.ts +5 -0
- package/dist/types/widgets-v2/toolbox/style.d.ts +30 -0
- package/dist/types/widgets-v2/toolbox/toolbox.d.ts +49 -0
- package/dist/types/widgets-v2/utils/data-zoom-layout.d.ts +11 -0
- package/dist/types/widgets-v2/utils/index.d.ts +2 -0
- package/dist/types/widgets-v2/utils/merge-options.d.ts +12 -0
- package/dist/types/widgets-v2/utils/merge-options.test.d.ts +1 -0
- package/dist/types/widgets-v2/wrapper/index.d.ts +4 -0
- package/dist/types/widgets-v2/wrapper/labels.d.ts +6 -0
- package/dist/types/widgets-v2/wrapper/style.d.ts +111 -0
- package/dist/types/widgets-v2/wrapper/widget-actions.d.ts +22 -0
- package/dist/types/widgets-v2/wrapper/widget-content.d.ts +12 -0
- package/dist/types/widgets-v2/wrapper/widget-wrapper.d.ts +51 -0
- package/dist/use-transform-DXPN3nY7.js +110 -0
- package/dist/use-transform-DXPN3nY7.js.map +1 -0
- package/dist/widget-context-DTGO0Yta.js +13 -0
- package/dist/widget-context-DTGO0Yta.js.map +1 -0
- package/dist/widget-store-registry-_W4Z4xp-.js +178 -0
- package/dist/widget-store-registry-_W4Z4xp-.js.map +1 -0
- package/dist/widgets/bar.js +14 -13
- package/dist/widgets/bar.js.map +1 -1
- package/dist/widgets/histogram.js +8 -7
- package/dist/widgets/histogram.js.map +1 -1
- package/dist/widgets/pie.js +19 -18
- package/dist/widgets/pie.js.map +1 -1
- package/dist/widgets/scatterplot.js +8 -7
- package/dist/widgets/scatterplot.js.map +1 -1
- package/dist/widgets/timeseries.js +11 -10
- package/dist/widgets/timeseries.js.map +1 -1
- package/dist/widgets/utils.js +8 -7
- package/dist/widgets/utils.js.map +1 -1
- package/dist/widgets-v2/actions.js +43 -0
- package/dist/widgets-v2/actions.js.map +1 -0
- package/dist/widgets-v2/bar.js +327 -0
- package/dist/widgets-v2/bar.js.map +1 -0
- package/dist/widgets-v2/category.js +104 -0
- package/dist/widgets-v2/category.js.map +1 -0
- package/dist/widgets-v2/echart.js +57 -0
- package/dist/widgets-v2/echart.js.map +1 -0
- package/dist/widgets-v2/formula.js +74 -0
- package/dist/widgets-v2/formula.js.map +1 -0
- package/dist/widgets-v2/histogram.js +350 -0
- package/dist/widgets-v2/histogram.js.map +1 -0
- package/dist/widgets-v2/markdown.js +68 -0
- package/dist/widgets-v2/markdown.js.map +1 -0
- package/dist/widgets-v2/pie.js +381 -0
- package/dist/widgets-v2/pie.js.map +1 -0
- package/dist/widgets-v2/range.js +52 -0
- package/dist/widgets-v2/range.js.map +1 -0
- package/dist/widgets-v2/scatterplot.js +405 -0
- package/dist/widgets-v2/scatterplot.js.map +1 -0
- package/dist/widgets-v2/spread.js +72 -0
- package/dist/widgets-v2/spread.js.map +1 -0
- package/dist/widgets-v2/stores.js +42 -0
- package/dist/widgets-v2/stores.js.map +1 -0
- package/dist/widgets-v2/table.js +78 -0
- package/dist/widgets-v2/table.js.map +1 -0
- package/dist/widgets-v2/timeseries.js +352 -0
- package/dist/widgets-v2/timeseries.js.map +1 -0
- package/dist/widgets-v2/utils.js +7 -0
- package/dist/widgets-v2/utils.js.map +1 -0
- package/dist/widgets-v2.js +953 -0
- package/dist/widgets-v2.js.map +1 -0
- package/package.json +73 -5
- package/src/components/lasso-tool/chip.test.tsx +176 -0
- package/src/components/lasso-tool/lasso-tool-inline.test.tsx +171 -0
- package/src/components/lasso-tool/lasso-tool.test.tsx +198 -0
- package/src/components/list-data/list-data.test.tsx +73 -0
- package/src/components/no-data-alert/no-data-alert.test.tsx +38 -0
- package/src/components/responsive-drawer/responsive-drawer.test.tsx +68 -0
- package/src/widgets/actions/brush-toggle/brush-overlay.test.tsx +465 -0
- package/src/widgets/actions/brush-toggle/brush-toggle.test.tsx +208 -0
- package/src/widgets/actions/change-column/change-column-dnd.test.tsx +193 -0
- package/src/widgets/actions/change-column/sortable-column-item.test.tsx +124 -0
- package/src/widgets/actions/zoom-toggle/zoom-toggle.test.tsx +322 -0
- package/src/widgets/category/components/category-rows.test.tsx +213 -0
- package/src/widgets/echart/utils.test.ts +277 -0
- package/src/widgets/formula/config.test.ts +37 -0
- package/src/widgets/range/components/range-item.test.tsx +243 -0
- package/src/widgets/stores/widget-store-branches.test.ts +275 -0
- package/src/widgets/table/config.test.ts +65 -0
- package/src/widgets/utils/chart-config/option-builders.test.ts +188 -0
- package/src/widgets-v2/PERFORMANCE.md +189 -0
- package/src/widgets-v2/actions/brush-toggle/brush-toggle.test.tsx +180 -0
- package/src/widgets-v2/actions/brush-toggle/brush-toggle.tsx +154 -0
- package/src/widgets-v2/actions/brush-toggle/index.ts +3 -0
- package/src/widgets-v2/actions/brush-toggle/labels.ts +9 -0
- package/src/widgets-v2/actions/brush-toggle/style.ts +11 -0
- package/src/widgets-v2/actions/brush-toggle/transforms.test.ts +47 -0
- package/src/widgets-v2/actions/brush-toggle/transforms.ts +31 -0
- package/src/widgets-v2/actions/change-column/change-column-icon.tsx +14 -0
- package/src/widgets-v2/actions/change-column/change-column.test.tsx +59 -0
- package/src/widgets-v2/actions/change-column/change-column.tsx +180 -0
- package/src/widgets-v2/actions/change-column/index.ts +7 -0
- package/src/widgets-v2/actions/change-column/labels.ts +9 -0
- package/src/widgets-v2/actions/change-column/sortable-column-item.tsx +56 -0
- package/src/widgets-v2/actions/change-column/style.ts +32 -0
- package/src/widgets-v2/actions/change-column/types.ts +11 -0
- package/src/widgets-v2/actions/download/download.test.tsx +327 -0
- package/src/widgets-v2/actions/download/download.tsx +144 -0
- package/src/widgets-v2/actions/download/exports.test.tsx +198 -0
- package/src/widgets-v2/actions/download/exports.ts +115 -0
- package/src/widgets-v2/actions/download/icons.tsx +26 -0
- package/src/widgets-v2/actions/download/index.ts +13 -0
- package/src/widgets-v2/actions/download/labels.ts +16 -0
- package/src/widgets-v2/actions/download/png-item.test.tsx +72 -0
- package/src/widgets-v2/actions/download/png-item.tsx +52 -0
- package/src/widgets-v2/actions/download/style.ts +3 -0
- package/src/widgets-v2/actions/download/types.ts +32 -0
- package/src/widgets-v2/actions/fullscreen/fullscreen.test.tsx +150 -0
- package/src/widgets-v2/actions/fullscreen/fullscreen.tsx +230 -0
- package/src/widgets-v2/actions/fullscreen/index.ts +7 -0
- package/src/widgets-v2/actions/fullscreen/labels.ts +9 -0
- package/src/widgets-v2/actions/fullscreen/style.ts +59 -0
- package/src/widgets-v2/actions/fullscreen/types.ts +15 -0
- package/src/widgets-v2/actions/index.ts +82 -0
- package/src/widgets-v2/actions/lock-selection/index.ts +10 -0
- package/src/widgets-v2/actions/lock-selection/labels.ts +11 -0
- package/src/widgets-v2/actions/lock-selection/lock-selection.test.tsx +187 -0
- package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +130 -0
- package/src/widgets-v2/actions/lock-selection/style.ts +11 -0
- package/src/widgets-v2/actions/lock-selection/transforms.ts +27 -0
- package/src/widgets-v2/actions/relative-data/index.ts +3 -0
- package/src/widgets-v2/actions/relative-data/labels.ts +9 -0
- package/src/widgets-v2/actions/relative-data/relative-data.test.tsx +71 -0
- package/src/widgets-v2/actions/relative-data/relative-data.tsx +107 -0
- package/src/widgets-v2/actions/relative-data/style.ts +11 -0
- package/src/widgets-v2/actions/relative-data/transforms.test.ts +151 -0
- package/src/widgets-v2/actions/relative-data/transforms.ts +70 -0
- package/src/widgets-v2/actions/searcher/filter.ts +28 -0
- package/src/widgets-v2/actions/searcher/index.ts +8 -0
- package/src/widgets-v2/actions/searcher/labels.ts +13 -0
- package/src/widgets-v2/actions/searcher/searcher-toggle.tsx +91 -0
- package/src/widgets-v2/actions/searcher/searcher.test.tsx +92 -0
- package/src/widgets-v2/actions/searcher/searcher.tsx +112 -0
- package/src/widgets-v2/actions/searcher/style.ts +15 -0
- package/src/widgets-v2/actions/stack-toggle/index.ts +3 -0
- package/src/widgets-v2/actions/stack-toggle/labels.ts +9 -0
- package/src/widgets-v2/actions/stack-toggle/stack-toggle.test.tsx +61 -0
- package/src/widgets-v2/actions/stack-toggle/stack-toggle.tsx +54 -0
- package/src/widgets-v2/actions/stack-toggle/style.ts +11 -0
- package/src/widgets-v2/actions/stack-toggle/transforms.test.ts +43 -0
- package/src/widgets-v2/actions/stack-toggle/transforms.ts +25 -0
- package/src/widgets-v2/actions/zoom-toggle/index.ts +9 -0
- package/src/widgets-v2/actions/zoom-toggle/labels.ts +9 -0
- package/src/widgets-v2/actions/zoom-toggle/style.ts +11 -0
- package/src/widgets-v2/actions/zoom-toggle/transforms.test.ts +148 -0
- package/src/widgets-v2/actions/zoom-toggle/transforms.ts +171 -0
- package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.test.tsx +107 -0
- package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.tsx +106 -0
- package/src/widgets-v2/bar/download.test.tsx +91 -0
- package/src/widgets-v2/bar/download.tsx +66 -0
- package/src/widgets-v2/bar/index.ts +10 -0
- package/src/widgets-v2/bar/options.test.ts +317 -0
- package/src/widgets-v2/bar/options.ts +326 -0
- package/src/widgets-v2/bar/skeleton.test.tsx +19 -0
- package/src/widgets-v2/bar/skeleton.tsx +69 -0
- package/src/widgets-v2/bar/types.ts +46 -0
- package/src/widgets-v2/category/category-ui.test.tsx +746 -0
- package/src/widgets-v2/category/category-ui.tsx +389 -0
- package/src/widgets-v2/category/category.relative-data.test.tsx +107 -0
- package/src/widgets-v2/category/category.stack-toggle.test.tsx +85 -0
- package/src/widgets-v2/category/category.test.tsx +305 -0
- package/src/widgets-v2/category/category.tsx +121 -0
- package/src/widgets-v2/category/components/category-bar-stacked.test.tsx +121 -0
- package/src/widgets-v2/category/components/category-bar-stacked.tsx +73 -0
- package/src/widgets-v2/category/components/category-bar.test.tsx +64 -0
- package/src/widgets-v2/category/components/category-bar.tsx +49 -0
- package/src/widgets-v2/category/components/category-legend.test.tsx +51 -0
- package/src/widgets-v2/category/components/category-legend.tsx +39 -0
- package/src/widgets-v2/category/components/category-row-multi.tsx +86 -0
- package/src/widgets-v2/category/components/category-row-other.test.tsx +28 -0
- package/src/widgets-v2/category/components/category-row-other.tsx +33 -0
- package/src/widgets-v2/category/components/category-row-single.tsx +76 -0
- package/src/widgets-v2/category/components/category-row-stacked.test.tsx +244 -0
- package/src/widgets-v2/category/components/category-row-stacked.tsx +99 -0
- package/src/widgets-v2/category/download.test.ts +71 -0
- package/src/widgets-v2/category/download.ts +54 -0
- package/src/widgets-v2/category/index.ts +32 -0
- package/src/widgets-v2/category/skeleton.test.tsx +26 -0
- package/src/widgets-v2/category/skeleton.tsx +74 -0
- package/src/widgets-v2/category/style.ts +290 -0
- package/src/widgets-v2/category/types.ts +54 -0
- package/src/widgets-v2/echart/echart-ui.test.tsx +232 -0
- package/src/widgets-v2/echart/echart-ui.tsx +184 -0
- package/src/widgets-v2/echart/echart.test.tsx +229 -0
- package/src/widgets-v2/echart/echart.tsx +199 -0
- package/src/widgets-v2/echart/index.ts +22 -0
- package/src/widgets-v2/echart/shared-resize-observer.test.ts +91 -0
- package/src/widgets-v2/echart/shared-resize-observer.ts +56 -0
- package/src/widgets-v2/echart/style.ts +8 -0
- package/src/widgets-v2/echart/use-chart-selection.test.tsx +118 -0
- package/src/widgets-v2/echart/use-chart-selection.ts +115 -0
- package/src/widgets-v2/formula/delta.tsx +61 -0
- package/src/widgets-v2/formula/download.test.tsx +65 -0
- package/src/widgets-v2/formula/download.tsx +69 -0
- package/src/widgets-v2/formula/formula-ui.test.tsx +91 -0
- package/src/widgets-v2/formula/formula-ui.tsx +66 -0
- package/src/widgets-v2/formula/formula.test.tsx +50 -0
- package/src/widgets-v2/formula/formula.tsx +34 -0
- package/src/widgets-v2/formula/index.ts +17 -0
- package/src/widgets-v2/formula/note.tsx +25 -0
- package/src/widgets-v2/formula/prefix.tsx +25 -0
- package/src/widgets-v2/formula/series.tsx +67 -0
- package/src/widgets-v2/formula/skeleton.test.tsx +21 -0
- package/src/widgets-v2/formula/skeleton.tsx +27 -0
- package/src/widgets-v2/formula/style.ts +31 -0
- package/src/widgets-v2/formula/subcomponents.test.tsx +107 -0
- package/src/widgets-v2/formula/suffix.tsx +25 -0
- package/src/widgets-v2/formula/types.ts +44 -0
- package/src/widgets-v2/formula/value.tsx +31 -0
- package/src/widgets-v2/histogram/download.test.ts +94 -0
- package/src/widgets-v2/histogram/download.ts +60 -0
- package/src/widgets-v2/histogram/index.ts +10 -0
- package/src/widgets-v2/histogram/options.test.ts +304 -0
- package/src/widgets-v2/histogram/options.ts +337 -0
- package/src/widgets-v2/histogram/skeleton.test.tsx +16 -0
- package/src/widgets-v2/histogram/skeleton.tsx +70 -0
- package/src/widgets-v2/histogram/transforms.test.ts +46 -0
- package/src/widgets-v2/histogram/transforms.ts +30 -0
- package/src/widgets-v2/histogram/types.ts +51 -0
- package/src/widgets-v2/index.ts +201 -0
- package/src/widgets-v2/markdown/download.test.ts +66 -0
- package/src/widgets-v2/markdown/download.ts +53 -0
- package/src/widgets-v2/markdown/index.ts +6 -0
- package/src/widgets-v2/markdown/markdown-content.test.tsx +155 -0
- package/src/widgets-v2/markdown/markdown-content.tsx +72 -0
- package/src/widgets-v2/markdown/markdown-ui.test.tsx +75 -0
- package/src/widgets-v2/markdown/markdown-ui.tsx +55 -0
- package/src/widgets-v2/markdown/markdown.test.tsx +39 -0
- package/src/widgets-v2/markdown/markdown.tsx +17 -0
- package/src/widgets-v2/markdown/skeleton.test.tsx +15 -0
- package/src/widgets-v2/markdown/skeleton.tsx +32 -0
- package/src/widgets-v2/markdown/style.ts +53 -0
- package/src/widgets-v2/markdown/types.ts +4 -0
- package/src/widgets-v2/note/labels.ts +9 -0
- package/src/widgets-v2/note/style.ts +26 -0
- package/src/widgets-v2/note/widget-note.test.tsx +158 -0
- package/src/widgets-v2/note/widget-note.tsx +172 -0
- package/src/widgets-v2/pie/download.test.ts +78 -0
- package/src/widgets-v2/pie/download.ts +55 -0
- package/src/widgets-v2/pie/index.ts +10 -0
- package/src/widgets-v2/pie/options.test.ts +585 -0
- package/src/widgets-v2/pie/options.ts +509 -0
- package/src/widgets-v2/pie/skeleton.test.tsx +17 -0
- package/src/widgets-v2/pie/skeleton.tsx +32 -0
- package/src/widgets-v2/pie/types.ts +55 -0
- package/src/widgets-v2/provider/widget-provider.test.tsx +119 -0
- package/src/widgets-v2/provider/widget-provider.tsx +111 -0
- package/src/widgets-v2/range/index.ts +4 -0
- package/src/widgets-v2/range/range-ui.test.tsx +130 -0
- package/src/widgets-v2/range/range-ui.tsx +211 -0
- package/src/widgets-v2/range/range.test.tsx +68 -0
- package/src/widgets-v2/range/range.tsx +46 -0
- package/src/widgets-v2/range/skeleton.test.tsx +17 -0
- package/src/widgets-v2/range/skeleton.tsx +47 -0
- package/src/widgets-v2/range/style.ts +41 -0
- package/src/widgets-v2/range/types.ts +37 -0
- package/src/widgets-v2/scatterplot/download.test.ts +71 -0
- package/src/widgets-v2/scatterplot/download.ts +54 -0
- package/src/widgets-v2/scatterplot/index.ts +11 -0
- package/src/widgets-v2/scatterplot/options.test.ts +399 -0
- package/src/widgets-v2/scatterplot/options.ts +421 -0
- package/src/widgets-v2/scatterplot/skeleton.test.tsx +17 -0
- package/src/widgets-v2/scatterplot/skeleton.tsx +84 -0
- package/src/widgets-v2/scatterplot/transforms.test.ts +97 -0
- package/src/widgets-v2/scatterplot/transforms.ts +38 -0
- package/src/widgets-v2/scatterplot/types.ts +55 -0
- package/src/widgets-v2/selection-summary/labels.ts +11 -0
- package/src/widgets-v2/selection-summary/selection-summary.test.tsx +53 -0
- package/src/widgets-v2/selection-summary/selection-summary.tsx +62 -0
- package/src/widgets-v2/selection-summary/style.ts +23 -0
- package/src/widgets-v2/spread/download.test.ts +64 -0
- package/src/widgets-v2/spread/download.ts +59 -0
- package/src/widgets-v2/spread/index.ts +6 -0
- package/src/widgets-v2/spread/separator.tsx +11 -0
- package/src/widgets-v2/spread/skeleton.test.tsx +17 -0
- package/src/widgets-v2/spread/skeleton.tsx +38 -0
- package/src/widgets-v2/spread/spread-ui.test.tsx +108 -0
- package/src/widgets-v2/spread/spread-ui.tsx +52 -0
- package/src/widgets-v2/spread/spread.test.tsx +50 -0
- package/src/widgets-v2/spread/spread.tsx +31 -0
- package/src/widgets-v2/spread/types.ts +27 -0
- package/src/widgets-v2/state/labels.test.ts +33 -0
- package/src/widgets-v2/state/labels.ts +20 -0
- package/src/widgets-v2/state/style.ts +25 -0
- package/src/widgets-v2/state/widget-state.test.tsx +294 -0
- package/src/widgets-v2/state/widget-state.tsx +184 -0
- package/src/widgets-v2/stores/index.ts +49 -0
- package/src/widgets-v2/stores/pipeline-middleware.test.ts +187 -0
- package/src/widgets-v2/stores/pipeline-middleware.ts +91 -0
- package/src/widgets-v2/stores/transforms.test.ts +162 -0
- package/src/widgets-v2/stores/transforms.ts +70 -0
- package/src/widgets-v2/stores/types.ts +64 -0
- package/src/widgets-v2/stores/use-echart-instance.test.tsx +91 -0
- package/src/widgets-v2/stores/use-echart-instance.ts +29 -0
- package/src/widgets-v2/stores/use-transform-enabled.test.tsx +127 -0
- package/src/widgets-v2/stores/use-transform-enabled.ts +25 -0
- package/src/widgets-v2/stores/use-transform.test.tsx +262 -0
- package/src/widgets-v2/stores/use-transform.ts +158 -0
- package/src/widgets-v2/stores/widget-context.test.tsx +58 -0
- package/src/widgets-v2/stores/widget-context.ts +15 -0
- package/src/widgets-v2/stores/widget-store-registry.test.ts +292 -0
- package/src/widgets-v2/stores/widget-store-registry.ts +248 -0
- package/src/widgets-v2/subheader/style.ts +12 -0
- package/src/widgets-v2/subheader/subheader.test.tsx +30 -0
- package/src/widgets-v2/subheader/subheader.tsx +16 -0
- package/src/widgets-v2/table/download.test.ts +75 -0
- package/src/widgets-v2/table/download.ts +47 -0
- package/src/widgets-v2/table/helpers.test.ts +214 -0
- package/src/widgets-v2/table/helpers.ts +136 -0
- package/src/widgets-v2/table/index.ts +23 -0
- package/src/widgets-v2/table/labels.tsx +41 -0
- package/src/widgets-v2/table/skeleton.test.tsx +26 -0
- package/src/widgets-v2/table/skeleton.tsx +65 -0
- package/src/widgets-v2/table/style.ts +46 -0
- package/src/widgets-v2/table/table-ui.test.tsx +200 -0
- package/src/widgets-v2/table/table-ui.tsx +331 -0
- package/src/widgets-v2/table/table.test.tsx +119 -0
- package/src/widgets-v2/table/table.tsx +174 -0
- package/src/widgets-v2/table/types.ts +44 -0
- package/src/widgets-v2/test-utils.ts +107 -0
- package/src/widgets-v2/timeseries/download.test.ts +95 -0
- package/src/widgets-v2/timeseries/download.ts +86 -0
- package/src/widgets-v2/timeseries/index.ts +10 -0
- package/src/widgets-v2/timeseries/options.test.ts +379 -0
- package/src/widgets-v2/timeseries/options.ts +341 -0
- package/src/widgets-v2/timeseries/skeleton.test.tsx +13 -0
- package/src/widgets-v2/timeseries/skeleton.tsx +76 -0
- package/src/widgets-v2/timeseries/types.ts +61 -0
- package/src/widgets-v2/toolbox/labels.ts +9 -0
- package/src/widgets-v2/toolbox/style.ts +33 -0
- package/src/widgets-v2/toolbox/toolbox.test.tsx +200 -0
- package/src/widgets-v2/toolbox/toolbox.tsx +309 -0
- package/src/widgets-v2/utils/data-zoom-layout.ts +26 -0
- package/src/widgets-v2/utils/index.ts +2 -0
- package/src/widgets-v2/utils/merge-options.test.ts +52 -0
- package/src/widgets-v2/utils/merge-options.ts +50 -0
- package/src/widgets-v2/wrapper/index.ts +14 -0
- package/src/widgets-v2/wrapper/labels.ts +11 -0
- package/src/widgets-v2/wrapper/style.ts +134 -0
- package/src/widgets-v2/wrapper/widget-actions.test.tsx +52 -0
- package/src/widgets-v2/wrapper/widget-actions.tsx +43 -0
- package/src/widgets-v2/wrapper/widget-content.test.tsx +27 -0
- package/src/widgets-v2/wrapper/widget-content.tsx +29 -0
- package/src/widgets-v2/wrapper/widget-wrapper.test.tsx +159 -0
- package/src/widgets-v2/wrapper/widget-wrapper.tsx +178 -0
- package/dist/styles-BYTyKQFP.js.map +0 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useCallback,
|
|
3
|
+
useLayoutEffect,
|
|
4
|
+
useState,
|
|
5
|
+
type ComponentType,
|
|
6
|
+
type ReactNode,
|
|
7
|
+
} from 'react'
|
|
8
|
+
import { createPortal } from 'react-dom'
|
|
9
|
+
import {
|
|
10
|
+
Box,
|
|
11
|
+
Dialog,
|
|
12
|
+
DialogContent,
|
|
13
|
+
DialogTitle,
|
|
14
|
+
IconButton,
|
|
15
|
+
Typography,
|
|
16
|
+
type SvgIconProps,
|
|
17
|
+
} from '@mui/material'
|
|
18
|
+
import FullscreenIcon from '@mui/icons-material/Fullscreen'
|
|
19
|
+
import FullscreenExitIcon from '@mui/icons-material/FullscreenExit'
|
|
20
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
21
|
+
import { Tooltip } from '../../../components'
|
|
22
|
+
import { getWidgetStore, useWidget, useWidgetId } from '../../stores'
|
|
23
|
+
import { DEFAULT_FULLSCREEN_LABELS, type FullScreenLabels } from './labels'
|
|
24
|
+
import type { FullScreenWidgetState } from './types'
|
|
25
|
+
import { styles } from './style'
|
|
26
|
+
|
|
27
|
+
export interface FullScreenTriggerProps {
|
|
28
|
+
labels?: Partial<FullScreenLabels>
|
|
29
|
+
enterIcon?: ComponentType<SvgIconProps>
|
|
30
|
+
exitIcon?: ComponentType<SvgIconProps>
|
|
31
|
+
iconProps?: SvgIconProps
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface FullScreenSlotProps {
|
|
35
|
+
/**
|
|
36
|
+
* Render-prop body. Receives the live `isFullScreen` flag so the consumer
|
|
37
|
+
* can branch per-mode props (e.g., `Widget.Toolbox visibleCount`) without
|
|
38
|
+
* duplicating the JSX.
|
|
39
|
+
*/
|
|
40
|
+
children: (isFullScreen: boolean) => ReactNode
|
|
41
|
+
/** Header text rendered above the body when the modal is open. */
|
|
42
|
+
title?: ReactNode
|
|
43
|
+
labels?: Partial<FullScreenLabels>
|
|
44
|
+
closeIcon?: ComponentType<SvgIconProps>
|
|
45
|
+
iconProps?: SvgIconProps
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Toggle button placed inside `<Widget.Actions>`. Reads / writes
|
|
50
|
+
* {@link FullScreenWidgetState.isFullScreen} on the per-widget store. The
|
|
51
|
+
* matching modal is rendered by {@link FullScreenSlot} (typically inside
|
|
52
|
+
* `<Widget.Content>`).
|
|
53
|
+
*/
|
|
54
|
+
function FullScreenTrigger({
|
|
55
|
+
labels,
|
|
56
|
+
enterIcon: EnterIcon = FullscreenIcon,
|
|
57
|
+
exitIcon: ExitIcon = FullscreenExitIcon,
|
|
58
|
+
iconProps,
|
|
59
|
+
}: FullScreenTriggerProps) {
|
|
60
|
+
const id = useWidgetId()
|
|
61
|
+
const _labels = { ...DEFAULT_FULLSCREEN_LABELS, ...labels }
|
|
62
|
+
const open = useWidget<boolean, FullScreenWidgetState>(
|
|
63
|
+
id,
|
|
64
|
+
(s) => s.isFullScreen ?? false,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
const handleToggle = useCallback(() => {
|
|
68
|
+
getWidgetStore(id).setState({
|
|
69
|
+
isFullScreen: !open,
|
|
70
|
+
} as Partial<FullScreenWidgetState>)
|
|
71
|
+
}, [id, open])
|
|
72
|
+
|
|
73
|
+
const triggerLabel = open ? _labels.close : _labels.open
|
|
74
|
+
const TriggerIcon = open ? ExitIcon : EnterIcon
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<Tooltip title={triggerLabel}>
|
|
78
|
+
<IconButton
|
|
79
|
+
size='small'
|
|
80
|
+
aria-label={triggerLabel}
|
|
81
|
+
aria-pressed={open}
|
|
82
|
+
onClick={handleToggle}
|
|
83
|
+
className={open ? 'active' : undefined}
|
|
84
|
+
sx={{ ...styles.trigger, ...(open && styles.triggerActive) }}
|
|
85
|
+
>
|
|
86
|
+
<TriggerIcon fontSize='small' {...iconProps} />
|
|
87
|
+
</IconButton>
|
|
88
|
+
</Tooltip>
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Body wrapper. Renders its render-prop children once, via a single
|
|
94
|
+
* `createPortal` call whose container is a stable `<div>` we hold as a ref.
|
|
95
|
+
* That div is moved imperatively between an inline placeholder and the
|
|
96
|
+
* `<DialogContent>` of an MUI `<Dialog keepMounted>`. Because both the
|
|
97
|
+
* React parent (the portal call site) AND the portal container are
|
|
98
|
+
* identical across the toggle, the subtree keeps its fiber identity and
|
|
99
|
+
* ECharts (or any other heavy child) stays mounted while only its DOM
|
|
100
|
+
* parent changes.
|
|
101
|
+
*/
|
|
102
|
+
function FullScreenSlot({
|
|
103
|
+
children,
|
|
104
|
+
title,
|
|
105
|
+
labels,
|
|
106
|
+
closeIcon: CloseSvg = CloseIcon,
|
|
107
|
+
iconProps,
|
|
108
|
+
}: FullScreenSlotProps) {
|
|
109
|
+
const id = useWidgetId()
|
|
110
|
+
const _labels = { ...DEFAULT_FULLSCREEN_LABELS, ...labels }
|
|
111
|
+
const open = useWidget<boolean, FullScreenWidgetState>(
|
|
112
|
+
id,
|
|
113
|
+
(s) => s.isFullScreen ?? false,
|
|
114
|
+
)
|
|
115
|
+
const [inlineEl, setInlineEl] = useState<HTMLElement | null>(null)
|
|
116
|
+
const [dialogEl, setDialogEl] = useState<HTMLElement | null>(null)
|
|
117
|
+
// Stable, never-changing portal container created once per slot. Held in
|
|
118
|
+
// state (not a ref) so the React Compiler is happy reading it during
|
|
119
|
+
// render — it's immutable from React's perspective, only its DOM parent
|
|
120
|
+
// changes via `appendChild`. Switching `createPortal`'s `container`
|
|
121
|
+
// argument makes React unmount and remount the children, defeating the
|
|
122
|
+
// single-mount goal; keeping the container identical and moving the div
|
|
123
|
+
// imperatively avoids that.
|
|
124
|
+
const [portalDiv] = useState<HTMLDivElement | null>(() => {
|
|
125
|
+
if (typeof document === 'undefined') return null
|
|
126
|
+
const div = document.createElement('div')
|
|
127
|
+
// `display: contents` keeps the wrapper transparent in flow so it
|
|
128
|
+
// doesn't introduce a stray block when nested inside the inline slot.
|
|
129
|
+
div.style.display = 'contents'
|
|
130
|
+
return div
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
const handleClose = useCallback(() => {
|
|
134
|
+
getWidgetStore(id).setState({
|
|
135
|
+
isFullScreen: false,
|
|
136
|
+
} as Partial<FullScreenWidgetState>)
|
|
137
|
+
}, [id])
|
|
138
|
+
|
|
139
|
+
// Reparent the portal div into the active host whenever `open` (or either
|
|
140
|
+
// host) changes. `useLayoutEffect` runs synchronously after commit (after
|
|
141
|
+
// refs have been written), so the dialog ref is already live when we read
|
|
142
|
+
// it.
|
|
143
|
+
//
|
|
144
|
+
// Anti-blink: pin a `min-height` on the inline shell that's always live —
|
|
145
|
+
// not just while fullscreen is open. We re-measure whenever the body is
|
|
146
|
+
// inline (open=false) so the lock tracks data-driven height changes
|
|
147
|
+
// (Formula adding rows, Table growing, ECharts re-init…) and survives
|
|
148
|
+
// every fullscreen toggle. Briefly clearing minHeight before the measure
|
|
149
|
+
// lets the lock shrink as well as grow; both operations are synchronous
|
|
150
|
+
// within useLayoutEffect, so the browser never paints the intermediate
|
|
151
|
+
// "no lock" frame.
|
|
152
|
+
useLayoutEffect(() => {
|
|
153
|
+
if (!portalDiv || !inlineEl) return
|
|
154
|
+
const host = open ? dialogEl : inlineEl
|
|
155
|
+
if (host && portalDiv.parentNode !== host) {
|
|
156
|
+
host.appendChild(portalDiv)
|
|
157
|
+
}
|
|
158
|
+
if (!open) refreshInlineHeightLock(inlineEl)
|
|
159
|
+
}, [open, inlineEl, dialogEl, portalDiv])
|
|
160
|
+
|
|
161
|
+
const titleId = `widget-fullscreen-title-${id}`
|
|
162
|
+
const rendered = children(open)
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<>
|
|
166
|
+
<Box ref={setInlineEl} sx={styles.inlineSlot} />
|
|
167
|
+
{portalDiv ? createPortal(rendered, portalDiv) : null}
|
|
168
|
+
<Dialog
|
|
169
|
+
open={open}
|
|
170
|
+
onClose={handleClose}
|
|
171
|
+
PaperProps={{ sx: styles.dialogPaper }}
|
|
172
|
+
aria-labelledby={titleId}
|
|
173
|
+
// Sits above the Toolbox overflow Paper (zIndex.tooltip = 1500),
|
|
174
|
+
// so opening fullscreen never leaves a stray popover floating on top.
|
|
175
|
+
sx={{ zIndex: (theme) => theme.zIndex.tooltip + 1 }}
|
|
176
|
+
>
|
|
177
|
+
<DialogTitle id={titleId} component='div' sx={styles.dialogTitle}>
|
|
178
|
+
<Typography
|
|
179
|
+
variant='subtitle1'
|
|
180
|
+
component='span'
|
|
181
|
+
sx={styles.titleText}
|
|
182
|
+
>
|
|
183
|
+
{title}
|
|
184
|
+
</Typography>
|
|
185
|
+
<Tooltip title={_labels.close}>
|
|
186
|
+
<IconButton
|
|
187
|
+
size='medium'
|
|
188
|
+
aria-label={_labels.close}
|
|
189
|
+
onClick={handleClose}
|
|
190
|
+
>
|
|
191
|
+
<CloseSvg fontSize='small' {...iconProps} />
|
|
192
|
+
</IconButton>
|
|
193
|
+
</Tooltip>
|
|
194
|
+
</DialogTitle>
|
|
195
|
+
<DialogContent ref={setDialogEl} sx={styles.dialogContent} />
|
|
196
|
+
</Dialog>
|
|
197
|
+
</>
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Briefly clear the inline shell's `min-height`, measure its natural
|
|
203
|
+
* height, then re-pin. Lives outside the component so the React Compiler
|
|
204
|
+
* doesn't see the DOM mutation as an attempt to modify a `useState` value
|
|
205
|
+
* — `el` here is just a parameter, not a tracked store value.
|
|
206
|
+
*/
|
|
207
|
+
function refreshInlineHeightLock(el: HTMLElement): void {
|
|
208
|
+
el.style.minHeight = ''
|
|
209
|
+
const h = el.getBoundingClientRect().height
|
|
210
|
+
if (h > 0) el.style.minHeight = `${h}px`
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Namespace export. Consumers compose with:
|
|
215
|
+
*
|
|
216
|
+
* ```tsx
|
|
217
|
+
* <Widget.Actions>
|
|
218
|
+
* <Widget.FullScreen.Trigger />
|
|
219
|
+
* </Widget.Actions>
|
|
220
|
+
* <Widget.Content>
|
|
221
|
+
* <Widget.FullScreen.Slot title={title}>
|
|
222
|
+
* {(isFullScreen) => <Body visibleCount={isFullScreen ? undefined : 2} />}
|
|
223
|
+
* </Widget.FullScreen.Slot>
|
|
224
|
+
* </Widget.Content>
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
export const FullScreen = {
|
|
228
|
+
Trigger: FullScreenTrigger,
|
|
229
|
+
Slot: FullScreenSlot,
|
|
230
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { SxProps, Theme } from '@mui/material'
|
|
2
|
+
|
|
3
|
+
export const styles = {
|
|
4
|
+
// Inline shell where the portaled body lives when fullscreen is closed.
|
|
5
|
+
// Real flex-column box (not `display: contents`) so that:
|
|
6
|
+
// 1. when the body is moved into the modal, we can pin a `min-height`
|
|
7
|
+
// to keep the widget card from collapsing — the inline shell is
|
|
8
|
+
// empty for that interval, and a layout-less wrapper would make
|
|
9
|
+
// the card squish a frame before the modal covers it (visible
|
|
10
|
+
// blink).
|
|
11
|
+
// 2. nested `flex: 1` (e.g. Widget.State's CaptureBox) still grows —
|
|
12
|
+
// this shell preserves the column-flex inheritance it would have
|
|
13
|
+
// had directly under `Widget.Content`.
|
|
14
|
+
// `gap: 1` mirrors `Widget.Content`'s gap so the body's siblings
|
|
15
|
+
// (Subheader / capture box / note) keep their spacing.
|
|
16
|
+
inlineSlot: {
|
|
17
|
+
display: 'flex',
|
|
18
|
+
flexDirection: 'column',
|
|
19
|
+
flex: 1,
|
|
20
|
+
minHeight: 0,
|
|
21
|
+
gap: 1,
|
|
22
|
+
},
|
|
23
|
+
trigger: {
|
|
24
|
+
p: 0.5,
|
|
25
|
+
'& .MuiSvgIcon-root': { fontSize: 20 },
|
|
26
|
+
},
|
|
27
|
+
triggerActive: {
|
|
28
|
+
background: (theme: Theme) => theme.palette.primary.relatedLight,
|
|
29
|
+
},
|
|
30
|
+
dialogPaper: {
|
|
31
|
+
width: '90vw',
|
|
32
|
+
height: '90vh',
|
|
33
|
+
maxWidth: 'none',
|
|
34
|
+
maxHeight: 'none',
|
|
35
|
+
},
|
|
36
|
+
dialogTitle: {
|
|
37
|
+
display: 'flex',
|
|
38
|
+
alignItems: 'center',
|
|
39
|
+
justifyContent: 'space-between',
|
|
40
|
+
gap: 1,
|
|
41
|
+
py: 3,
|
|
42
|
+
pr: 3,
|
|
43
|
+
pb: 2,
|
|
44
|
+
},
|
|
45
|
+
titleText: {
|
|
46
|
+
minWidth: 0,
|
|
47
|
+
overflow: 'hidden',
|
|
48
|
+
textOverflow: 'ellipsis',
|
|
49
|
+
whiteSpace: 'nowrap',
|
|
50
|
+
},
|
|
51
|
+
dialogContent: {
|
|
52
|
+
display: 'flex',
|
|
53
|
+
flexDirection: 'column',
|
|
54
|
+
gap: 1,
|
|
55
|
+
py: 3,
|
|
56
|
+
px: 2.5,
|
|
57
|
+
overflow: 'auto',
|
|
58
|
+
},
|
|
59
|
+
} satisfies Record<string, SxProps<Theme>>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WidgetState } from '../../stores'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* State extension owned by FullScreen. The base `WidgetState` deliberately
|
|
5
|
+
* stays free of widget-specific UI flags (R12 from the round-5 amendment);
|
|
6
|
+
* actions that need persistent UI state declare it here and read it via the
|
|
7
|
+
* generic `useWidget<T, S>(id, sel)` form.
|
|
8
|
+
*
|
|
9
|
+
* `isFullScreen` survives `keepAlive` remounts because it lives on the same
|
|
10
|
+
* store the rest of `WidgetState` does — a kept-alive widget that was
|
|
11
|
+
* fullscreen reopens fullscreen automatically.
|
|
12
|
+
*/
|
|
13
|
+
export interface FullScreenWidgetState extends WidgetState {
|
|
14
|
+
isFullScreen: boolean
|
|
15
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export {
|
|
2
|
+
Searcher,
|
|
3
|
+
SearcherToggle,
|
|
4
|
+
setSearcherText,
|
|
5
|
+
filterBySearchText,
|
|
6
|
+
DEFAULT_SEARCHER_LABELS,
|
|
7
|
+
type SearcherProps,
|
|
8
|
+
type SearcherToggleProps,
|
|
9
|
+
type SearcherLabels,
|
|
10
|
+
} from './searcher'
|
|
11
|
+
export {
|
|
12
|
+
StackToggle,
|
|
13
|
+
addStack,
|
|
14
|
+
DEFAULT_STACK_TOGGLE_LABELS,
|
|
15
|
+
type StackToggleProps,
|
|
16
|
+
type StackToggleLabels,
|
|
17
|
+
} from './stack-toggle'
|
|
18
|
+
export {
|
|
19
|
+
ZoomToggle,
|
|
20
|
+
addZoom,
|
|
21
|
+
createAddZoom,
|
|
22
|
+
ZOOM_LAYOUT,
|
|
23
|
+
DEFAULT_ZOOM_TOGGLE_LABELS,
|
|
24
|
+
type ZoomToggleProps,
|
|
25
|
+
type ZoomToggleLabels,
|
|
26
|
+
} from './zoom-toggle'
|
|
27
|
+
export {
|
|
28
|
+
BrushToggle,
|
|
29
|
+
addBrush,
|
|
30
|
+
DEFAULT_BRUSH_TOGGLE_LABELS,
|
|
31
|
+
type BrushToggleProps,
|
|
32
|
+
type BrushToggleLabels,
|
|
33
|
+
} from './brush-toggle'
|
|
34
|
+
export {
|
|
35
|
+
RelativeData,
|
|
36
|
+
toRelativeData,
|
|
37
|
+
createPercentFormatter,
|
|
38
|
+
DEFAULT_RELATIVE_DATA_LABELS,
|
|
39
|
+
type RelativeDataProps,
|
|
40
|
+
type RelativeDataLabels,
|
|
41
|
+
} from './relative-data'
|
|
42
|
+
export {
|
|
43
|
+
Download,
|
|
44
|
+
downloadToCSV,
|
|
45
|
+
downloadDOMToPNG,
|
|
46
|
+
toCsvString,
|
|
47
|
+
triggerLinkDownload,
|
|
48
|
+
buildPngDownloadItem,
|
|
49
|
+
CSVIcon,
|
|
50
|
+
PNGIcon,
|
|
51
|
+
DEFAULT_DOWNLOAD_LABELS,
|
|
52
|
+
type DownloadProps,
|
|
53
|
+
type DownloadItem,
|
|
54
|
+
type DownloadHandle,
|
|
55
|
+
type DownloadDOMToPNGOptions,
|
|
56
|
+
type BuildPngDownloadItemArgs,
|
|
57
|
+
type DownloadLabels,
|
|
58
|
+
} from './download'
|
|
59
|
+
export {
|
|
60
|
+
FullScreen,
|
|
61
|
+
DEFAULT_FULLSCREEN_LABELS,
|
|
62
|
+
type FullScreenTriggerProps,
|
|
63
|
+
type FullScreenSlotProps,
|
|
64
|
+
type FullScreenLabels,
|
|
65
|
+
type FullScreenWidgetState,
|
|
66
|
+
} from './fullscreen'
|
|
67
|
+
export {
|
|
68
|
+
LockSelection,
|
|
69
|
+
filterByLockedItems,
|
|
70
|
+
DEFAULT_LOCK_SELECTION_LABELS,
|
|
71
|
+
type LockSelectionProps,
|
|
72
|
+
type LockSelectionKey,
|
|
73
|
+
type LockSelectionLabels,
|
|
74
|
+
} from './lock-selection'
|
|
75
|
+
export {
|
|
76
|
+
ChangeColumn,
|
|
77
|
+
DEFAULT_CHANGE_COLUMN_LABELS,
|
|
78
|
+
type ChangeColumnProps,
|
|
79
|
+
type ChangeColumnItem,
|
|
80
|
+
type ChangeColumnLabels,
|
|
81
|
+
type ChangeColumnWidgetState,
|
|
82
|
+
} from './change-column'
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface LockSelectionLabels {
|
|
2
|
+
lock: string
|
|
3
|
+
unlock: string
|
|
4
|
+
disabled: string
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const DEFAULT_LOCK_SELECTION_LABELS: LockSelectionLabels = {
|
|
8
|
+
lock: 'Lock selection',
|
|
9
|
+
unlock: 'Unlock selection',
|
|
10
|
+
disabled: 'Select rows to lock',
|
|
11
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
2
|
+
import { fireEvent, render, screen } from '@testing-library/react'
|
|
3
|
+
import { Provider } from '../../provider/widget-provider'
|
|
4
|
+
import { clearAllWidgetStores, getWidgetStore } from '../../stores'
|
|
5
|
+
import { LockSelection } from './lock-selection'
|
|
6
|
+
import { filterByLockedItems } from './transforms'
|
|
7
|
+
|
|
8
|
+
beforeEach(() => clearAllWidgetStores())
|
|
9
|
+
afterEach(() => clearAllWidgetStores())
|
|
10
|
+
|
|
11
|
+
const DATA = [
|
|
12
|
+
[
|
|
13
|
+
{ name: 'A', value: 10 },
|
|
14
|
+
{ name: 'B', value: 20 },
|
|
15
|
+
{ name: 'C', value: 30 },
|
|
16
|
+
],
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
describe('<LockSelection>', () => {
|
|
20
|
+
it('disables the trigger when nothing is selected and nothing is locked', () => {
|
|
21
|
+
render(
|
|
22
|
+
<Provider id='ls1' data={DATA}>
|
|
23
|
+
<LockSelection
|
|
24
|
+
selection={[]}
|
|
25
|
+
lockedItems={[]}
|
|
26
|
+
onLockChange={() => undefined}
|
|
27
|
+
labels={{ disabled: 'Pick rows' }}
|
|
28
|
+
/>
|
|
29
|
+
</Provider>,
|
|
30
|
+
)
|
|
31
|
+
const btn = screen.getByRole('button', { name: 'Pick rows' })
|
|
32
|
+
expect(btn.getAttribute('disabled')).not.toBeNull()
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('shows the lock label when selection is non-empty and not locked', () => {
|
|
36
|
+
render(
|
|
37
|
+
<Provider id='ls2' data={DATA}>
|
|
38
|
+
<LockSelection
|
|
39
|
+
selection={['A']}
|
|
40
|
+
lockedItems={[]}
|
|
41
|
+
onLockChange={() => undefined}
|
|
42
|
+
labels={{ lock: 'Lock these' }}
|
|
43
|
+
/>
|
|
44
|
+
</Provider>,
|
|
45
|
+
)
|
|
46
|
+
const btn = screen.getByRole('button', { name: 'Lock these' })
|
|
47
|
+
expect(btn.getAttribute('aria-pressed')).toBe('false')
|
|
48
|
+
expect(btn.getAttribute('disabled')).toBeNull()
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('shows the unlock label when locked and aria-pressed=true', () => {
|
|
52
|
+
render(
|
|
53
|
+
<Provider id='ls3' data={DATA}>
|
|
54
|
+
<LockSelection
|
|
55
|
+
selection={['A']}
|
|
56
|
+
lockedItems={['A']}
|
|
57
|
+
onLockChange={() => undefined}
|
|
58
|
+
labels={{ unlock: 'Release' }}
|
|
59
|
+
/>
|
|
60
|
+
</Provider>,
|
|
61
|
+
)
|
|
62
|
+
const btn = screen.getByRole('button', { name: 'Release' })
|
|
63
|
+
expect(btn.getAttribute('aria-pressed')).toBe('true')
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
it('snapshots selection on lock — onLockChange called with current selection', () => {
|
|
67
|
+
const onLockChange = vi.fn()
|
|
68
|
+
render(
|
|
69
|
+
<Provider id='ls4' data={DATA}>
|
|
70
|
+
<LockSelection
|
|
71
|
+
selection={['A', 'B']}
|
|
72
|
+
lockedItems={[]}
|
|
73
|
+
onLockChange={onLockChange}
|
|
74
|
+
labels={{ lock: 'Lock' }}
|
|
75
|
+
/>
|
|
76
|
+
</Provider>,
|
|
77
|
+
)
|
|
78
|
+
fireEvent.click(screen.getByRole('button', { name: 'Lock' }))
|
|
79
|
+
expect(onLockChange).toHaveBeenCalledTimes(1)
|
|
80
|
+
expect(onLockChange).toHaveBeenCalledWith(['A', 'B'])
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('clears the lock — onLockChange called with empty array', () => {
|
|
84
|
+
const onLockChange = vi.fn()
|
|
85
|
+
render(
|
|
86
|
+
<Provider id='ls5' data={DATA}>
|
|
87
|
+
<LockSelection
|
|
88
|
+
selection={['A']}
|
|
89
|
+
lockedItems={['A', 'B']}
|
|
90
|
+
onLockChange={onLockChange}
|
|
91
|
+
labels={{ unlock: 'Unlock' }}
|
|
92
|
+
/>
|
|
93
|
+
</Provider>,
|
|
94
|
+
)
|
|
95
|
+
fireEvent.click(screen.getByRole('button', { name: 'Unlock' }))
|
|
96
|
+
expect(onLockChange).toHaveBeenCalledWith([])
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
it('registers a data transform that filters when locked, restores when unlocked', () => {
|
|
100
|
+
const { rerender } = render(
|
|
101
|
+
<Provider id='ls6' data={DATA}>
|
|
102
|
+
<LockSelection
|
|
103
|
+
selection={['A']}
|
|
104
|
+
lockedItems={['A']}
|
|
105
|
+
onLockChange={() => undefined}
|
|
106
|
+
/>
|
|
107
|
+
</Provider>,
|
|
108
|
+
)
|
|
109
|
+
const locked = getWidgetStore('ls6').getState().data as unknown[][]
|
|
110
|
+
expect(locked).toEqual([[{ name: 'A', value: 10 }]])
|
|
111
|
+
|
|
112
|
+
rerender(
|
|
113
|
+
<Provider id='ls6' data={DATA}>
|
|
114
|
+
<LockSelection
|
|
115
|
+
selection={['A']}
|
|
116
|
+
lockedItems={[]}
|
|
117
|
+
onLockChange={() => undefined}
|
|
118
|
+
/>
|
|
119
|
+
</Provider>,
|
|
120
|
+
)
|
|
121
|
+
const unlocked = getWidgetStore('ls6').getState().data as unknown[][]
|
|
122
|
+
// With no lockedItems and the transform disabled, the pipeline returns
|
|
123
|
+
// raw data. All three rows should be present.
|
|
124
|
+
expect(unlocked.flat().length).toBe(3)
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
it('lets the destination feed a different lockedItems set later', () => {
|
|
128
|
+
const { rerender } = render(
|
|
129
|
+
<Provider id='ls7' data={DATA}>
|
|
130
|
+
<LockSelection
|
|
131
|
+
selection={['A']}
|
|
132
|
+
lockedItems={['A']}
|
|
133
|
+
onLockChange={() => undefined}
|
|
134
|
+
/>
|
|
135
|
+
</Provider>,
|
|
136
|
+
)
|
|
137
|
+
expect(
|
|
138
|
+
(getWidgetStore('ls7').getState().data as unknown[][]).flat(),
|
|
139
|
+
).toEqual([{ name: 'A', value: 10 }])
|
|
140
|
+
|
|
141
|
+
rerender(
|
|
142
|
+
<Provider id='ls7' data={DATA}>
|
|
143
|
+
<LockSelection
|
|
144
|
+
selection={['A', 'B', 'C']}
|
|
145
|
+
lockedItems={['B', 'C']}
|
|
146
|
+
onLockChange={() => undefined}
|
|
147
|
+
/>
|
|
148
|
+
</Provider>,
|
|
149
|
+
)
|
|
150
|
+
expect(
|
|
151
|
+
(getWidgetStore('ls7').getState().data as unknown[][]).flat(),
|
|
152
|
+
).toEqual([
|
|
153
|
+
{ name: 'B', value: 20 },
|
|
154
|
+
{ name: 'C', value: 30 },
|
|
155
|
+
])
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
describe('filterByLockedItems', () => {
|
|
160
|
+
it('returns input unchanged when locked set is empty', () => {
|
|
161
|
+
expect(filterByLockedItems(DATA, [])).toBe(DATA)
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('keeps only items whose name is in the locked set, preserving series shape', () => {
|
|
165
|
+
const out = filterByLockedItems(DATA, ['A', 'C']) as unknown[][]
|
|
166
|
+
expect(out).toEqual([
|
|
167
|
+
[
|
|
168
|
+
{ name: 'A', value: 10 },
|
|
169
|
+
{ name: 'C', value: 30 },
|
|
170
|
+
],
|
|
171
|
+
])
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
it('handles numeric names', () => {
|
|
175
|
+
const data = [
|
|
176
|
+
[
|
|
177
|
+
{ name: 1, value: 10 },
|
|
178
|
+
{ name: 2, value: 20 },
|
|
179
|
+
],
|
|
180
|
+
]
|
|
181
|
+
expect(filterByLockedItems(data, [2])).toEqual([[{ name: 2, value: 20 }]])
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
it('returns input unchanged when input is not array-shaped', () => {
|
|
185
|
+
expect(filterByLockedItems('nope', ['A'])).toBe('nope')
|
|
186
|
+
})
|
|
187
|
+
})
|