@carto/ps-react-ui 4.20.1 → 4.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/dist/{actions-Dy9JVr7F.js → actions-C7ZAO0FG.js} +4 -4
  2. package/dist/{actions-Dy9JVr7F.js.map → actions-C7ZAO0FG.js.map} +1 -1
  3. package/dist/{actions-DKX98LlI.js → actions-DZGaL_uT.js} +2 -2
  4. package/dist/{actions-DKX98LlI.js.map → actions-DZGaL_uT.js.map} +1 -1
  5. package/dist/{category-DHZscHaS.js → category-DZt6yiST.js} +3 -3
  6. package/dist/{category-DHZscHaS.js.map → category-DZt6yiST.js.map} +1 -1
  7. package/dist/{chart-config-BGt7wkK7.js → chart-config-BWxjodlt.js} +2 -2
  8. package/dist/chart-config-BWxjodlt.js.map +1 -0
  9. package/dist/chat.js.map +1 -1
  10. package/dist/{components-DDt4mOQn.js → components-DKjBezcJ.js} +73 -73
  11. package/dist/components-DKjBezcJ.js.map +1 -0
  12. package/dist/components.js +1 -1
  13. package/dist/{download-BT6qBamM.js → download-C7he8mSh.js} +2 -2
  14. package/dist/{download-BT6qBamM.js.map → download-C7he8mSh.js.map} +1 -1
  15. package/dist/{formula-Bk9CBzm2.js → formula-BNuRXsmh.js} +2 -2
  16. package/dist/{formula-Bk9CBzm2.js.map → formula-BNuRXsmh.js.map} +1 -1
  17. package/dist/{formula-Dsru_p-g.js → formula-Cqj84ZGX.js} +2 -2
  18. package/dist/{formula-Dsru_p-g.js.map → formula-Cqj84ZGX.js.map} +1 -1
  19. package/dist/legend.js +2 -0
  20. package/dist/legend.js.map +1 -1
  21. package/dist/{markdown-DnSJMPjQ.js → markdown-CV_KP-at.js} +2 -2
  22. package/dist/{markdown-DnSJMPjQ.js.map → markdown-CV_KP-at.js.map} +1 -1
  23. package/dist/{spread-Dy8pshpN.js → spread-C8T12Nfh.js} +3 -3
  24. package/dist/{spread-Dy8pshpN.js.map → spread-C8T12Nfh.js.map} +1 -1
  25. package/dist/{table-BfTG6rrs.js → table-CNQijNNB.js} +2 -2
  26. package/dist/{table-BfTG6rrs.js.map → table-CNQijNNB.js.map} +1 -1
  27. package/dist/types/chat/bubbles/chat-agent-message-markdown.d.ts +1 -1
  28. package/dist/types/chat/bubbles/chat-agent-message.d.ts +1 -1
  29. package/dist/types/chat/bubbles/chat-error-message.d.ts +1 -1
  30. package/dist/types/chat/bubbles/chat-suggestion-button.d.ts +1 -1
  31. package/dist/types/chat/bubbles/chat-user-message.d.ts +1 -1
  32. package/dist/types/chat/bubbles/index.d.ts +5 -5
  33. package/dist/types/chat/bubbles/styles.d.ts +88 -0
  34. package/dist/types/chat/containers/chat-content.d.ts +1 -1
  35. package/dist/types/chat/containers/chat-footer.d.ts +1 -1
  36. package/dist/types/chat/containers/chat-header.d.ts +1 -1
  37. package/dist/types/chat/containers/chat-starter.d.ts +1 -1
  38. package/dist/types/chat/containers/index.d.ts +4 -4
  39. package/dist/types/chat/feedback/chat-actions-container.d.ts +3 -0
  40. package/dist/types/chat/feedback/chat-loader.d.ts +1 -1
  41. package/dist/types/chat/feedback/chat-rating-action.d.ts +1 -1
  42. package/dist/types/chat/feedback/chat-thinking.d.ts +1 -1
  43. package/dist/types/chat/feedback/chat-tool-code-area.d.ts +1 -1
  44. package/dist/types/chat/feedback/chat-tool-full-view-dialog.d.ts +1 -1
  45. package/dist/types/chat/feedback/chat-tool-group.d.ts +1 -1
  46. package/dist/types/chat/feedback/chat-tool-trace.d.ts +1 -1
  47. package/dist/types/chat/feedback/get-tool-label.d.ts +1 -1
  48. package/dist/types/chat/feedback/index.d.ts +8 -8
  49. package/dist/types/chat/feedback/styles.d.ts +212 -0
  50. package/dist/types/chat/index.d.ts +21 -21
  51. package/dist/types/components/basemaps/basemaps.d.ts +1 -1
  52. package/dist/types/components/basemaps/const.d.ts +1 -1
  53. package/dist/types/components/basemaps/group.d.ts +1 -1
  54. package/dist/types/components/basemaps/header.d.ts +1 -1
  55. package/dist/types/components/copy-button/copy-button.d.ts +1 -1
  56. package/dist/types/components/geolocation-controls/geolocation-controls.d.ts +1 -1
  57. package/dist/types/components/index.d.ts +26 -26
  58. package/dist/types/components/lasso-tool/chip.d.ts +1 -1
  59. package/dist/types/components/lasso-tool/const.d.ts +2 -2
  60. package/dist/types/components/lasso-tool/geometry-toolbar.d.ts +1 -1
  61. package/dist/types/components/lasso-tool/lasso-tool-inline.d.ts +1 -1
  62. package/dist/types/components/lasso-tool/lasso-tool.d.ts +1 -1
  63. package/dist/types/components/lasso-tool/layer-filters.d.ts +1 -1
  64. package/dist/types/components/lasso-tool/message.d.ts +1 -1
  65. package/dist/types/components/lasso-tool/types.d.ts +1 -1
  66. package/dist/types/components/list-data/list-data.d.ts +1 -1
  67. package/dist/types/components/measurement-tools/const.d.ts +2 -2
  68. package/dist/types/components/measurement-tools/measurement-tools.d.ts +1 -1
  69. package/dist/types/components/measurement-tools/types.d.ts +1 -1
  70. package/dist/types/components/responsive-drawer/responsive-drawer.d.ts +10 -3
  71. package/dist/types/components/types.d.ts +1 -1
  72. package/dist/types/components/zoom-controls/zoom-controls.d.ts +1 -1
  73. package/dist/types/hooks/index.d.ts +1 -1
  74. package/dist/types/legend/components/icons.d.ts +1 -1
  75. package/dist/types/legend/components/index.d.ts +26 -26
  76. package/dist/types/legend/components/legend-category/legend-category-ui.d.ts +1 -1
  77. package/dist/types/legend/components/legend-icon/legend-icon-ui.d.ts +1 -1
  78. package/dist/types/legend/components/legend-item/legend-item-ui.d.ts +2 -2
  79. package/dist/types/legend/components/legend-proportion/legend-proportion-ui.d.ts +2 -2
  80. package/dist/types/legend/components/legend-ramp/legend-ramp-ui.d.ts +2 -2
  81. package/dist/types/legend/components/legend-sortable/sortable-entity.d.ts +1 -1
  82. package/dist/types/legend/components/legend-swatch/legend-swatch.d.ts +1 -1
  83. package/dist/types/legend/components/legend-visibility-toggle/legend-visibility-toggle.d.ts +2 -2
  84. package/dist/types/legend/components/run-async-menu-action.d.ts +1 -1
  85. package/dist/types/legend/index.d.ts +41 -41
  86. package/dist/types/legend/provider/index.d.ts +6 -6
  87. package/dist/types/legend/provider/legend-config-context.d.ts +1 -1
  88. package/dist/types/legend/provider/legend-provider.d.ts +2 -2
  89. package/dist/types/legend/stores/index.d.ts +5 -5
  90. package/dist/types/legend/stores/legend-store-registry.d.ts +1 -1
  91. package/dist/types/legend/stores/selectors.d.ts +1 -1
  92. package/dist/types/widgets/actions/brush-toggle/brush-toggle.d.ts +1 -1
  93. package/dist/types/widgets/actions/brush-toggle/hit-test.d.ts +1 -1
  94. package/dist/types/widgets/actions/brush-toggle/types.d.ts +1 -1
  95. package/dist/types/widgets/actions/change-column/change-column.d.ts +1 -1
  96. package/dist/types/widgets/actions/change-column/sortable-column-item.d.ts +1 -1
  97. package/dist/types/widgets/actions/download/download.d.ts +1 -1
  98. package/dist/types/widgets/actions/download/exports.d.ts +1 -1
  99. package/dist/types/widgets/actions/download/types.d.ts +1 -1
  100. package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +1 -1
  101. package/dist/types/widgets/actions/fullscreen/types.d.ts +1 -1
  102. package/dist/types/widgets/actions/index.d.ts +20 -20
  103. package/dist/types/widgets/actions/lock-selection/lock-selection.d.ts +1 -1
  104. package/dist/types/widgets/actions/lock-selection/types.d.ts +1 -1
  105. package/dist/types/widgets/actions/relative-data/relative-data.d.ts +1 -1
  106. package/dist/types/widgets/actions/relative-data/types.d.ts +1 -1
  107. package/dist/types/widgets/actions/relative-data/utils.d.ts +1 -1
  108. package/dist/types/widgets/actions/searcher/searcher-toggle.d.ts +1 -1
  109. package/dist/types/widgets/actions/searcher/searcher.d.ts +1 -1
  110. package/dist/types/widgets/actions/searcher/types.d.ts +2 -2
  111. package/dist/types/widgets/actions/stack-toggle/stack-toggle.d.ts +1 -1
  112. package/dist/types/widgets/actions/stack-toggle/types.d.ts +1 -1
  113. package/dist/types/widgets/actions/zoom-toggle/types.d.ts +1 -1
  114. package/dist/types/widgets/actions/zoom-toggle/zoom-toggle.d.ts +1 -1
  115. package/dist/types/widgets/bar/config.d.ts +2 -2
  116. package/dist/types/widgets/bar/index.d.ts +3 -3
  117. package/dist/types/widgets/bar/types.d.ts +3 -3
  118. package/dist/types/widgets/category/category-ui.d.ts +1 -1
  119. package/dist/types/widgets/category/components/category-legend.d.ts +1 -1
  120. package/dist/types/widgets/category/components/category-row-multi.d.ts +1 -1
  121. package/dist/types/widgets/category/components/category-row-single.d.ts +1 -1
  122. package/dist/types/widgets/category/config.d.ts +3 -3
  123. package/dist/types/widgets/category/index.d.ts +14 -14
  124. package/dist/types/widgets/category/types.d.ts +3 -3
  125. package/dist/types/widgets/echart/echart-ui.d.ts +1 -1
  126. package/dist/types/widgets/echart/echart.d.ts +1 -1
  127. package/dist/types/widgets/echart/index.d.ts +5 -5
  128. package/dist/types/widgets/echart/options.d.ts +1 -1
  129. package/dist/types/widgets/echart/types.d.ts +1 -1
  130. package/dist/types/widgets/echart/utils.d.ts +1 -1
  131. package/dist/types/widgets/error/error.d.ts +1 -1
  132. package/dist/types/widgets/error/index.d.ts +2 -2
  133. package/dist/types/widgets/error/types.d.ts +1 -1
  134. package/dist/types/widgets/formula/components/item.d.ts +1 -1
  135. package/dist/types/widgets/formula/components/prefix.d.ts +1 -1
  136. package/dist/types/widgets/formula/components/row.d.ts +1 -1
  137. package/dist/types/widgets/formula/components/series.d.ts +1 -1
  138. package/dist/types/widgets/formula/components/suffix.d.ts +1 -1
  139. package/dist/types/widgets/formula/components/value.d.ts +1 -1
  140. package/dist/types/widgets/formula/config.d.ts +2 -2
  141. package/dist/types/widgets/formula/formula-ui.d.ts +1 -1
  142. package/dist/types/widgets/formula/index.d.ts +11 -11
  143. package/dist/types/widgets/formula/serializer.d.ts +1 -1
  144. package/dist/types/widgets/formula/types.d.ts +3 -3
  145. package/dist/types/widgets/histogram/config.d.ts +3 -3
  146. package/dist/types/widgets/histogram/index.d.ts +4 -4
  147. package/dist/types/widgets/histogram/types.d.ts +3 -3
  148. package/dist/types/widgets/loader/index.d.ts +3 -3
  149. package/dist/types/widgets/loader/loader.d.ts +1 -1
  150. package/dist/types/widgets/loader/types.d.ts +1 -1
  151. package/dist/types/widgets/markdown/config.d.ts +2 -2
  152. package/dist/types/widgets/markdown/index.d.ts +5 -5
  153. package/dist/types/widgets/markdown/markdown-ui.d.ts +1 -1
  154. package/dist/types/widgets/markdown/markdown.d.ts +1 -1
  155. package/dist/types/widgets/markdown/types.d.ts +3 -3
  156. package/dist/types/widgets/no-data/index.d.ts +2 -2
  157. package/dist/types/widgets/no-data/no-data.d.ts +1 -1
  158. package/dist/types/widgets/no-data/types.d.ts +1 -1
  159. package/dist/types/widgets/note/index.d.ts +2 -2
  160. package/dist/types/widgets/note/note.d.ts +1 -1
  161. package/dist/types/widgets/note/types.d.ts +1 -1
  162. package/dist/types/widgets/pie/config.d.ts +2 -2
  163. package/dist/types/widgets/pie/index.d.ts +3 -3
  164. package/dist/types/widgets/pie/types.d.ts +3 -3
  165. package/dist/types/widgets/range/components/range-item.d.ts +1 -1
  166. package/dist/types/widgets/range/config.d.ts +1 -1
  167. package/dist/types/widgets/range/index.d.ts +6 -6
  168. package/dist/types/widgets/range/range-ui.d.ts +1 -1
  169. package/dist/types/widgets/range/serializer.d.ts +1 -1
  170. package/dist/types/widgets/range/types.d.ts +3 -3
  171. package/dist/types/widgets/scatterplot/config.d.ts +2 -2
  172. package/dist/types/widgets/scatterplot/index.d.ts +3 -3
  173. package/dist/types/widgets/scatterplot/types.d.ts +3 -3
  174. package/dist/types/widgets/selection-summary/index.d.ts +2 -2
  175. package/dist/types/widgets/selection-summary/selection-summary.d.ts +1 -1
  176. package/dist/types/widgets/skeleton-loader/index.d.ts +2 -2
  177. package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +1 -1
  178. package/dist/types/widgets/skeleton-loader/types.d.ts +1 -1
  179. package/dist/types/widgets/spread/components/max-value.d.ts +1 -1
  180. package/dist/types/widgets/spread/components/min-value.d.ts +1 -1
  181. package/dist/types/widgets/spread/components/separator.d.ts +1 -1
  182. package/dist/types/widgets/spread/config.d.ts +3 -3
  183. package/dist/types/widgets/spread/index.d.ts +9 -9
  184. package/dist/types/widgets/spread/spread-ui.d.ts +1 -1
  185. package/dist/types/widgets/spread/types.d.ts +4 -4
  186. package/dist/types/widgets/stores/index.d.ts +3 -3
  187. package/dist/types/widgets/stores/use-widget-selector.d.ts +1 -1
  188. package/dist/types/widgets/stores/widget-store.d.ts +2 -2
  189. package/dist/types/widgets/subheader/index.d.ts +2 -2
  190. package/dist/types/widgets/subheader/subheader.d.ts +1 -1
  191. package/dist/types/widgets/table/components/cell-header.d.ts +1 -1
  192. package/dist/types/widgets/table/components/cell.d.ts +1 -1
  193. package/dist/types/widgets/table/components/pagination-actions.d.ts +1 -1
  194. package/dist/types/widgets/table/components/pagination.d.ts +1 -1
  195. package/dist/types/widgets/table/components/row.d.ts +1 -1
  196. package/dist/types/widgets/table/config.d.ts +2 -2
  197. package/dist/types/widgets/table/hooks/use-pagination.d.ts +1 -1
  198. package/dist/types/widgets/table/hooks/use-selection.d.ts +1 -1
  199. package/dist/types/widgets/table/hooks/use-sort.d.ts +1 -1
  200. package/dist/types/widgets/table/index.d.ts +17 -17
  201. package/dist/types/widgets/table/serializer.d.ts +1 -1
  202. package/dist/types/widgets/table/table-ui.d.ts +8 -8
  203. package/dist/types/widgets/table/types.d.ts +3 -3
  204. package/dist/types/widgets/timeseries/config.d.ts +2 -2
  205. package/dist/types/widgets/timeseries/index.d.ts +3 -3
  206. package/dist/types/widgets/timeseries/types.d.ts +3 -3
  207. package/dist/types/widgets/toolbar-actions/index.d.ts +2 -2
  208. package/dist/types/widgets/toolbar-actions/toolbar-actions.d.ts +1 -1
  209. package/dist/types/widgets/utils/chart-config/config-factory.d.ts +1 -1
  210. package/dist/types/widgets/utils/chart-config/download-config.d.ts +2 -2
  211. package/dist/types/widgets/utils/chart-config/index.d.ts +6 -6
  212. package/dist/types/widgets/utils/chart-config/option-builders.d.ts +142 -0
  213. package/dist/types/widgets/utils/index.d.ts +7 -7
  214. package/dist/types/widgets/utils/skeleton/index.d.ts +1 -1
  215. package/dist/types/widgets/wrapper/components/actions.d.ts +1 -1
  216. package/dist/types/widgets/wrapper/components/options.d.ts +1 -1
  217. package/dist/types/widgets/wrapper/components/title.d.ts +1 -1
  218. package/dist/types/widgets/wrapper/index.d.ts +6 -6
  219. package/dist/types/widgets/wrapper/types.d.ts +1 -1
  220. package/dist/types/widgets/wrapper/wrapper-ui.d.ts +1 -1
  221. package/dist/types/widgets/wrapper/wrapper.d.ts +1 -1
  222. package/dist/types/widgets-v2/actions/brush-toggle/brush-toggle.d.ts +1 -1
  223. package/dist/types/widgets-v2/actions/brush-toggle/index.d.ts +3 -3
  224. package/dist/types/widgets-v2/actions/change-column/change-column.d.ts +1 -1
  225. package/dist/types/widgets-v2/actions/change-column/index.d.ts +3 -3
  226. package/dist/types/widgets-v2/actions/change-column/types.d.ts +1 -1
  227. package/dist/types/widgets-v2/actions/download/csv-item.d.ts +1 -1
  228. package/dist/types/widgets-v2/actions/download/download.d.ts +2 -2
  229. package/dist/types/widgets-v2/actions/download/index.d.ts +8 -8
  230. package/dist/types/widgets-v2/actions/download/png-item.d.ts +1 -1
  231. package/dist/types/widgets-v2/actions/fullscreen/fullscreen.d.ts +1 -1
  232. package/dist/types/widgets-v2/actions/fullscreen/index.d.ts +3 -3
  233. package/dist/types/widgets-v2/actions/fullscreen/types.d.ts +1 -1
  234. package/dist/types/widgets-v2/actions/index.d.ts +10 -10
  235. package/dist/types/widgets-v2/actions/lock-selection/index.d.ts +3 -3
  236. package/dist/types/widgets-v2/actions/lock-selection/lock-selection.d.ts +1 -1
  237. package/dist/types/widgets-v2/actions/relative-data/index.d.ts +3 -3
  238. package/dist/types/widgets-v2/actions/relative-data/relative-data.d.ts +1 -1
  239. package/dist/types/widgets-v2/actions/searcher/index.d.ts +4 -4
  240. package/dist/types/widgets-v2/actions/searcher/searcher-toggle.d.ts +1 -1
  241. package/dist/types/widgets-v2/actions/searcher/searcher.d.ts +1 -1
  242. package/dist/types/widgets-v2/actions/show-all/index.d.ts +2 -2
  243. package/dist/types/widgets-v2/actions/show-all/show-all.d.ts +1 -1
  244. package/dist/types/widgets-v2/actions/stack-toggle/index.d.ts +3 -3
  245. package/dist/types/widgets-v2/actions/stack-toggle/stack-toggle.d.ts +1 -1
  246. package/dist/types/widgets-v2/actions/zoom-toggle/index.d.ts +3 -3
  247. package/dist/types/widgets-v2/actions/zoom-toggle/zoom-toggle.d.ts +2 -2
  248. package/dist/types/widgets-v2/bar/download.d.ts +2 -2
  249. package/dist/types/widgets-v2/bar/index.d.ts +4 -4
  250. package/dist/types/widgets-v2/bar/options.d.ts +2 -2
  251. package/dist/types/widgets-v2/bar/types.d.ts +1 -1
  252. package/dist/types/widgets-v2/category/category-ui.d.ts +1 -1
  253. package/dist/types/widgets-v2/category/category.d.ts +1 -1
  254. package/dist/types/widgets-v2/category/components/category-bar-stacked.d.ts +1 -1
  255. package/dist/types/widgets-v2/category/components/category-bar.d.ts +1 -1
  256. package/dist/types/widgets-v2/category/components/category-legend.d.ts +1 -1
  257. package/dist/types/widgets-v2/category/components/category-row-multi.d.ts +1 -1
  258. package/dist/types/widgets-v2/category/components/category-row-single.d.ts +1 -1
  259. package/dist/types/widgets-v2/category/components/category-row-stacked.d.ts +1 -1
  260. package/dist/types/widgets-v2/category/download.d.ts +2 -2
  261. package/dist/types/widgets-v2/category/index.d.ts +10 -10
  262. package/dist/types/widgets-v2/category/skeleton.d.ts +1 -1
  263. package/dist/types/widgets-v2/category/style.d.ts +1 -1
  264. package/dist/types/widgets-v2/category/types.d.ts +1 -1
  265. package/dist/types/widgets-v2/echart/echart.d.ts +1 -1
  266. package/dist/types/widgets-v2/echart/index.d.ts +4 -4
  267. package/dist/types/widgets-v2/echart/use-chart-selection.d.ts +1 -1
  268. package/dist/types/widgets-v2/formula/delta.d.ts +1 -1
  269. package/dist/types/widgets-v2/formula/download.d.ts +2 -2
  270. package/dist/types/widgets-v2/formula/formula-ui.d.ts +1 -1
  271. package/dist/types/widgets-v2/formula/index.d.ts +11 -11
  272. package/dist/types/widgets-v2/formula/types.d.ts +1 -1
  273. package/dist/types/widgets-v2/histogram/download.d.ts +2 -2
  274. package/dist/types/widgets-v2/histogram/index.d.ts +5 -5
  275. package/dist/types/widgets-v2/histogram/options.d.ts +3 -3
  276. package/dist/types/widgets-v2/histogram/types.d.ts +1 -1
  277. package/dist/types/widgets-v2/index.d.ts +45 -45
  278. package/dist/types/widgets-v2/markdown/download.d.ts +2 -2
  279. package/dist/types/widgets-v2/markdown/index.d.ts +6 -6
  280. package/dist/types/widgets-v2/note/widget-note.d.ts +1 -1
  281. package/dist/types/widgets-v2/pie/download.d.ts +2 -2
  282. package/dist/types/widgets-v2/pie/index.d.ts +4 -4
  283. package/dist/types/widgets-v2/pie/options.d.ts +2 -2
  284. package/dist/types/widgets-v2/pie/types.d.ts +1 -1
  285. package/dist/types/widgets-v2/range/index.d.ts +4 -4
  286. package/dist/types/widgets-v2/range/range-ui.d.ts +1 -1
  287. package/dist/types/widgets-v2/range/range.d.ts +1 -1
  288. package/dist/types/widgets-v2/scatterplot/download.d.ts +2 -2
  289. package/dist/types/widgets-v2/scatterplot/index.d.ts +5 -5
  290. package/dist/types/widgets-v2/scatterplot/options.d.ts +2 -2
  291. package/dist/types/widgets-v2/scatterplot/types.d.ts +1 -1
  292. package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +1 -1
  293. package/dist/types/widgets-v2/spread/download.d.ts +2 -2
  294. package/dist/types/widgets-v2/spread/index.d.ts +7 -7
  295. package/dist/types/widgets-v2/spread/spread-ui.d.ts +1 -1
  296. package/dist/types/widgets-v2/spread/types.d.ts +1 -1
  297. package/dist/types/widgets-v2/state/widget-state.d.ts +1 -1
  298. package/dist/types/widgets-v2/stores/index.d.ts +8 -8
  299. package/dist/types/widgets-v2/stores/pipeline-middleware.d.ts +1 -1
  300. package/dist/types/widgets-v2/stores/transforms.d.ts +1 -1
  301. package/dist/types/widgets-v2/stores/use-transform.d.ts +1 -1
  302. package/dist/types/widgets-v2/stores/widget-store-registry.d.ts +1 -1
  303. package/dist/types/widgets-v2/table/download.d.ts +2 -2
  304. package/dist/types/widgets-v2/table/helpers.d.ts +1 -1
  305. package/dist/types/widgets-v2/table/index.d.ts +8 -8
  306. package/dist/types/widgets-v2/table/table-ui.d.ts +2 -2
  307. package/dist/types/widgets-v2/table/table.d.ts +2 -2
  308. package/dist/types/widgets-v2/table/types.d.ts +1 -1
  309. package/dist/types/widgets-v2/timeseries/download.d.ts +2 -2
  310. package/dist/types/widgets-v2/timeseries/index.d.ts +5 -5
  311. package/dist/types/widgets-v2/timeseries/options.d.ts +4 -4
  312. package/dist/types/widgets-v2/timeseries/types.d.ts +1 -1
  313. package/dist/types/widgets-v2/toolbox/toolbox.d.ts +1 -1
  314. package/dist/types/widgets-v2/utils/index.d.ts +3 -3
  315. package/dist/types/widgets-v2/wrapper/index.d.ts +4 -4
  316. package/dist/types/widgets-v2/wrapper/widget-wrapper.d.ts +1 -1
  317. package/dist/{utils-DtvTjjMq.js → utils-ClB6nn4w.js} +2 -2
  318. package/dist/{utils-DtvTjjMq.js.map → utils-ClB6nn4w.js.map} +1 -1
  319. package/dist/widgets/actions.js +1 -1
  320. package/dist/widgets/bar.js +1 -1
  321. package/dist/widgets/category.js +1 -1
  322. package/dist/widgets/formula.js +1 -1
  323. package/dist/widgets/histogram.js +2 -2
  324. package/dist/widgets/markdown.js +1 -1
  325. package/dist/widgets/pie.js +1 -1
  326. package/dist/widgets/scatterplot.js +1 -1
  327. package/dist/widgets/spread.js +2 -2
  328. package/dist/widgets/table.js +14 -17
  329. package/dist/widgets/table.js.map +1 -1
  330. package/dist/widgets/timeseries.js +1 -1
  331. package/dist/widgets/utils.js +1 -1
  332. package/dist/widgets/wrapper.js +1 -1
  333. package/dist/widgets-v2/actions.js +3 -3
  334. package/dist/widgets-v2/bar.js +4 -4
  335. package/dist/widgets-v2/category.js +1 -1
  336. package/dist/widgets-v2/formula.js +1 -1
  337. package/dist/widgets-v2/histogram.js +4 -4
  338. package/dist/widgets-v2/markdown.js +1 -1
  339. package/dist/widgets-v2/pie.js +10 -10
  340. package/dist/widgets-v2/pie.js.map +1 -1
  341. package/dist/widgets-v2/scatterplot.js +4 -4
  342. package/dist/widgets-v2/spread.js +1 -1
  343. package/dist/widgets-v2/table.js +1 -1
  344. package/dist/widgets-v2/timeseries.js +4 -4
  345. package/dist/widgets-v2/utils.js +1 -1
  346. package/dist/widgets-v2.js +9 -9
  347. package/dist/{zoom-toggle-CA0ifG23.js → zoom-toggle-KA63b6-J.js} +2 -2
  348. package/dist/{zoom-toggle-CA0ifG23.js.map → zoom-toggle-KA63b6-J.js.map} +1 -1
  349. package/package.json +6 -5
  350. package/src/chat/bubbles/styles.ts +27 -8
  351. package/src/chat/feedback/chat-actions-container.tsx +5 -2
  352. package/src/chat/feedback/styles.ts +8 -5
  353. package/src/components/basemaps/basemaps.tsx +4 -4
  354. package/src/components/responsive-drawer/responsive-drawer.test.tsx +37 -23
  355. package/src/components/responsive-drawer/responsive-drawer.tsx +15 -8
  356. package/src/legend/components/legend-row/legend-row.test.tsx +19 -0
  357. package/src/legend/components/legend-row/legend-row.tsx +15 -2
  358. package/src/widgets/table/components/pagination-actions.tsx +4 -4
  359. package/src/widgets/utils/chart-config/option-builders.ts +5 -1
  360. package/src/widgets-v2/pie/options.test.ts +67 -0
  361. package/src/widgets-v2/pie/options.ts +27 -4
  362. package/src/widgets-v2/selection-summary/selection-summary.test.tsx +1 -1
  363. package/src/widgets-v2/toolbox/toolbox.test.tsx +1 -1
  364. package/dist/chart-config-BGt7wkK7.js.map +0 -1
  365. package/dist/components-DDt4mOQn.js.map +0 -1
  366. package/dist/types/legend/stores/legend-store.test.d.ts +0 -1
  367. package/dist/types/widgets/actions/brush-toggle/hit-test.test.d.ts +0 -1
  368. package/dist/types/widgets/actions/relative-data/utils.test.d.ts +0 -1
  369. package/dist/types/widgets/echart/utils.test.d.ts +0 -1
  370. package/dist/types/widgets/formula/config.test.d.ts +0 -1
  371. package/dist/types/widgets/loader/utils.test.d.ts +0 -1
  372. package/dist/types/widgets/range/serializer.test.d.ts +0 -1
  373. package/dist/types/widgets/stores/widget-store-branches.test.d.ts +0 -1
  374. package/dist/types/widgets/stores/widget-store-performance.test.d.ts +0 -1
  375. package/dist/types/widgets/stores/widget-store.test.d.ts +0 -1
  376. package/dist/types/widgets/table/config.test.d.ts +0 -1
  377. package/dist/types/widgets/table/helpers.test.d.ts +0 -1
  378. package/dist/types/widgets/table/hooks/use-pagination.test.d.ts +0 -1
  379. package/dist/types/widgets/table/hooks/use-selection.test.d.ts +0 -1
  380. package/dist/types/widgets/table/hooks/use-sort.test.d.ts +0 -1
  381. package/dist/types/widgets/utils/chart-config/option-builders.test.d.ts +0 -1
  382. package/dist/types/widgets-v2/actions/brush-toggle/transforms.test.d.ts +0 -1
  383. package/dist/types/widgets-v2/actions/relative-data/transforms.test.d.ts +0 -1
  384. package/dist/types/widgets-v2/actions/stack-toggle/transforms.test.d.ts +0 -1
  385. package/dist/types/widgets-v2/actions/zoom-toggle/transforms.test.d.ts +0 -1
  386. package/dist/types/widgets-v2/bar/options.test.d.ts +0 -1
  387. package/dist/types/widgets-v2/category/download.test.d.ts +0 -1
  388. package/dist/types/widgets-v2/echart/edge-label-clamp.test.d.ts +0 -1
  389. package/dist/types/widgets-v2/echart/shared-resize-observer.test.d.ts +0 -1
  390. package/dist/types/widgets-v2/histogram/download.test.d.ts +0 -1
  391. package/dist/types/widgets-v2/histogram/options.test.d.ts +0 -1
  392. package/dist/types/widgets-v2/histogram/transforms.test.d.ts +0 -1
  393. package/dist/types/widgets-v2/markdown/download.test.d.ts +0 -1
  394. package/dist/types/widgets-v2/pie/download.test.d.ts +0 -1
  395. package/dist/types/widgets-v2/pie/options.test.d.ts +0 -1
  396. package/dist/types/widgets-v2/scatterplot/download.test.d.ts +0 -1
  397. package/dist/types/widgets-v2/scatterplot/options.test.d.ts +0 -1
  398. package/dist/types/widgets-v2/scatterplot/transforms.test.d.ts +0 -1
  399. package/dist/types/widgets-v2/spread/band.test.d.ts +0 -1
  400. package/dist/types/widgets-v2/spread/download.test.d.ts +0 -1
  401. package/dist/types/widgets-v2/state/labels.test.d.ts +0 -1
  402. package/dist/types/widgets-v2/stores/pipeline-middleware.test.d.ts +0 -1
  403. package/dist/types/widgets-v2/stores/transforms.test.d.ts +0 -1
  404. package/dist/types/widgets-v2/stores/widget-store-registry.test.d.ts +0 -1
  405. package/dist/types/widgets-v2/table/download.test.d.ts +0 -1
  406. package/dist/types/widgets-v2/table/helpers.test.d.ts +0 -1
  407. package/dist/types/widgets-v2/table/transforms.test.d.ts +0 -1
  408. package/dist/types/widgets-v2/test-utils.d.ts +0 -52
  409. package/dist/types/widgets-v2/timeseries/download.test.d.ts +0 -1
  410. package/dist/types/widgets-v2/timeseries/options.test.d.ts +0 -1
  411. package/dist/types/widgets-v2/timeseries/transforms.test.d.ts +0 -1
  412. package/dist/types/widgets-v2/utils/merge-options.test.d.ts +0 -1
  413. package/dist/types/widgets-v2/utils/resolve-theme-color.test.d.ts +0 -1
