@carto/ps-react-ui 4.4.1 → 4.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/components.js.map +1 -1
  2. package/dist/error-CEkRPccv.js.map +1 -1
  3. package/dist/exports-Cr43OCul.js.map +1 -1
  4. package/dist/formatter-B1Xh8XDH.js +5 -0
  5. package/dist/formatter-B1Xh8XDH.js.map +1 -0
  6. package/dist/lasso-tool-BYbxrJ-7.js.map +1 -1
  7. package/dist/note-t51drNe0.js.map +1 -1
  8. package/dist/options-D9wflre6.js.map +1 -1
  9. package/dist/row-DTCV0Ocm.js.map +1 -1
  10. package/dist/series-CYNOu2Ju.js.map +1 -1
  11. package/dist/smart-tooltip-D4vwQpFf.js.map +1 -1
  12. package/dist/styles-C_8vOEep.js +167 -0
  13. package/dist/styles-C_8vOEep.js.map +1 -0
  14. package/dist/tooltip-BDnrRKrp.js.map +1 -1
  15. package/dist/types/components/basemaps/basemaps.d.ts +20 -0
  16. package/dist/types/components/geolocation-controls/geolocation-controls.d.ts +11 -0
  17. package/dist/types/components/lasso-tool/lasso-tool-inline.d.ts +17 -0
  18. package/dist/types/components/lasso-tool/lasso-tool.d.ts +21 -0
  19. package/dist/types/components/list-data/list-data.d.ts +16 -0
  20. package/dist/types/components/measurement-tools/measurement-tools.d.ts +20 -0
  21. package/dist/types/components/smart-tooltip/smart-tooltip.d.ts +17 -0
  22. package/dist/types/components/tooltip/tooltip.d.ts +13 -0
  23. package/dist/types/components/zoom-controls/zoom-controls.d.ts +16 -0
  24. package/dist/types/hooks/use-widget-ref.d.ts +4 -4
  25. package/dist/types/widgets/actions/download/download.d.ts +11 -0
  26. package/dist/types/widgets/actions/download/exports.d.ts +15 -0
  27. package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +13 -0
  28. package/dist/types/widgets/actions/index.d.ts +1 -1
  29. package/dist/types/widgets/actions/relative-data/relative-data.d.ts +1 -0
  30. package/dist/types/widgets/bar/config.d.ts +8 -4
  31. package/dist/types/widgets/category/category-ui.d.ts +3 -0
  32. package/dist/types/widgets/category/components/category-bar.d.ts +3 -0
  33. package/dist/types/widgets/category/components/category-legend.d.ts +3 -0
  34. package/dist/types/widgets/category/components/category-row-multi.d.ts +3 -0
  35. package/dist/types/widgets/category/components/category-row-other.d.ts +3 -0
  36. package/dist/types/widgets/category/components/category-row-single.d.ts +3 -0
  37. package/dist/types/widgets/category/config.d.ts +11 -0
  38. package/dist/types/widgets/echart/echart-ui.d.ts +7 -0
  39. package/dist/types/widgets/echart/echart.d.ts +6 -0
  40. package/dist/types/widgets/echart/options.d.ts +7 -0
  41. package/dist/types/widgets/echart/types.d.ts +1 -0
  42. package/dist/types/widgets/echart/utils.d.ts +41 -0
  43. package/dist/types/widgets/error/error.d.ts +10 -0
  44. package/dist/types/widgets/formula/components/item.d.ts +3 -0
  45. package/dist/types/widgets/formula/components/prefix.d.ts +3 -0
  46. package/dist/types/widgets/formula/components/row.d.ts +3 -0
  47. package/dist/types/widgets/formula/components/series.d.ts +3 -0
  48. package/dist/types/widgets/formula/components/suffix.d.ts +3 -0
  49. package/dist/types/widgets/formula/components/value.d.ts +3 -0
  50. package/dist/types/widgets/formula/config.d.ts +11 -0
  51. package/dist/types/widgets/formula/formula-ui.d.ts +3 -0
  52. package/dist/types/widgets/histogram/config.d.ts +8 -4
  53. package/dist/types/widgets/loader/loader.d.ts +22 -0
  54. package/dist/types/widgets/loader/utils.d.ts +26 -3
  55. package/dist/types/widgets/markdown/config.d.ts +10 -0
  56. package/dist/types/widgets/markdown/markdown-ui.d.ts +7 -0
  57. package/dist/types/widgets/markdown/markdown.d.ts +3 -0
  58. package/dist/types/widgets/note/note.d.ts +10 -0
  59. package/dist/types/widgets/pie/config.d.ts +8 -4
  60. package/dist/types/widgets/range/components/range-item.d.ts +3 -0
  61. package/dist/types/widgets/range/config.d.ts +5 -0
  62. package/dist/types/widgets/range/range-ui.d.ts +3 -0
  63. package/dist/types/widgets/scatterplot/config.d.ts +7 -3
  64. package/dist/types/widgets/selection-summary/selection-summary.d.ts +11 -0
  65. package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +10 -0
  66. package/dist/types/widgets/spread/components/max-value.d.ts +3 -0
  67. package/dist/types/widgets/spread/components/min-value.d.ts +3 -0
  68. package/dist/types/widgets/spread/components/separator.d.ts +3 -0
  69. package/dist/types/widgets/spread/config.d.ts +11 -0
  70. package/dist/types/widgets/spread/spread-ui.d.ts +3 -0
  71. package/dist/types/widgets/subheader/subheader.d.ts +11 -0
  72. package/dist/types/widgets/table/config.d.ts +8 -3
  73. package/dist/types/widgets/table/hooks/use-pagination.d.ts +11 -3
  74. package/dist/types/widgets/table/hooks/use-selection.d.ts +11 -2
  75. package/dist/types/widgets/table/hooks/use-sort.d.ts +11 -3
  76. package/dist/types/widgets/timeseries/config.d.ts +8 -4
  77. package/dist/types/widgets/utils/chart-config/download-config.d.ts +3 -0
  78. package/dist/types/widgets/{_shared → utils}/chart-config/index.d.ts +2 -0
  79. package/dist/types/widgets/{_shared → utils}/chart-config/option-builders.d.ts +1 -1
  80. package/dist/types/widgets/utils/formatter.d.ts +1 -0
  81. package/dist/types/widgets/utils/index.d.ts +7 -0
  82. package/dist/types/widgets/wrapper/components/actions.d.ts +3 -0
  83. package/dist/types/widgets/wrapper/components/options.d.ts +3 -0
  84. package/dist/types/widgets/wrapper/components/title.d.ts +3 -0
  85. package/dist/types/widgets/wrapper/wrapper-ui.d.ts +14 -0
  86. package/dist/types/widgets/wrapper/wrapper.d.ts +14 -0
  87. package/dist/use-widget-ref-wtFLDFCD.js.map +1 -1
  88. package/dist/utils-BOhInag6.js.map +1 -1
  89. package/dist/widgets/actions.js +651 -628
  90. package/dist/widgets/actions.js.map +1 -1
  91. package/dist/widgets/bar.js +66 -86
  92. package/dist/widgets/bar.js.map +1 -1
  93. package/dist/widgets/category.js +21 -21
  94. package/dist/widgets/category.js.map +1 -1
  95. package/dist/widgets/echart.js.map +1 -1
  96. package/dist/widgets/formula.js +54 -54
  97. package/dist/widgets/formula.js.map +1 -1
  98. package/dist/widgets/histogram.js +45 -65
  99. package/dist/widgets/histogram.js.map +1 -1
  100. package/dist/widgets/loader.js.map +1 -1
  101. package/dist/widgets/markdown.js.map +1 -1
  102. package/dist/widgets/pie.js +122 -99
  103. package/dist/widgets/pie.js.map +1 -1
  104. package/dist/widgets/range.js +23 -22
  105. package/dist/widgets/range.js.map +1 -1
  106. package/dist/widgets/scatterplot.js +39 -59
  107. package/dist/widgets/scatterplot.js.map +1 -1
  108. package/dist/widgets/selection-summary.js.map +1 -1
  109. package/dist/widgets/skeleton-loader.js.map +1 -1
  110. package/dist/widgets/spread.js +40 -41
  111. package/dist/widgets/spread.js.map +1 -1
  112. package/dist/widgets/subheader.js.map +1 -1
  113. package/dist/widgets/table.js.map +1 -1
  114. package/dist/widgets/timeseries.js +39 -59
  115. package/dist/widgets/timeseries.js.map +1 -1
  116. package/dist/widgets/utils.js +31 -0
  117. package/dist/widgets/utils.js.map +1 -0
  118. package/dist/widgets/wrapper.js.map +1 -1
  119. package/package.json +5 -1
  120. package/src/components/basemaps/basemaps.tsx +20 -0
  121. package/src/components/geolocation-controls/geolocation-controls.tsx +11 -0
  122. package/src/components/lasso-tool/lasso-tool-inline.tsx +17 -0
  123. package/src/components/lasso-tool/lasso-tool.tsx +21 -0
  124. package/src/components/list-data/list-data.tsx +16 -0
  125. package/src/components/measurement-tools/measurement-tools.tsx +20 -0
  126. package/src/components/smart-tooltip/smart-tooltip.tsx +17 -0
  127. package/src/components/tooltip/tooltip.tsx +13 -0
  128. package/src/components/zoom-controls/zoom-controls.tsx +16 -0
  129. package/src/hooks/use-widget-ref.ts +4 -4
  130. package/src/widgets/README.md +10 -10
  131. package/src/widgets/actions/download/download.tsx +11 -0
  132. package/src/widgets/actions/download/exports.tsx +15 -0
  133. package/src/widgets/actions/fullscreen/fullscreen.tsx +13 -0
  134. package/src/widgets/actions/index.ts +1 -0
  135. package/src/widgets/actions/relative-data/relative-data.test.tsx +62 -1
  136. package/src/widgets/actions/relative-data/relative-data.tsx +62 -39
  137. package/src/widgets/bar/config.ts +12 -20
  138. package/src/widgets/bar/style.ts +1 -1
  139. package/src/widgets/category/category-ui.tsx +4 -2
  140. package/src/widgets/category/components/category-bar.tsx +3 -0
  141. package/src/widgets/category/components/category-legend.tsx +3 -0
  142. package/src/widgets/category/components/category-row-multi.tsx +3 -0
  143. package/src/widgets/category/components/category-row-other.tsx +3 -0
  144. package/src/widgets/category/components/category-row-single.tsx +3 -0
  145. package/src/widgets/category/config.ts +11 -0
  146. package/src/widgets/echart/echart-ui.tsx +7 -0
  147. package/src/widgets/echart/echart.tsx +6 -0
  148. package/src/widgets/echart/options.ts +7 -0
  149. package/src/widgets/echart/types.ts +1 -0
  150. package/src/widgets/echart/utils.ts +41 -0
  151. package/src/widgets/error/error.tsx +10 -0
  152. package/src/widgets/formula/components/item.tsx +3 -0
  153. package/src/widgets/formula/components/prefix.tsx +3 -0
  154. package/src/widgets/formula/components/row.tsx +3 -0
  155. package/src/widgets/formula/components/series.tsx +3 -0
  156. package/src/widgets/formula/components/suffix.tsx +3 -0
  157. package/src/widgets/formula/components/value.tsx +4 -2
  158. package/src/widgets/formula/config.ts +11 -0
  159. package/src/widgets/formula/formula-ui.tsx +3 -0
  160. package/src/widgets/histogram/config.ts +11 -20
  161. package/src/widgets/histogram/style.ts +1 -1
  162. package/src/widgets/loader/loader.tsx +22 -0
  163. package/src/widgets/loader/utils.ts +26 -3
  164. package/src/widgets/markdown/config.ts +10 -0
  165. package/src/widgets/markdown/markdown-ui.tsx +7 -0
  166. package/src/widgets/markdown/markdown.tsx +3 -0
  167. package/src/widgets/note/note.tsx +10 -0
  168. package/src/widgets/pie/config.ts +85 -30
  169. package/src/widgets/pie/style.ts +1 -1
  170. package/src/widgets/range/components/range-item.tsx +5 -2
  171. package/src/widgets/range/config.ts +5 -0
  172. package/src/widgets/range/range-ui.tsx +3 -0
  173. package/src/widgets/scatterplot/config.ts +11 -20
  174. package/src/widgets/scatterplot/style.ts +1 -1
  175. package/src/widgets/selection-summary/selection-summary.tsx +11 -0
  176. package/src/widgets/skeleton-loader/skeleton-loader.tsx +10 -0
  177. package/src/widgets/spread/components/max-value.tsx +4 -2
  178. package/src/widgets/spread/components/min-value.tsx +4 -2
  179. package/src/widgets/spread/components/separator.tsx +3 -0
  180. package/src/widgets/spread/config.ts +11 -0
  181. package/src/widgets/spread/spread-ui.tsx +3 -0
  182. package/src/widgets/subheader/subheader.tsx +11 -0
  183. package/src/widgets/table/config.ts +8 -3
  184. package/src/widgets/table/hooks/use-pagination.ts +11 -3
  185. package/src/widgets/table/hooks/use-selection.ts +11 -2
  186. package/src/widgets/table/hooks/use-sort.ts +11 -3
  187. package/src/widgets/timeseries/config.ts +11 -20
  188. package/src/widgets/timeseries/style.ts +1 -1
  189. package/src/widgets/utils/chart-config/download-config.ts +22 -0
  190. package/src/widgets/{_shared → utils}/chart-config/index.ts +4 -0
  191. package/src/widgets/{_shared → utils}/chart-config/option-builders.ts +1 -1
  192. package/src/widgets/utils/formatter.ts +1 -0
  193. package/src/widgets/utils/index.ts +26 -0
  194. package/src/widgets/wrapper/components/actions.tsx +3 -0
  195. package/src/widgets/wrapper/components/options.tsx +3 -0
  196. package/src/widgets/wrapper/components/title.tsx +3 -0
  197. package/src/widgets/wrapper/wrapper-ui.tsx +14 -0
  198. package/src/widgets/wrapper/wrapper.tsx +14 -0
  199. package/dist/styles-CAroD5Rc.js +0 -123
  200. package/dist/styles-CAroD5Rc.js.map +0 -1
  201. /package/dist/types/widgets/{_shared → utils}/chart-config/config-factory.d.ts +0 -0
  202. /package/dist/types/widgets/{_shared → utils}/chart-config/csv-modifiers.d.ts +0 -0
  203. /package/dist/types/widgets/{_shared → utils}/chart-config/option-builders.test.d.ts +0 -0
  204. /package/dist/types/widgets/{_shared → utils}/skeleton/index.d.ts +0 -0
  205. /package/dist/types/widgets/{_shared → utils}/skeleton/styles.d.ts +0 -0
  206. /package/src/widgets/{_shared → utils}/chart-config/config-factory.ts +0 -0
  207. /package/src/widgets/{_shared → utils}/chart-config/csv-modifiers.ts +0 -0
  208. /package/src/widgets/{_shared → utils}/chart-config/option-builders.test.ts +0 -0
  209. /package/src/widgets/{_shared → utils}/skeleton/index.ts +0 -0
  210. /package/src/widgets/{_shared → utils}/skeleton/styles.ts +0 -0
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@carto/ps-react-ui",
3
- "version": "4.4.1",
3
+ "version": "4.4.2",
4
4
  "description": "CARTO's Professional Service React Material library",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -129,6 +129,10 @@
