@carto/ps-react-ui 4.9.1 → 4.11.1

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 (207) hide show
  1. package/dist/category-Dnd2_j0x.js +719 -0
  2. package/dist/category-Dnd2_j0x.js.map +1 -0
  3. package/dist/change-column-DjjwoPt1.js +1143 -0
  4. package/dist/change-column-DjjwoPt1.js.map +1 -0
  5. package/dist/chat.js +1507 -0
  6. package/dist/chat.js.map +1 -0
  7. package/dist/components.js +122 -120
  8. package/dist/components.js.map +1 -1
  9. package/dist/copy-button-DGL1tyli.js +26 -0
  10. package/dist/copy-button-DGL1tyli.js.map +1 -0
  11. package/dist/{data-zoom-layout-0QSptXG_.js → data-zoom-layout-CkVnm6ej.js} +3 -3
  12. package/dist/{data-zoom-layout-0QSptXG_.js.map → data-zoom-layout-CkVnm6ej.js.map} +1 -1
  13. package/dist/{download-config-CzmjOT2T.js → download-config-oJIFZ2WC.js} +9 -8
  14. package/dist/{download-config-CzmjOT2T.js.map → download-config-oJIFZ2WC.js.map} +1 -1
  15. package/dist/{png-item-CS4z1iSH.js → png-item-BE9uEqlD.js} +2 -2
  16. package/dist/png-item-BE9uEqlD.js.map +1 -0
  17. package/dist/{spread-Y9R1f5dm.js → spread-DYNpzgh_.js} +10 -11
  18. package/dist/{spread-Y9R1f5dm.js.map → spread-DYNpzgh_.js.map} +1 -1
  19. package/dist/{table-CQCAnDLb.js → table-C9IMbTr0.js} +50 -53
  20. package/dist/table-C9IMbTr0.js.map +1 -0
  21. package/dist/types/chat/bubbles/chat-error-message.d.ts +2 -0
  22. package/dist/types/chat/bubbles/chat-suggestion-button.d.ts +2 -0
  23. package/dist/types/chat/bubbles/chat-user-message.d.ts +2 -0
  24. package/dist/types/chat/bubbles/index.d.ts +4 -0
  25. package/dist/types/chat/const.d.ts +4 -0
  26. package/dist/types/chat/containers/chat-content.d.ts +2 -0
  27. package/dist/types/chat/containers/chat-footer.d.ts +2 -0
  28. package/dist/types/chat/containers/chat-header.d.ts +2 -0
  29. package/dist/types/chat/containers/chat-starter.d.ts +2 -0
  30. package/dist/types/chat/containers/index.d.ts +4 -0
  31. package/dist/types/chat/containers/styles.d.ts +93 -0
  32. package/dist/types/chat/feedback/chat-loader.d.ts +2 -0
  33. package/dist/types/chat/feedback/chat-rating-action.d.ts +2 -0
  34. package/dist/types/chat/feedback/chat-thinking.d.ts +2 -0
  35. package/dist/types/chat/feedback/chat-tool-code-area.d.ts +2 -0
  36. package/dist/types/chat/feedback/chat-tool-full-view-dialog.d.ts +2 -0
  37. package/dist/types/chat/feedback/chat-tool-group.d.ts +2 -0
  38. package/dist/types/chat/feedback/chat-tool-trace.d.ts +3 -0
  39. package/dist/types/chat/feedback/get-tool-label.d.ts +2 -0
  40. package/dist/types/chat/feedback/index.d.ts +8 -0
  41. package/dist/types/chat/feedback/styles.d.ts +211 -0
  42. package/dist/types/chat/index.d.ts +20 -0
  43. package/dist/types/chat/types.d.ts +184 -0
  44. package/dist/types/chat/use-typewriter.d.ts +30 -0
  45. package/dist/types/components/copy-button/copy-button.d.ts +2 -0
  46. package/dist/types/components/copy-button/types.d.ts +6 -0
  47. package/dist/types/components/index.d.ts +2 -0
  48. package/dist/types/widgets/actions/brush-toggle/style.d.ts +1 -1
  49. package/dist/types/widgets/actions/shared/styles.d.ts +1 -1
  50. package/dist/types/widgets/actions/zoom-toggle/style.d.ts +1 -1
  51. package/dist/types/widgets/echart/types.d.ts +1 -1
  52. package/dist/types/widgets/toolbar-actions/styles.d.ts +1 -1
  53. package/dist/types/widgets-v2/actions/brush-toggle/style.d.ts +1 -1
  54. package/dist/types/widgets-v2/actions/change-column/style.d.ts +1 -1
  55. package/dist/types/widgets-v2/actions/fullscreen/style.d.ts +1 -1
  56. package/dist/types/widgets-v2/actions/index.d.ts +1 -0
  57. package/dist/types/widgets-v2/actions/lock-selection/style.d.ts +1 -1
  58. package/dist/types/widgets-v2/actions/relative-data/style.d.ts +1 -1
  59. package/dist/types/widgets-v2/actions/searcher/style.d.ts +1 -1
  60. package/dist/types/widgets-v2/actions/show-all/index.d.ts +2 -0
  61. package/dist/types/widgets-v2/actions/show-all/labels.d.ts +5 -0
  62. package/dist/types/widgets-v2/actions/show-all/show-all.d.ts +33 -0
  63. package/dist/types/widgets-v2/actions/show-all/style.d.ts +8 -0
  64. package/dist/types/widgets-v2/actions/stack-toggle/style.d.ts +1 -1
  65. package/dist/types/widgets-v2/actions/zoom-toggle/style.d.ts +1 -1
  66. package/dist/types/widgets-v2/category/category-ui.d.ts +9 -2
  67. package/dist/types/widgets-v2/category/category.d.ts +9 -2
  68. package/dist/types/widgets-v2/category/components/category-row-other.d.ts +19 -6
  69. package/dist/types/widgets-v2/category/style.d.ts +21 -2
  70. package/dist/types/widgets-v2/category/types.d.ts +2 -0
  71. package/dist/types/widgets-v2/index.d.ts +3 -2
  72. package/dist/types/widgets-v2/selection-summary/labels.d.ts +7 -2
  73. package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +13 -6
  74. package/dist/types/widgets-v2/selection-summary/style.d.ts +15 -0
  75. package/dist/widgets/actions.js +115 -114
  76. package/dist/widgets/actions.js.map +1 -1
  77. package/dist/widgets/bar.js +1 -1
  78. package/dist/widgets/category.js +9 -8
  79. package/dist/widgets/category.js.map +1 -1
  80. package/dist/widgets/formula.js +11 -10
  81. package/dist/widgets/formula.js.map +1 -1
  82. package/dist/widgets/histogram.js +7 -6
  83. package/dist/widgets/histogram.js.map +1 -1
  84. package/dist/widgets/markdown.js +9 -8
  85. package/dist/widgets/markdown.js.map +1 -1
  86. package/dist/widgets/pie.js +1 -1
  87. package/dist/widgets/scatterplot.js +1 -1
  88. package/dist/widgets/spread.js +9 -8
  89. package/dist/widgets/spread.js.map +1 -1
  90. package/dist/widgets/table.js +17 -16
  91. package/dist/widgets/table.js.map +1 -1
  92. package/dist/widgets/timeseries.js +1 -1
  93. package/dist/widgets/utils.js +1 -1
  94. package/dist/widgets/wrapper.js +3 -2
  95. package/dist/widgets/wrapper.js.map +1 -1
  96. package/dist/widgets-v2/actions.js +41 -37
  97. package/dist/widgets-v2/bar.js +9 -10
  98. package/dist/widgets-v2/bar.js.map +1 -1
  99. package/dist/widgets-v2/category.js +25 -26
  100. package/dist/widgets-v2/category.js.map +1 -1
  101. package/dist/widgets-v2/formula.js +3 -3
  102. package/dist/widgets-v2/histogram.js +11 -13
  103. package/dist/widgets-v2/histogram.js.map +1 -1
  104. package/dist/widgets-v2/markdown.js +26 -27
  105. package/dist/widgets-v2/markdown.js.map +1 -1
  106. package/dist/widgets-v2/pie.js +8 -10
  107. package/dist/widgets-v2/pie.js.map +1 -1
  108. package/dist/widgets-v2/scatterplot.js +10 -12
  109. package/dist/widgets-v2/scatterplot.js.map +1 -1
  110. package/dist/widgets-v2/spread.js +15 -16
  111. package/dist/widgets-v2/spread.js.map +1 -1
  112. package/dist/widgets-v2/table.js +39 -40
  113. package/dist/widgets-v2/table.js.map +1 -1
  114. package/dist/widgets-v2/timeseries.js +9 -11
  115. package/dist/widgets-v2/timeseries.js.map +1 -1
  116. package/dist/widgets-v2/utils.js +1 -1
  117. package/dist/widgets-v2.js +284 -282
  118. package/dist/widgets-v2.js.map +1 -1
  119. package/package.json +5 -1
  120. package/src/chat/bubbles/chat-agent-message.test.tsx +30 -0
  121. package/src/chat/bubbles/chat-agent-message.tsx +11 -0
  122. package/src/chat/bubbles/chat-error-message.test.tsx +40 -0
  123. package/src/chat/bubbles/chat-error-message.tsx +47 -0
  124. package/src/chat/bubbles/chat-suggestion-button.test.tsx +24 -0
  125. package/src/chat/bubbles/chat-suggestion-button.tsx +27 -0
  126. package/src/chat/bubbles/chat-user-message.test.tsx +27 -0
  127. package/src/chat/bubbles/chat-user-message.tsx +27 -0
  128. package/src/chat/bubbles/index.ts +4 -0
  129. package/src/chat/bubbles/styles.ts +148 -0
  130. package/src/chat/const.ts +4 -0
  131. package/src/chat/containers/chat-content.test.tsx +269 -0
  132. package/src/chat/containers/chat-content.tsx +142 -0
  133. package/src/chat/containers/chat-footer.test.tsx +34 -0
  134. package/src/chat/containers/chat-footer.tsx +78 -0
  135. package/src/chat/containers/chat-header.test.tsx +28 -0
  136. package/src/chat/containers/chat-header.tsx +29 -0
  137. package/src/chat/containers/chat-starter.test.tsx +32 -0
  138. package/src/chat/containers/chat-starter.tsx +75 -0
  139. package/src/chat/containers/index.ts +4 -0
  140. package/src/chat/containers/styles.ts +96 -0
  141. package/src/chat/feedback/chat-actions-container.test.tsx +64 -0
  142. package/src/chat/feedback/chat-actions-container.tsx +7 -0
  143. package/src/chat/feedback/chat-loader.test.tsx +10 -0
  144. package/src/chat/feedback/chat-loader.tsx +31 -0
  145. package/src/chat/feedback/chat-rating-action.tsx +43 -0
  146. package/src/chat/feedback/chat-thinking.test.tsx +15 -0
  147. package/src/chat/feedback/chat-thinking.tsx +23 -0
  148. package/src/chat/feedback/chat-tool-code-area.test.tsx +23 -0
  149. package/src/chat/feedback/chat-tool-code-area.tsx +71 -0
  150. package/src/chat/feedback/chat-tool-full-view-dialog.test.tsx +39 -0
  151. package/src/chat/feedback/chat-tool-full-view-dialog.tsx +121 -0
  152. package/src/chat/feedback/chat-tool-group.test.tsx +84 -0
  153. package/src/chat/feedback/chat-tool-group.tsx +156 -0
  154. package/src/chat/feedback/chat-tool-trace.test.tsx +81 -0
  155. package/src/chat/feedback/chat-tool-trace.tsx +192 -0
  156. package/src/chat/feedback/get-tool-label.test.tsx +91 -0
  157. package/src/chat/feedback/get-tool-label.ts +13 -0
  158. package/src/chat/feedback/index.ts +8 -0
  159. package/src/chat/feedback/styles.ts +229 -0
  160. package/src/chat/index.ts +59 -0
  161. package/src/chat/types.ts +215 -0
  162. package/src/chat/use-typewriter.test.tsx +38 -0
  163. package/src/chat/use-typewriter.ts +82 -0
  164. package/src/components/copy-button/copy-button.test.tsx +41 -0
  165. package/src/components/copy-button/copy-button.tsx +31 -0
  166. package/src/components/copy-button/types.ts +10 -0
  167. package/src/components/index.ts +3 -0
  168. package/src/widgets/echart/types.ts +1 -1
  169. package/src/widgets-v2/actions/brush-toggle/brush-toggle.tsx +1 -1
  170. package/src/widgets-v2/actions/change-column/sortable-column-item.tsx +1 -1
  171. package/src/widgets-v2/actions/download/download.tsx +1 -1
  172. package/src/widgets-v2/actions/download/icons.tsx +1 -1
  173. package/src/widgets-v2/actions/fullscreen/fullscreen.tsx +3 -3
  174. package/src/widgets-v2/actions/index.ts +8 -0
  175. package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +2 -2
  176. package/src/widgets-v2/actions/relative-data/relative-data.tsx +1 -1
  177. package/src/widgets-v2/actions/searcher/searcher-toggle.tsx +1 -1
  178. package/src/widgets-v2/actions/searcher/searcher.tsx +2 -2
  179. package/src/widgets-v2/actions/show-all/index.ts +7 -0
  180. package/src/widgets-v2/actions/show-all/labels.ts +8 -0
  181. package/src/widgets-v2/actions/show-all/show-all.test.tsx +50 -0
  182. package/src/widgets-v2/actions/show-all/show-all.tsx +72 -0
  183. package/src/widgets-v2/actions/show-all/style.ts +8 -0
  184. package/src/widgets-v2/actions/stack-toggle/stack-toggle.tsx +1 -1
  185. package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.tsx +1 -1
  186. package/src/widgets-v2/category/category-ui.test.tsx +26 -10
  187. package/src/widgets-v2/category/category-ui.tsx +13 -3
  188. package/src/widgets-v2/category/category.test.tsx +4 -4
  189. package/src/widgets-v2/category/category.tsx +10 -1
  190. package/src/widgets-v2/category/components/category-row-other.test.tsx +36 -7
  191. package/src/widgets-v2/category/components/category-row-other.tsx +64 -13
  192. package/src/widgets-v2/category/style.ts +35 -4
  193. package/src/widgets-v2/category/types.ts +2 -0
  194. package/src/widgets-v2/index.ts +3 -0
  195. package/src/widgets-v2/selection-summary/labels.ts +8 -4
  196. package/src/widgets-v2/selection-summary/selection-summary.test.tsx +15 -9
  197. package/src/widgets-v2/selection-summary/selection-summary.tsx +42 -22
  198. package/src/widgets-v2/selection-summary/style.ts +15 -0
  199. package/src/widgets-v2/table/table-ui.tsx +4 -4
  200. package/src/widgets-v2/toolbox/toolbox.tsx +1 -1
  201. package/src/widgets-v2/wrapper/widget-wrapper.tsx +1 -1
  202. package/dist/category-DwaeYjpX.js +0 -656
  203. package/dist/category-DwaeYjpX.js.map +0 -1
  204. package/dist/change-column-B4IT0rh6.js +0 -1110
  205. package/dist/change-column-B4IT0rh6.js.map +0 -1
  206. package/dist/png-item-CS4z1iSH.js.map +0 -1
  207. package/dist/table-CQCAnDLb.js.map +0 -1