@@ -10,8 +10,8 @@ const theme = createTheme()
10
10
  describe('ResponsiveDrawer', () => {
11
11
  const mockOnChangeCollapsed = vi.fn()
12
12
 
13
- // A real anchor element: the desktop Popover only opens when `ref != null`
14
- // (the open-by-default guard), and positioning needs a DOM node.
13
+ // A real anchor element: the desktop Popover only opens when the anchor is
14
+ // non-null (the open-by-default guard), and positioning needs a DOM node.
15
15
  let anchor: HTMLElement
16
16
 
17
17
  const defaultProps = {
@@ -32,10 +32,20 @@ describe('ResponsiveDrawer', () => {
32
32
  anchor.remove()
33
33
  })
34
34
 
35
+ test('accepts the anchor through the deprecated `ref` alias', () => {
36
+ render(
37
+ <ThemeProvider theme={theme}>
38
+ <ResponsiveDrawer ref={anchor} {...defaultProps} />
39
+ </ThemeProvider>,
40
+ )
41
+
42
+ expect(screen.getByTestId('drawer-content')).toBeDefined()
43
+ })
44
+
35
45
  test('renders in desktop mode when isMobile is false', () => {
36
46
  const { container } = render(
37
47
  <ThemeProvider theme={theme}>
38
- <ResponsiveDrawer ref={anchor} {...defaultProps} />
48
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} />
39
49
  </ThemeProvider>,
40
50
  )
41
51
 
@@ -50,12 +60,12 @@ describe('ResponsiveDrawer', () => {
50
60
  expect(presentationElements.length).toBe(0)
51
61
  })
52
62
 
53
- test('does not open the desktop popover until the anchor ref resolves', () => {
54
- // Open-by-default guard: collapsed=false but ref=null → stays closed so the
55
- // popover never renders with a null anchorEl.
63
+ test('does not open the desktop popover until the anchor resolves', () => {
64
+ // Open-by-default guard: collapsed=false but anchorEl=null → stays closed so
65
+ // the popover never renders with a null anchorEl.
56
66
  render(
57
67
  <ThemeProvider theme={theme}>
58
- <ResponsiveDrawer ref={null} {...defaultProps} />
68
+ <ResponsiveDrawer anchorEl={null} {...defaultProps} />
59
69
  </ThemeProvider>,
60
70
  )
61
71
  expect(screen.queryByTestId('drawer-content')).toBeNull()
@@ -64,7 +74,7 @@ describe('ResponsiveDrawer', () => {
64
74
  test('renders in mobile mode when isMobile is true', () => {
65
75
  render(
66
76
  <ThemeProvider theme={theme}>
67
- <ResponsiveDrawer ref={anchor} {...defaultProps} isMobile={true} />
77
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} isMobile={true} />
68
78
  </ThemeProvider>,
69
79
  )
70
80
 
@@ -82,7 +92,11 @@ describe('ResponsiveDrawer', () => {
82
92
  test('hides content when collapsed is true in desktop mode', () => {
83
93
  render(
84
94
  <ThemeProvider theme={theme}>
85
- <ResponsiveDrawer ref={anchor} {...defaultProps} collapsed={true} />
95
+ <ResponsiveDrawer
96
+ anchorEl={anchor}
97
+ {...defaultProps}
98
+ collapsed={true}
99
+ />
86
100
  </ThemeProvider>,
87
101
  )
88
102
 
@@ -94,7 +108,7 @@ describe('ResponsiveDrawer', () => {
94
108
  test('closes drawer when clicking outside in mobile mode', () => {
95
109
  const { container } = render(
96
110
  <ThemeProvider theme={theme}>
97
- <ResponsiveDrawer ref={anchor} {...defaultProps} isMobile={true} />
111
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} isMobile={true} />
98
112
  </ThemeProvider>,
99
113
  )
100
114
 
@@ -119,7 +133,7 @@ describe('ResponsiveDrawer', () => {
119
133
  render(
120
134
  <ThemeProvider theme={theme}>
121
135
  <ResponsiveDrawer
122
- ref={anchor}
136
+ anchorEl={anchor}
123
137
  {...defaultProps}
124
138
  position={position}
125
139
  />
@@ -132,7 +146,7 @@ describe('ResponsiveDrawer', () => {
132
146
  test('modal (default): renders an (invisible) backdrop', () => {
133
147
  render(
134
148
  <ThemeProvider theme={theme}>
135
- <ResponsiveDrawer ref={anchor} {...defaultProps} />
149
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} />
136
150
  </ThemeProvider>,
137
151
  )
138
152
  // The popover portals to document.body, so query the whole document.
@@ -145,7 +159,7 @@ describe('ResponsiveDrawer', () => {
145
159
  render(
146
160
  <ThemeProvider theme={theme}>
147
161
  <ResponsiveDrawer
148
- ref={anchor}
162
+ anchorEl={anchor}
149
163
  {...defaultProps}
150
164
  slotProps={slotProps}
151
165
  />
@@ -157,7 +171,7 @@ describe('ResponsiveDrawer', () => {
157
171
  test('defaults to portaling into document.body when container is omitted', () => {
158
172
  render(
159
173
  <ThemeProvider theme={theme}>
160
- <ResponsiveDrawer ref={anchor} {...defaultProps} />
174
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} />
161
175
  </ThemeProvider>,
162
176
  )
163
177
  const content = screen.getByTestId('drawer-content')
@@ -172,7 +186,7 @@ describe('ResponsiveDrawer', () => {
172
186
  render(
173
187
  <ThemeProvider theme={theme}>
174
188
  <ResponsiveDrawer
175
- ref={anchor}
189
+ anchorEl={anchor}
176
190
  {...defaultProps}
177
191
  container={customContainer}
178
192
  />
@@ -197,7 +211,7 @@ describe('ResponsiveDrawer', () => {
197
211
  render(
198
212
  <ThemeProvider theme={theme}>
199
213
  <ResponsiveDrawer
200
- ref={anchor}
214
+ anchorEl={anchor}
201
215
  {...defaultProps}
202
216
  container={customContainer}
203
217
  />
@@ -225,7 +239,7 @@ describe('ResponsiveDrawer', () => {
225
239
  test('leaves paper maxHeight unset when no container is given', () => {
226
240
  render(
227
241
  <ThemeProvider theme={theme}>
228
- <ResponsiveDrawer ref={anchor} {...defaultProps} />
242
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} />
229
243
  </ThemeProvider>,
230
244
  )
231
245
  const paper = document.querySelector<HTMLElement>('.MuiPopover-paper')!
@@ -247,7 +261,7 @@ describe('ResponsiveDrawer', () => {
247
261
  render(
248
262
  <ThemeProvider theme={theme}>
249
263
  <ResponsiveDrawer
250
- ref={anchor}
264
+ anchorEl={anchor}
251
265
  {...defaultProps}
252
266
  container={customContainer}
253
267
  />
@@ -271,7 +285,7 @@ describe('ResponsiveDrawer', () => {
271
285
  render(
272
286
  <ThemeProvider theme={theme}>
273
287
  <ResponsiveDrawer
274
- ref={anchor}
288
+ anchorEl={anchor}
275
289
  {...defaultProps}
276
290
  container={customContainer}
277
291
  slotProps={
@@ -297,7 +311,7 @@ describe('ResponsiveDrawer', () => {
297
311
  render(
298
312
  <ThemeProvider theme={theme}>
299
313
  <ResponsiveDrawer
300
- ref={anchor}
314
+ anchorEl={anchor}
301
315
  {...defaultProps}
302
316
  sx={{ zIndex: 9999 }}
303
317
  />
@@ -311,7 +325,7 @@ describe('ResponsiveDrawer', () => {
311
325
  test('non-modal: renders no backdrop', () => {
312
326
  render(
313
327
  <ThemeProvider theme={theme}>
314
- <ResponsiveDrawer ref={anchor} {...defaultProps} modal={false} />
328
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} modal={false} />
315
329
  </ThemeProvider>,
316
330
  )
317
331
  expect(document.querySelector('.MuiBackdrop-root')).toBeNull()
@@ -322,7 +336,7 @@ describe('ResponsiveDrawer', () => {
322
336
  test('non-modal: Escape does not close the panel', () => {
323
337
  render(
324
338
  <ThemeProvider theme={theme}>
325
- <ResponsiveDrawer ref={anchor} {...defaultProps} modal={false} />
339
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} modal={false} />
326
340
  </ThemeProvider>,
327
341
  )
328
342
  // Fire on a node inside the Modal root so it reaches the Modal's key handler.
@@ -336,7 +350,7 @@ describe('ResponsiveDrawer', () => {
336
350
  test('modal (default): Escape closes the panel', () => {
337
351
  render(
338
352
  <ThemeProvider theme={theme}>
339
- <ResponsiveDrawer ref={anchor} {...defaultProps} />
353
+ <ResponsiveDrawer anchorEl={anchor} {...defaultProps} />
340
354
  </ThemeProvider>,
341
355
  )
342
356
  fireEvent.keyDown(screen.getByTestId('drawer-content'), {
@@ -14,10 +14,7 @@ import {
14
14
  } from 'react'
15
15
 
16
16
  type ResponsiveDrawerPosition =
17
- | 'top-left'
18
- | 'top-right'
19
- | 'bottom-left'
20
- | 'bottom-right'
17
+ 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
21
18
 
22
19
  /** Placement of the panel relative to its anchor (desktop popover only). */
23
20
  export type ResponsiveDrawerPlacement = 'side' | 'overlay'
@@ -59,6 +56,7 @@ export function ResponsiveDrawer<
59
56
  slotProps?: PopoverProps['slotProps']
60
57
  },
61
58
  >({
59
+ anchorEl,
62
60
  ref,
63
61
  children,
64
62
  collapsed,
@@ -72,8 +70,15 @@ export function ResponsiveDrawer<
72
70
  placement = 'side',
73
71
  }: Required<Pick<T, 'collapsed' | 'onChangeCollapsed' | 'position'>> &
74
72
  Pick<PopoverProps, 'slotProps' | 'sx' | 'container'> & {
75
- ref: HTMLElement | null
76
- isMobile: boolean
73
+ /** Element the desktop popover is anchored to. */
74
+ anchorEl?: HTMLElement | null
75
+ /**
76
+ * @deprecated Use `anchorEl`. A JSX prop named `ref` is non-reactive under
77
+ * the React Compiler, so a state-held anchor stays frozen at its initial
78
+ * `null` and the popover never opens. Removed in the next major.
79
+ */
80
+ ref?: HTMLElement | null
81
+ isMobile?: boolean
77
82
  children: ReactNode
78
83
  /**
79
84
  * When `false`, the desktop popover is **non-modal**: no backdrop, clicks
@@ -91,6 +96,8 @@ export function ResponsiveDrawer<
91
96
  placement?: ResponsiveDrawerPlacement
92
97
  }) {
93
98
  // Popover position is frozen on open — re-measure on content resize (callback ref: portal mounts after open).
99
+ const anchor = anchorEl ?? ref ?? null
100
+
94
101
  const popoverActions = useRef<PopoverActions>(null)
95
102
  const observerRef = useRef<ResizeObserver | null>(null)
96
103
  const observeContent = useCallback((el: HTMLDivElement | null) => {
@@ -191,8 +198,8 @@ export function ResponsiveDrawer<
191
198
  action={popoverActions}
192
199
  sx={sx}
193
200
  container={container}
194
- anchorEl={ref}
195
- open={!collapsed && ref != null}
201
+ anchorEl={anchor}
202
+ open={!collapsed && anchor != null}
196
203
  onClose={modal ? () => onChangeCollapsed(true) : undefined}
197
204
  hideBackdrop={!modal}
198
205
  disableScrollLock={!modal}
@@ -177,6 +177,25 @@ describe('<LegendRow> composition', () => {
177
177
  // …and the note renders exactly once, after all variables.
178
178
  expect(screen.getAllByText('One note for the whole layer.')).toHaveLength(1)
179
179
  })
180
+
181
+ // These render with no ThemeProvider, i.e. MUI's default theme, whose
182
+ // defaultVariantMapping has no `caption` entry and falls back to a `span`.
183
+ // An inline box ignores the line-height, so the type must not depend on a
184
+ // theme-level variantMapping to come out as a block.
185
+ it('renders the note and the subtitle as blocks, not inline', () => {
186
+ renderRow('boxes', [
187
+ {
188
+ id: 'a',
189
+ name: 'A',
190
+ subtitle: 'Zoom 0-12',
191
+ helperText: 'A note.',
192
+ variables: [cat],
193
+ },
194
+ ])
195
+
196
+ expect(screen.getByText('A note.').tagName).toBe('P')
197
+ expect(screen.getByText('Zoom 0-12').tagName).toBe('P')
198
+ })
180
199
  })
181
200
 
182
201
  describe('<LegendRow> grouped (inside Legend.Group)', () => {
@@ -112,7 +112,11 @@ export function LegendRow({ layerId, children }: LegendRowProps) {
112
112
  )}
113
113
  </Box>
114
114
  {layer.subtitle && !effectivelyCollapsed && (
115
- <Typography variant='caption' color='text.secondary'>
115
+ <Typography
116
+ variant='caption'
117
+ color='text.secondary'
118
+ component='p'
119
+ >
116
120
  {layer.subtitle}
117
121
  </Typography>
118
122
  )}
@@ -136,7 +140,16 @@ export function LegendRow({ layerId, children }: LegendRowProps) {
136
140
  {layer.helperText && (
137
141
  <Box sx={[styles.footer, inGroup && styles.footerGrouped]}>
138
142
  {typeof layer.helperText === 'string' ? (
139
- <Typography variant='caption' color='text.secondary'>
143
+ // `component` is load-bearing: MUI's defaultVariantMapping has
144
+ // no entry for `caption`, so it falls back to a `span` and the
145
+ // line-height stops governing the box. Meridian maps it to `p`
146
+ // by theme, which makes the box type depend on the consumer's
147
+ // theme rather than on this component.
148
+ <Typography
149
+ variant='caption'
150
+ color='text.secondary'
151
+ component='p'
152
+ >
140
153
  {layer.helperText}
141
154
  </Typography>
142
155
  ) : (
@@ -1,8 +1,8 @@
1
1
  import { Box, IconButton } from '@mui/material'
2
- import FirstPageIcon from '@mui/icons-material/FirstPage'
3
- import KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft'
4
- import KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'
5
- import LastPageIcon from '@mui/icons-material/LastPage'
2
+ import { FirstPage as FirstPageIcon } from '@mui/icons-material'
3
+ import { KeyboardArrowLeft } from '@mui/icons-material'
4
+ import { KeyboardArrowRight } from '@mui/icons-material'
5
+ import { LastPage as LastPageIcon } from '@mui/icons-material'
6
6
  import type { PaginationActionsProps } from '../types'
7
7
 
8
8
  /**
@@ -79,7 +79,11 @@ export function buildGridConfig(hasLegend: boolean, theme: Theme) {
79
79
  * @param theme - MUI theme providing the typography token and palette
80
80
  * @returns `{ fontSize, fontFamily, color }` for an ECharts `axisLabel`
81
81
  */
82
- export function buildAxisLabelStyle(theme: Theme) {
82
+ export function buildAxisLabelStyle(theme: Theme): {
83
+ fontSize: string | number | undefined
84
+ fontFamily: string | undefined
85
+ color: string
86
+ } {
83
87
  return {
84
88
  fontSize: theme.typography.overlineDelicate?.fontSize,
85
89
  fontFamily: theme.typography.overlineDelicate?.fontFamily,
@@ -391,6 +391,73 @@ describe('createPieOptionFactory — single-series (donut)', () => {
391
391
  ).toBe('')
392
392
  })
393
393
 
394
+ it('label formatter renders EVERY slice when the label is moved off the centre (e.g. PDF outside labels)', () => {
395
+ // `position: 'center'` stacks every label on one anchor, so only the
396
+ // max-valued slice draws. An override that gives each slice its own
397
+ // anchor must label them all — otherwise a PDF/report export shows a
398
+ // single value and orphan leader lines for the rest.
399
+ const merge = createPieOptionFactory({ theme })
400
+ const out = merge(
401
+ {
402
+ series: [
403
+ {
404
+ type: 'pie' as const,
405
+ label: { show: true, position: 'outside' },
406
+ },
407
+ ] as unknown as never,
408
+ },
409
+ [
410
+ [
411
+ { name: 'A', value: 10 },
412
+ { name: 'B', value: 25 },
413
+ ],
414
+ ],
415
+ ) as {
416
+ series: { label: { formatter: (p: Record<string, unknown>) => string } }[]
417
+ }
418
+ const fmt = out.series[0]!.label.formatter
419
+ expect(
420
+ fmt({
421
+ name: 'A',
422
+ encode: { value: [1] },
423
+ data: { name: 'A', value: 10 },
424
+ }),
425
+ ).toBe('{c|10}\n{b|A}')
426
+ expect(
427
+ fmt({
428
+ name: 'B',
429
+ encode: { value: [1] },
430
+ data: { name: 'B', value: 25 },
431
+ }),
432
+ ).toBe('{c|25}\n{b|B}')
433
+ })
434
+
435
+ it('keeps the blank-line spacer for centre labels and drops it for off-centre ones', () => {
436
+ const data = [[{ name: 'A', value: 10 }]]
437
+ const params = {
438
+ name: 'A',
439
+ encode: { value: [1] },
440
+ data: { name: 'A', value: 10 },
441
+ }
442
+ interface Out {
443
+ series: { label: { formatter: (p: Record<string, unknown>) => string } }[]
444
+ }
445
+ const centered = createPieOptionFactory({ theme })(
446
+ {},
447
+ data,
448
+ ) as unknown as Out
449
+ const outside = createPieOptionFactory({ theme })(
450
+ {
451
+ series: [
452
+ { type: 'pie' as const, label: { position: 'inside' } },
453
+ ] as unknown as never,
454
+ },
455
+ data,
456
+ ) as unknown as Out
457
+ expect(centered.series[0]!.label.formatter(params)).toBe('{c|10}\n\n{b|A}')
458
+ expect(outside.series[0]!.label.formatter(params)).toBe('{c|10}\n{b|A}')
459
+ })
460
+
394
461
  it('label formatter treats an explicit empty selection as no selection (renders the true max, not blank)', () => {
395
462
  const merge = createPieOptionFactory({ theme, selection: [] })
396
463
  const out = merge({}, [[{ name: 'A', value: 10 }]]) as {
@@ -246,6 +246,21 @@ function buildSingleSeriesPieFusion(
246
246
  : echarts.color.modifyAlpha(base, 0.15)
247
247
  }
248
248
 
249
+ // ECharts anchors EVERY slice's `position: 'center'` label at the same
250
+ // point, so at most one of them can ever be legible — the donut design
251
+ // leans into that (one KPI inside the ring) and picks a single slice
252
+ // below. A consumer that moves the labels off the centre gives each
253
+ // slice its own anchor (`'outside'` with leader lines is what the PDF
254
+ // export uses, `'inside'` / `'insideTop'` … likewise), and there the
255
+ // single-label rule is simply wrong: every slice must render its own
256
+ // label. Read the position off the structural template, which already
257
+ // carries the consumer's `optionsOverride`.
258
+ const templateLabelPosition = (
259
+ broadcastTemplate as { label?: { position?: unknown } }
260
+ ).label?.position
261
+ const isCenterLabel =
262
+ templateLabelPosition === undefined || templateLabelPosition === 'center'
263
+
249
264
  // Which slice renders the centre value+name: the greatest value among
250
265
  // the *included* slices (all of them when there's no active
251
266
  // selection), computed locally — no query round-trip. Only that one
@@ -254,7 +269,8 @@ function buildSingleSeriesPieFusion(
254
269
  // `typeof value === 'number'` participates — if every included slice's
255
270
  // value is non-numeric, `centerMaxName` stays `undefined` and no slice
256
271
  // matches it in `labelTextFormatter` below, so the chart renders with no
257
- // centre label at all (graceful no-op, not a crash).
272
+ // centre label at all (graceful no-op, not a crash). Skipped entirely
273
+ // for off-centre labels, where every slice labels itself.
258
274
  const centerData = seriesArr[0] ?? []
259
275
  let centerMaxName: string | number | undefined
260
276
  let centerMaxValue = -Infinity
@@ -266,13 +282,14 @@ function buildSingleSeriesPieFusion(
266
282
  }
267
283
  }
268
284
 
269
- // Center label formatter — lives in the merger because it reads
285
+ // Slice label formatter — lives in the merger because it reads
270
286
  // reactive `formatter` / `labelFormatter` from ctx. The rich tags
271
287
  // `{c|…}` and `{b|…}` reference the rich styles baked into the
272
288
  // structural label template.
273
289
  const labelTextFormatter = (params: CallbackDataParams): string => {
274
290
  const { name } = params
275
- if (name == null || name !== centerMaxName) return ''
291
+ if (name == null) return ''
292
+ if (isCenterLabel && name !== centerMaxName) return ''
276
293
  const encodeIndex = params.encode?.value?.[0]
277
294
  if (encodeIndex === undefined) return ''
278
295
  const value = (Object.values(params.data ?? {}) as unknown[]).at(
@@ -292,7 +309,13 @@ function buildSingleSeriesPieFusion(
292
309
  const formattedName = labelFormatter
293
310
  ? String(labelFormatter(name ?? ''))
294
311
  : String(name ?? '')
295
- return `{c|${formattedValue}}\n\n{b|${formattedName}}`
312
+ // The blank line is what separates the big centre KPI from its
313
+ // caption. Off-centre labels sit next to their own slice and are
314
+ // laid out against their neighbours, so the spacer only inflates
315
+ // each label's bounding box — enough, with a hidden `{b|…}` block,
316
+ // to make ECharts drop colliding labels altogether.
317
+ const separator = isCenterLabel ? '\n\n' : '\n'
318
+ return `{c|${formattedValue}}${separator}{b|${formattedName}}`
296
319
  }
297
320
 
298
321
  return {
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect, vi } from 'vitest'
2
2
  import { fireEvent, render, screen } from '@testing-library/react'
3
- import StarIcon from '@mui/icons-material/Star'
3
+ import { Star as StarIcon } from '@mui/icons-material'
4
4
  import { SelectionSummary } from './selection-summary'
5
5
 
6
6
  describe('<SelectionSummary>', () => {
@@ -2,7 +2,7 @@ import { useEffect, useRef } from 'react'
2
2
  import { describe, it, expect } from 'vitest'
3
3
  import { fireEvent, render, screen } from '@testing-library/react'
4
4
  import { IconButton } from '@mui/material'
5
- import StarIcon from '@mui/icons-material/Star'
5
+ import { Star as StarIcon } from '@mui/icons-material'
6
6
  import { Toolbox } from './toolbox'
7
7
 
8
8
  function makeChildren(n: number) {
@@ -1 +0,0 @@
1
- {"version":3,"file":"chart-config-BGt7wkK7.js","names":["Theme","LegendComponentOption","CallbackDataParams","TopLevelFormatterParams","niceNum","value","absValue","Math","abs","base","pow","floor","log10","rounded","ceil","buildLegendConfig","hasLegend","labelFormatter","show","icon","const","left","bottom","orient","type","formatter","name","String","buildGridConfig","theme","parseInt","spacing","buildAxisLabelStyle","fontSize","typography","overlineDelicate","fontFamily","color","palette","black","text","secondary","createTooltipPositioner","point","_params","_dom","_rect","size","contentSize","viewSize","position","top","Record","right","createAxisLabelFormatter","undefined","applyXAxisFormatter","xAxis","xAxisIsObject","Array","isArray","xAxisTyped","axisLabel","axisFormatter","applyYAxisFormatter","yAxis","yAxisIsObject","yAxisTyped","createTooltipFormatter","callback","item","items","seriesName","marker","params","tooltip","values","map","showMargin","length","marginStyle","formattedValues","join","buildSeriesLabelConfig","encodeKey","label","encodeIndex","encode","dimName","dimensionNames","row","buildHistogramSeriesLabelConfig","downloadToCSV","downloadToPNG","DownloadItem","ConfigProps","createChartDownloadConfig","csvModifier","data","TData","refUI","modifier","rows"],"sources":["../src/widgets/utils/chart-config/option-builders.ts","../src/widgets/utils/chart-config/download-config.ts"],"sourcesContent":["import type { Theme } from '@mui/material'\nimport type { LegendComponentOption } from 'echarts'\nimport type {\n CallbackDataParams,\n TopLevelFormatterParams,\n} from 'echarts/types/dist/shared'\n\n/**\n * Shared EChart configuration builders for chart widgets\n */\n\n/**\n * Rounds a value up to the nearest \"nice\" number.\n * A nice number is a multiple of 10^floor(log10(value)).\n *\n * Examples: 547 → 600, 200 → 200, 1200 → 2000, 18 → 20, 5 → 5, -547 → -500\n */\nexport function niceNum(value: number): number {\n if (value === 0) return 0\n const absValue = Math.abs(value)\n const base = Math.pow(10, Math.floor(Math.log10(absValue)))\n const rounded = Math.ceil(absValue / base) * base\n return value < 0 ? -rounded : rounded\n}\n\n/**\n * Builds standard legend configuration for chart widgets\n *\n * @param params - Legend configuration parameters\n * @param params.hasLegend - Whether to show the legend\n * @param params.labelFormatter - Optional formatter for legend item names\n * @returns Legend configuration object\n */\nexport function buildLegendConfig({\n hasLegend,\n labelFormatter,\n}: {\n hasLegend: boolean\n labelFormatter?: (value: string | number) => string | number\n}): LegendComponentOption {\n return {\n show: hasLegend,\n icon: 'circle' as const,\n left: 0,\n bottom: 0,\n orient: 'horizontal',\n type: 'scroll',\n ...(labelFormatter && {\n formatter: (name: string) => String(labelFormatter(name)),\n }),\n }\n}\n\n/**\n * Builds standard grid configuration with legend-aware spacing\n *\n * @param hasLegend - Whether the chart has a legend\n * @param theme - MUI theme for spacing\n * @param additionalConfig - Additional grid configuration to merge\n * @returns Grid configuration object\n */\nexport function buildGridConfig(hasLegend: boolean, theme: Theme) {\n return {\n ...(!hasLegend && { bottom: parseInt(theme.spacing(3)) }),\n ...(hasLegend && { bottom: parseInt(theme.spacing(7)) }),\n }\n}\n\n/**\n * Builds the shared axis-label text style for chart widgets, matching the\n * design's \"Overline (Delicate)\" token (Inter, 10px) in the secondary text\n * colour (`rgba(44,48,50,0.6)`). Spread into an ECharts `axisLabel` for both\n * x and y axes so every chart's labels stay consistent.\n *\n * Note: the token's `letterSpacing` and `textTransform: uppercase` are not\n * representable in ECharts canvas text, so only font size/family/colour are\n * applied.\n *\n * @param theme - MUI theme providing the typography token and palette\n * @returns `{ fontSize, fontFamily, color }` for an ECharts `axisLabel`\n */\nexport function buildAxisLabelStyle(theme: Theme) {\n return {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n color: theme.palette.black?.[60] ?? theme.palette.text.secondary,\n }\n}\n\n/**\n * Creates a tooltip position calculator that handles overflow\n * Used by bar, histogram, and scatterplot widgets\n *\n * @param theme - MUI theme for spacing\n * @returns Tooltip position function\n */\nexport function createTooltipPositioner(theme: Theme) {\n return function (\n point: [number, number],\n _params: unknown,\n _dom: unknown,\n _rect: unknown,\n size: { contentSize: [number, number]; viewSize: [number, number] },\n ) {\n const position = { top: parseInt(theme.spacing(0.5)) } as Record<\n string,\n number\n >\n\n // Position tooltip left or right based on available space\n if (size.contentSize[0] < size.viewSize[0] - point[0]) {\n position.left = point[0]\n } else {\n position.right = size.viewSize[0] - point[0]\n }\n\n return position\n }\n}\n\n/**\n * Creates an axis label formatter for ECharts\n * Used to format numeric axis labels with a widget formatter\n *\n * @param formatter - Optional formatter function from widget config\n * @returns Axis label formatter function or undefined\n */\nexport function createAxisLabelFormatter(\n formatter?: (value: number) => string,\n) {\n if (!formatter) return undefined\n return (value: number) => formatter(value)\n}\n\n/**\n * Applies labelFormatter to xAxis configuration\n * Applies to any xAxis regardless of axis type (category, value, etc.)\n *\n * @param xAxis - Existing xAxis configuration\n * @param labelFormatter - Optional labelFormatter function from widget config\n * @returns Updated xAxis configuration\n */\nexport function applyXAxisFormatter(\n xAxis: unknown,\n formatter?: (value: string | number) => string | number,\n) {\n const xAxisIsObject = xAxis && !Array.isArray(xAxis)\n const xAxisTyped = xAxis as { type?: string; axisLabel?: unknown }\n\n const axisFormatter =\n formatter && xAxisIsObject\n ? (value: string | number) => String(formatter(value))\n : undefined\n\n return {\n ...xAxisTyped,\n axisLabel: {\n ...(typeof xAxisTyped.axisLabel === 'object' && xAxisTyped.axisLabel\n ? xAxisTyped.axisLabel\n : {}),\n formatter: axisFormatter,\n },\n }\n}\n\n/**\n * Applies formatter to yAxis configuration\n * Only applies to single axis objects (not arrays) with type 'value'\n *\n * @param yAxis - Existing yAxis configuration\n * @param formatter - Optional formatter function from widget config\n * @returns Updated yAxis configuration or undefined if no changes needed\n */\nexport function applyYAxisFormatter(\n yAxis: unknown,\n formatter?: (value: number) => string,\n) {\n let axisFormatter = createAxisLabelFormatter(formatter)\n\n const yAxisIsObject = yAxis && !Array.isArray(yAxis)\n const yAxisTyped = yAxis as { type?: string; axisLabel?: unknown }\n\n if (!yAxisIsObject || yAxisTyped.type !== 'value') {\n axisFormatter = undefined\n }\n\n return {\n ...yAxisTyped,\n axisLabel: {\n ...(typeof yAxisTyped.axisLabel === 'object' && yAxisTyped.axisLabel\n ? yAxisTyped.axisLabel\n : {}),\n formatter: axisFormatter,\n },\n }\n}\n\n/**\n * Creates a tooltip formatter for ECharts\n * Formats numeric values in tooltip using widget formatter\n * Handles both axis trigger (array) and item trigger (object) modes\n *\n * @param formatter - Optional formatter function from widget config\n * @returns Tooltip formatter function or undefined\n */\nexport function createTooltipFormatter(\n callback: (\n item: CallbackDataParams,\n items: CallbackDataParams[],\n ) => {\n name: string\n seriesName: string\n marker: string\n value: string | number\n },\n) {\n return (params: TopLevelFormatterParams) => {\n // Handle both array (axis trigger) and object (item trigger)\n const items = Array.isArray(params) ? params : [params]\n\n const tooltip = (name: string, callback: string) =>\n `<div style=\"margin: 0px 0 0;line-height:1;\">${name ? `<div style=\"font-size:11px;color:#FFFFFF;font-weight:400;line-height:1; margin-bottom: 10px\">${name}</div>` : ''}<div style=\"margin: 0;line-height:1;\">${callback}</div><div style=\"clear:both\"></div></div>`\n\n const values = items.map((item) => {\n const { name, seriesName, marker, value } = callback(item, items)\n return {\n name,\n seriesName,\n marker,\n value,\n }\n })\n\n const name = values[0]?.name ?? ''\n // Show margin if name exists or there are multiple items\n const showMargin = name || items.length > 1\n const marginStyle = showMargin\n ? 'margin: 10px 0 0;line-height:1;'\n : 'margin: 0;line-height:1;'\n\n const formattedValues = values.map(\n ({ seriesName, marker, value }) =>\n `<div style=\"${marginStyle}\"><div style=\"margin: 0px 0 0;line-height:1;\">${marker}${seriesName ? `<span style=\"font-size:11px;color:#FFFFFF;font-weight:400;margin-left:2px;margin-right:10px\">${seriesName}</span>` : ''}<span style=\"float:right;margin-left:10px;font-size:11px;color:#FFFFFF;font-weight:900\">${value}</span></div></div>`,\n )\n\n return tooltip(name, formattedValues.join(''))\n }\n}\n\n/**\n * Builds a series `label` config that applies formatter to the data value\n * extracted from a dataset row using ECharts encode/dimensionNames.\n *\n * Does not set `show` — labels remain hidden by default per ECharts defaults.\n *\n * @param formatter - Optional numeric value formatter\n * @param encodeKey - The encode dimension key to extract ('y' for vertical charts, 'x' for horizontal)\n */\nexport function buildSeriesLabelConfig(\n formatter?: (value: number) => string,\n encodeKey = 'y',\n): { label: { formatter: (params: CallbackDataParams) => string } } | object {\n if (!formatter) return {}\n\n return {\n label: {\n formatter: (params: CallbackDataParams) => {\n const encodeIndex = params.encode?.[encodeKey]?.[0]\n if (encodeIndex === undefined) return ''\n const dimName = params.dimensionNames?.[encodeIndex]\n const row = params.value as Record<string, string | number>\n const value = dimName ? row[dimName] : undefined\n return typeof value === 'number'\n ? formatter(value)\n : String(value ?? '')\n },\n },\n }\n}\n\n/**\n * Builds a series `label` config that applies formatter to a raw numeric value.\n * Used by histogram where series data is number[] (not datasets).\n *\n * Does not set `show` — labels remain hidden by default per ECharts defaults.\n *\n * @param formatter - Optional numeric value formatter\n */\nexport function buildHistogramSeriesLabelConfig(\n formatter?: (value: number) => string,\n): { label: { formatter: (params: CallbackDataParams) => string } } | object {\n if (!formatter) return {}\n\n return {\n label: {\n formatter: (params: CallbackDataParams) => {\n const value = params.value as number\n return typeof value === 'number'\n ? formatter(value)\n : String(value ?? '')\n },\n },\n }\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../../actions'\nimport type { ConfigProps } from '../../loader/types'\n\nexport function createChartDownloadConfig<TData>(\n csvModifier: (data: TData) => string[][],\n) {\n return function ({ refUI }: ConfigProps): DownloadItem<TData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = csvModifier(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n }\n}\n"],"mappings":"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"}