@carto/ps-react-ui 4.4.1 → 4.4.3
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/components.js.map +1 -1
- package/dist/download-config-Dqu78h2a.js +57 -0
- package/dist/download-config-Dqu78h2a.js.map +1 -0
- package/dist/error-CEkRPccv.js.map +1 -1
- package/dist/exports-Cr43OCul.js.map +1 -1
- package/dist/formatter-B9Bxn1k7.js +6 -0
- package/dist/formatter-B9Bxn1k7.js.map +1 -0
- package/dist/lasso-tool-BYbxrJ-7.js.map +1 -1
- package/dist/note-t51drNe0.js.map +1 -1
- package/dist/options-D9wflre6.js.map +1 -1
- package/dist/row-DTCV0Ocm.js.map +1 -1
- package/dist/series-CYNOu2Ju.js.map +1 -1
- package/dist/smart-tooltip-D4vwQpFf.js.map +1 -1
- package/dist/styles-Y8q7Jff3.js +118 -0
- package/dist/styles-Y8q7Jff3.js.map +1 -0
- package/dist/tooltip-BDnrRKrp.js.map +1 -1
- package/dist/types/components/basemaps/basemaps.d.ts +20 -0
- package/dist/types/components/geolocation-controls/geolocation-controls.d.ts +11 -0
- package/dist/types/components/lasso-tool/lasso-tool-inline.d.ts +17 -0
- package/dist/types/components/lasso-tool/lasso-tool.d.ts +21 -0
- package/dist/types/components/list-data/list-data.d.ts +16 -0
- package/dist/types/components/measurement-tools/measurement-tools.d.ts +20 -0
- package/dist/types/components/smart-tooltip/smart-tooltip.d.ts +17 -0
- package/dist/types/components/tooltip/tooltip.d.ts +13 -0
- package/dist/types/components/zoom-controls/zoom-controls.d.ts +16 -0
- package/dist/types/hooks/use-widget-ref.d.ts +4 -4
- package/dist/types/widgets/actions/brush-toggle/types.d.ts +8 -2
- package/dist/types/widgets/actions/download/download.d.ts +11 -0
- package/dist/types/widgets/actions/download/exports.d.ts +15 -0
- package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +13 -0
- package/dist/types/widgets/actions/index.d.ts +1 -1
- package/dist/types/widgets/actions/relative-data/relative-data.d.ts +1 -0
- package/dist/types/widgets/bar/config.d.ts +8 -4
- package/dist/types/widgets/category/category-ui.d.ts +3 -0
- package/dist/types/widgets/category/components/category-bar.d.ts +3 -0
- package/dist/types/widgets/category/components/category-legend.d.ts +3 -0
- package/dist/types/widgets/category/components/category-row-multi.d.ts +5 -1
- package/dist/types/widgets/category/components/category-row-other.d.ts +3 -0
- package/dist/types/widgets/category/components/category-row-single.d.ts +5 -1
- package/dist/types/widgets/category/config.d.ts +11 -0
- package/dist/types/widgets/category/types.d.ts +1 -0
- package/dist/types/widgets/echart/echart-ui.d.ts +7 -0
- package/dist/types/widgets/echart/echart.d.ts +6 -0
- package/dist/types/widgets/echart/options.d.ts +7 -0
- package/dist/types/widgets/echart/types.d.ts +3 -0
- package/dist/types/widgets/echart/utils.d.ts +41 -0
- package/dist/types/widgets/error/error.d.ts +10 -0
- package/dist/types/widgets/formula/components/item.d.ts +3 -0
- package/dist/types/widgets/formula/components/prefix.d.ts +3 -0
- package/dist/types/widgets/formula/components/row.d.ts +3 -0
- package/dist/types/widgets/formula/components/series.d.ts +3 -0
- package/dist/types/widgets/formula/components/suffix.d.ts +3 -0
- package/dist/types/widgets/formula/components/value.d.ts +3 -0
- package/dist/types/widgets/formula/config.d.ts +11 -0
- package/dist/types/widgets/formula/formula-ui.d.ts +3 -0
- package/dist/types/widgets/histogram/config.d.ts +18 -2
- package/dist/types/widgets/histogram/index.d.ts +2 -1
- package/dist/types/widgets/histogram/types.d.ts +6 -3
- package/dist/types/widgets/loader/loader.d.ts +22 -0
- package/dist/types/widgets/loader/utils.d.ts +26 -3
- package/dist/types/widgets/markdown/config.d.ts +10 -0
- package/dist/types/widgets/markdown/markdown-ui.d.ts +7 -0
- package/dist/types/widgets/markdown/markdown.d.ts +3 -0
- package/dist/types/widgets/note/note.d.ts +10 -0
- package/dist/types/widgets/pie/config.d.ts +8 -4
- package/dist/types/widgets/range/components/range-item.d.ts +3 -0
- package/dist/types/widgets/range/config.d.ts +5 -0
- package/dist/types/widgets/range/range-ui.d.ts +3 -0
- package/dist/types/widgets/scatterplot/config.d.ts +7 -3
- package/dist/types/widgets/selection-summary/selection-summary.d.ts +11 -0
- package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +10 -0
- package/dist/types/widgets/spread/components/max-value.d.ts +3 -0
- package/dist/types/widgets/spread/components/min-value.d.ts +3 -0
- package/dist/types/widgets/spread/components/separator.d.ts +3 -0
- package/dist/types/widgets/spread/config.d.ts +11 -0
- package/dist/types/widgets/spread/spread-ui.d.ts +3 -0
- package/dist/types/widgets/stores/types.d.ts +2 -0
- package/dist/types/widgets/subheader/subheader.d.ts +11 -0
- package/dist/types/widgets/table/config.d.ts +8 -3
- package/dist/types/widgets/table/hooks/use-pagination.d.ts +11 -3
- package/dist/types/widgets/table/hooks/use-selection.d.ts +11 -2
- package/dist/types/widgets/table/hooks/use-sort.d.ts +11 -3
- package/dist/types/widgets/timeseries/config.d.ts +8 -4
- package/dist/types/widgets/utils/chart-config/download-config.d.ts +3 -0
- package/dist/types/widgets/{_shared → utils}/chart-config/index.d.ts +2 -0
- package/dist/types/widgets/{_shared → utils}/chart-config/option-builders.d.ts +14 -9
- package/dist/types/widgets/utils/formatter.d.ts +2 -0
- package/dist/types/widgets/utils/index.d.ts +7 -0
- package/dist/types/widgets/wrapper/components/actions.d.ts +3 -0
- package/dist/types/widgets/wrapper/components/options.d.ts +3 -0
- package/dist/types/widgets/wrapper/components/title.d.ts +3 -0
- package/dist/types/widgets/wrapper/wrapper-ui.d.ts +14 -0
- package/dist/types/widgets/wrapper/wrapper.d.ts +14 -0
- package/dist/use-widget-ref-wtFLDFCD.js.map +1 -1
- package/dist/utils-BOhInag6.js.map +1 -1
- package/dist/widgets/actions.js +720 -681
- package/dist/widgets/actions.js.map +1 -1
- package/dist/widgets/bar.js +78 -92
- package/dist/widgets/bar.js.map +1 -1
- package/dist/widgets/category.js +206 -197
- package/dist/widgets/category.js.map +1 -1
- package/dist/widgets/echart.js.map +1 -1
- package/dist/widgets/formula.js +54 -54
- package/dist/widgets/formula.js.map +1 -1
- package/dist/widgets/histogram.js +106 -86
- package/dist/widgets/histogram.js.map +1 -1
- package/dist/widgets/loader.js.map +1 -1
- package/dist/widgets/markdown.js.map +1 -1
- package/dist/widgets/pie.js +147 -112
- package/dist/widgets/pie.js.map +1 -1
- package/dist/widgets/range.js +23 -22
- package/dist/widgets/range.js.map +1 -1
- package/dist/widgets/scatterplot.js +46 -60
- package/dist/widgets/scatterplot.js.map +1 -1
- package/dist/widgets/selection-summary.js.map +1 -1
- package/dist/widgets/skeleton-loader.js.map +1 -1
- package/dist/widgets/spread.js +40 -41
- package/dist/widgets/spread.js.map +1 -1
- package/dist/widgets/subheader.js.map +1 -1
- package/dist/widgets/table.js.map +1 -1
- package/dist/widgets/timeseries.js +51 -65
- package/dist/widgets/timeseries.js.map +1 -1
- package/dist/widgets/toolbar-actions.js +101 -6693
- package/dist/widgets/toolbar-actions.js.map +1 -1
- package/dist/widgets/utils.js +33 -0
- package/dist/widgets/utils.js.map +1 -0
- package/dist/widgets/wrapper.js.map +1 -1
- package/package.json +9 -4
- package/src/components/basemaps/basemaps.tsx +20 -0
- package/src/components/geolocation-controls/geolocation-controls.tsx +11 -0
- package/src/components/lasso-tool/lasso-tool-inline.tsx +17 -0
- package/src/components/lasso-tool/lasso-tool.tsx +21 -0
- package/src/components/list-data/list-data.tsx +16 -0
- package/src/components/measurement-tools/measurement-tools.tsx +20 -0
- package/src/components/smart-tooltip/smart-tooltip.tsx +17 -0
- package/src/components/tooltip/tooltip.tsx +13 -0
- package/src/components/zoom-controls/zoom-controls.tsx +16 -0
- package/src/hooks/use-widget-ref.ts +4 -4
- package/src/widgets/README.md +13 -13
- package/src/widgets/actions/brush-toggle/brush-toggle.tsx +42 -47
- package/src/widgets/actions/brush-toggle/types.ts +8 -2
- package/src/widgets/actions/download/download.tsx +11 -0
- package/src/widgets/actions/download/exports.tsx +15 -0
- package/src/widgets/actions/fullscreen/fullscreen.tsx +13 -0
- package/src/widgets/actions/index.ts +1 -0
- package/src/widgets/actions/relative-data/relative-data.test.tsx +62 -1
- package/src/widgets/actions/relative-data/relative-data.tsx +62 -39
- package/src/widgets/bar/config.ts +34 -34
- package/src/widgets/bar/style.ts +1 -1
- package/src/widgets/category/category-ui.tsx +12 -2
- package/src/widgets/category/components/category-bar.tsx +3 -0
- package/src/widgets/category/components/category-legend.tsx +3 -0
- package/src/widgets/category/components/category-row-multi.tsx +9 -2
- package/src/widgets/category/components/category-row-other.tsx +3 -0
- package/src/widgets/category/components/category-row-single.tsx +8 -1
- package/src/widgets/category/config.ts +11 -0
- package/src/widgets/category/types.ts +1 -0
- package/src/widgets/echart/echart-ui.tsx +7 -0
- package/src/widgets/echart/echart.tsx +6 -0
- package/src/widgets/echart/options.ts +7 -0
- package/src/widgets/echart/types.ts +3 -0
- package/src/widgets/echart/utils.ts +41 -0
- package/src/widgets/error/error.tsx +10 -0
- package/src/widgets/formula/components/item.tsx +3 -0
- package/src/widgets/formula/components/prefix.tsx +3 -0
- package/src/widgets/formula/components/row.tsx +3 -0
- package/src/widgets/formula/components/series.tsx +3 -0
- package/src/widgets/formula/components/suffix.tsx +3 -0
- package/src/widgets/formula/components/value.tsx +4 -2
- package/src/widgets/formula/config.ts +11 -0
- package/src/widgets/formula/formula-ui.tsx +3 -0
- package/src/widgets/histogram/config.ts +93 -21
- package/src/widgets/histogram/index.ts +6 -1
- package/src/widgets/histogram/style.ts +1 -1
- package/src/widgets/histogram/types.ts +9 -3
- package/src/widgets/loader/loader.tsx +22 -0
- package/src/widgets/loader/utils.ts +26 -3
- package/src/widgets/markdown/config.ts +10 -0
- package/src/widgets/markdown/markdown-ui.tsx +7 -0
- package/src/widgets/markdown/markdown.tsx +3 -0
- package/src/widgets/note/note.tsx +10 -0
- package/src/widgets/pie/config.ts +100 -33
- package/src/widgets/pie/style.ts +1 -1
- package/src/widgets/range/components/range-item.tsx +5 -2
- package/src/widgets/range/config.ts +5 -0
- package/src/widgets/range/range-ui.tsx +3 -0
- package/src/widgets/scatterplot/config.ts +19 -23
- package/src/widgets/scatterplot/style.ts +1 -1
- package/src/widgets/selection-summary/selection-summary.tsx +11 -0
- package/src/widgets/skeleton-loader/skeleton-loader.tsx +10 -0
- package/src/widgets/spread/components/max-value.tsx +4 -2
- package/src/widgets/spread/components/min-value.tsx +4 -2
- package/src/widgets/spread/components/separator.tsx +3 -0
- package/src/widgets/spread/config.ts +11 -0
- package/src/widgets/spread/spread-ui.tsx +3 -0
- package/src/widgets/stores/types.ts +2 -0
- package/src/widgets/subheader/subheader.tsx +11 -0
- package/src/widgets/table/config.ts +8 -3
- package/src/widgets/table/hooks/use-pagination.ts +11 -3
- package/src/widgets/table/hooks/use-selection.ts +11 -2
- package/src/widgets/table/hooks/use-sort.ts +11 -3
- package/src/widgets/timeseries/config.ts +32 -33
- package/src/widgets/timeseries/style.ts +1 -1
- package/src/widgets/utils/chart-config/download-config.ts +22 -0
- package/src/widgets/{_shared → utils}/chart-config/index.ts +4 -0
- package/src/widgets/{_shared → utils}/chart-config/option-builders.ts +23 -13
- package/src/widgets/utils/formatter.ts +2 -0
- package/src/widgets/utils/index.ts +26 -0
- package/src/widgets/wrapper/components/actions.tsx +3 -0
- package/src/widgets/wrapper/components/options.tsx +3 -0
- package/src/widgets/wrapper/components/title.tsx +3 -0
- package/src/widgets/wrapper/wrapper-ui.tsx +14 -0
- package/src/widgets/wrapper/wrapper.tsx +14 -0
- package/dist/styles-CAroD5Rc.js +0 -123
- package/dist/styles-CAroD5Rc.js.map +0 -1
- /package/dist/types/widgets/{_shared → utils}/chart-config/config-factory.d.ts +0 -0
- /package/dist/types/widgets/{_shared → utils}/chart-config/csv-modifiers.d.ts +0 -0
- /package/dist/types/widgets/{_shared → utils}/chart-config/option-builders.test.d.ts +0 -0
- /package/dist/types/widgets/{_shared → utils}/skeleton/index.d.ts +0 -0
- /package/dist/types/widgets/{_shared → utils}/skeleton/styles.d.ts +0 -0
- /package/src/widgets/{_shared → utils}/chart-config/config-factory.ts +0 -0
- /package/src/widgets/{_shared → utils}/chart-config/csv-modifiers.ts +0 -0
- /package/src/widgets/{_shared → utils}/chart-config/option-builders.test.ts +0 -0
- /package/src/widgets/{_shared → utils}/skeleton/index.ts +0 -0
- /package/src/widgets/{_shared → utils}/skeleton/styles.ts +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { d as i, a as n } from "../formatter-B9Bxn1k7.js";
|
|
2
|
+
import { c as f, f as p, s as c } from "../download-config-Dqu78h2a.js";
|
|
3
|
+
import { a as m, b as u, c as C, d as b, e as x, f as g, g as F, h as y, n as A } from "../styles-Y8q7Jff3.js";
|
|
4
|
+
function r({
|
|
5
|
+
type: a,
|
|
6
|
+
getOptions: e
|
|
7
|
+
}) {
|
|
8
|
+
return function(t) {
|
|
9
|
+
return {
|
|
10
|
+
...t,
|
|
11
|
+
option: e(t),
|
|
12
|
+
type: a
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
m as applyXAxisFormatter,
|
|
18
|
+
u as applyYAxisFormatter,
|
|
19
|
+
C as baseSkeletonStyles,
|
|
20
|
+
b as buildGridConfig,
|
|
21
|
+
x as buildLegendConfig,
|
|
22
|
+
g as createAxisLabelFormatter,
|
|
23
|
+
f as createChartDownloadConfig,
|
|
24
|
+
r as createChartWidgetConfig,
|
|
25
|
+
F as createTooltipFormatter,
|
|
26
|
+
y as createTooltipPositioner,
|
|
27
|
+
i as defaultFormatter,
|
|
28
|
+
n as defaultLabelFormatter,
|
|
29
|
+
p as flattenObjectArrayToCSV,
|
|
30
|
+
A as niceNum,
|
|
31
|
+
c as scatterplotDataToCSV
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/widgets/utils/chart-config/config-factory.ts"],"sourcesContent":["import type { EchartOptionsProps, EchartWidgetData } from '../../echart'\n\n/**\n * Base configuration interface for chart widgets\n */\nexport interface ChartWidgetBaseConfig<TData = EchartWidgetData> {\n data?: TData\n}\n\n/**\n * Parameters for creating a chart widget configuration\n */\nexport interface CreateChartWidgetConfigParams<\n TData = EchartWidgetData,\n TConfig extends ChartWidgetBaseConfig<TData> = ChartWidgetBaseConfig<TData>,\n TType extends string = string,\n> {\n /** Widget type identifier (e.g., 'bar', 'pie', 'histogram') */\n type: TType\n /** Function to get EChart options from config */\n getOptions: (config: TConfig) => EchartOptionsProps\n}\n\n/**\n * Return type of the chart widget config function\n */\nexport type ChartWidgetConfigResult<\n TData = EchartWidgetData,\n TConfig extends ChartWidgetBaseConfig<TData> = ChartWidgetBaseConfig<TData>,\n TType extends string = string,\n> = TConfig & {\n type: TType\n}\n\n/**\n * Factory function to create a standardized chart widget config function.\n * This eliminates duplication across chart widgets by providing a common structure.\n *\n * @example\n * ```ts\n * export const barConfig = createChartWidgetConfig({\n * type: 'bar' as const,\n * getOptions: ({ data, theme }) => ({\n * // EChart configuration\n * }),\n * csvModifier: (data) => flattenObjectArrayToCSV(data),\n * })\n * ```\n */\nexport function createChartWidgetConfig<\n TData = EchartWidgetData,\n TConfig extends ChartWidgetBaseConfig<TData> = ChartWidgetBaseConfig<TData>,\n TType extends string = string,\n>({\n type,\n getOptions,\n}: CreateChartWidgetConfigParams<TData, TConfig, TType>): (\n config: TConfig,\n) => ChartWidgetConfigResult<TData, TConfig, TType> {\n return function (config: TConfig) {\n return {\n ...config,\n option: getOptions(config),\n type: type,\n } as ChartWidgetConfigResult<TData, TConfig, TType>\n }\n}\n"],"names":["createChartWidgetConfig","type","getOptions","config","option"],"mappings":";;;AAiDO,SAASA,EAId;AAAA,EACAC,MAAAA;AAAAA,EACAC,YAAAA;AACoD,GAEF;AAClD,SAAO,SAAUC,GAAiB;AAChC,WAAO;AAAA,MACL,GAAGA;AAAAA,MACHC,QAAQF,EAAWC,CAAM;AAAA,MACzBF,MAAAA;AAAAA,IAAAA;AAAAA,EAEJ;AACF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.js","sources":["../../src/widgets/wrapper/styles.ts","../../src/widgets/wrapper/components/actions.tsx","../../src/widgets/wrapper/components/options.tsx","../../src/widgets/wrapper/components/title.tsx","../../src/widgets/wrapper/wrapper-ui.tsx","../../src/widgets/wrapper/wrapper.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n '.Mui-disabled .MuiAccordionSummary-expandIconWrapper': {\n display: 'none',\n },\n '.widget-wrapper-actions > *': {\n opacity: 1,\n transition: ({ transitions }) =>\n transitions.create('opacity', {\n duration: transitions.duration.standard,\n easing: transitions.easing.easeInOut,\n }),\n\n '@media (hover: hover)': {\n opacity: 0,\n },\n\n '&:has(.active)': {\n opacity: 1,\n },\n },\n '&:hover': {\n '& .widget-wrapper-actions > *': {\n opacity: 1,\n },\n },\n\n '&.collapsed .widget-wrapper-actions > *': {\n opacity: 0,\n pointerEvents: 'none',\n\n '&:has(.active)': {\n opacity: 1,\n },\n },\n },\n summary: {\n minHeight: ({ spacing }) => spacing(7),\n '& .MuiAccordionSummary-content': {\n gap: ({ spacing }) => spacing(0.5),\n paddingInlineEnd: ({ spacing }) => spacing(0.75),\n },\n },\n loading: {\n height: ({ spacing }) => spacing(0.35),\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n zIndex: 1,\n },\n title: {\n wrapper: {\n flexGrow: 1,\n flexShrink: 1,\n minWidth: 0,\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'column',\n },\n container: {\n display: 'flex',\n alignItems: 'center',\n flexGrow: 1,\n minHeight: ({ spacing }) => spacing(3),\n },\n text: {\n wordBreak: 'break-word',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n },\n },\n actions: {\n display: 'flex',\n gap: ({ spacing }) => spacing(0.5),\n alignItems: 'center',\n flexShrink: 0,\n justifyContent: 'flex-end',\n '& > div': {\n pointerEvents: 'auto',\n },\n },\n options: {\n trigger: {\n pointerEvents: 'auto',\n },\n },\n detail: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n paddingTop: ({ spacing }) => spacing(0.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport type { WrapperActionsProps } from '../types'\nimport { styles } from '../styles'\n\nconst EMPTY_ACTIONS: NonNullable<WrapperActionsProps['actions']> = []\n\nexport function Actions({ actions = EMPTY_ACTIONS }: WrapperActionsProps) {\n return (\n <Box sx={styles.actions} className='widget-wrapper-actions'>\n {actions.map((action, index) => {\n // Prefer action.key if present (React elements), else fallback to index\n const key =\n action &&\n typeof action === 'object' &&\n 'key' in action &&\n action.key != null\n ? action.key\n : index\n return (\n <Box\n key={key}\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n {action}\n </Box>\n )\n })}\n </Box>\n )\n}\n","import { MoreVert } from '@mui/icons-material'\nimport {\n IconButton,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n} from '@mui/material'\nimport type { WrapperOptionsProps } from '../types'\nimport { useState } from 'react'\nimport { styles } from '../styles'\n\nconst EMPTY_OPTIONS: NonNullable<WrapperOptionsProps['options']> = []\n\nexport function Options({\n labels,\n options = EMPTY_OPTIONS,\n}: WrapperOptionsProps) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const handleOptionAction = (\n e: React.MouseEvent<HTMLElement>,\n option: NonNullable<WrapperOptionsProps['options']>[number],\n ) => {\n e.stopPropagation()\n option.onClick()\n setAnchorEl(null)\n }\n\n return (\n <>\n <IconButton\n sx={styles.options.trigger}\n size='small'\n aria-label={labels?.title ?? 'Options'}\n aria-controls='options-menu'\n aria-haspopup='true'\n onClick={(e) => {\n e.stopPropagation()\n setAnchorEl(e.currentTarget)\n }}\n >\n <MoreVert />\n </IconButton>\n <Menu\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: {\n paddingBottom: 0,\n },\n }}\n >\n {options.map((option) => (\n <MenuItem\n key={option.label}\n disabled={option.disabled}\n onClick={(e) => handleOptionAction(e, option)}\n >\n {option.icon && <ListItemIcon>{option.icon}</ListItemIcon>}\n <ListItemText>{option.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../styles'\nimport { SmartTooltip } from '../../../components'\nimport type { ReactNode } from 'react'\nimport type { WrapperOptionsProps } from '../types'\n\nexport function Title({\n label,\n children,\n}: {\n children: ReactNode\n label?: NonNullable<WrapperOptionsProps['labels']>['title']\n}) {\n return (\n <SmartTooltip\n title={label ?? (typeof children === 'string' ? children : '')}\n >\n {({ ref }) => (\n <Box sx={styles.title.container}>\n <Typography\n sx={styles.title.text}\n ref={ref}\n variant='subtitle1'\n textTransform='none'\n >\n {children}\n </Typography>\n </Box>\n )}\n </SmartTooltip>\n )\n}\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n LinearProgress,\n} from '@mui/material'\nimport { styles } from './styles'\nimport { Title } from './components/title'\nimport type { WrapperState, WrapperUIProps } from './types'\nimport { Options } from './components/options'\nimport { Actions } from './components/actions'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\nconst EMPTY_ACTIONS: NonNullable<WrapperUIProps['actions']> = []\nconst EMPTY_OPTIONS: NonNullable<WrapperUIProps['options']> = []\n\nexport function WrapperUI({\n children,\n id,\n actions = EMPTY_ACTIONS,\n sx,\n labels,\n options = EMPTY_OPTIONS,\n onChangeCollapsed,\n}: WrapperUIProps) {\n const title = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.title),\n )\n const collapsed = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.collapsed),\n )\n const disabled = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.disabled),\n )\n const isFetching = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.isFetching),\n )\n\n return (\n <Accordion\n className={collapsed ? 'collapsed' : ''}\n sx={{ ...styles.root, ...sx }}\n expanded={!collapsed}\n onChange={onChangeCollapsed}\n disabled={disabled}\n >\n <AccordionSummary sx={styles.summary}>\n {isFetching && <LinearProgress sx={styles.loading} color='primary' />}\n <Title>{title}</Title>\n {!!actions.length && <Actions actions={actions} />}\n {!!options.length && (\n <Options labels={labels?.options} options={options} />\n )}\n </AccordionSummary>\n <AccordionDetails sx={styles.detail}>{children}</AccordionDetails>\n </Accordion>\n )\n}\n","import type { WrapperProps, WrapperState } from './types'\nimport { WrapperUI } from './wrapper-ui'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useLayoutEffect } from 'react'\n\nexport function WidgetWrapper({\n id,\n title,\n defaultCollapsed,\n disabled,\n sx,\n actions,\n options,\n labels,\n children,\n onChangeCollapsed,\n}: WrapperProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n\n useLayoutEffect(() => {\n setWidget<WrapperState>(id, {\n collapsed: defaultCollapsed,\n disabled,\n title,\n })\n }, [defaultCollapsed, disabled, title, id, setWidget])\n\n const handleChangeCollapsed = (\n event: React.SyntheticEvent<Element, Event>,\n expanded: boolean,\n ) => {\n onChangeCollapsed?.(event, expanded)\n setWidget<WrapperState>(id, { collapsed: !expanded })\n }\n\n return (\n <WrapperUI\n id={id}\n labels={labels}\n actions={actions}\n options={options}\n sx={sx}\n onChangeCollapsed={handleChangeCollapsed}\n >\n {children}\n </WrapperUI>\n )\n}\n"],"names":["styles","root","display","opacity","transition","transitions","create","duration","standard","easing","easeInOut","pointerEvents","summary","minHeight","spacing","gap","paddingInlineEnd","loading","height","left","position","top","width","zIndex","title","container","alignItems","flexGrow","text","wordBreak","overflow","WebkitLineClamp","WebkitBoxOrient","actions","flexShrink","justifyContent","options","trigger","detail","flexDirection","paddingTop","EMPTY_ACTIONS","Actions","t0","$","_c","t1","undefined","t2","map","_temp2","t3","Box","action","index","key","jsx","_temp","e","stopPropagation","EMPTY_OPTIONS","Options","labels","anchorEl","setAnchorEl","useState","Symbol","for","option","onClick","handleOptionAction","t4","t5","e_0","currentTarget","MoreVert","t6","IconButton","t7","t8","vertical","horizontal","t9","Boolean","t10","t11","sx","paddingBottom","t12","t13","option_0","jsxs","MenuItem","disabled","e_1","icon","ListItemIcon","ListItemText","label","Menu","t14","Title","children","ref","Typography","SmartTooltip","WrapperUI","id","onChangeCollapsed","state","getWidget","useWidgetStore","useShallow","state_0","collapsed","state_1","state_2","isFetching","LinearProgress","length","AccordionSummary","t15","AccordionDetails","t16","Accordion","WidgetWrapper","defaultCollapsed","setWidget","useLayoutEffect","event","expanded","handleChangeCollapsed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapper.js","sources":["../../src/widgets/wrapper/styles.ts","../../src/widgets/wrapper/components/actions.tsx","../../src/widgets/wrapper/components/options.tsx","../../src/widgets/wrapper/components/title.tsx","../../src/widgets/wrapper/wrapper-ui.tsx","../../src/widgets/wrapper/wrapper.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n '.Mui-disabled .MuiAccordionSummary-expandIconWrapper': {\n display: 'none',\n },\n '.widget-wrapper-actions > *': {\n opacity: 1,\n transition: ({ transitions }) =>\n transitions.create('opacity', {\n duration: transitions.duration.standard,\n easing: transitions.easing.easeInOut,\n }),\n\n '@media (hover: hover)': {\n opacity: 0,\n },\n\n '&:has(.active)': {\n opacity: 1,\n },\n },\n '&:hover': {\n '& .widget-wrapper-actions > *': {\n opacity: 1,\n },\n },\n\n '&.collapsed .widget-wrapper-actions > *': {\n opacity: 0,\n pointerEvents: 'none',\n\n '&:has(.active)': {\n opacity: 1,\n },\n },\n },\n summary: {\n minHeight: ({ spacing }) => spacing(7),\n '& .MuiAccordionSummary-content': {\n gap: ({ spacing }) => spacing(0.5),\n paddingInlineEnd: ({ spacing }) => spacing(0.75),\n },\n },\n loading: {\n height: ({ spacing }) => spacing(0.35),\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n zIndex: 1,\n },\n title: {\n wrapper: {\n flexGrow: 1,\n flexShrink: 1,\n minWidth: 0,\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'column',\n },\n container: {\n display: 'flex',\n alignItems: 'center',\n flexGrow: 1,\n minHeight: ({ spacing }) => spacing(3),\n },\n text: {\n wordBreak: 'break-word',\n overflow: 'hidden',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n },\n },\n actions: {\n display: 'flex',\n gap: ({ spacing }) => spacing(0.5),\n alignItems: 'center',\n flexShrink: 0,\n justifyContent: 'flex-end',\n '& > div': {\n pointerEvents: 'auto',\n },\n },\n options: {\n trigger: {\n pointerEvents: 'auto',\n },\n },\n detail: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n paddingTop: ({ spacing }) => spacing(0.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport type { WrapperActionsProps } from '../types'\nimport { styles } from '../styles'\n\nconst EMPTY_ACTIONS: NonNullable<WrapperActionsProps['actions']> = []\n\n/**\n * Renders action buttons in the widget wrapper header. Each action click event is stopped from propagating to the accordion.\n */\nexport function Actions({ actions = EMPTY_ACTIONS }: WrapperActionsProps) {\n return (\n <Box sx={styles.actions} className='widget-wrapper-actions'>\n {actions.map((action, index) => {\n // Prefer action.key if present (React elements), else fallback to index\n const key =\n action &&\n typeof action === 'object' &&\n 'key' in action &&\n action.key != null\n ? action.key\n : index\n return (\n <Box\n key={key}\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n {action}\n </Box>\n )\n })}\n </Box>\n )\n}\n","import { MoreVert } from '@mui/icons-material'\nimport {\n IconButton,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n} from '@mui/material'\nimport type { WrapperOptionsProps } from '../types'\nimport { useState } from 'react'\nimport { styles } from '../styles'\n\nconst EMPTY_OPTIONS: NonNullable<WrapperOptionsProps['options']> = []\n\n/**\n * Renders a dropdown options menu in the widget wrapper header, triggered by a vertical ellipsis icon button.\n */\nexport function Options({\n labels,\n options = EMPTY_OPTIONS,\n}: WrapperOptionsProps) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const handleOptionAction = (\n e: React.MouseEvent<HTMLElement>,\n option: NonNullable<WrapperOptionsProps['options']>[number],\n ) => {\n e.stopPropagation()\n option.onClick()\n setAnchorEl(null)\n }\n\n return (\n <>\n <IconButton\n sx={styles.options.trigger}\n size='small'\n aria-label={labels?.title ?? 'Options'}\n aria-controls='options-menu'\n aria-haspopup='true'\n onClick={(e) => {\n e.stopPropagation()\n setAnchorEl(e.currentTarget)\n }}\n >\n <MoreVert />\n </IconButton>\n <Menu\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: {\n paddingBottom: 0,\n },\n }}\n >\n {options.map((option) => (\n <MenuItem\n key={option.label}\n disabled={option.disabled}\n onClick={(e) => handleOptionAction(e, option)}\n >\n {option.icon && <ListItemIcon>{option.icon}</ListItemIcon>}\n <ListItemText>{option.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../styles'\nimport { SmartTooltip } from '../../../components'\nimport type { ReactNode } from 'react'\nimport type { WrapperOptionsProps } from '../types'\n\n/**\n * Renders the widget title text inside the wrapper header with smart tooltip support for truncated titles.\n */\nexport function Title({\n label,\n children,\n}: {\n children: ReactNode\n label?: NonNullable<WrapperOptionsProps['labels']>['title']\n}) {\n return (\n <SmartTooltip\n title={label ?? (typeof children === 'string' ? children : '')}\n >\n {({ ref }) => (\n <Box sx={styles.title.container}>\n <Typography\n sx={styles.title.text}\n ref={ref}\n variant='subtitle1'\n textTransform='none'\n >\n {children}\n </Typography>\n </Box>\n )}\n </SmartTooltip>\n )\n}\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n LinearProgress,\n} from '@mui/material'\nimport { styles } from './styles'\nimport { Title } from './components/title'\nimport type { WrapperState, WrapperUIProps } from './types'\nimport { Options } from './components/options'\nimport { Actions } from './components/actions'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\nconst EMPTY_ACTIONS: NonNullable<WrapperUIProps['actions']> = []\nconst EMPTY_OPTIONS: NonNullable<WrapperUIProps['options']> = []\n\n/**\n * Presentational wrapper component that renders the widget accordion UI with title, actions, options menu, and loading indicator. For uncontrolled usage without automatic widget store synchronization, use this instead of WidgetWrapper.\n *\n * @example\n * ```tsx\n * <WrapperUI\n * id=\"my-widget\"\n * actions={[<Download key=\"download\" id=\"my-widget\" />]}\n * onChangeCollapsed={(e, collapsed) => console.log(collapsed)}\n * >\n * <div>Content</div>\n * </WrapperUI>\n * ```\n */\nexport function WrapperUI({\n children,\n id,\n actions = EMPTY_ACTIONS,\n sx,\n labels,\n options = EMPTY_OPTIONS,\n onChangeCollapsed,\n}: WrapperUIProps) {\n const title = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.title),\n )\n const collapsed = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.collapsed),\n )\n const disabled = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.disabled),\n )\n const isFetching = useWidgetStore(\n useShallow((state) => state.getWidget<WrapperState>(id)?.isFetching),\n )\n\n return (\n <Accordion\n className={collapsed ? 'collapsed' : ''}\n sx={{ ...styles.root, ...sx }}\n expanded={!collapsed}\n onChange={onChangeCollapsed}\n disabled={disabled}\n >\n <AccordionSummary sx={styles.summary}>\n {isFetching && <LinearProgress sx={styles.loading} color='primary' />}\n <Title>{title}</Title>\n {!!actions.length && <Actions actions={actions} />}\n {!!options.length && (\n <Options labels={labels?.options} options={options} />\n )}\n </AccordionSummary>\n <AccordionDetails sx={styles.detail}>{children}</AccordionDetails>\n </Accordion>\n )\n}\n","import type { WrapperProps, WrapperState } from './types'\nimport { WrapperUI } from './wrapper-ui'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useLayoutEffect } from 'react'\n\n/**\n * Container component providing a collapsible header with title, action buttons, and options menu for widgets. Syncs collapse, disabled, and title state with the widget store.\n *\n * @example\n * ```tsx\n * <WidgetWrapper\n * id=\"my-widget\"\n * title=\"Sales Overview\"\n * actions={[<Download key=\"download\" id=\"my-widget\" items={downloads} />]}\n * >\n * {children}\n * </WidgetWrapper>\n * ```\n */\nexport function WidgetWrapper({\n id,\n title,\n defaultCollapsed,\n disabled,\n sx,\n actions,\n options,\n labels,\n children,\n onChangeCollapsed,\n}: WrapperProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n\n useLayoutEffect(() => {\n setWidget<WrapperState>(id, {\n collapsed: defaultCollapsed,\n disabled,\n title,\n })\n }, [defaultCollapsed, disabled, title, id, setWidget])\n\n const handleChangeCollapsed = (\n event: React.SyntheticEvent<Element, Event>,\n expanded: boolean,\n ) => {\n onChangeCollapsed?.(event, expanded)\n setWidget<WrapperState>(id, { collapsed: !expanded })\n }\n\n return (\n <WrapperUI\n id={id}\n labels={labels}\n actions={actions}\n options={options}\n sx={sx}\n onChangeCollapsed={handleChangeCollapsed}\n >\n {children}\n </WrapperUI>\n )\n}\n"],"names":["styles","root","display","opacity","transition","transitions","create","duration","standard","easing","easeInOut","pointerEvents","summary","minHeight","spacing","gap","paddingInlineEnd","loading","height","left","position","top","width","zIndex","title","container","alignItems","flexGrow","text","wordBreak","overflow","WebkitLineClamp","WebkitBoxOrient","actions","flexShrink","justifyContent","options","trigger","detail","flexDirection","paddingTop","EMPTY_ACTIONS","Actions","t0","$","_c","t1","undefined","t2","map","_temp2","t3","Box","action","index","key","jsx","_temp","e","stopPropagation","EMPTY_OPTIONS","Options","labels","anchorEl","setAnchorEl","useState","Symbol","for","option","onClick","handleOptionAction","t4","t5","e_0","currentTarget","MoreVert","t6","IconButton","t7","t8","vertical","horizontal","t9","Boolean","t10","t11","sx","paddingBottom","t12","t13","option_0","jsxs","MenuItem","disabled","e_1","icon","ListItemIcon","ListItemText","label","Menu","t14","Title","children","ref","Typography","SmartTooltip","WrapperUI","id","onChangeCollapsed","state","getWidget","useWidgetStore","useShallow","state_0","collapsed","state_1","state_2","isFetching","LinearProgress","length","AccordionSummary","t15","AccordionDetails","t16","Accordion","WidgetWrapper","defaultCollapsed","setWidget","useLayoutEffect","event","expanded","handleChangeCollapsed"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carto/ps-react-ui",
|
|
3
|
-
"version": "4.4.
|
|
3
|
+
"version": "4.4.3",
|
|
4
4
|
"description": "CARTO's Professional Service React Material library",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@carto/meridian-ds": "2.
|
|
7
|
+
"@carto/meridian-ds": "2.14.0",
|
|
8
8
|
"@dnd-kit/core": "6.3.1",
|
|
9
9
|
"@dnd-kit/sortable": "10.0.0",
|
|
10
10
|
"@dnd-kit/utilities": "3.2.2",
|
|
@@ -14,15 +14,16 @@
|
|
|
14
14
|
"echarts": "6.0.0",
|
|
15
15
|
"html2canvas": "1.4.1",
|
|
16
16
|
"react-markdown": "10.1.0",
|
|
17
|
-
"zustand": "5.0.
|
|
17
|
+
"zustand": "5.0.12",
|
|
18
18
|
"@carto/ps-common-types": "1.0.0",
|
|
19
19
|
"@carto/ps-utils": "2.0.1"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
+
"@carto/meridian-ds": "^2.0.0",
|
|
22
23
|
"@dnd-kit/core": "^6.0.0",
|
|
23
24
|
"@dnd-kit/sortable": "^10.0.0",
|
|
24
25
|
"@dnd-kit/utilities": "^3.0.0",
|
|
25
|
-
"@emotion/styled": "^11.
|
|
26
|
+
"@emotion/styled": "^11.0.0",
|
|
26
27
|
"@mui/icons-material": "^5.0.0",
|
|
27
28
|
"@mui/material": "^5.0.0",
|
|
28
29
|
"echarts": "^6.0.0",
|
|
@@ -129,6 +130,10 @@
|
|
|
129
130
|
"import": "./dist/widgets/toolbar-actions.js",
|
|
130
131
|
"types": "./dist/types/widgets/toolbar-actions/index.d.ts"
|
|
131
132
|
},
|
|
133
|
+
"./widgets/utils": {
|
|
134
|
+
"import": "./dist/widgets/utils.js",
|
|
135
|
+
"types": "./dist/types/widgets/utils/index.d.ts"
|
|
136
|
+
},
|
|
132
137
|
"./widgets/wrapper": {
|
|
133
138
|
"import": "./dist/widgets/wrapper.js",
|
|
134
139
|
"types": "./dist/types/widgets/wrapper/index.d.ts"
|
|
@@ -12,6 +12,26 @@ import { Tooltip } from '../tooltip/tooltip'
|
|
|
12
12
|
|
|
13
13
|
const EMPTY_OPTIONS: BasemapsUIProps['options'] = []
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Provides an interactive basemap selector with responsive drawer, grouping support, and customizable positioning.
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* This is an uncontrolled component focused on UI presentation. Typically used with the `BasemapsControls` HOC from `@carto/ps-react-maps` for automatic state management.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <BasemapsControls mapId={mapId}>
|
|
24
|
+
* {({ basemap, setBasemap }) => (
|
|
25
|
+
* <BasemapsUI
|
|
26
|
+
* options={basemapOptions}
|
|
27
|
+
* selected={basemap}
|
|
28
|
+
* onChange={setBasemap}
|
|
29
|
+
* position="bottom-right"
|
|
30
|
+
* />
|
|
31
|
+
* )}
|
|
32
|
+
* </BasemapsControls>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
15
35
|
export function BasemapsUI({
|
|
16
36
|
options = EMPTY_OPTIONS,
|
|
17
37
|
labels: _labels,
|
|
@@ -8,6 +8,17 @@ import { useCallback, useEffect, useReducer, useRef, type JSX } from 'react'
|
|
|
8
8
|
import { ariaLabel, tooltipLabelsDefault } from './const'
|
|
9
9
|
import { Tooltip } from '../tooltip/tooltip'
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Provides a seamless interface for accessing device location through the browser's Geolocation API, with permission handling, continuous tracking, and error management.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <GeolocationControls
|
|
17
|
+
* onChange={(coords) => console.log(coords.latitude, coords.longitude)}
|
|
18
|
+
* onError={(error) => console.error(error.message)}
|
|
19
|
+
* />
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
11
22
|
export function GeolocationControls({
|
|
12
23
|
disabled,
|
|
13
24
|
labels,
|
|
@@ -24,6 +24,23 @@ const EMPTY_VALUES: LassoToolsInlineComponentProps['values'] = []
|
|
|
24
24
|
const EMPTY_BOX_PROPS: NonNullable<LassoToolsInlineComponentProps['BoxProps']> =
|
|
25
25
|
{}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Provides an inline layout variant of the lasso tools interface with toggle button groups for mode selection and inline chip management for spatial filters.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <LassoToolsInlineUI
|
|
33
|
+
* enabled={enabled}
|
|
34
|
+
* values={spatialFilters}
|
|
35
|
+
* modes={modes}
|
|
36
|
+
* modesMapping={modesMapping}
|
|
37
|
+
* modeSelected={modeSelected}
|
|
38
|
+
* onChangeMode={setModeSelected}
|
|
39
|
+
* onChipToggle={handleChipToggle}
|
|
40
|
+
* onDelete={handleDelete}
|
|
41
|
+
* />
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
27
44
|
export function LassoToolsInlineUI({
|
|
28
45
|
enabled,
|
|
29
46
|
values = EMPTY_VALUES,
|
|
@@ -36,6 +36,27 @@ const EMPTY_VALUES: LassoToolsComponentProps['values'] = []
|
|
|
36
36
|
const EMPTY_PAPER_PROPS: NonNullable<LassoToolsComponentProps['PaperProps']> =
|
|
37
37
|
{}
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Provides a comprehensive floating interface for spatial selection and drawing operations on maps, supporting polygon, rectangle, circle, freehand lasso, and edit modes.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* Supports customizable slots for action, options, chips, and secondary actions via compound component pattern (e.g., `LassoToolsUI.Action`, `LassoToolsUI.Chips`).
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* <LassoToolsUI
|
|
48
|
+
* enabled={enabled}
|
|
49
|
+
* values={spatialFilters}
|
|
50
|
+
* modes={modes}
|
|
51
|
+
* modesMapping={modesMapping}
|
|
52
|
+
* modeSelected={modeSelected}
|
|
53
|
+
* onActionToggle={setEnabled}
|
|
54
|
+
* onChangeMode={setModeSelected}
|
|
55
|
+
* onChipToggle={handleChipToggle}
|
|
56
|
+
* onDelete={handleDelete}
|
|
57
|
+
* />
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
39
60
|
export function LassoToolsUI({
|
|
40
61
|
enabled,
|
|
41
62
|
values = EMPTY_VALUES,
|
|
@@ -14,6 +14,22 @@ const DEFAULT_LABELS = {
|
|
|
14
14
|
|
|
15
15
|
const EMPTY_DATA: ListDataProps['data'] = []
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Displays structured data in an accessible list format with expandable views, interactive selection, tooltips, and loading states.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <ListDataUI
|
|
23
|
+
* data={[
|
|
24
|
+
* { id: '1', label: 'Population', value: '8.4M' },
|
|
25
|
+
* { id: '2', label: 'Median Age', value: '32 years' },
|
|
26
|
+
* ]}
|
|
27
|
+
* maxItems={3}
|
|
28
|
+
* onItemClick={(item) => setSelectedId(item.id)}
|
|
29
|
+
* selectedItemId={selectedId}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
17
33
|
export function ListDataUI({
|
|
18
34
|
data = EMPTY_DATA,
|
|
19
35
|
isLoading = false,
|
|
@@ -53,6 +53,26 @@ const EMPTY_PAPER_PROPS: NonNullable<
|
|
|
53
53
|
MeasurementToolsComponentProps['PaperProps']
|
|
54
54
|
> = {}
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Provides a measurement interface for calculating distances, areas, and buffers on maps with support for metric and imperial unit systems and real-time unit conversion.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* <MeasurementToolsUI
|
|
62
|
+
* enabled={enabled}
|
|
63
|
+
* value={measurementValue}
|
|
64
|
+
* modes={DEFAULT_MEASUREMENT_TOOLS_MODES}
|
|
65
|
+
* units={DEFAULT_MEASUREMENT_TOOLS_UNITS}
|
|
66
|
+
* modesMapping={DEFAULT_MEASUREMENT_TOOLS_MODES_MAPPING}
|
|
67
|
+
* unitsMapping={DEFAULT_MEASUREMENT_TOOLS_UNITS_MAPPING}
|
|
68
|
+
* modeSelected={mode}
|
|
69
|
+
* unitSelected={unit}
|
|
70
|
+
* onActionToggle={setEnabled}
|
|
71
|
+
* onChangeMode={setMode}
|
|
72
|
+
* onChangeUnit={setUnit}
|
|
73
|
+
* />
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
56
76
|
export function MeasurementToolsUI({
|
|
57
77
|
enabled,
|
|
58
78
|
actionProps,
|
|
@@ -4,6 +4,23 @@ import { Tooltip } from '../tooltip/tooltip'
|
|
|
4
4
|
|
|
5
5
|
const EMPTY_DEPENDENCIES: unknown[] = []
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* An intelligent tooltip wrapper that automatically detects text overflow and displays a tooltip only when content is truncated.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* Uses a render prop pattern. The child function receives a `ref` that must be attached to the element being monitored for overflow. Use the `dependencies` array to trigger re-evaluation when content or container size changes.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <SmartTooltip title="This is a long text that might get truncated">
|
|
16
|
+
* {({ ref }) => (
|
|
17
|
+
* <Typography ref={ref} noWrap sx={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>
|
|
18
|
+
* This is a long text that might get truncated
|
|
19
|
+
* </Typography>
|
|
20
|
+
* )}
|
|
21
|
+
* </SmartTooltip>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
7
24
|
export function SmartTooltip<T extends HTMLElement>({
|
|
8
25
|
title,
|
|
9
26
|
dependencies = EMPTY_DEPENDENCIES,
|
|
@@ -25,6 +25,19 @@ export function Tooltip({
|
|
|
25
25
|
)
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Sets the global default `enterNextDelay` for all Tooltip components in the application.
|
|
30
|
+
*
|
|
31
|
+
* @param delay - Delay in milliseconds before showing tooltips on subsequent hovers.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* import { setTooltipEnterDelay } from '@carto/ps-react-ui/components';
|
|
36
|
+
*
|
|
37
|
+
* // Set global delay to 300ms at app initialization
|
|
38
|
+
* setTooltipEnterDelay(300);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
28
41
|
export function setTooltipEnterDelay(delay: number) {
|
|
29
42
|
tooltipEnterDelay = delay
|
|
30
43
|
}
|
|
@@ -15,6 +15,22 @@ import { styles } from './styles'
|
|
|
15
15
|
import type { ZoomControlProps } from './types'
|
|
16
16
|
import { useCallback, type JSX } from 'react'
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Provides intuitive zoom controls for maps and zoomable interfaces with flexible layouts, loading states, and optional reset functionality.
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* This is an uncontrolled component. Typically used with the `ZoomControls` HOC from `@carto/ps-react-maps` for automatic state management.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* <ZoomControlsUI
|
|
27
|
+
* zoom={zoom}
|
|
28
|
+
* onChange={setZoom}
|
|
29
|
+
* minZoom={2}
|
|
30
|
+
* maxZoom={20}
|
|
31
|
+
* />
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
18
34
|
export function ZoomControlsUI({
|
|
19
35
|
zoom,
|
|
20
36
|
disabled,
|
|
@@ -2,11 +2,11 @@ import { useEffect, useRef } from 'react'
|
|
|
2
2
|
import { useWidgetStore } from '../widgets/stores/widget-store'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* This allows other parts of the application to access the widget's DOM element.
|
|
5
|
+
* Registers a DOM element ref and an ECharts instance ref with the widget store.
|
|
6
|
+
* This allows other parts of the application (e.g., screenshot export) to access the widget's DOM element.
|
|
7
7
|
*
|
|
8
|
-
* @param widgetId - The widget ID to register the
|
|
9
|
-
* @returns
|
|
8
|
+
* @param widgetId - The widget ID to register the refs under.
|
|
9
|
+
* @returns An object with `ref` (DOM element) and `instance` (ECharts instance) refs.
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```tsx
|
package/src/widgets/README.md
CHANGED
|
@@ -21,7 +21,7 @@ This directory contains the CARTO PS widget system with an optimized architectur
|
|
|
21
21
|
|
|
22
22
|
```
|
|
23
23
|
widgets/
|
|
24
|
-
├──
|
|
24
|
+
├── utils/ # Shared utilities (exported as @carto/ps-react-ui/widgets/utils)
|
|
25
25
|
│ ├── chart-config/ # Chart widget configuration utilities
|
|
26
26
|
│ │ ├── config-factory.ts # Factory for creating chart widget configs
|
|
27
27
|
│ │ ├── csv-modifiers.ts # CSV export utilities
|
|
@@ -48,13 +48,13 @@ widgets/
|
|
|
48
48
|
└── widget/ # Main widget orchestrator
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
## Shared Utilities (`
|
|
51
|
+
## Shared Utilities (`utils/`)
|
|
52
52
|
|
|
53
|
-
The `
|
|
53
|
+
The `utils` directory contains shared utilities used by multiple widgets. These are exported as `@carto/ps-react-ui/widgets/utils`.
|
|
54
54
|
|
|
55
55
|
### Chart Config Factory
|
|
56
56
|
|
|
57
|
-
**File:** `
|
|
57
|
+
**File:** `utils/chart-config/config-factory.ts`
|
|
58
58
|
|
|
59
59
|
Creates standardized chart widget configurations, eliminating code duplication.
|
|
60
60
|
|
|
@@ -64,13 +64,13 @@ Creates standardized chart widget configurations, eliminating code duplication.
|
|
|
64
64
|
import {
|
|
65
65
|
createChartWidgetConfig,
|
|
66
66
|
flattenObjectArrayToCSV,
|
|
67
|
-
} from '../
|
|
67
|
+
} from '../utils/chart-config'
|
|
68
68
|
|
|
69
69
|
export const myWidgetConfig = createChartWidgetConfig({
|
|
70
70
|
type: 'my-widget',
|
|
71
71
|
getOptions: ({ data, theme }) => ({
|
|
72
72
|
// EChart configuration
|
|
73
|
-
legend: buildLegendConfig(hasLegend),
|
|
73
|
+
legend: buildLegendConfig({ hasLegend }),
|
|
74
74
|
// ...
|
|
75
75
|
}),
|
|
76
76
|
csvModifier: (data) => flattenObjectArrayToCSV(data),
|
|
@@ -79,22 +79,22 @@ export const myWidgetConfig = createChartWidgetConfig({
|
|
|
79
79
|
|
|
80
80
|
### CSV Modifiers
|
|
81
81
|
|
|
82
|
-
**File:** `
|
|
82
|
+
**File:** `utils/chart-config/csv-modifiers.ts`
|
|
83
83
|
|
|
84
84
|
- `flattenObjectArrayToCSV()` - For widgets with object-based data (bar, pie, histogram, timeseries)
|
|
85
85
|
- `scatterplotDataToCSV()` - For scatterplot with array-based data
|
|
86
86
|
|
|
87
87
|
### EChart Option Builders
|
|
88
88
|
|
|
89
|
-
**File:** `
|
|
89
|
+
**File:** `utils/chart-config/option-builders.ts`
|
|
90
90
|
|
|
91
|
-
- `buildLegendConfig(hasLegend)` - Standard legend configuration
|
|
91
|
+
- `buildLegendConfig({ hasLegend, labelFormatter? })` - Standard legend configuration
|
|
92
92
|
- `buildGridConfig(hasLegend, theme, additionalConfig?)` - Grid with legend-aware spacing
|
|
93
93
|
- `createTooltipPositioner(theme)` - Tooltip positioning with overflow handling
|
|
94
94
|
|
|
95
95
|
### Skeleton Styles
|
|
96
96
|
|
|
97
|
-
**File:** `
|
|
97
|
+
**File:** `utils/skeleton/styles.ts`
|
|
98
98
|
|
|
99
99
|
- `baseSkeletonStyles.graph.container` - Base container styles for all chart skeletons
|
|
100
100
|
|
|
@@ -142,7 +142,7 @@ export const myWidgetConfig = createChartWidgetConfig({
|
|
|
142
142
|
flattenObjectArrayToCSV,
|
|
143
143
|
buildLegendConfig,
|
|
144
144
|
buildGridConfig,
|
|
145
|
-
} from '../
|
|
145
|
+
} from '../utils/chart-config'
|
|
146
146
|
|
|
147
147
|
export const myWidgetConfig = createChartWidgetConfig<
|
|
148
148
|
MyWidgetData,
|
|
@@ -159,7 +159,7 @@ export const myWidgetConfig = createChartWidgetConfig({
|
|
|
159
159
|
}: Omit<MyConfig, 'refUI'>): EchartOptionsProps {
|
|
160
160
|
const hasLegend = (data?.length ?? 0) > 1
|
|
161
161
|
return {
|
|
162
|
-
legend: buildLegendConfig(hasLegend),
|
|
162
|
+
legend: buildLegendConfig({ hasLegend }),
|
|
163
163
|
grid: buildGridConfig(hasLegend, theme),
|
|
164
164
|
// ... widget-specific configuration
|
|
165
165
|
}
|
|
@@ -171,7 +171,7 @@ export const myWidgetConfig = createChartWidgetConfig({
|
|
|
171
171
|
```typescript
|
|
172
172
|
// style.ts
|
|
173
173
|
import type { SxProps, Theme } from '@mui/material'
|
|
174
|
-
import { baseSkeletonStyles } from '../
|
|
174
|
+
import { baseSkeletonStyles } from '../utils/skeleton'
|
|
175
175
|
|
|
176
176
|
export const styles = {
|
|
177
177
|
skeleton: {
|