@@ -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\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 { useWidgetSelector } from '../stores/use-widget-selector'\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 // Single consolidated subscription instead of 4 separate ones.\n const { title, collapsed, disabled, isFetching } = useWidgetSelector(\n id,\n (w) => {\n return {\n title: (w as WrapperState | undefined)?.title,\n collapsed: (w as WrapperState | undefined)?.collapsed,\n disabled: (w as WrapperState | undefined)?.disabled,\n isFetching: w?.isFetching,\n }\n },\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 { widgetStoreActions } 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 useLayoutEffect(() => {\n widgetStoreActions.setWidget<WrapperState>(id, {\n collapsed: defaultCollapsed,\n disabled,\n title,\n })\n }, [defaultCollapsed, disabled, title, id])\n\n const handleChangeCollapsed = (\n event: React.SyntheticEvent<Element, Event>,\n expanded: boolean,\n ) => {\n onChangeCollapsed?.(event, expanded)\n widgetStoreActions.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","collapsed","isFetching","useWidgetSelector","LinearProgress","length","AccordionSummary","AccordionDetails","Accordion","w","WidgetWrapper","defaultCollapsed","widgetStoreActions","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 { useWidgetSelector } from '../stores/use-widget-selector'\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 // Single consolidated subscription instead of 4 separate ones.\n const { title, collapsed, disabled, isFetching } = useWidgetSelector(\n id,\n (w) => {\n return {\n title: (w as WrapperState | undefined)?.title,\n collapsed: (w as WrapperState | undefined)?.collapsed,\n disabled: (w as WrapperState | undefined)?.disabled,\n isFetching: w?.isFetching,\n }\n },\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 { widgetStoreActions } 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 useLayoutEffect(() => {\n widgetStoreActions.setWidget<WrapperState>(id, {\n collapsed: defaultCollapsed,\n disabled,\n title,\n })\n }, [defaultCollapsed, disabled, title, id])\n\n const handleChangeCollapsed = (\n event: React.SyntheticEvent<Element, Event>,\n expanded: boolean,\n ) => {\n onChangeCollapsed?.(event, expanded)\n widgetStoreActions.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","collapsed","isFetching","useWidgetSelector","LinearProgress","length","AccordionSummary","AccordionDetails","Accordion","w","WidgetWrapper","defaultCollapsed","widgetStoreActions","setWidget","useLayoutEffect","event","expanded","handleChangeCollapsed"],"mappings":"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"}
@@ -1,43 +1,47 @@
1
- import { B as L, C as e, D as o, a as E, b as t, c as r, d as A, e as S, f as T, g as _, h as d, i as l, F as D, L as c, R as n, S as B, j as g, k as C, Z as O, l as F, m as U, n as m, o as i, p as G, s as h, t as R } from "../change-column-B4IT0rh6.js";
2
- import { Z as N, a as Z, c as k } from "../transforms-Cdx4fkU5.js";
3
- import { d as I, a as p, t as u, b as w } from "../exports-Cx-f6m6U.js";
4
- import { C as b, P as M, b as v } from "../png-item-CS4z1iSH.js";
1
+ import { B as s, C as e, D as o, a as A, b as E, c as S, d as t, e as _, f as r, g as T, h as l, i as D, j as d, F as c, L as g, R as n, S as B, k as O, l as C, m as F, n as U, Z as m, o as h, p as i, q as G, r as R, s as f, t as w, u as I, v as N } from "../change-column-DjjwoPt1.js";
2
+ import { Z as k, a as u, c as x } from "../transforms-Cdx4fkU5.js";
3
+ import { d as H, a as P, t as b, b as v } from "../exports-Cx-f6m6U.js";
4
+ import { C as V, P as W, b as y } from "../png-item-BE9uEqlD.js";
5
5
  export {
6
- L as BrushToggle,
7
- b as CSVIcon,
6
+ s as BrushToggle,
7
+ V as CSVIcon,
8
8
  e as ChangeColumn,
9
9
  o as DEFAULT_BRUSH_TOGGLE_LABELS,
10
- E as DEFAULT_CHANGE_COLUMN_LABELS,
11
- t as DEFAULT_DOWNLOAD_LABELS,
12
- r as DEFAULT_FULLSCREEN_LABELS,
13
- A as DEFAULT_LOCK_SELECTION_LABELS,
14
- S as DEFAULT_RELATIVE_DATA_LABELS,
15
- T as DEFAULT_SEARCHER_LABELS,
16
- _ as DEFAULT_STACK_TOGGLE_LABELS,
17
- d as DEFAULT_ZOOM_TOGGLE_LABELS,
18
- l as Download,
19
- D as FullScreen,
20
- c as LockSelection,
21
- M as PNGIcon,
10
+ A as DEFAULT_CHANGE_COLUMN_LABELS,
11
+ E as DEFAULT_DOWNLOAD_LABELS,
12
+ S as DEFAULT_FULLSCREEN_LABELS,
13
+ t as DEFAULT_LOCK_SELECTION_LABELS,
14
+ _ as DEFAULT_RELATIVE_DATA_LABELS,
15
+ r as DEFAULT_SEARCHER_LABELS,
16
+ T as DEFAULT_SHOW_ALL_LABELS,
17
+ l as DEFAULT_STACK_TOGGLE_LABELS,
18
+ D as DEFAULT_ZOOM_TOGGLE_LABELS,
19
+ d as Download,
20
+ c as FullScreen,
21
+ g as LockSelection,
22
+ W as PNGIcon,
22
23
  n as RelativeData,
23
- B as Searcher,
24
- g as SearcherToggle,
25
- C as StackToggle,
26
- N as ZOOM_LAYOUT,
27
- O as ZoomToggle,
28
- F as addBrush,
29
- U as addStack,
30
- Z as addZoom,
31
- v as buildPngDownloadItem,
32
- k as createAddZoom,
33
- m as createPercentFormatter,
34
- I as downloadDOMToPNG,
35
- p as downloadToCSV,
36
- i as filterByLockedItems,
37
- G as filterBySearchText,
38
- h as setSearcherText,
39
- u as toCsvString,
40
- R as toRelativeData,
41
- w as triggerLinkDownload
24
+ B as SHOW_ALL_ID,
25
+ O as Searcher,
26
+ C as SearcherToggle,
27
+ F as ShowAllToggle,
28
+ U as StackToggle,
29
+ k as ZOOM_LAYOUT,
30
+ m as ZoomToggle,
31
+ h as addBrush,
32
+ i as addStack,
33
+ u as addZoom,
34
+ y as buildPngDownloadItem,
35
+ x as createAddZoom,
36
+ G as createPercentFormatter,
37
+ H as downloadDOMToPNG,
38
+ P as downloadToCSV,
39
+ R as filterByLockedItems,
40
+ f as filterBySearchText,
41
+ w as setSearcherText,
42
+ I as setShowAll,
43
+ b as toCsvString,
44
+ N as toRelativeData,
45
+ v as triggerLinkDownload
42
46
  };
