@carto/ps-react-ui 4.9.1 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) 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-BiuuHCDN.js +1156 -0
  4. package/dist/change-column-BiuuHCDN.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--YiY6ko_.js} +4 -3
  12. package/dist/{data-zoom-layout-0QSptXG_.js.map → data-zoom-layout--YiY6ko_.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/{spread-Y9R1f5dm.js → spread-CPis22AE.js} +4 -3
  16. package/dist/{spread-Y9R1f5dm.js.map → spread-CPis22AE.js.map} +1 -1
  17. package/dist/types/chat/bubbles/chat-error-message.d.ts +2 -0
  18. package/dist/types/chat/bubbles/chat-suggestion-button.d.ts +2 -0
  19. package/dist/types/chat/bubbles/chat-user-message.d.ts +2 -0
  20. package/dist/types/chat/bubbles/index.d.ts +4 -0
  21. package/dist/types/chat/const.d.ts +4 -0
  22. package/dist/types/chat/containers/chat-content.d.ts +2 -0
  23. package/dist/types/chat/containers/chat-footer.d.ts +2 -0
  24. package/dist/types/chat/containers/chat-header.d.ts +2 -0
  25. package/dist/types/chat/containers/chat-starter.d.ts +2 -0
  26. package/dist/types/chat/containers/index.d.ts +4 -0
  27. package/dist/types/chat/containers/styles.d.ts +93 -0
  28. package/dist/types/chat/feedback/chat-loader.d.ts +2 -0
  29. package/dist/types/chat/feedback/chat-rating-action.d.ts +2 -0
  30. package/dist/types/chat/feedback/chat-thinking.d.ts +2 -0
  31. package/dist/types/chat/feedback/chat-tool-code-area.d.ts +2 -0
  32. package/dist/types/chat/feedback/chat-tool-full-view-dialog.d.ts +2 -0
  33. package/dist/types/chat/feedback/chat-tool-group.d.ts +2 -0
  34. package/dist/types/chat/feedback/chat-tool-trace.d.ts +3 -0
  35. package/dist/types/chat/feedback/get-tool-label.d.ts +2 -0
  36. package/dist/types/chat/feedback/index.d.ts +8 -0
  37. package/dist/types/chat/feedback/styles.d.ts +211 -0
  38. package/dist/types/chat/index.d.ts +20 -0
  39. package/dist/types/chat/types.d.ts +184 -0
  40. package/dist/types/chat/use-typewriter.d.ts +30 -0
  41. package/dist/types/components/copy-button/copy-button.d.ts +2 -0
  42. package/dist/types/components/copy-button/types.d.ts +6 -0
  43. package/dist/types/components/index.d.ts +2 -0
  44. package/dist/types/widgets/actions/brush-toggle/style.d.ts +1 -1
  45. package/dist/types/widgets/actions/shared/styles.d.ts +1 -1
  46. package/dist/types/widgets/actions/zoom-toggle/style.d.ts +1 -1
  47. package/dist/types/widgets/echart/types.d.ts +1 -1
  48. package/dist/types/widgets/toolbar-actions/styles.d.ts +1 -1
  49. package/dist/types/widgets-v2/actions/brush-toggle/style.d.ts +1 -1
  50. package/dist/types/widgets-v2/actions/change-column/style.d.ts +1 -1
  51. package/dist/types/widgets-v2/actions/fullscreen/style.d.ts +1 -1
  52. package/dist/types/widgets-v2/actions/index.d.ts +1 -0
  53. package/dist/types/widgets-v2/actions/lock-selection/style.d.ts +1 -1
  54. package/dist/types/widgets-v2/actions/relative-data/style.d.ts +1 -1
  55. package/dist/types/widgets-v2/actions/searcher/style.d.ts +1 -1
  56. package/dist/types/widgets-v2/actions/show-all/index.d.ts +2 -0
  57. package/dist/types/widgets-v2/actions/show-all/labels.d.ts +5 -0
  58. package/dist/types/widgets-v2/actions/show-all/show-all.d.ts +33 -0
  59. package/dist/types/widgets-v2/actions/show-all/style.d.ts +8 -0
  60. package/dist/types/widgets-v2/actions/stack-toggle/style.d.ts +1 -1
  61. package/dist/types/widgets-v2/actions/zoom-toggle/style.d.ts +1 -1
  62. package/dist/types/widgets-v2/category/category-ui.d.ts +9 -2
  63. package/dist/types/widgets-v2/category/category.d.ts +9 -2
  64. package/dist/types/widgets-v2/category/components/category-row-other.d.ts +19 -6
  65. package/dist/types/widgets-v2/category/style.d.ts +21 -2
  66. package/dist/types/widgets-v2/category/types.d.ts +2 -0
  67. package/dist/types/widgets-v2/index.d.ts +3 -2
  68. package/dist/types/widgets-v2/selection-summary/labels.d.ts +7 -2
  69. package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +13 -6
  70. package/dist/types/widgets-v2/selection-summary/style.d.ts +15 -0
  71. package/dist/widgets/actions.js +115 -114
  72. package/dist/widgets/actions.js.map +1 -1
  73. package/dist/widgets/bar.js +1 -1
  74. package/dist/widgets/category.js +9 -8
  75. package/dist/widgets/category.js.map +1 -1
  76. package/dist/widgets/formula.js +11 -10
  77. package/dist/widgets/formula.js.map +1 -1
  78. package/dist/widgets/histogram.js +7 -6
  79. package/dist/widgets/histogram.js.map +1 -1
  80. package/dist/widgets/markdown.js +9 -8
  81. package/dist/widgets/markdown.js.map +1 -1
  82. package/dist/widgets/pie.js +1 -1
  83. package/dist/widgets/scatterplot.js +1 -1
  84. package/dist/widgets/spread.js +9 -8
  85. package/dist/widgets/spread.js.map +1 -1
  86. package/dist/widgets/table.js +17 -16
  87. package/dist/widgets/table.js.map +1 -1
  88. package/dist/widgets/timeseries.js +1 -1
  89. package/dist/widgets/utils.js +1 -1
  90. package/dist/widgets/wrapper.js +3 -2
  91. package/dist/widgets/wrapper.js.map +1 -1
  92. package/dist/widgets-v2/actions.js +41 -37
  93. package/dist/widgets-v2/bar.js +8 -7
  94. package/dist/widgets-v2/bar.js.map +1 -1
  95. package/dist/widgets-v2/category.js +22 -21
  96. package/dist/widgets-v2/category.js.map +1 -1
  97. package/dist/widgets-v2/formula.js +23 -22
  98. package/dist/widgets-v2/formula.js.map +1 -1
  99. package/dist/widgets-v2/histogram.js +10 -9
  100. package/dist/widgets-v2/histogram.js.map +1 -1
  101. package/dist/widgets-v2/markdown.js +9 -8
  102. package/dist/widgets-v2/markdown.js.map +1 -1
  103. package/dist/widgets-v2/pie.js +7 -6
  104. package/dist/widgets-v2/pie.js.map +1 -1
  105. package/dist/widgets-v2/scatterplot.js +9 -8
  106. package/dist/widgets-v2/scatterplot.js.map +1 -1
  107. package/dist/widgets-v2/spread.js +9 -8
  108. package/dist/widgets-v2/spread.js.map +1 -1
  109. package/dist/widgets-v2/table.js +16 -15
  110. package/dist/widgets-v2/table.js.map +1 -1
  111. package/dist/widgets-v2/timeseries.js +8 -7
  112. package/dist/widgets-v2/timeseries.js.map +1 -1
  113. package/dist/widgets-v2/utils.js +1 -1
  114. package/dist/widgets-v2.js +276 -271
  115. package/dist/widgets-v2.js.map +1 -1
  116. package/package.json +7 -3
  117. package/src/chat/bubbles/chat-agent-message.test.tsx +30 -0
  118. package/src/chat/bubbles/chat-agent-message.tsx +11 -0
  119. package/src/chat/bubbles/chat-error-message.test.tsx +40 -0
  120. package/src/chat/bubbles/chat-error-message.tsx +47 -0
  121. package/src/chat/bubbles/chat-suggestion-button.test.tsx +24 -0
  122. package/src/chat/bubbles/chat-suggestion-button.tsx +27 -0
  123. package/src/chat/bubbles/chat-user-message.test.tsx +27 -0
  124. package/src/chat/bubbles/chat-user-message.tsx +27 -0
  125. package/src/chat/bubbles/index.ts +4 -0
  126. package/src/chat/bubbles/styles.ts +148 -0
  127. package/src/chat/const.ts +4 -0
  128. package/src/chat/containers/chat-content.test.tsx +269 -0
  129. package/src/chat/containers/chat-content.tsx +142 -0
  130. package/src/chat/containers/chat-footer.test.tsx +34 -0
  131. package/src/chat/containers/chat-footer.tsx +78 -0
  132. package/src/chat/containers/chat-header.test.tsx +28 -0
  133. package/src/chat/containers/chat-header.tsx +29 -0
  134. package/src/chat/containers/chat-starter.test.tsx +32 -0
  135. package/src/chat/containers/chat-starter.tsx +75 -0
  136. package/src/chat/containers/index.ts +4 -0
  137. package/src/chat/containers/styles.ts +96 -0
  138. package/src/chat/feedback/chat-actions-container.test.tsx +64 -0
  139. package/src/chat/feedback/chat-actions-container.tsx +7 -0
  140. package/src/chat/feedback/chat-loader.test.tsx +10 -0
  141. package/src/chat/feedback/chat-loader.tsx +31 -0
  142. package/src/chat/feedback/chat-rating-action.tsx +43 -0
  143. package/src/chat/feedback/chat-thinking.test.tsx +15 -0
  144. package/src/chat/feedback/chat-thinking.tsx +23 -0
  145. package/src/chat/feedback/chat-tool-code-area.test.tsx +23 -0
  146. package/src/chat/feedback/chat-tool-code-area.tsx +71 -0
  147. package/src/chat/feedback/chat-tool-full-view-dialog.test.tsx +39 -0
  148. package/src/chat/feedback/chat-tool-full-view-dialog.tsx +121 -0
  149. package/src/chat/feedback/chat-tool-group.test.tsx +84 -0
  150. package/src/chat/feedback/chat-tool-group.tsx +156 -0
  151. package/src/chat/feedback/chat-tool-trace.test.tsx +81 -0
  152. package/src/chat/feedback/chat-tool-trace.tsx +192 -0
  153. package/src/chat/feedback/get-tool-label.test.tsx +91 -0
  154. package/src/chat/feedback/get-tool-label.ts +13 -0
  155. package/src/chat/feedback/index.ts +8 -0
  156. package/src/chat/feedback/styles.ts +229 -0
  157. package/src/chat/index.ts +59 -0
  158. package/src/chat/types.ts +215 -0
  159. package/src/chat/use-typewriter.test.tsx +38 -0
  160. package/src/chat/use-typewriter.ts +82 -0
  161. package/src/components/copy-button/copy-button.test.tsx +41 -0
  162. package/src/components/copy-button/copy-button.tsx +31 -0
  163. package/src/components/copy-button/types.ts +10 -0
  164. package/src/components/index.ts +3 -0
  165. package/src/widgets/echart/types.ts +1 -1
  166. package/src/widgets-v2/actions/index.ts +8 -0
  167. package/src/widgets-v2/actions/show-all/index.ts +7 -0
  168. package/src/widgets-v2/actions/show-all/labels.ts +8 -0
  169. package/src/widgets-v2/actions/show-all/show-all.test.tsx +50 -0
  170. package/src/widgets-v2/actions/show-all/show-all.tsx +72 -0
  171. package/src/widgets-v2/actions/show-all/style.ts +8 -0
  172. package/src/widgets-v2/category/category-ui.test.tsx +26 -10
  173. package/src/widgets-v2/category/category-ui.tsx +13 -3
  174. package/src/widgets-v2/category/category.test.tsx +4 -4
  175. package/src/widgets-v2/category/category.tsx +10 -1
  176. package/src/widgets-v2/category/components/category-row-other.test.tsx +36 -7
  177. package/src/widgets-v2/category/components/category-row-other.tsx +64 -13
  178. package/src/widgets-v2/category/style.ts +35 -4
  179. package/src/widgets-v2/category/types.ts +2 -0
  180. package/src/widgets-v2/index.ts +3 -0
  181. package/src/widgets-v2/selection-summary/labels.ts +8 -4
  182. package/src/widgets-v2/selection-summary/selection-summary.test.tsx +15 -9
  183. package/src/widgets-v2/selection-summary/selection-summary.tsx +42 -22
  184. package/src/widgets-v2/selection-summary/style.ts +15 -0
  185. package/dist/category-DwaeYjpX.js +0 -656
  186. package/dist/category-DwaeYjpX.js.map +0 -1
  187. package/dist/change-column-B4IT0rh6.js +0 -1110
  188. package/dist/change-column-B4IT0rh6.js.map +0 -1
@@ -6,7 +6,7 @@ import "../widget-store-Bw5zRUGg.js";
6
6
  import "zustand/shallow";
7
7
  import { g as w } from "../options-CthfUJDz.js";
8
8
  import { m as v } from "../utils-BOhInag6.js";
9
- import { c as L, f as S } from "../download-config-CzmjOT2T.js";
9
+ import { c as L, f as S } from "../download-config-oJIFZ2WC.js";
10
10
  import { h as _, f as C, g as M, n as u, a as A, c as I, d as N } from "../option-builders-F-c9ELi1.js";
11
11
  import { Box as l, Skeleton as o } from "@mui/material";
12
12
  import { b as T } from "../styles-cohnxh9F.js";
@@ -11,6 +11,7 @@ import "@mui/icons-material";
11
11
  import { d as U, a as N } from "../exports-Cr43OCul.js";
12
12
  import "../lasso-tool-CDFj4zKY.js";
13
13
  import "../cjs-D4KH3azB.js";
14
+ import "@carto/ps-utils";
14
15
  import "@dnd-kit/core";
15
16
  import "@dnd-kit/sortable";
16
17
  import "@dnd-kit/utilities";
@@ -286,7 +287,7 @@ function le(t) {
286
287
  let c;
287
288
  return e[5] !== r ? (c = /* @__PURE__ */ h(C, { sx: u.legend, children: r }), e[5] = r, e[6] = c) : c = e[6], c;
288
289
  }
289
- function Re(t) {
290
+ function Fe(t) {
290
291
  const e = M(43), {
291
292
  id: o
292
293
  } = t, {
@@ -380,7 +381,7 @@ function ie({
380
381
  }));
381
382
  }
382
383
  const se = [85, 70, 55, 75, 60];
383
- function Fe() {
384
+ function Ie() {
384
385
  const t = M(1);
385
386
  let e;
386
387
  return t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ h(C, { sx: u.list, "aria-label": "Category skeleton", children: Array.from({
@@ -399,7 +400,7 @@ function ce(t, e) {
399
400
  } })
400
401
  ] }, e);
401
402
  }
402
- function Ie({
403
+ function _e({
403
404
  refUI: t,
404
405
  series: e
405
406
  }) {
@@ -426,7 +427,7 @@ function Ie({
426
427
  }
427
428
  }];
428
429
  }
429
- function _e() {
430
+ function De() {
430
431
  return {
431
432
  series: [],
432
433
  maxItems: 10,
@@ -439,9 +440,9 @@ export {
439
440
  oe as CategoryRowMulti,
440
441
  re as CategoryRowOther,
441
442
  te as CategoryRowSingle,
442
- Fe as CategorySkeleton,
443
- Re as CategoryUI,
444
- _e as categoryConfig,
445
- Ie as categoryDownloadConfig
443
+ Ie as CategorySkeleton,
444
+ Fe as CategoryUI,
445
+ De as categoryConfig,
446
+ _e as categoryDownloadConfig
446
447
  };
447
448
  //# sourceMappingURL=category.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"category.js","sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n width: '100%',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\n/**\n * Renders a single horizontal bar fill proportional to its value relative to the maximum.\n */\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a single-series category row with a label, formatted value, and proportional bar.\n */\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a multi-series category row with a label and multiple color-coded bars stacked vertically.\n */\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\n/**\n * Renders an \"Other\" summary row indicating how many additional categories are hidden beyond `maxItems`.\n */\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\n/**\n * Renders a color-coded legend for multi-series category widgets.\n */\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport { CategoryRowSingle } from './components/category-row-single'\nimport { CategoryRowMulti } from './components/category-row-multi'\nimport { CategoryRowOther } from './components/category-row-other'\nimport { CategoryLegend } from './components/category-legend'\nimport { useState } from 'react'\nimport { defaultFormatter, defaultLabelFormatter } from '../utils/formatter'\nimport { useWidgetRef } from '../../hooks'\n\n/**\n * Renders a category widget displaying horizontal bars for categorical data with support for single and multi-series layouts, selection, and overflow grouping.\n */\nexport function CategoryUI({ id }: CategoryUIProps) {\n const { ref } = useWidgetRef<HTMLDivElement>(id)\n const theme = useTheme()\n\n // Single consolidated subscription instead of 9 separate ones.\n const {\n _formatter,\n _labelFormatter,\n _series,\n data,\n maxItems,\n labels,\n onRowClick,\n selected,\n max,\n } = useWidgetSelector(id, (w) => {\n const cw = w as CategoryWidgetState | undefined\n return {\n _formatter: cw?.formatter,\n _labelFormatter: cw?.labelFormatter,\n _series: cw?.series,\n data: cw?.data,\n maxItems: cw?.maxItems,\n labels: cw?.labels,\n onRowClick: cw?.onRowClick,\n selected: cw?.selected,\n max: cw?.max,\n }\n })\n\n const formatter = _formatter ?? defaultFormatter\n const labelFormatter = _labelFormatter ?? defaultLabelFormatter\n const series = _series ?? []\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n ref={ref}\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n} from './types'\n\ninterface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\n/**\n * Creates download configuration for category widgets, supporting PNG (screenshot) and CSV (data) exports. CSV output groups values by category across multiple series.\n *\n * @param props - Configuration with `refUI` reference and optional `series` for CSV column headers.\n * @returns Array of download items for use with the Download action.\n */\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for category list widgets, including empty series and a default `maxItems` of 10.\n *\n * @returns Default category widget config.\n */\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","width","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","overflow","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","legendLabel","textTransform","multiBarRow","multiBarValue","minWidth","textAlign","multiBarContainer","flex","otherRow","otherLabel","fontStyle","otherCount","CategoryBar","t0","$","_c","value","maxValue","selected","t1","undefined","percentage","t2","barFillSx","t3","jsx","Box","CategoryRowSingle","name","formatter","labelFormatter","onClick","handleClick","rowStyle","t4","Typography","t5","t6","t7","t8","t9","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","CategoryUI","id","ref","useWidgetRef","useTheme","_formatter","_labelFormatter","_series","data","maxItems","labels","onRowClick","max","useWidgetSelector","_temp","defaultFormatter","defaultLabelFormatter","maxHeight","useState","qualitativeColors","Object","qualitative","bold","s","secondary","main","T0","T1","Symbol","for","bb0","groupedData","generateGroupedData","Math","flatMap","_temp2","visibleData","slice","isMulti","item_0","item_1","other","t10","w","cw","seriesCount","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
1
+ {"version":3,"file":"category.js","sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n width: '100%',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\n/**\n * Renders a single horizontal bar fill proportional to its value relative to the maximum.\n */\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a single-series category row with a label, formatted value, and proportional bar.\n */\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a multi-series category row with a label and multiple color-coded bars stacked vertically.\n */\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n labelFormatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>\n {labelFormatter ? labelFormatter(name) : name}\n </Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\n/**\n * Renders an \"Other\" summary row indicating how many additional categories are hidden beyond `maxItems`.\n */\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\n/**\n * Renders a color-coded legend for multi-series category widgets.\n */\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport { CategoryRowSingle } from './components/category-row-single'\nimport { CategoryRowMulti } from './components/category-row-multi'\nimport { CategoryRowOther } from './components/category-row-other'\nimport { CategoryLegend } from './components/category-legend'\nimport { useState } from 'react'\nimport { defaultFormatter, defaultLabelFormatter } from '../utils/formatter'\nimport { useWidgetRef } from '../../hooks'\n\n/**\n * Renders a category widget displaying horizontal bars for categorical data with support for single and multi-series layouts, selection, and overflow grouping.\n */\nexport function CategoryUI({ id }: CategoryUIProps) {\n const { ref } = useWidgetRef<HTMLDivElement>(id)\n const theme = useTheme()\n\n // Single consolidated subscription instead of 9 separate ones.\n const {\n _formatter,\n _labelFormatter,\n _series,\n data,\n maxItems,\n labels,\n onRowClick,\n selected,\n max,\n } = useWidgetSelector(id, (w) => {\n const cw = w as CategoryWidgetState | undefined\n return {\n _formatter: cw?.formatter,\n _labelFormatter: cw?.labelFormatter,\n _series: cw?.series,\n data: cw?.data,\n maxItems: cw?.maxItems,\n labels: cw?.labels,\n onRowClick: cw?.onRowClick,\n selected: cw?.selected,\n max: cw?.max,\n }\n })\n\n const formatter = _formatter ?? defaultFormatter\n const labelFormatter = _labelFormatter ?? defaultLabelFormatter\n const series = _series ?? []\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n ref={ref}\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n} from './types'\n\ninterface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\n/**\n * Creates download configuration for category widgets, supporting PNG (screenshot) and CSV (data) exports. CSV output groups values by category across multiple series.\n *\n * @param props - Configuration with `refUI` reference and optional `series` for CSV column headers.\n * @returns Array of download items for use with the Download action.\n */\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for category list widgets, including empty series and a default `maxItems` of 10.\n *\n * @returns Default category widget config.\n */\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","width","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","overflow","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","legendLabel","textTransform","multiBarRow","multiBarValue","minWidth","textAlign","multiBarContainer","flex","otherRow","otherLabel","fontStyle","otherCount","CategoryBar","t0","$","_c","value","maxValue","selected","t1","undefined","percentage","t2","barFillSx","t3","jsx","Box","CategoryRowSingle","name","formatter","labelFormatter","onClick","handleClick","rowStyle","t4","Typography","t5","t6","t7","t8","t9","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","CategoryUI","id","ref","useWidgetRef","useTheme","_formatter","_labelFormatter","_series","data","maxItems","labels","onRowClick","max","useWidgetSelector","_temp","defaultFormatter","defaultLabelFormatter","maxHeight","useState","qualitativeColors","Object","qualitative","bold","s","secondary","main","T0","T1","Symbol","for","bb0","groupedData","generateGroupedData","Math","flatMap","_temp2","visibleData","slice","isMulti","item_0","item_1","other","t10","w","cw","seriesCount","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
@@ -12,6 +12,7 @@ import "react";
12
12
  import { d as h, a as S } from "../exports-Cr43OCul.js";
13
13
  import "../lasso-tool-CDFj4zKY.js";
14
14
  import "../cjs-D4KH3azB.js";
15
+ import "@carto/ps-utils";
15
16
  import "@dnd-kit/core";
16
17
  import "@dnd-kit/sortable";
17
18
  import "@dnd-kit/utilities";
@@ -50,7 +51,7 @@ function z(e) {
50
51
  let d;
51
52
  return t[11] !== i || t[12] !== m || t[13] !== s ? (d = /* @__PURE__ */ f(y, { TypographyProps: m, ...i, children: s }), t[11] = i, t[12] = m, t[13] = s, t[14] = d) : d = t[14], d;
52
53
  }
53
- function tt({
54
+ function et({
54
55
  refUI: e
55
56
  }) {
56
57
  return [{
@@ -64,12 +65,12 @@ function tt({
64
65
  }
65
66
  }];
66
67
  }
67
- function et() {
68
+ function it() {
68
69
  return {
69
70
  series: []
70
71
  };
71
72
  }
72
- function it(e) {
73
+ function ot(e) {
73
74
  const t = g(8), {
74
75
  ref: r
75
76
  } = j(e.id);
@@ -90,7 +91,7 @@ function it(e) {
90
91
  let n;
91
92
  return t[5] !== r || t[6] !== o ? (n = /* @__PURE__ */ f(v, { ref: r, children: o }), t[5] = r, t[6] = o, t[7] = n) : n = t[7], n;
92
93
  }
93
- function ot() {
94
+ function rt() {
94
95
  const e = g(1);
95
96
  let t;
96
97
  return e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ f(v, { sx: $.row, "aria-label": "Formula skeleton", children: /* @__PURE__ */ f(b, { width: 120, height: 32 }) }), e[0] = t) : t = e[0], t;
@@ -102,21 +103,21 @@ function V(e) {
102
103
  suffix: typeof e.suffix == "string" ? e.suffix : void 0
103
104
  };
104
105
  }
105
- function rt(e) {
106
+ function nt(e) {
106
107
  return e?.map(V);
107
108
  }
108
109
  export {
109
- ot as FormulaSkeleton,
110
- it as FormulaUI,
110
+ rt as FormulaSkeleton,
111
+ ot as FormulaUI,
111
112
  y as Item,
112
113
  I as Prefix,
113
114
  T as Row,
114
115
  F as Series,
115
116
  D as Suffix,
116
117
  z as Value,
117
- et as formulaConfig,
118
- tt as formulaDownloadConfig,
118
+ it as formulaConfig,
119
+ et as formulaDownloadConfig,
119
120
  V as sanitizeDataItem,
120
- rt as sanitizeDataItems
121
+ nt as sanitizeDataItems
121
122
  };
122
123
  //# sourceMappingURL=formula.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { Item } from './item'\nimport { defaultFormatter } from '../../utils/formatter'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\n/**\n * Displays the formatted numeric value for a formula widget data item, applying the widget's formatter and color.\n */\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const { value, color, formatter } = useWidgetSelector(id, (w) => {\n const widget = w as FormulaWidgetState | undefined\n return {\n value: widget?.data?.[index]?.value,\n color: widget?.data?.[index]?.color,\n formatter: widget?.formatter ?? defaultFormatter,\n }\n })\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\n/**\n * Creates download configuration for formula widgets, supporting PNG (screenshot) and CSV (data) exports.\n *\n * @param props - Configuration with `refUI` reference for PNG export.\n * @returns Array of download items for use with the Download action.\n */\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for formula (single or multiple numeric value) widgets.\n *\n * @returns Default formula widget config with empty series.\n */\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\n/**\n * Renders a formula widget displaying one or more KPI values with optional prefixes, suffixes, and series indicators.\n */\nexport function FormulaUI(props: FormulaUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["Value","t0","$","_c","id","props","t1","index","undefined","t2","w","widget","value","data","color","formatter","defaultFormatter","useWidgetSelector","t3","t4","t5","t6","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useWidgetRef","jsxs","Fragment","jsx","Series","Prefix","Suffix","Row","Box","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":"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"}
1
+ {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { Item } from './item'\nimport { defaultFormatter } from '../../utils/formatter'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\n/**\n * Displays the formatted numeric value for a formula widget data item, applying the widget's formatter and color.\n */\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const { value, color, formatter } = useWidgetSelector(id, (w) => {\n const widget = w as FormulaWidgetState | undefined\n return {\n value: widget?.data?.[index]?.value,\n color: widget?.data?.[index]?.color,\n formatter: widget?.formatter ?? defaultFormatter,\n }\n })\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\n/**\n * Creates download configuration for formula widgets, supporting PNG (screenshot) and CSV (data) exports.\n *\n * @param props - Configuration with `refUI` reference for PNG export.\n * @returns Array of download items for use with the Download action.\n */\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for formula (single or multiple numeric value) widgets.\n *\n * @returns Default formula widget config with empty series.\n */\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\n/**\n * Renders a formula widget displaying one or more KPI values with optional prefixes, suffixes, and series indicators.\n */\nexport function FormulaUI(props: FormulaUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["Value","t0","$","_c","id","props","t1","index","undefined","t2","w","widget","value","data","color","formatter","defaultFormatter","useWidgetSelector","t3","t4","t5","t6","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useWidgetRef","jsxs","Fragment","jsx","Series","Prefix","Suffix","Row","Box","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":";;;;;;;;;;;;;;;;;;;;AAQO,SAAAA,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAC,GAAAC,GAAAC;AAAA,EAAAJ,SAAAD,KAAe;AAAA,IAAAG,IAAAA;AAAAA,IAAAG,OAAAD;AAAAA,IAAA,GAAAD;AAAAA,EAAAA,IAAAJ,GAAuCC,OAAAD,GAAAC,OAAAE,GAAAF,OAAAG,GAAAH,OAAAI,MAAAF,IAAAF,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA,GAAAI,IAAAJ,EAAA,CAAA;AAAjC,QAAAK,IAAAD,MAAAE,SAAA,IAAAF;AAAS,MAAAG;AAAA,EAAAP,SAAAK,KACuBE,IAAAC,CAAAA,MAAA;AACxD,UAAAC,IAAeD;AAAmC,WAC3C;AAAA,MAAAE,OACED,GAAME,OAASN,CAAK,GAAQK;AAAAA,MAAAE,OAC5BH,GAAME,OAASN,CAAK,GAAQO;AAAAA,MAAAC,WACxBJ,GAAMI,aAANC;AAAAA,IAAAA;AAAAA,EACZ,GACFd,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAPD,QAAA;AAAA,IAAAU,OAAAA;AAAAA,IAAAE,OAAAA;AAAAA,IAAAC,WAAAA;AAAAA,EAAAA,IAAoCE,EAAkBb,GAAIK,CAOzD;AAAC,MAAAS;AAAA,EAAAhB,SAAAY,KAGuBI,IAAA;AAAA,IAAAJ,OAAAA;AAAAA,EAAAA,GAASZ,OAAAY,GAAAZ,OAAAgB,KAAAA,IAAAhB,EAAA,CAAA;AACnB,QAAAiB,IAAAP,KAAA;AAAU,MAAAQ;AAAA,EAAAlB,EAAA,CAAA,MAAAa,KAAAb,SAAAiB,KAApBC,IAAAL,EAAUI,CAAU,GAACjB,OAAAa,GAAAb,OAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAAG,KAAAH,UAAAgB,KAAAhB,EAAA,EAAA,MAAAkB,KADxBC,sBAACC,GAAA,EAAsB,iBAAAJ,GAAS,GAAMb,GACnCe,UAAAA,GACH,GAAOlB,QAAAG,GAAAH,QAAAgB,GAAAhB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAFPmB;AAEO;ACXJ,SAASE,GAAsB;AAAA,EACpCC,OAAAA;AACW,GAA0B;AACrC,SAAO,CACL;AAAA,IACE,GAAGC;AAAAA,IACHC,UAAUA,MAAMD,EAAcC,SAASF,CAAK;AAAA,EAAA,GAE9C;AAAA,IACE,GAAGG;AAAAA,IACHD,UAAU,OAAOb,MAAS;AACxB,YAAMe,IAAc,CAACf,GAAMgB,IAAKC,OAASA,EAAKlB,KAAK,KAAK,EAAE;AAC1D,aAAOe,EAAcD,SAASE,CAAW;AAAA,IAC3C;AAAA,EAAA,CACD;AAEL;AAOO,SAASG,KAAqC;AACnD,SAAO;AAAA,IACLC,QAAQ,CAAA;AAAA,EAAA;AAEZ;ACzBO,SAAAC,GAAA5B,GAAA;AAAA,QAAAH,IAAAC,EAAA,CAAA,GACL;AAAA,IAAA+B,KAAAA;AAAAA,EAAAA,IAAgBC,EAAa9B,EAAKD,EAAG;AAAC,MAAAH;AAAA,EAAAC,EAAA,CAAA,MAAAG,EAAAD,MAK/BH,IAAAK,CAAAA,MAAA;AAAC,UAAA;AAAA,MAAAC,OAAAA;AAAAA,IAAAA,IAAAD;AAAS,WACT,gBAAA8B,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC,EAACC,GAAA,EAAW,IAAAlC,EAAKD,IAAYG,OAAAA,GAAK;AAAA,MAClC,gBAAA+B,EAACE,GAAA,EAAW,IAAAnC,EAAKD,IAAYG,OAAAA,GAAK;AAAA,MAClC,gBAAA+B,EAACtC,GAAA,EAAU,IAAAK,EAAKD,IAAYG,OAAAA,GAAK;AAAA,MACjC,gBAAA+B,EAACG,GAAA,EAAW,IAAApC,EAAKD,IAAYG,OAAAA,EAAAA;OAAS;AAAA,EACrC,GACJL,EAAA,CAAA,IAAAG,EAAAD,IAAAF,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,EAAAJ,SAAAG,EAAAD,MAAAF,SAAAD,KARHK,sBAACoC,GAAA,EAAQ,IAAArC,EAAKD,IACXH,UAAAA,GAQH,GAAMC,EAAA,CAAA,IAAAG,EAAAD,IAAAF,OAAAD,GAAAC,OAAAI,KAAAA,IAAAJ,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,EAAA,CAAA,MAAAgC,KAAAhC,SAAAI,KAVRG,IAAA,gBAAA6B,EAACK,GAAA,EAAST,KAAAA,GACR5B,UAAAA,GAUF,GAAMJ,OAAAgC,GAAAhC,OAAAI,GAAAJ,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GAXNO;AAWM;ACxBH,SAAAmC,KAAA;AAAA,QAAA1C,IAAAC,EAAA,CAAA;AAAA,MAAAF;AAAA,SAAAC,EAAA,CAAA,MAAA2C,uBAAAC,IAAA,2BAAA,KAEH7C,IAAA,gBAAAqC,EAACK,GAAA,EAAQ,IAAAI,EAAMC,KAAiB,cAAA,oBAC9B,UAAA,gBAAAV,EAACW,GAAA,EAAgB,OAAA,KAAa,QAAA,IAAE,GAClC,GAAM/C,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GAFND;AAEM;ACEH,SAASiD,EAAiBpB,GAA0B;AACzD,SAAO;AAAA,IACL,GAAGA;AAAAA,IACHqB,QAAQ,OAAOrB,EAAKqB,UAAW,WAAWrB,EAAKqB,SAAS3C;AAAAA,IACxD4C,QAAQ,OAAOtB,EAAKsB,UAAW,WAAWtB,EAAKsB,SAAS5C;AAAAA,EAAAA;AAE5D;AAQO,SAAS6C,GACdC,GACwB;AACxB,SAAOA,GAAOzB,IAAIqB,CAAgB;AACpC;"}
@@ -12,6 +12,7 @@ import "@mui/icons-material";
12
12
  import { d as h, a as d } from "../exports-Cr43OCul.js";
13
13
  import "../lasso-tool-CDFj4zKY.js";
14
14
  import "../cjs-D4KH3azB.js";
15
+ import "@carto/ps-utils";
15
16
  import "@dnd-kit/core";
16
17
  import "@dnd-kit/sortable";
17
18
  import "@dnd-kit/utilities";
@@ -24,7 +25,7 @@ function F(e, n, t) {
24
25
  length: r
25
26
  }, (c, s) => `Series ${s + 1}`)] : ["Bin", "Value"], ...a.map((c, s) => [c, ...e.map((i) => String(i[s] ?? 0))])];
26
27
  }
27
- function ae({
28
+ function se({
28
29
  refUI: e,
29
30
  ticks: n,
30
31
  labelFormatter: t
@@ -46,7 +47,7 @@ function b(e, n, t) {
46
47
  return l !== void 0 && isFinite(l) ? `${o(p)}-${o(l)}` : `${o(p)}+`;
47
48
  });
48
49
  }
49
- function se(e) {
50
+ function le(e) {
50
51
  return {
51
52
  type: "histogram",
52
53
  option: C(k(e), I(e)),
@@ -152,7 +153,7 @@ const N = {
152
153
  graph: D.graph
153
154
  }
154
155
  };
155
- function le() {
156
+ function ce() {
156
157
  const e = _(2);
157
158
  let n;
158
159
  e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = /* @__PURE__ */ m(f, { sx: {
@@ -204,9 +205,9 @@ function B(e) {
204
205
  return n(0.5);
205
206
  }
206
207
  export {
207
- le as HistogramSkeleton,
208
- se as histogramConfig,
208
+ ce as HistogramSkeleton,
209
+ le as histogramConfig,
209
210
  F as histogramDataToCSV,
210
- ae as histogramDownloadConfig
211
+ se as histogramDownloadConfig
211
212
  };
212
213
  //# sourceMappingURL=histogram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type { HistogramConfig, HistogramWidgetConfig } from './types'\nimport {\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n buildHistogramSeriesLabelConfig,\n} from '../utils/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport interface HistogramDownloadConfigProps extends ConfigProps {\n ticks: number[]\n labelFormatter?: (value: string | number) => string | number\n}\n\nexport function histogramDataToCSV(\n data: number[][],\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[][] {\n if (!data?.length || data[0]?.length === 0) return []\n\n const dataLength = data[0]?.length ?? 0\n const labels = createAxisLabels(dataLength, ticks, labelFormatter)\n const seriesCount = data.length\n const isMulti = seriesCount > 1\n\n const headers = isMulti\n ? [\n 'Bin',\n ...Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`),\n ]\n : ['Bin', 'Value']\n\n return [\n headers,\n ...labels.map((label, i) => [\n label,\n ...data.map((series) => String(series[i] ?? 0)),\n ]),\n ]\n}\n\nexport function histogramDownloadConfig({\n refUI,\n ticks,\n labelFormatter,\n}: HistogramDownloadConfigProps): DownloadItem<number[][]>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) =>\n downloadToCSV.modifier(histogramDataToCSV(data, ticks, labelFormatter)),\n },\n ]\n}\n\n/**\n * Creates formatted axis labels from tick boundaries.\n *\n * @param dataLength - Number of data points (determines number of labels).\n * @param ticks - Bin boundaries. If `ticks.length === dataLength + 1`, all\n * bins are ranges. If `ticks.length === dataLength`, the last bin is\n * open-ended (`+`). A last tick of `Infinity` also produces `+`.\n * @param labelFormatter - Optional formatter applied to each individual tick\n * value when building the bin range label.\n */\nfunction createAxisLabels(\n dataLength: number,\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[] {\n const fmt = (v: number) =>\n labelFormatter ? String(labelFormatter(v)) : String(v)\n\n return Array.from({ length: dataLength }, (_, i) => {\n const low = ticks[i] ?? i\n const high = ticks[i + 1]\n return high !== undefined && isFinite(high)\n ? `${fmt(low)}-${fmt(high)}`\n : `${fmt(low)}+`\n })\n}\n\n/**\n * Generates ECharts configuration for distribution histogram widgets with\n * adjacent bars (minimal gap) and axis formatting styled with the CARTO theme.\n *\n * Accepts raw `number[][]` data and `ticks` boundaries. The ticks and\n * `labelFormatter` are used to create the x-axis category labels; the raw\n * numeric data is embedded directly in each series.\n *\n * @param props - Histogram configuration including raw data, ticks, and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n labelFormatter: props.labelFormatter,\n }\n}\n\nfunction getOption({\n data = [],\n ticks,\n theme,\n formatter,\n labelFormatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n const dataLength = data[0]?.length ?? 0\n const axisLabels = createAxisLabels(dataLength, ticks, labelFormatter)\n\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n data: axisLabels,\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: undefined,\n showMaxLabel: undefined,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value' as const,\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 splitNumber: 1,\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' as const,\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 axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const _value = item.value as number\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : String(_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = item.name\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((seriesData: number[]) => ({\n type: 'bar',\n data: seriesData,\n barGap: '1%',\n barCategoryGap: '1%',\n emphasis: {\n focus: 'series',\n },\n ...buildHistogramSeriesLabelConfig(formatter),\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={`skeleton-bar-${i}`}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={`skeleton-label-${i}`} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDataToCSV","data","ticks","labelFormatter","length","dataLength","labels","createAxisLabels","seriesCount","Array","from","_","i","map","label","series","String","histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","fmt","v","low","high","undefined","isFinite","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","theme","hasLegend","axisLabels","niceMin","niceMax","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","min","extent","niceNum","max","splitNumber","verticalAlign","value","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","_value","formattedValue","marker","seriesName","name","seriesData","barGap","barCategoryGap","emphasis","focus","buildHistogramSeriesLabelConfig","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","flex","spacing_0"],"mappings":"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"}
1
+ {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type { HistogramConfig, HistogramWidgetConfig } from './types'\nimport {\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n buildHistogramSeriesLabelConfig,\n} from '../utils/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport interface HistogramDownloadConfigProps extends ConfigProps {\n ticks: number[]\n labelFormatter?: (value: string | number) => string | number\n}\n\nexport function histogramDataToCSV(\n data: number[][],\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[][] {\n if (!data?.length || data[0]?.length === 0) return []\n\n const dataLength = data[0]?.length ?? 0\n const labels = createAxisLabels(dataLength, ticks, labelFormatter)\n const seriesCount = data.length\n const isMulti = seriesCount > 1\n\n const headers = isMulti\n ? [\n 'Bin',\n ...Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`),\n ]\n : ['Bin', 'Value']\n\n return [\n headers,\n ...labels.map((label, i) => [\n label,\n ...data.map((series) => String(series[i] ?? 0)),\n ]),\n ]\n}\n\nexport function histogramDownloadConfig({\n refUI,\n ticks,\n labelFormatter,\n}: HistogramDownloadConfigProps): DownloadItem<number[][]>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) =>\n downloadToCSV.modifier(histogramDataToCSV(data, ticks, labelFormatter)),\n },\n ]\n}\n\n/**\n * Creates formatted axis labels from tick boundaries.\n *\n * @param dataLength - Number of data points (determines number of labels).\n * @param ticks - Bin boundaries. If `ticks.length === dataLength + 1`, all\n * bins are ranges. If `ticks.length === dataLength`, the last bin is\n * open-ended (`+`). A last tick of `Infinity` also produces `+`.\n * @param labelFormatter - Optional formatter applied to each individual tick\n * value when building the bin range label.\n */\nfunction createAxisLabels(\n dataLength: number,\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[] {\n const fmt = (v: number) =>\n labelFormatter ? String(labelFormatter(v)) : String(v)\n\n return Array.from({ length: dataLength }, (_, i) => {\n const low = ticks[i] ?? i\n const high = ticks[i + 1]\n return high !== undefined && isFinite(high)\n ? `${fmt(low)}-${fmt(high)}`\n : `${fmt(low)}+`\n })\n}\n\n/**\n * Generates ECharts configuration for distribution histogram widgets with\n * adjacent bars (minimal gap) and axis formatting styled with the CARTO theme.\n *\n * Accepts raw `number[][]` data and `ticks` boundaries. The ticks and\n * `labelFormatter` are used to create the x-axis category labels; the raw\n * numeric data is embedded directly in each series.\n *\n * @param props - Histogram configuration including raw data, ticks, and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n labelFormatter: props.labelFormatter,\n }\n}\n\nfunction getOption({\n data = [],\n ticks,\n theme,\n formatter,\n labelFormatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n const dataLength = data[0]?.length ?? 0\n const axisLabels = createAxisLabels(dataLength, ticks, labelFormatter)\n\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n data: axisLabels,\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: undefined,\n showMaxLabel: undefined,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value' as const,\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 splitNumber: 1,\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' as const,\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 axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const _value = item.value as number\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : String(_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = item.name\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((seriesData: number[]) => ({\n type: 'bar',\n data: seriesData,\n barGap: '1%',\n barCategoryGap: '1%',\n emphasis: {\n focus: 'series',\n },\n ...buildHistogramSeriesLabelConfig(formatter),\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={`skeleton-bar-${i}`}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={`skeleton-label-${i}`} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDataToCSV","data","ticks","labelFormatter","length","dataLength","labels","createAxisLabels","seriesCount","Array","from","_","i","map","label","series","String","histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","fmt","v","low","high","undefined","isFinite","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","theme","hasLegend","axisLabels","niceMin","niceMax","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","min","extent","niceNum","max","splitNumber","verticalAlign","value","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","_value","formattedValue","marker","seriesName","name","seriesData","barGap","barCategoryGap","emphasis","focus","buildHistogramSeriesLabelConfig","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","flex","spacing_0"],"mappings":"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"}
@@ -9,13 +9,14 @@ import "react";
9
9
  import "html2canvas";
10
10
  import "../lasso-tool-CDFj4zKY.js";
11
11
  import "../cjs-D4KH3azB.js";
12
+ import "@carto/ps-utils";
12
13
  import "@dnd-kit/core";
13
14
  import "@dnd-kit/sortable";
14
15
  import "@dnd-kit/utilities";
15
16
  import "react-dom";
16
17
  import "zustand/shallow";
17
18
  import { a as d } from "../exports-Cr43OCul.js";
18
- function U(t) {
19
+ function V(t) {
19
20
  const o = s(2), {
20
21
  id: n
21
22
  } = t, e = f(n, y);
@@ -87,7 +88,7 @@ function S(t) {
87
88
  let l;
88
89
  return o[2] !== n || o[3] !== i ? (l = /* @__PURE__ */ r(k, { components: i, children: n }), o[2] = n, o[3] = i, o[4] = l) : l = o[4], l;
89
90
  }
90
- function V() {
91
+ function W() {
91
92
  const t = s(3);
92
93
  let o;
93
94
  t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ r(a, { width: "80%", height: 24, sx: {
@@ -107,7 +108,7 @@ function V() {
107
108
  /* @__PURE__ */ r(a, { width: "75%", height: 20 })
108
109
  ] }), t[2] = e) : e = t[2], e;
109
110
  }
110
- function W() {
111
+ function q() {
111
112
  return [{
112
113
  ...d,
113
114
  modifier: async (t) => {
@@ -116,14 +117,14 @@ function W() {
116
117
  }
117
118
  }];
118
119
  }
119
- function q() {
120
+ function z() {
120
121
  return {};
121
122
  }
122
123
  export {
123
- U as Markdown,
124
- V as MarkdownSkeleton,
124
+ V as Markdown,
125
+ W as MarkdownSkeleton,
125
126
  S as MarkdownUI,
126
- q as markdownConfig,
127
- W as markdownDownloadConfig
127
+ z as markdownConfig,
128
+ q as markdownDownloadConfig
128
129
  };
129
130
  //# sourceMappingURL=markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sources":["../../src/widgets/markdown/markdown.tsx","../../src/widgets/markdown/style.ts","../../src/widgets/markdown/markdown-ui.tsx","../../src/widgets/markdown/skeleton.tsx","../../src/widgets/markdown/config.ts"],"sourcesContent":["import type { MarkdownUIProps } from './types'\nimport type { MarkdownWidgetData } from './types'\nimport { MarkdownUI } from '.'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\n\n/**\n * Stateful markdown widget component that reads content from the widget store and renders it as formatted rich text.\n */\nexport function Markdown({ id }: MarkdownUIProps) {\n const content = useWidgetSelector(\n id,\n (w) => (w?.data as MarkdownWidgetData | undefined)?.content,\n )\n\n if (!content) {\n return null\n }\n\n return <MarkdownUI>{content}</MarkdownUI>\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles: Record<string, SxProps<Theme>> = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(2),\n },\n markdown: {\n overflow: 'hidden',\n typography: ({ typography }) => ({\n ...typography.body1,\n }),\n },\n li: {\n display: 'list-item',\n paddingTop: 0,\n paddingBottom: 0,\n },\n ul: {\n listStyleType: 'disc',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n ol: {\n listStyleType: 'decimal',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n}\n","import { Link, List, ListItem, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport { styles } from '../markdown/style'\nimport type { MarkdownComponentProps } from './types'\n\nconst COMPONENTS: Components = {\n h1: ({ children }) => (\n <Typography variant='h4' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h2: ({ children }) => (\n <Typography variant='h5' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h3: ({ children }) => (\n <Typography variant='h6' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n p: ({ children }) => (\n <Typography paragraph color='inherit'>\n {children}\n </Typography>\n ),\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link href={href} target={target} rel={rel}>\n {children}\n </Link>\n ),\n ul: ({ children }) => <List sx={styles.ul}>{children}</List>,\n ol: ({ children }) => (\n <List component='ol' sx={styles.ol}>\n {children}\n </List>\n ),\n li: ({ children }) => <ListItem sx={styles.li}>{children}</ListItem>,\n}\n\n/**\n * Presentational component that renders a Markdown string as MUI-styled HTML using react-markdown.\n *\n * @remarks\n * Maps Markdown elements (headings, paragraphs, links, lists) to MUI Typography and Link components.\n * Custom component overrides can be passed via the `overrides` prop.\n */\nexport function MarkdownUI({ children, overrides }: MarkdownComponentProps) {\n return (\n <ReactMarkdown\n components={{\n ...COMPONENTS,\n ...overrides,\n }}\n >\n {children}\n </ReactMarkdown>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\n\nexport function MarkdownSkeleton() {\n return (\n <Box aria-label='Markdown skeleton'>\n <Skeleton width='80%' height={24} sx={{ mb: 1 }} />\n <Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='85%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='75%' height={20} />\n </Box>\n )\n}\n","import { downloadToCSV, type DownloadItem } from '../actions'\nimport type { MarkdownWidgetConfig, MarkdownWidgetData } from './types'\n\n/**\n * Creates download configuration for markdown widgets, supporting CSV export of text content. Does not require `refUI` since it only exports text.\n *\n * @returns Array of download items for use with the Download action.\n */\nexport function markdownDownloadConfig(): DownloadItem<MarkdownWidgetData>[] {\n return [\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const content = data?.content ?? ''\n return downloadToCSV.modifier([['Content'], [content]])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for markdown content display widgets.\n *\n * @returns Default markdown widget config (empty object).\n */\nexport function markdownConfig(): MarkdownWidgetConfig {\n return {}\n}\n"],"names":["Markdown","t0","$","_c","id","content","useWidgetSelector","_temp","t1","MarkdownUI","w","data","styles","li","display","paddingTop","paddingBottom","ul","listStyleType","paddingLeft","spacing","ol","COMPONENTS","h1","children","Typography","h2","h3","p","jsx","a","href","target","rel","Link","List","ListItem","overrides","t2","ReactMarkdown","MarkdownSkeleton","Symbol","for","Skeleton","mb","jsxs","Box","markdownDownloadConfig","downloadToCSV","modifier","markdownConfig"],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sources":["../../src/widgets/markdown/markdown.tsx","../../src/widgets/markdown/style.ts","../../src/widgets/markdown/markdown-ui.tsx","../../src/widgets/markdown/skeleton.tsx","../../src/widgets/markdown/config.ts"],"sourcesContent":["import type { MarkdownUIProps } from './types'\nimport type { MarkdownWidgetData } from './types'\nimport { MarkdownUI } from '.'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\n\n/**\n * Stateful markdown widget component that reads content from the widget store and renders it as formatted rich text.\n */\nexport function Markdown({ id }: MarkdownUIProps) {\n const content = useWidgetSelector(\n id,\n (w) => (w?.data as MarkdownWidgetData | undefined)?.content,\n )\n\n if (!content) {\n return null\n }\n\n return <MarkdownUI>{content}</MarkdownUI>\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles: Record<string, SxProps<Theme>> = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(2),\n },\n markdown: {\n overflow: 'hidden',\n typography: ({ typography }) => ({\n ...typography.body1,\n }),\n },\n li: {\n display: 'list-item',\n paddingTop: 0,\n paddingBottom: 0,\n },\n ul: {\n listStyleType: 'disc',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n ol: {\n listStyleType: 'decimal',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n}\n","import { Link, List, ListItem, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport { styles } from '../markdown/style'\nimport type { MarkdownComponentProps } from './types'\n\nconst COMPONENTS: Components = {\n h1: ({ children }) => (\n <Typography variant='h4' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h2: ({ children }) => (\n <Typography variant='h5' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h3: ({ children }) => (\n <Typography variant='h6' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n p: ({ children }) => (\n <Typography paragraph color='inherit'>\n {children}\n </Typography>\n ),\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link href={href} target={target} rel={rel}>\n {children}\n </Link>\n ),\n ul: ({ children }) => <List sx={styles.ul}>{children}</List>,\n ol: ({ children }) => (\n <List component='ol' sx={styles.ol}>\n {children}\n </List>\n ),\n li: ({ children }) => <ListItem sx={styles.li}>{children}</ListItem>,\n}\n\n/**\n * Presentational component that renders a Markdown string as MUI-styled HTML using react-markdown.\n *\n * @remarks\n * Maps Markdown elements (headings, paragraphs, links, lists) to MUI Typography and Link components.\n * Custom component overrides can be passed via the `overrides` prop.\n */\nexport function MarkdownUI({ children, overrides }: MarkdownComponentProps) {\n return (\n <ReactMarkdown\n components={{\n ...COMPONENTS,\n ...overrides,\n }}\n >\n {children}\n </ReactMarkdown>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\n\nexport function MarkdownSkeleton() {\n return (\n <Box aria-label='Markdown skeleton'>\n <Skeleton width='80%' height={24} sx={{ mb: 1 }} />\n <Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='85%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='75%' height={20} />\n </Box>\n )\n}\n","import { downloadToCSV, type DownloadItem } from '../actions'\nimport type { MarkdownWidgetConfig, MarkdownWidgetData } from './types'\n\n/**\n * Creates download configuration for markdown widgets, supporting CSV export of text content. Does not require `refUI` since it only exports text.\n *\n * @returns Array of download items for use with the Download action.\n */\nexport function markdownDownloadConfig(): DownloadItem<MarkdownWidgetData>[] {\n return [\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const content = data?.content ?? ''\n return downloadToCSV.modifier([['Content'], [content]])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for markdown content display widgets.\n *\n * @returns Default markdown widget config (empty object).\n */\nexport function markdownConfig(): MarkdownWidgetConfig {\n return {}\n}\n"],"names":["Markdown","t0","$","_c","id","content","useWidgetSelector","_temp","t1","MarkdownUI","w","data","styles","li","display","paddingTop","paddingBottom","ul","listStyleType","paddingLeft","spacing","ol","COMPONENTS","h1","children","Typography","h2","h3","p","jsx","a","href","target","rel","Link","List","ListItem","overrides","t2","ReactMarkdown","MarkdownSkeleton","Symbol","for","Skeleton","mb","jsxs","Box","markdownDownloadConfig","downloadToCSV","modifier","markdownConfig"],"mappings":"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"}
@@ -6,7 +6,7 @@ import "../widget-store-Bw5zRUGg.js";
6
6
  import "zustand/shallow";
7
7
  import { g as L } from "../options-CthfUJDz.js";
8
8
  import { m as N } from "../utils-BOhInag6.js";
9
- import { c as j, f as A } from "../download-config-CzmjOT2T.js";
9
+ import { c as j, f as A } from "../download-config-oJIFZ2WC.js";
10
10
  import { h as O, f as b, g as T, n as v, c as S, d as _ } from "../option-builders-F-c9ELi1.js";
11
11
  import { Box as h, Skeleton as f } from "@mui/material";
12
12
  import { b as z } from "../styles-cohnxh9F.js";
@@ -6,7 +6,7 @@ import "../widget-store-Bw5zRUGg.js";
6
6
  import "zustand/shallow";
7
7
  import { g as b } from "../options-CthfUJDz.js";
8
8
  import { m as S } from "../utils-BOhInag6.js";
9
- import { c as v, s as k } from "../download-config-CzmjOT2T.js";
9
+ import { c as v, s as k } from "../download-config-oJIFZ2WC.js";
10
10
  import { h as w, f as L, b as I, a as _, d as C } from "../option-builders-F-c9ELi1.js";
11
11
  import { Box as p, Skeleton as c } from "@mui/material";
12
12
  import { b as A } from "../styles-cohnxh9F.js";