129
129
  "import": "./dist/widgets/toolbar-actions.js",
130
130
  "types": "./dist/types/widgets/toolbar-actions/index.d.ts"
131
131
  },
132
+ "./widgets/utils": {
133
+ "import": "./dist/widgets/utils.js",
134
+ "types": "./dist/types/widgets/utils/index.d.ts"
135
+ },
132
136
  "./widgets/wrapper": {
133
137
  "import": "./dist/widgets/wrapper.js",
134
138
  "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
- * Custom hook for registering a DOM element ref with the widget store.
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 ref under
9
- * @returns A ref object to attach to the DOM element
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
@@ -21,7 +21,7 @@ This directory contains the CARTO PS widget system with an optimized architectur
21
21
 
22
22
  ```
23
23
  widgets/
24
- ├── _shared/ # Shared utilities (internal, not exported)
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 (`_shared/`)
51
+ ## Shared Utilities (`utils/`)
52
52
 
53
- The `_shared` directory contains internal utilities used by multiple widgets. These are **not exported** from the package and are only for internal use.
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:** `_shared/chart-config/config-factory.ts`
57
+ **File:** `utils/chart-config/config-factory.ts`
58
58
 
59
59
  Creates standardized chart widget configurations, eliminating code duplication.
60
60
 
@@ -64,7 +64,7 @@ Creates standardized chart widget configurations, eliminating code duplication.
64
64
  import {
65
65
  createChartWidgetConfig,
66
66
  flattenObjectArrayToCSV,
67
- } from '../_shared/chart-config'
67
+ } from '../utils/chart-config'
68
68
 
69
69
  export const myWidgetConfig = createChartWidgetConfig({
70
70
  type: 'my-widget',
@@ -79,14 +79,14 @@ export const myWidgetConfig = createChartWidgetConfig({
79
79
 
80
80
  ### CSV Modifiers
81
81
 
82
- **File:** `_shared/chart-config/csv-modifiers.ts`
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:** `_shared/chart-config/option-builders.ts`
89
+ **File:** `utils/chart-config/option-builders.ts`
90
90
 
91
91
  - `buildLegendConfig(hasLegend)` - Standard legend configuration
92
92
  - `buildGridConfig(hasLegend, theme, additionalConfig?)` - Grid with legend-aware spacing
@@ -94,7 +94,7 @@ export const myWidgetConfig = createChartWidgetConfig({
94
94
 
95
95
  ### Skeleton Styles
96
96
 
97
- **File:** `_shared/skeleton/styles.ts`
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 '../_shared/chart-config'
145
+ } from '../utils/chart-config'
146
146
 
147
147
  export const myWidgetConfig = createChartWidgetConfig<
148
148
  MyWidgetData,
@@ -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 '../_shared/skeleton'
174
+ import { baseSkeletonStyles } from '../utils/skeleton'
175
175
 
176
176
  export const styles = {
177
177
  skeleton: {
@@ -14,6 +14,17 @@ import { useShallow } from 'zustand/shallow'
14
14
 
15
15
  const EMPTY_LABELS: NonNullable<DownloadProps['labels']> = {}
16
16
 
17
+ /**
18
+ * Dropdown menu action for exporting widget data in various formats (CSV, PNG, etc.).
19
+ *
20
+ * Reads widget data from the store and triggers downloads using the modifier
21
+ * function defined in each `DownloadItem`.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * <Download id={widgetId} items={barDownloadConfig({ refUI })} />
26
+ * ```
27
+ */
17
28
  export function Download({
18
29
  id,
19
30
  items,
@@ -28,6 +28,12 @@ async function downloadFileToCSV<D>(data: D[][]) {
28
28
  return Promise.resolve(URL.createObjectURL(blob))
29
29
  }
30
30
 
31
+ /**
32
+ * Pre-configured download item for exporting widget data as a CSV file.
33
+ *
34
+ * Converts a 2D array of data into CSV format with proper escaping and
35
+ * triggers a browser download. Revokes the object URL after download.
36
+ */
31
37
  export const downloadToCSV: DownloadItem<unknown[][]> = {
32
38
  id: 'csv',
33
39
  label: 'CSV',
@@ -91,6 +97,15 @@ async function downloadFileToPNG(ref: Ref<HTMLElement | null> | undefined) {
91
97
  return Promise.resolve(result)
92
98
  }
93
99
 
100
+ /**
101
+ * Pre-configured download item for exporting a widget as a PNG image.
102
+ *
103
+ * Uses html2canvas to capture the widget DOM element referenced by a React ref.
104
+ * Strips toolbar and action elements before capturing.
105
+ *
106
+ * @remarks
107
+ * The modifier expects a React ref to the widget's root HTML element, not raw data.
108
+ */
94
109
  export const downloadToPNG: Omit<DownloadItem, 'modifier'> & {
95
110
  modifier: (
96
111
  ref: Ref<HTMLElement | null> | undefined,
@@ -19,6 +19,19 @@ const EMPTY_DIALOG_CONTENT_PROPS: NonNullable<
19
19
  FullScreenProps['DialogContentProps']
20
20
  > = {}
21
21
 
22
+ /**
23
+ * Displays widget content in a fullscreen modal dialog.
24
+ *
25
+ * Manages fullscreen state via the widget store and renders a MUI Dialog
26
+ * with the widget title and a close button.
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <FullScreen id="my-widget" labels={{ ariaLabel: 'Expand chart' }}>
31
+ * <ChartContent id="my-widget" />
32
+ * </FullScreen>
33
+ * ```
34
+ */
22
35
  export function FullScreen({
23
36
  id,
24
37
  labels,
@@ -11,6 +11,7 @@ export { downloadToCSV, downloadToPNG } from './download/exports'
11
11
  export {
12
12
  RelativeData,
13
13
  RELATIVE_DATA_TOOL_ID,
14
+ RELATIVE_DATA_CONFIG_TOOL_ID,
14
15
  } from './relative-data/relative-data'
15
16
  export type { RelativeDataProps } from './relative-data/types'
16
17
 
@@ -1,6 +1,10 @@
1
1
  import { describe, test, expect, beforeEach } from 'vitest'
2
2
  import { render, screen, fireEvent, waitFor } from '@testing-library/react'
3
- import { RelativeData, RELATIVE_DATA_TOOL_ID } from './relative-data'
3
+ import {
4
+ RelativeData,
5
+ RELATIVE_DATA_TOOL_ID,
6
+ RELATIVE_DATA_CONFIG_TOOL_ID,
7
+ } from './relative-data'
4
8
  import { useWidgetStore } from '../../stores/widget-store'
5
9
  import type { EchartWidgetData } from '../../echart/types'
6
10
 
@@ -223,6 +227,63 @@ describe('RelativeData', () => {
223
227
  expect(button.hasAttribute('disabled')).toBeTruthy()
224
228
  })
225
229
 
230
+ test('registers config tool on mount', async () => {
231
+ render(<RelativeData id={widgetId} />)
232
+
233
+ await waitFor(() => {
234
+ const widget = useWidgetStore.getState().getWidget(widgetId)
235
+ const tool = widget?.registeredTools?.find(
236
+ (t) => t.id === RELATIVE_DATA_CONFIG_TOOL_ID,
237
+ )
238
+ expect(tool).toBeTruthy()
239
+ expect(tool?.type).toBe('config')
240
+ expect(tool?.enabled).toBe(true)
241
+ })
242
+ })
243
+
244
+ test('sets formatter via config pipeline when toggling to relative mode', async () => {
245
+ useWidgetStore.getState().setWidget(widgetId, { max: 500 })
246
+
247
+ render(<RelativeData id={widgetId} />)
248
+
249
+ const button = screen.getByRole('button')
250
+ fireEvent.click(button)
251
+
252
+ await waitFor(() => {
253
+ const widget = useWidgetStore.getState().getWidget(widgetId)
254
+ const tool = widget?.registeredTools?.find(
255
+ (t) => t.id === RELATIVE_DATA_CONFIG_TOOL_ID,
256
+ )
257
+ expect(tool?.config?.isRelative).toBe(true)
258
+ expect(tool?.config?.originalFormatter).toBeUndefined()
259
+ expect(tool?.config?.originalMax).toBe(500)
260
+ })
261
+ })
262
+
263
+ test('restores original formatter via config pipeline when toggling back', () => {
264
+ const customFormatter = (value: number) => `$${value}`
265
+ useWidgetStore
266
+ .getState()
267
+ .setWidget(widgetId, { formatter: customFormatter, max: 200 })
268
+
269
+ render(<RelativeData id={widgetId} />)
270
+
271
+ const button = screen.getByRole('button')
272
+
273
+ // Toggle to relative
274
+ fireEvent.click(button)
275
+ // Toggle back to absolute
276
+ fireEvent.click(button)
277
+
278
+ const widget = useWidgetStore.getState().getWidget(widgetId)
279
+ const tool = widget?.registeredTools?.find(
280
+ (t) => t.id === RELATIVE_DATA_CONFIG_TOOL_ID,
281
+ )
282
+ expect(tool?.config?.isRelative).toBe(false)
283
+ expect(tool?.config?.originalFormatter).toBe(customFormatter)
284
+ expect(tool?.config?.originalMax).toBe(200)
285
+ })
286
+
226
287
  test('recalculates relative values when store data changes externally while in relative mode', async () => {
227
288
  const initialData: EchartWidgetData = [
228
289
  [