43
47
  //# sourceMappingURL=actions.js.map
@@ -10,11 +10,11 @@ import "react";
10
10
  import "html2canvas";
11
11
  import "../lasso-tool-CDFj4zKY.js";
12
12
  import "../cjs-D4KH3azB.js";
13
+ import "@carto/ps-utils";
13
14
  import "@dnd-kit/core";
14
15
  import "@dnd-kit/sortable";
15
16
  import "@dnd-kit/utilities";
16
17
  import "react-dom";
17
- import "@mui/icons-material/ZoomIn";
18
18
  import "../widget-context-DTGO0Yta.js";
19
19
  import "zustand";
20
20
  import "zustand/vanilla";
@@ -22,10 +22,9 @@ import "zustand/middleware";
22
22
  import "zustand/react/shallow";
23
23
  import { Z as j } from "../transforms-Cdx4fkU5.js";
24
24
  import { m as W, r as Y } from "../resolve-theme-color-BdojIw0K.js";
25
- import { p as q } from "../data-zoom-layout-0QSptXG_.js";
26
- import "@mui/icons-material/FileDownload";
25
+ import { p as q } from "../data-zoom-layout-CkVnm6ej.js";
27
26
  import { a as U } from "../exports-Cx-f6m6U.js";
28
- import { b as J, C as K } from "../png-item-CS4z1iSH.js";
27
+ import { b as J, C as K } from "../png-item-BE9uEqlD.js";
29
28
  function Q({
30
29
  theme: e,
31
30
  formatter: r,
@@ -118,7 +117,7 @@ function Q({
118
117
  }
119
118
  };
120
119
  }
121
- function je(e) {
120
+ function Be(e) {
122
121
  const {
123
122
  theme: r,
124
123
  formatter: t,
@@ -276,7 +275,7 @@ const d = {
276
275
  }) => e(1.5)
277
276
  }
278
277
  }, ee = ["20%", "40%", "60%", "20%", "80%"];
279
- function Me() {
278
+ function je() {
280
279
  const e = R(2);
281
280
  let r;
282
281
  e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (r = /* @__PURE__ */ p(g, { sx: d.grid, children: ee.map(re) }), e[0] = r) : r = e[0];
@@ -295,7 +294,7 @@ function te(e) {
295
294
  function re(e, r) {
296
295
  return /* @__PURE__ */ p(A, { sx: d.bar, variant: "rectangular", height: e }, `bar-${r}`);
297
296
  }
298
- function Fe(e) {
297
+ function Me(e) {
299
298
  const r = [];
300
299
  return e.getCaptureEl && r.push(J({
301
300
  filename: e.filename,
@@ -322,9 +321,9 @@ function Fe(e) {
322
321
  }), r;
323
322
  }
324
323
  export {
325
- Me as BarSkeleton,
324
+ je as BarSkeleton,
326
325
  Q as barOptions,
327
- Fe as createBarDownloadConfig,
328
- je as createBarOptionFactory
326
+ Me as createBarDownloadConfig,
327
+ Be as createBarOptionFactory
329
328
  };
330
329
  //# sourceMappingURL=bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bar.js","sources":["../../src/widgets-v2/bar/options.ts","../../src/widgets-v2/bar/skeleton.tsx","../../src/widgets-v2/bar/download.tsx"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport type { CallbackDataParams } from 'echarts/types/dist/shared'\nimport {\n buildGridConfig,\n buildLegendConfig,\n createTooltipFormatter,\n createTooltipPositioner,\n niceNum,\n} from '../../widgets/utils/chart-config'\nimport { ZOOM_LAYOUT } from '../actions/zoom-toggle'\nimport type { OptionFactory } from '../echart'\nimport { mergeOptions, resolveThemeColor } from '../utils'\nimport { positionDataZoomForLegend } from '../utils/data-zoom-layout'\nimport type {\n BarEChartsOption,\n BarOptionFactoryInput,\n BarOptionsInput,\n BarWidgetData,\n} from './types'\n\n/**\n * Builds the **structural** ECharts option for a bar widget — axes, grid,\n * tooltip styling, themed legend. Intentionally data-agnostic: no series,\n * no dataset, no `legend.show` (those depend on data and are added by the\n * option factory's merge phase). This separation is what lets data-side\n * pipeline transforms (Searcher, RelativeData) drive the rendered chart —\n * the merge happens at render time inside the Echart bridge.\n *\n * Styling matches the v1 `barConfig` look-and-feel: minimal axes (only\n * min/max y-labels rendered inside the plot via `niceNum`), themed tooltip,\n * scroll legend, and CARTO color palette. The y-axis min/max + label\n * formatter and the tooltip formatter are wired here for the no-data case;\n * {@link createBarOptionFactory} re-derives them at fusion time so reactive\n * formatter changes (RelativeData) and stack templates (StackToggle) flow\n * through to the chart.\n */\nexport function barOptions({\n theme,\n formatter,\n labelFormatter,\n}: BarOptionsInput): BarEChartsOption {\n // Closure shared between yAxis min/max callbacks and the label formatter,\n // so only the rounded extents are labelled (matches v1).\n let niceMin = 0\n let niceMax = 1\n\n return {\n grid: {\n left: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n // Default: no legend. Merger bumps this when there are >1 series.\n ...buildGridConfig(false, theme),\n containLabel: true,\n },\n tooltip: {\n trigger: 'axis',\n backgroundColor: theme.palette.grey[900],\n borderWidth: 0,\n padding: [parseInt(theme.spacing(1)), parseInt(theme.spacing(1))],\n textStyle: {\n color: theme.palette.common.white,\n fontSize: 11,\n fontFamily: theme.typography.caption.fontFamily,\n },\n axisPointer: { type: 'line' },\n position: createTooltipPositioner(theme),\n formatter: buildBarTooltipFormatter(formatter, labelFormatter),\n },\n // Legend styling baked here; `show` is toggled by the merger based on\n // series count.\n legend: {\n ...buildLegendConfig({ hasLegend: false, labelFormatter }),\n },\n axisPointer: { lineStyle: { color: theme.palette.grey[400] } },\n color: [\n theme.palette.secondary.main,\n ...Object.values(\n (theme.palette as { qualitative?: { bold?: Record<string, string> } })\n .qualitative?.bold ?? {},\n ),\n ],\n xAxis: {\n type: 'category',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n padding: [parseInt(theme.spacing(0.5)), 0, 0, 0],\n margin: 0,\n hideOverlap: true,\n ...(labelFormatter && {\n formatter: (v: string | number) => String(labelFormatter(v)),\n }),\n },\n },\n yAxis: {\n type: 'value',\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black?.[4] ?? theme.palette.divider },\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom',\n inside: true,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n },\n } as BarEChartsOption\n}\n\n/**\n * Returns the bar widget's {@link OptionFactory} — a single closure that\n * handles BOTH option-construction phases:\n *\n * - **Structural phase** (`option == null`) — builds the theme-aware\n * structural option via {@link barOptions}, optionally merging the\n * consumer-supplied `optionsOverride` on top. Called once by Provider\n * to seed `rawOptions` in the store; configTransforms (StackToggle /\n * ZoomToggle / BrushToggle) then mutate it via the pipeline middleware.\n * - **Merge phase** (`option != null`) — fuses post-pipeline `state.data`\n * (`BarWidgetData`) into the option via the dataset API: one dataset\n * per series, each series referencing its dataset by index, encoded\n * by `name` (x) and `value` (y). Spreads any series-template fields\n * already on the incoming option (e.g. `{ stack: 'total' }` from\n * `addStack`) into every emitted series so configTransforms compose\n * end-to-end. Reactive `ctx.formatter` / `ctx.labelFormatter` drive\n * the y-axis min/max-only label and the tooltip formatter at fusion\n * time so RelativeData's percent formatter flows through without a\n * structural rebuild.\n *\n * Stable identity when the inputs don't change (consumers should wrap the\n * call in `useMemo` keyed on the same inputs).\n */\nexport function createBarOptionFactory(\n options: BarOptionFactoryInput,\n): OptionFactory {\n const { theme, formatter, labelFormatter, optionsOverride } = options\n const series = options.series\n const selection = options.selection\n const selectionSet =\n selection && selection.length > 0\n ? new Set<string | number>(selection)\n : null\n return (option, data, ctx) => {\n // Structural phase: Provider seeds rawOptions with this branch. No data\n // is read; we just emit the theme-aware base (optionally with override).\n if (option == null) {\n const structural = barOptions({ theme, formatter, labelFormatter })\n return optionsOverride\n ? (mergeOptions(\n structural as unknown as Record<string, unknown>,\n optionsOverride as Partial<Record<string, unknown>>,\n ) as EChartsOption)\n : structural\n }\n\n const seriesArr = Array.isArray(data) ? (data as BarWidgetData) : []\n if (seriesArr.length === 0) {\n return { ...option, dataset: [], series: [] }\n }\n const hasLegend = seriesArr.length > 1\n const baseLegend =\n typeof option.legend === 'object' && !Array.isArray(option.legend)\n ? option.legend\n : {}\n const baseGrid =\n typeof option.grid === 'object' && !Array.isArray(option.grid)\n ? option.grid\n : {}\n const baseTooltip =\n typeof option.tooltip === 'object' && !Array.isArray(option.tooltip)\n ? option.tooltip\n : {}\n const baseYAxis =\n typeof option.yAxis === 'object' && !Array.isArray(option.yAxis)\n ? option.yAxis\n : {}\n\n const seriesTemplates = Array.isArray(option.series) ? option.series : []\n const broadcastTemplate = seriesTemplates[0] ?? {}\n\n // Reactive (live store) formatters from ctx — distinct from the\n // closure-time `formatter` / `labelFormatter` captured for the\n // structural-build branch above. RelativeData can install a percent\n // formatter on the store after the factory was constructed; the merge\n // phase reads `ctx` to pick that up.\n const liveFormatter = ctx?.formatter\n const liveLabelFormatter = ctx?.labelFormatter\n\n const { niceMinVal, niceMaxVal } = computeNiceBounds(seriesArr)\n\n // Zoom slider layout: when ZoomToggle has installed `dataZoom`, push the\n // slider above the legend (if any) and reserve room in the grid below.\n const dataZoomLayout = positionDataZoomForLegend(option.dataZoom, hasLegend)\n const fallbackBottom =\n typeof baseGrid.bottom === 'number' ? baseGrid.bottom : 24\n const baseBottom = hasLegend ? 56 : fallbackBottom\n const gridBottom = dataZoomLayout\n ? baseBottom + ZOOM_LAYOUT.sliderHeight + ZOOM_LAYOUT.sliderGap\n : baseBottom\n\n // When a selection is active, dim non-selected bars by routing the\n // resolved palette color through `modifyAlpha`. Per-row `itemStyle` on\n // dataset object-rows is silently ignored when `series.encode` is in\n // play — the callback approach is the standard ECharts pattern for\n // per-data styling derived from a dataset.\n //\n // We *always* emit `itemStyle.color` (a passthrough when nothing is\n // selected), not conditionally — dropping the key between renders\n // would let ECharts' default merge keep the previous callback alive\n // and bars would stay dimmed forever after an external clear. Always\n // emitting lets normal merge swap the callback in place, no\n // `replaceMerge` and no entry-animation flash on selection on/off.\n const dimItemStyle = {\n color: (params: CallbackDataParams) => {\n const base = params.color as string\n if (!selectionSet) return base\n const datum = params.value as { name?: string | number } | undefined\n const name = datum?.name ?? params.name\n return name != null && selectionSet.has(name)\n ? base\n : echarts.color.modifyAlpha(base, 0.15)\n },\n }\n\n return {\n ...option,\n dataset: seriesArr.map((s) => ({ source: s as readonly object[] })),\n series: seriesArr.map((_, i) => {\n const template =\n (seriesTemplates[i] as object | undefined) ??\n (broadcastTemplate as object)\n // Per-series `color` override: ECharts sets `params.color` from\n // `series[i].color` when resolving styles, so the dim callback\n // above keeps working — it just dims the user's colour rather\n // than the palette default.\n const overrideColor = resolveThemeColor(theme, series?.[i]?.color)\n return {\n ...(typeof template === 'object' ? template : {}),\n type: 'bar' as const,\n datasetIndex: i,\n name: series?.[i]?.name ?? `Series ${i + 1}`,\n encode: { x: 'name', y: 'value' },\n barMaxWidth: 100,\n emphasis: { focus: 'series' },\n itemStyle: dimItemStyle,\n ...(overrideColor ? { color: overrideColor } : {}),\n }\n }),\n legend: { ...baseLegend, show: hasLegend },\n grid: {\n ...baseGrid,\n bottom: gridBottom,\n },\n ...(dataZoomLayout ? { dataZoom: dataZoomLayout } : {}),\n yAxis: {\n ...baseYAxis,\n min: niceMinVal,\n max: niceMaxVal,\n axisLabel: {\n ...((baseYAxis as { axisLabel?: object }).axisLabel ?? {}),\n formatter: (value: number) => {\n if (value !== niceMaxVal && value !== niceMinVal) return ''\n if (value === 0) return ''\n return liveFormatter ? liveFormatter(value) : String(value)\n },\n },\n } as EChartsOption['yAxis'],\n tooltip: {\n ...baseTooltip,\n formatter: buildBarTooltipFormatter(liveFormatter, liveLabelFormatter),\n },\n } as EChartsOption\n }\n}\n\nfunction buildBarTooltipFormatter(\n formatter: ((value: number) => string) | undefined,\n labelFormatter: ((value: string | number) => string | number) | undefined,\n) {\n return createTooltipFormatter((item) => {\n const row = item.value as { name?: string | number; value?: number }\n const raw = row?.value\n const formattedValue =\n typeof raw === 'number' && formatter ? formatter(raw) : (raw ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (item.name ?? '')\n return { name: String(name), seriesName, marker, value: formattedValue }\n })\n}\n\nfunction computeNiceBounds(seriesArr: BarWidgetData): {\n niceMinVal: number\n niceMaxVal: number\n} {\n let min = 0\n let max = -Infinity\n for (const series of seriesArr) {\n for (const d of series) {\n if (typeof d?.value !== 'number' || !Number.isFinite(d.value)) continue\n if (d.value < min) min = d.value\n if (d.value > max) max = d.value\n }\n }\n const niceMinVal = min < 0 ? niceNum(min) : 0\n const niceMaxVal = max <= 0 ? 1 : niceNum(max)\n return { niceMinVal, niceMaxVal }\n}\n","import { Box, Skeleton, type SxProps, type Theme } from '@mui/material'\n\nconst styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n height: ({ spacing }) => spacing(38),\n },\n grid: {\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 1 auto',\n alignItems: 'flex-end',\n width: '100%',\n },\n bar: {\n flex: 1,\n maxWidth: ({ spacing }) => spacing(12),\n '& + &': {\n marginLeft: ({ spacing }) => spacing(1),\n },\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n\nconst BAR_HEIGHTS = ['20%', '40%', '60%', '20%', '80%'] as const\n\n/**\n * Loading state for the Bar widget. Mirrors a bar chart's silhouette — five\n * vertical bars at staggered heights anchored to the bottom, plus a legend\n * stub — so the skeleton reads as \"a bar chart\" rather than a generic list.\n */\nexport function BarSkeleton() {\n return (\n <Box sx={styles.container}>\n <Box sx={styles.grid}>\n {BAR_HEIGHTS.map((height, i) => (\n <Skeleton\n key={`bar-${i}`}\n sx={styles.bar}\n variant='rectangular'\n height={height}\n />\n ))}\n </Box>\n <Box sx={styles.legend}>\n {[0, 1].map((i) => (\n <Box key={`legend-${i}`} sx={styles.legendItem}>\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import {\n CSVIcon,\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { BarWidgetData } from './types'\n\nexport interface BarDownloadConfigArgs {\n filename: string\n getData: () => BarWidgetData\n /**\n * Optional getter for the widget's capture element (registered by\n * `Widget.State` on its success path). When provided, a PNG item is\n * prepended to the returned list. Wire it to\n * `() => getCaptureEl(id)`.\n */\n getCaptureEl?: () => HTMLElement | null\n /** PNG `pixelRatio` (default 2). */\n pngPixelRatio?: number\n /** PNG `backgroundColor` (default transparent). */\n pngBackgroundColor?: string | null\n}\n\n/**\n * Builds download items for the Bar widget. Always includes a CSV item\n * with one `name,value` block per series, separated by an empty row when\n * there are multiple. When `getCaptureEl` is supplied, also prepends a PNG\n * item that rasterises the captured element via `html2canvas`.\n */\nexport function createBarDownloadConfig(\n args: BarDownloadConfigArgs,\n): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'CSV',\n icon: <CSVIcon fontSize='small' />,\n resolve: () => {\n const data = args.getData()\n const rows: unknown[][] = []\n for (const [i, series] of data.entries()) {\n if (i > 0) rows.push([])\n rows.push(['name', 'value'])\n for (const d of series) rows.push([d.name, d.value])\n }\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n"],"names":["barOptions","theme","formatter","labelFormatter","niceMin","niceMax","grid","left","parseInt","spacing","top","right","buildGridConfig","containLabel","tooltip","trigger","backgroundColor","palette","grey","borderWidth","padding","textStyle","color","common","white","fontSize","fontFamily","typography","caption","axisPointer","type","position","createTooltipPositioner","buildBarTooltipFormatter","legend","buildLegendConfig","hasLegend","lineStyle","secondary","main","Object","values","qualitative","bold","xAxis","axisLine","show","axisTick","axisLabel","margin","hideOverlap","v","String","yAxis","min","extent","niceNum","max","splitLine","black","divider","overlineDelicate","showMaxLabel","showMinLabel","verticalAlign","inside","value","createBarOptionFactory","options","optionsOverride","series","selection","selectionSet","length","Set","option","data","ctx","structural","mergeOptions","seriesArr","Array","isArray","dataset","baseLegend","baseGrid","baseTooltip","baseYAxis","seriesTemplates","broadcastTemplate","liveFormatter","liveLabelFormatter","niceMinVal","niceMaxVal","computeNiceBounds","dataZoomLayout","positionDataZoomForLegend","dataZoom","fallbackBottom","bottom","baseBottom","gridBottom","ZOOM_LAYOUT","sliderHeight","sliderGap","dimItemStyle","params","base","name","has","echarts","modifyAlpha","map","s","source","_","i","template","overrideColor","resolveThemeColor","datasetIndex","encode","x","y","barMaxWidth","emphasis","focus","itemStyle","createTooltipFormatter","item","raw","formattedValue","marker","seriesName","d","Number","isFinite","styles","container","display","alignItems","justifyContent","flexDirection","gap","height","flex","width","bar","maxWidth","marginLeft","legendItem","BAR_HEIGHTS","BarSkeleton","$","_c","t0","Symbol","for","jsx","Box","_temp","t1","_temp2","i_0","jsxs","Skeleton","createBarDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","pngBackgroundColor","id","label","icon","CSVIcon","resolve","getData","rows","entries","handle","downloadToCSV","Promise","url","revoke"],"mappings":"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"}
1
+ {"version":3,"file":"bar.js","sources":["../../src/widgets-v2/bar/options.ts","../../src/widgets-v2/bar/skeleton.tsx","../../src/widgets-v2/bar/download.tsx"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport type { CallbackDataParams } from 'echarts/types/dist/shared'\nimport {\n buildGridConfig,\n buildLegendConfig,\n createTooltipFormatter,\n createTooltipPositioner,\n niceNum,\n} from '../../widgets/utils/chart-config'\nimport { ZOOM_LAYOUT } from '../actions/zoom-toggle'\nimport type { OptionFactory } from '../echart'\nimport { mergeOptions, resolveThemeColor } from '../utils'\nimport { positionDataZoomForLegend } from '../utils/data-zoom-layout'\nimport type {\n BarEChartsOption,\n BarOptionFactoryInput,\n BarOptionsInput,\n BarWidgetData,\n} from './types'\n\n/**\n * Builds the **structural** ECharts option for a bar widget — axes, grid,\n * tooltip styling, themed legend. Intentionally data-agnostic: no series,\n * no dataset, no `legend.show` (those depend on data and are added by the\n * option factory's merge phase). This separation is what lets data-side\n * pipeline transforms (Searcher, RelativeData) drive the rendered chart —\n * the merge happens at render time inside the Echart bridge.\n *\n * Styling matches the v1 `barConfig` look-and-feel: minimal axes (only\n * min/max y-labels rendered inside the plot via `niceNum`), themed tooltip,\n * scroll legend, and CARTO color palette. The y-axis min/max + label\n * formatter and the tooltip formatter are wired here for the no-data case;\n * {@link createBarOptionFactory} re-derives them at fusion time so reactive\n * formatter changes (RelativeData) and stack templates (StackToggle) flow\n * through to the chart.\n */\nexport function barOptions({\n theme,\n formatter,\n labelFormatter,\n}: BarOptionsInput): BarEChartsOption {\n // Closure shared between yAxis min/max callbacks and the label formatter,\n // so only the rounded extents are labelled (matches v1).\n let niceMin = 0\n let niceMax = 1\n\n return {\n grid: {\n left: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n // Default: no legend. Merger bumps this when there are >1 series.\n ...buildGridConfig(false, theme),\n containLabel: true,\n },\n tooltip: {\n trigger: 'axis',\n backgroundColor: theme.palette.grey[900],\n borderWidth: 0,\n padding: [parseInt(theme.spacing(1)), parseInt(theme.spacing(1))],\n textStyle: {\n color: theme.palette.common.white,\n fontSize: 11,\n fontFamily: theme.typography.caption.fontFamily,\n },\n axisPointer: { type: 'line' },\n position: createTooltipPositioner(theme),\n formatter: buildBarTooltipFormatter(formatter, labelFormatter),\n },\n // Legend styling baked here; `show` is toggled by the merger based on\n // series count.\n legend: {\n ...buildLegendConfig({ hasLegend: false, labelFormatter }),\n },\n axisPointer: { lineStyle: { color: theme.palette.grey[400] } },\n color: [\n theme.palette.secondary.main,\n ...Object.values(\n (theme.palette as { qualitative?: { bold?: Record<string, string> } })\n .qualitative?.bold ?? {},\n ),\n ],\n xAxis: {\n type: 'category',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n padding: [parseInt(theme.spacing(0.5)), 0, 0, 0],\n margin: 0,\n hideOverlap: true,\n ...(labelFormatter && {\n formatter: (v: string | number) => String(labelFormatter(v)),\n }),\n },\n },\n yAxis: {\n type: 'value',\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black?.[4] ?? theme.palette.divider },\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom',\n inside: true,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n },\n } as BarEChartsOption\n}\n\n/**\n * Returns the bar widget's {@link OptionFactory} — a single closure that\n * handles BOTH option-construction phases:\n *\n * - **Structural phase** (`option == null`) — builds the theme-aware\n * structural option via {@link barOptions}, optionally merging the\n * consumer-supplied `optionsOverride` on top. Called once by Provider\n * to seed `rawOptions` in the store; configTransforms (StackToggle /\n * ZoomToggle / BrushToggle) then mutate it via the pipeline middleware.\n * - **Merge phase** (`option != null`) — fuses post-pipeline `state.data`\n * (`BarWidgetData`) into the option via the dataset API: one dataset\n * per series, each series referencing its dataset by index, encoded\n * by `name` (x) and `value` (y). Spreads any series-template fields\n * already on the incoming option (e.g. `{ stack: 'total' }` from\n * `addStack`) into every emitted series so configTransforms compose\n * end-to-end. Reactive `ctx.formatter` / `ctx.labelFormatter` drive\n * the y-axis min/max-only label and the tooltip formatter at fusion\n * time so RelativeData's percent formatter flows through without a\n * structural rebuild.\n *\n * Stable identity when the inputs don't change (consumers should wrap the\n * call in `useMemo` keyed on the same inputs).\n */\nexport function createBarOptionFactory(\n options: BarOptionFactoryInput,\n): OptionFactory {\n const { theme, formatter, labelFormatter, optionsOverride } = options\n const series = options.series\n const selection = options.selection\n const selectionSet =\n selection && selection.length > 0\n ? new Set<string | number>(selection)\n : null\n return (option, data, ctx) => {\n // Structural phase: Provider seeds rawOptions with this branch. No data\n // is read; we just emit the theme-aware base (optionally with override).\n if (option == null) {\n const structural = barOptions({ theme, formatter, labelFormatter })\n return optionsOverride\n ? (mergeOptions(\n structural as unknown as Record<string, unknown>,\n optionsOverride as Partial<Record<string, unknown>>,\n ) as EChartsOption)\n : structural\n }\n\n const seriesArr = Array.isArray(data) ? (data as BarWidgetData) : []\n if (seriesArr.length === 0) {\n return { ...option, dataset: [], series: [] }\n }\n const hasLegend = seriesArr.length > 1\n const baseLegend =\n typeof option.legend === 'object' && !Array.isArray(option.legend)\n ? option.legend\n : {}\n const baseGrid =\n typeof option.grid === 'object' && !Array.isArray(option.grid)\n ? option.grid\n : {}\n const baseTooltip =\n typeof option.tooltip === 'object' && !Array.isArray(option.tooltip)\n ? option.tooltip\n : {}\n const baseYAxis =\n typeof option.yAxis === 'object' && !Array.isArray(option.yAxis)\n ? option.yAxis\n : {}\n\n const seriesTemplates = Array.isArray(option.series) ? option.series : []\n const broadcastTemplate = seriesTemplates[0] ?? {}\n\n // Reactive (live store) formatters from ctx — distinct from the\n // closure-time `formatter` / `labelFormatter` captured for the\n // structural-build branch above. RelativeData can install a percent\n // formatter on the store after the factory was constructed; the merge\n // phase reads `ctx` to pick that up.\n const liveFormatter = ctx?.formatter\n const liveLabelFormatter = ctx?.labelFormatter\n\n const { niceMinVal, niceMaxVal } = computeNiceBounds(seriesArr)\n\n // Zoom slider layout: when ZoomToggle has installed `dataZoom`, push the\n // slider above the legend (if any) and reserve room in the grid below.\n const dataZoomLayout = positionDataZoomForLegend(option.dataZoom, hasLegend)\n const fallbackBottom =\n typeof baseGrid.bottom === 'number' ? baseGrid.bottom : 24\n const baseBottom = hasLegend ? 56 : fallbackBottom\n const gridBottom = dataZoomLayout\n ? baseBottom + ZOOM_LAYOUT.sliderHeight + ZOOM_LAYOUT.sliderGap\n : baseBottom\n\n // When a selection is active, dim non-selected bars by routing the\n // resolved palette color through `modifyAlpha`. Per-row `itemStyle` on\n // dataset object-rows is silently ignored when `series.encode` is in\n // play — the callback approach is the standard ECharts pattern for\n // per-data styling derived from a dataset.\n //\n // We *always* emit `itemStyle.color` (a passthrough when nothing is\n // selected), not conditionally — dropping the key between renders\n // would let ECharts' default merge keep the previous callback alive\n // and bars would stay dimmed forever after an external clear. Always\n // emitting lets normal merge swap the callback in place, no\n // `replaceMerge` and no entry-animation flash on selection on/off.\n const dimItemStyle = {\n color: (params: CallbackDataParams) => {\n const base = params.color as string\n if (!selectionSet) return base\n const datum = params.value as { name?: string | number } | undefined\n const name = datum?.name ?? params.name\n return name != null && selectionSet.has(name)\n ? base\n : echarts.color.modifyAlpha(base, 0.15)\n },\n }\n\n return {\n ...option,\n dataset: seriesArr.map((s) => ({ source: s as readonly object[] })),\n series: seriesArr.map((_, i) => {\n const template =\n (seriesTemplates[i] as object | undefined) ??\n (broadcastTemplate as object)\n // Per-series `color` override: ECharts sets `params.color` from\n // `series[i].color` when resolving styles, so the dim callback\n // above keeps working — it just dims the user's colour rather\n // than the palette default.\n const overrideColor = resolveThemeColor(theme, series?.[i]?.color)\n return {\n ...(typeof template === 'object' ? template : {}),\n type: 'bar' as const,\n datasetIndex: i,\n name: series?.[i]?.name ?? `Series ${i + 1}`,\n encode: { x: 'name', y: 'value' },\n barMaxWidth: 100,\n emphasis: { focus: 'series' },\n itemStyle: dimItemStyle,\n ...(overrideColor ? { color: overrideColor } : {}),\n }\n }),\n legend: { ...baseLegend, show: hasLegend },\n grid: {\n ...baseGrid,\n bottom: gridBottom,\n },\n ...(dataZoomLayout ? { dataZoom: dataZoomLayout } : {}),\n yAxis: {\n ...baseYAxis,\n min: niceMinVal,\n max: niceMaxVal,\n axisLabel: {\n ...((baseYAxis as { axisLabel?: object }).axisLabel ?? {}),\n formatter: (value: number) => {\n if (value !== niceMaxVal && value !== niceMinVal) return ''\n if (value === 0) return ''\n return liveFormatter ? liveFormatter(value) : String(value)\n },\n },\n } as EChartsOption['yAxis'],\n tooltip: {\n ...baseTooltip,\n formatter: buildBarTooltipFormatter(liveFormatter, liveLabelFormatter),\n },\n } as EChartsOption\n }\n}\n\nfunction buildBarTooltipFormatter(\n formatter: ((value: number) => string) | undefined,\n labelFormatter: ((value: string | number) => string | number) | undefined,\n) {\n return createTooltipFormatter((item) => {\n const row = item.value as { name?: string | number; value?: number }\n const raw = row?.value\n const formattedValue =\n typeof raw === 'number' && formatter ? formatter(raw) : (raw ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (item.name ?? '')\n return { name: String(name), seriesName, marker, value: formattedValue }\n })\n}\n\nfunction computeNiceBounds(seriesArr: BarWidgetData): {\n niceMinVal: number\n niceMaxVal: number\n} {\n let min = 0\n let max = -Infinity\n for (const series of seriesArr) {\n for (const d of series) {\n if (typeof d?.value !== 'number' || !Number.isFinite(d.value)) continue\n if (d.value < min) min = d.value\n if (d.value > max) max = d.value\n }\n }\n const niceMinVal = min < 0 ? niceNum(min) : 0\n const niceMaxVal = max <= 0 ? 1 : niceNum(max)\n return { niceMinVal, niceMaxVal }\n}\n","import { Box, Skeleton, type SxProps, type Theme } from '@mui/material'\n\nconst styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n height: ({ spacing }) => spacing(38),\n },\n grid: {\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 1 auto',\n alignItems: 'flex-end',\n width: '100%',\n },\n bar: {\n flex: 1,\n maxWidth: ({ spacing }) => spacing(12),\n '& + &': {\n marginLeft: ({ spacing }) => spacing(1),\n },\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n\nconst BAR_HEIGHTS = ['20%', '40%', '60%', '20%', '80%'] as const\n\n/**\n * Loading state for the Bar widget. Mirrors a bar chart's silhouette — five\n * vertical bars at staggered heights anchored to the bottom, plus a legend\n * stub — so the skeleton reads as \"a bar chart\" rather than a generic list.\n */\nexport function BarSkeleton() {\n return (\n <Box sx={styles.container}>\n <Box sx={styles.grid}>\n {BAR_HEIGHTS.map((height, i) => (\n <Skeleton\n key={`bar-${i}`}\n sx={styles.bar}\n variant='rectangular'\n height={height}\n />\n ))}\n </Box>\n <Box sx={styles.legend}>\n {[0, 1].map((i) => (\n <Box key={`legend-${i}`} sx={styles.legendItem}>\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import {\n CSVIcon,\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { BarWidgetData } from './types'\n\nexport interface BarDownloadConfigArgs {\n filename: string\n getData: () => BarWidgetData\n /**\n * Optional getter for the widget's capture element (registered by\n * `Widget.State` on its success path). When provided, a PNG item is\n * prepended to the returned list. Wire it to\n * `() => getCaptureEl(id)`.\n */\n getCaptureEl?: () => HTMLElement | null\n /** PNG `pixelRatio` (default 2). */\n pngPixelRatio?: number\n /** PNG `backgroundColor` (default transparent). */\n pngBackgroundColor?: string | null\n}\n\n/**\n * Builds download items for the Bar widget. Always includes a CSV item\n * with one `name,value` block per series, separated by an empty row when\n * there are multiple. When `getCaptureEl` is supplied, also prepends a PNG\n * item that rasterises the captured element via `html2canvas`.\n */\nexport function createBarDownloadConfig(\n args: BarDownloadConfigArgs,\n): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'CSV',\n icon: <CSVIcon fontSize='small' />,\n resolve: () => {\n const data = args.getData()\n const rows: unknown[][] = []\n for (const [i, series] of data.entries()) {\n if (i > 0) rows.push([])\n rows.push(['name', 'value'])\n for (const d of series) rows.push([d.name, d.value])\n }\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n"],"names":["barOptions","theme","formatter","labelFormatter","niceMin","niceMax","grid","left","parseInt","spacing","top","right","buildGridConfig","containLabel","tooltip","trigger","backgroundColor","palette","grey","borderWidth","padding","textStyle","color","common","white","fontSize","fontFamily","typography","caption","axisPointer","type","position","createTooltipPositioner","buildBarTooltipFormatter","legend","buildLegendConfig","hasLegend","lineStyle","secondary","main","Object","values","qualitative","bold","xAxis","axisLine","show","axisTick","axisLabel","margin","hideOverlap","v","String","yAxis","min","extent","niceNum","max","splitLine","black","divider","overlineDelicate","showMaxLabel","showMinLabel","verticalAlign","inside","value","createBarOptionFactory","options","optionsOverride","series","selection","selectionSet","length","Set","option","data","ctx","structural","mergeOptions","seriesArr","Array","isArray","dataset","baseLegend","baseGrid","baseTooltip","baseYAxis","seriesTemplates","broadcastTemplate","liveFormatter","liveLabelFormatter","niceMinVal","niceMaxVal","computeNiceBounds","dataZoomLayout","positionDataZoomForLegend","dataZoom","fallbackBottom","bottom","baseBottom","gridBottom","ZOOM_LAYOUT","sliderHeight","sliderGap","dimItemStyle","params","base","name","has","echarts","modifyAlpha","map","s","source","_","i","template","overrideColor","resolveThemeColor","datasetIndex","encode","x","y","barMaxWidth","emphasis","focus","itemStyle","createTooltipFormatter","item","raw","formattedValue","marker","seriesName","d","Number","isFinite","styles","container","display","alignItems","justifyContent","flexDirection","gap","height","flex","width","bar","maxWidth","marginLeft","legendItem","BAR_HEIGHTS","BarSkeleton","$","_c","t0","Symbol","for","jsx","Box","_temp","t1","_temp2","i_0","jsxs","Skeleton","createBarDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","pngBackgroundColor","id","label","icon","CSVIcon","resolve","getData","rows","entries","handle","downloadToCSV","Promise","url","revoke"],"mappings":"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"}
@@ -1,16 +1,15 @@
1
- import { C as j, a as A, b as N, c as z, d as V, e as G, f as L } from "../category-DwaeYjpX.js";
1
+ import { C as $, a as j, b as A, c as N, d as z, e as V, f as G } from "../category-Dnd2_j0x.js";
2
2
  import { jsx as m, jsxs as d } from "react/jsx-runtime";
3
3
  import { c as h } from "react/compiler-runtime";
4
4
  import { Box as p, Skeleton as f } from "@mui/material";
5
5
  import "react";
6
- import "@mui/icons-material/FileDownload";
6
+ import "@mui/icons-material";
7
7
  import "../lasso-tool-CDFj4zKY.js";
8
8
  import "../cjs-D4KH3azB.js";
9
- import "@mui/icons-material";
9
+ import "@carto/ps-utils";
10
10
  import { a as w } from "../exports-Cx-f6m6U.js";
11
- import "@mui/icons-material/ImageOutlined";
12
- import { b as C } from "../png-item-CS4z1iSH.js";
13
- const s = {
11
+ import { b as C } from "../png-item-BE9uEqlD.js";
12
+ const i = {
14
13
  root: {
15
14
  display: "flex",
16
15
  flexDirection: "column",
@@ -43,20 +42,20 @@ const s = {
43
42
  small: 4,
44
43
  medium: 12
45
44
  }, g = ["95%", "80%", "55%", "75%", "60%"];
46
- function B(o) {
45
+ function T(o) {
47
46
  const e = h(5), {
48
47
  rows: l,
49
- size: i
50
- } = o, r = l === void 0 ? 5 : l, a = i === void 0 ? "small" : i;
48
+ size: s
49
+ } = o, r = l === void 0 ? 5 : l, a = s === void 0 ? "small" : s;
51
50
  let t;
52
51
  e[0] !== r ? (t = Array.from({
53
52
  length: r
54
53
  }), e[0] = r, e[1] = t) : t = e[1];
55
54
  let n;
56
- return e[2] !== a || e[3] !== t ? (n = /* @__PURE__ */ m(p, { sx: s.root, children: t.map((c, u) => /* @__PURE__ */ d(p, { sx: s.row, children: [
57
- /* @__PURE__ */ d(p, { sx: s.rowHeader, children: [
58
- /* @__PURE__ */ m(f, { variant: "rectangular", sx: s.name }),
59
- /* @__PURE__ */ m(f, { variant: "rectangular", sx: s.value })
55
+ return e[2] !== a || e[3] !== t ? (n = /* @__PURE__ */ m(p, { sx: i.root, children: t.map((c, u) => /* @__PURE__ */ d(p, { sx: i.row, children: [
56
+ /* @__PURE__ */ d(p, { sx: i.rowHeader, children: [
57
+ /* @__PURE__ */ m(f, { variant: "rectangular", sx: i.name }),
58
+ /* @__PURE__ */ m(f, { variant: "rectangular", sx: i.value })
60
59
  ] }),
61
60
  /* @__PURE__ */ m(f, { variant: "rectangular", sx: {
62
61
  height: x[a],
@@ -64,7 +63,7 @@ function B(o) {
64
63
  } })
65
64
  ] }, `row-${u}`)) }), e[2] = a, e[3] = t, e[4] = n) : n = e[4], n;
66
65
  }
67
- function P(o) {
66
+ function B(o) {
68
67
  const e = [];
69
68
  return o.getCaptureEl && e.push(C({
70
69
  filename: o.filename,
@@ -75,13 +74,13 @@ function P(o) {
75
74
  id: "csv",
76
75
  label: "Download as CSV",
77
76
  resolve: () => {
78
- const l = o.getData(), i = [["series", "name", "value"]];
77
+ const l = o.getData(), s = [["series", "name", "value"]];
79
78
  for (const [a, t] of l.entries()) {
80
79
  const n = o.seriesNames?.[a] ?? `series_${a + 1}`;
81
80
  for (const c of t)
82
- i.push([n, c.name, c.value]);
81
+ s.push([n, c.name, c.value]);
83
82
  }
84
- const r = w(i);
83
+ const r = w(s);
85
84
  return Promise.resolve({
86
85
  url: r.url,
87
86
  filename: `${o.filename}.csv`,
@@ -91,14 +90,14 @@ function P(o) {
91
90
  }), e;
92
91
  }
93
92
  export {
94
- j as Category,
95
- A as CategoryBar,
96
- N as CategoryLegend,
97
- z as CategoryRowMulti,
98
- V as CategoryRowOther,
99
- G as CategoryRowSingle,
100
- B as CategorySkeleton,
101
- L as CategoryUI,
102
- P as createCategoryDownloadConfig
93
+ $ as Category,
94
+ j as CategoryBar,
95
+ A as CategoryLegend,
96
+ N as CategoryRowMulti,
97
+ z as CategoryRowOther,
98
+ V as CategoryRowSingle,
99
+ T as CategorySkeleton,
100
+ G as CategoryUI,
101
+ B as createCategoryDownloadConfig
103
102
  };
104
103
  //# sourceMappingURL=category.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"category.js","sources":["../../src/widgets-v2/category/skeleton.tsx","../../src/widgets-v2/category/download.ts"],"sourcesContent":["import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\nimport type { CategorySize } from './types'\n\nconst styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n py: 0.5,\n },\n // Mirror the real row layout: label + value on top, bar below.\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 1,\n },\n // Small fixed-width shimmer pills — matches the visual density of the\n // real label / value cells without claiming the full row width.\n name: { height: 14, width: 80 },\n value: { height: 14, width: 48 },\n} satisfies Record<string, SxProps<Theme>>\n\n// Bar shimmer height matches the live bar track for each size variant so\n// the skeleton doesn't visibly resize the row on data settle.\nconst BAR_HEIGHT: Record<CategorySize, number> = {\n small: 4,\n medium: 12,\n}\n\n// Varied widths give the bar shimmer a more realistic, less uniform feel.\n// Cycles when `rows > WIDTH_PATTERNS.length`.\nconst WIDTH_PATTERNS = ['95%', '80%', '55%', '75%', '60%']\n\nexport interface CategorySkeletonProps {\n rows?: number\n /**\n * Visual density. Mirrors the live widget's `size` prop so the loading\n * shimmer's bar height matches what's about to render — no row jump\n * on data settle.\n */\n size?: CategorySize\n}\n\nexport function CategorySkeleton({\n rows = 5,\n size = 'small',\n}: CategorySkeletonProps) {\n return (\n <Box sx={styles.root}>\n {Array.from({ length: rows }).map((_, i) => (\n <Box key={`row-${i}`} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton variant='rectangular' sx={styles.name} />\n <Skeleton variant='rectangular' sx={styles.value} />\n </Box>\n <Skeleton\n variant='rectangular'\n sx={{\n height: BAR_HEIGHT[size],\n width: WIDTH_PATTERNS[i % WIDTH_PATTERNS.length],\n }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import {\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { CategoryWidgetData } from './types'\n\n/**\n * Download menu items for the Category widget. Always includes a CSV item\n * with `series, name, value` columns (one row per item). When\n * `getCaptureEl` is supplied, prepends a PNG item that rasterises the\n * captured element via `html2canvas`.\n */\nexport function createCategoryDownloadConfig(args: {\n filename: string\n getData: () => CategoryWidgetData\n seriesNames?: readonly string[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const data = args.getData()\n const rows: unknown[][] = [['series', 'name', 'value']]\n for (const [i, series] of data.entries()) {\n const seriesName = args.seriesNames?.[i] ?? `series_${i + 1}`\n for (const item of series) {\n rows.push([seriesName, item.name, item.value])\n }\n }\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n"],"names":["styles","root","display","flexDirection","gap","py","row","rowHeader","justifyContent","alignItems","name","height","width","value","BAR_HEIGHT","small","medium","WIDTH_PATTERNS","CategorySkeleton","t0","$","_c","rows","t1","size","t2","undefined","t3","Array","from","length","t4","Box","map","_","i","jsxs","jsx","Skeleton","createCategoryDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","backgroundColor","pngBackgroundColor","id","label","resolve","data","getData","series","entries","seriesName","seriesNames","item","handle","downloadToCSV","Promise","url","revoke"],"mappings":";;;;;;;;;;;;AAIA,MAAMA,IAAS;AAAA,EACbC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,KAAK;AAAA,IACLC,IAAI;AAAA,EAAA;AAAA;AAAA,EAGNC,KAAK;AAAA,IACHJ,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,KAAK;AAAA,EAAA;AAAA,EAEPG,WAAW;AAAA,IACTL,SAAS;AAAA,IACTM,gBAAgB;AAAA,IAChBC,YAAY;AAAA,IACZL,KAAK;AAAA,EAAA;AAAA;AAAA;AAAA,EAIPM,MAAM;AAAA,IAAEC,QAAQ;AAAA,IAAIC,OAAO;AAAA,EAAA;AAAA,EAC3BC,OAAO;AAAA,IAAEF,QAAQ;AAAA,IAAIC,OAAO;AAAA,EAAA;AAC9B,GAIME,IAA2C;AAAA,EAC/CC,OAAO;AAAA,EACPC,QAAQ;AACV,GAIMC,IAAiB,CAAC,OAAO,OAAO,OAAO,OAAO,KAAK;AAYlD,SAAAC,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAA0B;AAAA,IAAAC,MAAAC;AAAAA,IAAAC,MAAAC;AAAAA,EAAAA,IAAAN,GAC/BG,IAAAC,MAAAG,SAAA,IAAAH,GACAC,IAAAC,MAAAC,SAAA,UAAAD;AAAc,MAAAE;AAAA,EAAAP,SAAAE,KAITK,IAAAC,MAAKC,KAAM;AAAA,IAAAC,QAAUR;AAAAA,EAAAA,CAAM,GAACF,OAAAE,GAAAF,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAW;AAAA,SAAAX,EAAA,CAAA,MAAAI,KAAAJ,SAAAO,KAD/BI,sBAACC,GAAA,EAAQ,IAAAhC,EAAMC,MACZ0B,UAAAA,EAA4BM,IAAK,CAAAC,GAAAC,MAChC,gBAAAC,EAACJ,GAAA,EAAyB,IAAAhC,EAAMM,KAC9B,UAAA;AAAA,IAAA,gBAAA8B,EAACJ,GAAA,EAAQ,IAAAhC,EAAMO,WACb,UAAA;AAAA,MAAA,gBAAA8B,EAACC,GAAA,EAAiB,SAAA,eAAkB,IAAAtC,EAAMU,MAAK;AAAA,wBAC9C4B,GAAA,EAAiB,SAAA,eAAkB,IAAAtC,EAAMa,MAAAA,CAAM;AAAA,IAAA,GAClD;AAAA,IACA,gBAAAwB,EAACC,GAAA,EACS,SAAA,eACJ,IAAA;AAAA,MAAA3B,QACMG,EAAWU,CAAI;AAAA,MAACZ,OACjBK,EAAekB,IAAIlB,EAAca,MAAO;AAAA,IAAA,EACjD;OAVM,OAAOK,CAAC,EAYlB,CACD,EAAA,CACH,GAAMf,OAAAI,GAAAJ,OAAAO,GAAAP,OAAAW,KAAAA,IAAAX,EAAA,CAAA,GAhBNW;AAgBM;AC1DH,SAASQ,EAA6BC,GAO1B;AACjB,QAAMC,IAAwB,CAAA;AAC9B,SAAID,EAAKE,gBACPD,EAAME,KACJC,EAAqB;AAAA,IACnBC,UAAUL,EAAKK;AAAAA,IACfH,cAAcF,EAAKE;AAAAA,IACnBI,YAAYN,EAAKO;AAAAA,IACjBC,iBAAiBR,EAAKS;AAAAA,EAAAA,CACvB,CACH,GAEFR,EAAME,KAAK;AAAA,IACTO,IAAI;AAAA,IACJC,OAAO;AAAA,IACPC,SAASA,MAAM;AACb,YAAMC,IAAOb,EAAKc,QAAAA,GACZhC,IAAoB,CAAC,CAAC,UAAU,QAAQ,OAAO,CAAC;AACtD,iBAAW,CAACa,GAAGoB,CAAM,KAAKF,EAAKG,WAAW;AACxC,cAAMC,IAAajB,EAAKkB,cAAcvB,CAAC,KAAK,UAAUA,IAAI,CAAC;AAC3D,mBAAWwB,KAAQJ;AACjBjC,UAAAA,EAAKqB,KAAK,CAACc,GAAYE,EAAKjD,MAAMiD,EAAK9C,KAAK,CAAC;AAAA,MAEjD;AACA,YAAM+C,IAASC,EAAcvC,CAAI;AACjC,aAAOwC,QAAQV,QAAQ;AAAA,QACrBW,KAAKH,EAAOG;AAAAA,QACZlB,UAAU,GAAGL,EAAKK,QAAQ;AAAA,QAC1BmB,QAAQJ,EAAOI;AAAAA,MAAAA,CAChB;AAAA,IACH;AAAA,EAAA,CACD,GACMvB;AACT;"}
1
+ {"version":3,"file":"category.js","sources":["../../src/widgets-v2/category/skeleton.tsx","../../src/widgets-v2/category/download.ts"],"sourcesContent":["import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\nimport type { CategorySize } from './types'\n\nconst styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n py: 0.5,\n },\n // Mirror the real row layout: label + value on top, bar below.\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 1,\n },\n // Small fixed-width shimmer pills — matches the visual density of the\n // real label / value cells without claiming the full row width.\n name: { height: 14, width: 80 },\n value: { height: 14, width: 48 },\n} satisfies Record<string, SxProps<Theme>>\n\n// Bar shimmer height matches the live bar track for each size variant so\n// the skeleton doesn't visibly resize the row on data settle.\nconst BAR_HEIGHT: Record<CategorySize, number> = {\n small: 4,\n medium: 12,\n}\n\n// Varied widths give the bar shimmer a more realistic, less uniform feel.\n// Cycles when `rows > WIDTH_PATTERNS.length`.\nconst WIDTH_PATTERNS = ['95%', '80%', '55%', '75%', '60%']\n\nexport interface CategorySkeletonProps {\n rows?: number\n /**\n * Visual density. Mirrors the live widget's `size` prop so the loading\n * shimmer's bar height matches what's about to render — no row jump\n * on data settle.\n */\n size?: CategorySize\n}\n\nexport function CategorySkeleton({\n rows = 5,\n size = 'small',\n}: CategorySkeletonProps) {\n return (\n <Box sx={styles.root}>\n {Array.from({ length: rows }).map((_, i) => (\n <Box key={`row-${i}`} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton variant='rectangular' sx={styles.name} />\n <Skeleton variant='rectangular' sx={styles.value} />\n </Box>\n <Skeleton\n variant='rectangular'\n sx={{\n height: BAR_HEIGHT[size],\n width: WIDTH_PATTERNS[i % WIDTH_PATTERNS.length],\n }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import {\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { CategoryWidgetData } from './types'\n\n/**\n * Download menu items for the Category widget. Always includes a CSV item\n * with `series, name, value` columns (one row per item). When\n * `getCaptureEl` is supplied, prepends a PNG item that rasterises the\n * captured element via `html2canvas`.\n */\nexport function createCategoryDownloadConfig(args: {\n filename: string\n getData: () => CategoryWidgetData\n seriesNames?: readonly string[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const data = args.getData()\n const rows: unknown[][] = [['series', 'name', 'value']]\n for (const [i, series] of data.entries()) {\n const seriesName = args.seriesNames?.[i] ?? `series_${i + 1}`\n for (const item of series) {\n rows.push([seriesName, item.name, item.value])\n }\n }\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n"],"names":["styles","root","display","flexDirection","gap","py","row","rowHeader","justifyContent","alignItems","name","height","width","value","BAR_HEIGHT","small","medium","WIDTH_PATTERNS","CategorySkeleton","t0","$","_c","rows","t1","size","t2","undefined","t3","Array","from","length","t4","Box","map","_","i","jsxs","jsx","Skeleton","createCategoryDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","backgroundColor","pngBackgroundColor","id","label","resolve","data","getData","series","entries","seriesName","seriesNames","item","handle","downloadToCSV","Promise","url","revoke"],"mappings":"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"}
@@ -4,12 +4,12 @@ import { jsx as i } from "react/jsx-runtime";
4
4
  import { c as s } from "react/compiler-runtime";
5
5
  import { Box as m, Skeleton as u } from "@mui/material";
6
6
  import "react";
7
- import "@mui/icons-material/FileDownload";
7
+ import "@mui/icons-material";
8
8
  import "../lasso-tool-CDFj4zKY.js";
9
9
  import "../cjs-D4KH3azB.js";
10
- import "@mui/icons-material";
10
+ import "@carto/ps-utils";
11
11
  import { a as f } from "../exports-Cx-f6m6U.js";
12
- import { b as p, C as c } from "../png-item-CS4z1iSH.js";
12
+ import { b as p, C as c } from "../png-item-BE9uEqlD.js";
13
13
  const l = {
14
14
  root: {
15
15
  display: "flex",