@carto/ps-react-ui 4.7.0 → 4.8.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 (578) hide show
  1. package/dist/category-DwaeYjpX.js +656 -0
  2. package/dist/category-DwaeYjpX.js.map +1 -0
  3. package/dist/change-column-Cidl_M-4.js +1110 -0
  4. package/dist/change-column-Cidl_M-4.js.map +1 -0
  5. package/dist/data-zoom-layout-BH0LPwSy.js +28 -0
  6. package/dist/data-zoom-layout-BH0LPwSy.js.map +1 -0
  7. package/dist/echart-CU0KmClP.js +176 -0
  8. package/dist/echart-CU0KmClP.js.map +1 -0
  9. package/dist/exports-Cx-f6m6U.js +63 -0
  10. package/dist/exports-Cx-f6m6U.js.map +1 -0
  11. package/dist/formula-DuC0NQLH.js +79 -0
  12. package/dist/formula-DuC0NQLH.js.map +1 -0
  13. package/dist/markdown-BD1jcknS.js +8326 -0
  14. package/dist/markdown-BD1jcknS.js.map +1 -0
  15. package/dist/merge-options-DCkkHZIf.js +34 -0
  16. package/dist/merge-options-DCkkHZIf.js.map +1 -0
  17. package/dist/{styles-BYTyKQFP.js → option-builders-F-c9ELi1.js} +25 -45
  18. package/dist/option-builders-F-c9ELi1.js.map +1 -0
  19. package/dist/png-item-CS4z1iSH.js +45 -0
  20. package/dist/png-item-CS4z1iSH.js.map +1 -0
  21. package/dist/range-DsqTjSpg.js +186 -0
  22. package/dist/range-DsqTjSpg.js.map +1 -0
  23. package/dist/spread-CTuIXZSM.js +67 -0
  24. package/dist/spread-CTuIXZSM.js.map +1 -0
  25. package/dist/style-DVnT6HC1.js +131 -0
  26. package/dist/style-DVnT6HC1.js.map +1 -0
  27. package/dist/styles-cohnxh9F.js +23 -0
  28. package/dist/styles-cohnxh9F.js.map +1 -0
  29. package/dist/table-HIpXuq4G.js +390 -0
  30. package/dist/table-HIpXuq4G.js.map +1 -0
  31. package/dist/transforms-Cdx4fkU5.js +106 -0
  32. package/dist/transforms-Cdx4fkU5.js.map +1 -0
  33. package/dist/types/widgets/echart/utils.test.d.ts +1 -0
  34. package/dist/types/widgets/formula/config.test.d.ts +1 -0
  35. package/dist/types/widgets/stores/widget-store-branches.test.d.ts +1 -0
  36. package/dist/types/widgets/table/config.test.d.ts +1 -0
  37. package/dist/types/widgets-v2/actions/brush-toggle/brush-toggle.d.ts +56 -0
  38. package/dist/types/widgets-v2/actions/brush-toggle/index.d.ts +3 -0
  39. package/dist/types/widgets-v2/actions/brush-toggle/labels.d.ts +5 -0
  40. package/dist/types/widgets-v2/actions/brush-toggle/style.d.ts +12 -0
  41. package/dist/types/widgets-v2/actions/brush-toggle/transforms.d.ts +11 -0
  42. package/dist/types/widgets-v2/actions/brush-toggle/transforms.test.d.ts +1 -0
  43. package/dist/types/widgets-v2/actions/change-column/change-column-icon.d.ts +2 -0
  44. package/dist/types/widgets-v2/actions/change-column/change-column.d.ts +29 -0
  45. package/dist/types/widgets-v2/actions/change-column/index.d.ts +3 -0
  46. package/dist/types/widgets-v2/actions/change-column/labels.d.ts +5 -0
  47. package/dist/types/widgets-v2/actions/change-column/sortable-column-item.d.ts +14 -0
  48. package/dist/types/widgets-v2/actions/change-column/style.d.ts +33 -0
  49. package/dist/types/widgets-v2/actions/change-column/types.d.ts +10 -0
  50. package/dist/types/widgets-v2/actions/download/download.d.ts +18 -0
  51. package/dist/types/widgets-v2/actions/download/exports.d.ts +37 -0
  52. package/dist/types/widgets-v2/actions/download/icons.d.ts +12 -0
  53. package/dist/types/widgets-v2/actions/download/index.d.ts +6 -0
  54. package/dist/types/widgets-v2/actions/download/labels.d.ts +11 -0
  55. package/dist/types/widgets-v2/actions/download/png-item.d.ts +24 -0
  56. package/dist/types/widgets-v2/actions/download/style.d.ts +1 -0
  57. package/dist/types/widgets-v2/actions/download/types.d.ts +35 -0
  58. package/dist/types/widgets-v2/actions/fullscreen/fullscreen.d.ts +59 -0
  59. package/dist/types/widgets-v2/actions/fullscreen/index.d.ts +3 -0
  60. package/dist/types/widgets-v2/actions/fullscreen/labels.d.ts +5 -0
  61. package/dist/types/widgets-v2/actions/fullscreen/style.d.ts +48 -0
  62. package/dist/types/widgets-v2/actions/fullscreen/types.d.ts +14 -0
  63. package/dist/types/widgets-v2/actions/index.d.ts +9 -0
  64. package/dist/types/widgets-v2/actions/lock-selection/index.d.ts +3 -0
  65. package/dist/types/widgets-v2/actions/lock-selection/labels.d.ts +6 -0
  66. package/dist/types/widgets-v2/actions/lock-selection/lock-selection.d.ts +36 -0
  67. package/dist/types/widgets-v2/actions/lock-selection/style.d.ts +12 -0
  68. package/dist/types/widgets-v2/actions/lock-selection/transforms.d.ts +6 -0
  69. package/dist/types/widgets-v2/actions/relative-data/index.d.ts +3 -0
  70. package/dist/types/widgets-v2/actions/relative-data/labels.d.ts +5 -0
  71. package/dist/types/widgets-v2/actions/relative-data/relative-data.d.ts +39 -0
  72. package/dist/types/widgets-v2/actions/relative-data/style.d.ts +12 -0
  73. package/dist/types/widgets-v2/actions/relative-data/transforms.d.ts +30 -0
  74. package/dist/types/widgets-v2/actions/relative-data/transforms.test.d.ts +1 -0
  75. package/dist/types/widgets-v2/actions/searcher/filter.d.ts +6 -0
  76. package/dist/types/widgets-v2/actions/searcher/index.d.ts +4 -0
  77. package/dist/types/widgets-v2/actions/searcher/labels.d.ts +7 -0
  78. package/dist/types/widgets-v2/actions/searcher/searcher-toggle.d.ts +23 -0
  79. package/dist/types/widgets-v2/actions/searcher/searcher.d.ts +11 -0
  80. package/dist/types/widgets-v2/actions/searcher/style.d.ts +16 -0
  81. package/dist/types/widgets-v2/actions/stack-toggle/index.d.ts +3 -0
  82. package/dist/types/widgets-v2/actions/stack-toggle/labels.d.ts +5 -0
  83. package/dist/types/widgets-v2/actions/stack-toggle/stack-toggle.d.ts +10 -0
  84. package/dist/types/widgets-v2/actions/stack-toggle/style.d.ts +12 -0
  85. package/dist/types/widgets-v2/actions/stack-toggle/transforms.d.ts +13 -0
  86. package/dist/types/widgets-v2/actions/stack-toggle/transforms.test.d.ts +1 -0
  87. package/dist/types/widgets-v2/actions/zoom-toggle/index.d.ts +3 -0
  88. package/dist/types/widgets-v2/actions/zoom-toggle/labels.d.ts +5 -0
  89. package/dist/types/widgets-v2/actions/zoom-toggle/style.d.ts +12 -0
  90. package/dist/types/widgets-v2/actions/zoom-toggle/transforms.d.ts +51 -0
  91. package/dist/types/widgets-v2/actions/zoom-toggle/transforms.test.d.ts +1 -0
  92. package/dist/types/widgets-v2/actions/zoom-toggle/zoom-toggle.d.ts +35 -0
  93. package/dist/types/widgets-v2/bar/download.d.ts +24 -0
  94. package/dist/types/widgets-v2/bar/index.d.ts +4 -0
  95. package/dist/types/widgets-v2/bar/options.d.ts +43 -0
  96. package/dist/types/widgets-v2/bar/options.test.d.ts +1 -0
  97. package/dist/types/widgets-v2/bar/skeleton.d.ts +6 -0
  98. package/dist/types/widgets-v2/bar/types.d.ts +41 -0
  99. package/dist/types/widgets-v2/category/category-ui.d.ts +81 -0
  100. package/dist/types/widgets-v2/category/category.d.ts +48 -0
  101. package/dist/types/widgets-v2/category/components/category-bar-stacked.d.ts +28 -0
  102. package/dist/types/widgets-v2/category/components/category-bar.d.ts +23 -0
  103. package/dist/types/widgets-v2/category/components/category-legend.d.ts +18 -0
  104. package/dist/types/widgets-v2/category/components/category-row-multi.d.ts +31 -0
  105. package/dist/types/widgets-v2/category/components/category-row-other.d.ts +13 -0
  106. package/dist/types/widgets-v2/category/components/category-row-single.d.ts +28 -0
  107. package/dist/types/widgets-v2/category/components/category-row-stacked.d.ts +38 -0
  108. package/dist/types/widgets-v2/category/download.d.ts +16 -0
  109. package/dist/types/widgets-v2/category/download.test.d.ts +1 -0
  110. package/dist/types/widgets-v2/category/index.d.ts +10 -0
  111. package/dist/types/widgets-v2/category/skeleton.d.ts +11 -0
  112. package/dist/types/widgets-v2/category/style.d.ts +166 -0
  113. package/dist/types/widgets-v2/category/types.d.ts +49 -0
  114. package/dist/types/widgets-v2/echart/echart-ui.d.ts +44 -0
  115. package/dist/types/widgets-v2/echart/echart.d.ts +75 -0
  116. package/dist/types/widgets-v2/echart/index.d.ts +4 -0
  117. package/dist/types/widgets-v2/echart/shared-resize-observer.d.ts +5 -0
  118. package/dist/types/widgets-v2/echart/shared-resize-observer.test.d.ts +1 -0
  119. package/dist/types/widgets-v2/echart/style.d.ts +6 -0
  120. package/dist/types/widgets-v2/echart/use-chart-selection.d.ts +51 -0
  121. package/dist/types/widgets-v2/formula/delta.d.ts +22 -0
  122. package/dist/types/widgets-v2/formula/download.d.ts +20 -0
  123. package/dist/types/widgets-v2/formula/formula-ui.d.ts +20 -0
  124. package/dist/types/widgets-v2/formula/formula.d.ts +8 -0
  125. package/dist/types/widgets-v2/formula/index.d.ts +11 -0
  126. package/dist/types/widgets-v2/formula/note.d.ts +11 -0
  127. package/dist/types/widgets-v2/formula/prefix.d.ts +12 -0
  128. package/dist/types/widgets-v2/formula/series.d.ts +16 -0
  129. package/dist/types/widgets-v2/formula/skeleton.d.ts +4 -0
  130. package/dist/types/widgets-v2/formula/style.d.ts +29 -0
  131. package/dist/types/widgets-v2/formula/suffix.d.ts +12 -0
  132. package/dist/types/widgets-v2/formula/types.d.ts +40 -0
  133. package/dist/types/widgets-v2/formula/value.d.ts +14 -0
  134. package/dist/types/widgets-v2/histogram/download.d.ts +17 -0
  135. package/dist/types/widgets-v2/histogram/download.test.d.ts +1 -0
  136. package/dist/types/widgets-v2/histogram/index.d.ts +5 -0
  137. package/dist/types/widgets-v2/histogram/options.d.ts +42 -0
  138. package/dist/types/widgets-v2/histogram/options.test.d.ts +1 -0
  139. package/dist/types/widgets-v2/histogram/skeleton.d.ts +9 -0
  140. package/dist/types/widgets-v2/histogram/transforms.d.ts +17 -0
  141. package/dist/types/widgets-v2/histogram/transforms.test.d.ts +1 -0
  142. package/dist/types/widgets-v2/histogram/types.d.ts +47 -0
  143. package/dist/types/widgets-v2/index.d.ts +107 -0
  144. package/dist/types/widgets-v2/markdown/download.d.ts +16 -0
  145. package/dist/types/widgets-v2/markdown/download.test.d.ts +1 -0
  146. package/dist/types/widgets-v2/markdown/index.d.ts +6 -0
  147. package/dist/types/widgets-v2/markdown/markdown-content.d.ts +34 -0
  148. package/dist/types/widgets-v2/markdown/markdown-ui.d.ts +12 -0
  149. package/dist/types/widgets-v2/markdown/markdown.d.ts +6 -0
  150. package/dist/types/widgets-v2/markdown/skeleton.d.ts +4 -0
  151. package/dist/types/widgets-v2/markdown/style.d.ts +61 -0
  152. package/dist/types/widgets-v2/markdown/types.d.ts +4 -0
  153. package/dist/types/widgets-v2/note/labels.d.ts +5 -0
  154. package/dist/types/widgets-v2/note/style.d.ts +26 -0
  155. package/dist/types/widgets-v2/note/widget-note.d.ts +46 -0
  156. package/dist/types/widgets-v2/pie/download.d.ts +17 -0
  157. package/dist/types/widgets-v2/pie/download.test.d.ts +1 -0
  158. package/dist/types/widgets-v2/pie/index.d.ts +4 -0
  159. package/dist/types/widgets-v2/pie/options.d.ts +35 -0
  160. package/dist/types/widgets-v2/pie/options.test.d.ts +1 -0
  161. package/dist/types/widgets-v2/pie/skeleton.d.ts +4 -0
  162. package/dist/types/widgets-v2/pie/types.d.ts +50 -0
  163. package/dist/types/widgets-v2/provider/widget-provider.d.ts +32 -0
  164. package/dist/types/widgets-v2/range/index.d.ts +4 -0
  165. package/dist/types/widgets-v2/range/range-ui.d.ts +19 -0
  166. package/dist/types/widgets-v2/range/range.d.ts +19 -0
  167. package/dist/types/widgets-v2/range/skeleton.d.ts +9 -0
  168. package/dist/types/widgets-v2/range/style.d.ts +40 -0
  169. package/dist/types/widgets-v2/range/types.d.ts +37 -0
  170. package/dist/types/widgets-v2/scatterplot/download.d.ts +16 -0
  171. package/dist/types/widgets-v2/scatterplot/download.test.d.ts +1 -0
  172. package/dist/types/widgets-v2/scatterplot/index.d.ts +5 -0
  173. package/dist/types/widgets-v2/scatterplot/options.d.ts +42 -0
  174. package/dist/types/widgets-v2/scatterplot/options.test.d.ts +1 -0
  175. package/dist/types/widgets-v2/scatterplot/skeleton.d.ts +12 -0
  176. package/dist/types/widgets-v2/scatterplot/transforms.d.ts +17 -0
  177. package/dist/types/widgets-v2/scatterplot/transforms.test.d.ts +1 -0
  178. package/dist/types/widgets-v2/scatterplot/types.d.ts +50 -0
  179. package/dist/types/widgets-v2/selection-summary/labels.d.ts +6 -0
  180. package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +22 -0
  181. package/dist/types/widgets-v2/selection-summary/style.d.ts +23 -0
  182. package/dist/types/widgets-v2/spread/download.d.ts +15 -0
  183. package/dist/types/widgets-v2/spread/download.test.d.ts +1 -0
  184. package/dist/types/widgets-v2/spread/index.d.ts +6 -0
  185. package/dist/types/widgets-v2/spread/separator.d.ts +7 -0
  186. package/dist/types/widgets-v2/spread/skeleton.d.ts +9 -0
  187. package/dist/types/widgets-v2/spread/spread-ui.d.ts +18 -0
  188. package/dist/types/widgets-v2/spread/spread.d.ts +5 -0
  189. package/dist/types/widgets-v2/spread/types.d.ts +25 -0
  190. package/dist/types/widgets-v2/state/labels.d.ts +7 -0
  191. package/dist/types/widgets-v2/state/labels.test.d.ts +1 -0
  192. package/dist/types/widgets-v2/state/style.d.ts +19 -0
  193. package/dist/types/widgets-v2/state/widget-state.d.ts +19 -0
  194. package/dist/types/widgets-v2/stores/index.d.ts +8 -0
  195. package/dist/types/widgets-v2/stores/pipeline-middleware.d.ts +5 -0
  196. package/dist/types/widgets-v2/stores/pipeline-middleware.test.d.ts +1 -0
  197. package/dist/types/widgets-v2/stores/transforms.d.ts +4 -0
  198. package/dist/types/widgets-v2/stores/transforms.test.d.ts +1 -0
  199. package/dist/types/widgets-v2/stores/types.d.ts +55 -0
  200. package/dist/types/widgets-v2/stores/use-echart-instance.d.ts +15 -0
  201. package/dist/types/widgets-v2/stores/use-transform-enabled.d.ts +17 -0
  202. package/dist/types/widgets-v2/stores/use-transform.d.ts +12 -0
  203. package/dist/types/widgets-v2/stores/widget-context.d.ts +2 -0
  204. package/dist/types/widgets-v2/stores/widget-store-registry.d.ts +74 -0
  205. package/dist/types/widgets-v2/stores/widget-store-registry.test.d.ts +1 -0
  206. package/dist/types/widgets-v2/subheader/style.d.ts +10 -0
  207. package/dist/types/widgets-v2/subheader/subheader.d.ts +11 -0
  208. package/dist/types/widgets-v2/table/download.d.ts +18 -0
  209. package/dist/types/widgets-v2/table/download.test.d.ts +1 -0
  210. package/dist/types/widgets-v2/table/helpers.d.ts +32 -0
  211. package/dist/types/widgets-v2/table/helpers.test.d.ts +1 -0
  212. package/dist/types/widgets-v2/table/index.d.ts +7 -0
  213. package/dist/types/widgets-v2/table/labels.d.ts +22 -0
  214. package/dist/types/widgets-v2/table/skeleton.d.ts +22 -0
  215. package/dist/types/widgets-v2/table/style.d.ts +44 -0
  216. package/dist/types/widgets-v2/table/table-ui.d.ts +38 -0
  217. package/dist/types/widgets-v2/table/table.d.ts +50 -0
  218. package/dist/types/widgets-v2/table/types.d.ts +37 -0
  219. package/dist/types/widgets-v2/test-utils.d.ts +52 -0
  220. package/dist/types/widgets-v2/timeseries/download.d.ts +17 -0
  221. package/dist/types/widgets-v2/timeseries/download.test.d.ts +1 -0
  222. package/dist/types/widgets-v2/timeseries/index.d.ts +4 -0
  223. package/dist/types/widgets-v2/timeseries/options.d.ts +39 -0
  224. package/dist/types/widgets-v2/timeseries/options.test.d.ts +1 -0
  225. package/dist/types/widgets-v2/timeseries/skeleton.d.ts +8 -0
  226. package/dist/types/widgets-v2/timeseries/types.d.ts +56 -0
  227. package/dist/types/widgets-v2/toolbox/labels.d.ts +5 -0
  228. package/dist/types/widgets-v2/toolbox/style.d.ts +30 -0
  229. package/dist/types/widgets-v2/toolbox/toolbox.d.ts +49 -0
  230. package/dist/types/widgets-v2/utils/data-zoom-layout.d.ts +11 -0
  231. package/dist/types/widgets-v2/utils/index.d.ts +2 -0
  232. package/dist/types/widgets-v2/utils/merge-options.d.ts +12 -0
  233. package/dist/types/widgets-v2/utils/merge-options.test.d.ts +1 -0
  234. package/dist/types/widgets-v2/wrapper/index.d.ts +4 -0
  235. package/dist/types/widgets-v2/wrapper/labels.d.ts +6 -0
  236. package/dist/types/widgets-v2/wrapper/style.d.ts +111 -0
  237. package/dist/types/widgets-v2/wrapper/widget-actions.d.ts +22 -0
  238. package/dist/types/widgets-v2/wrapper/widget-content.d.ts +12 -0
  239. package/dist/types/widgets-v2/wrapper/widget-wrapper.d.ts +51 -0
  240. package/dist/use-transform-DXPN3nY7.js +110 -0
  241. package/dist/use-transform-DXPN3nY7.js.map +1 -0
  242. package/dist/widget-context-DTGO0Yta.js +13 -0
  243. package/dist/widget-context-DTGO0Yta.js.map +1 -0
  244. package/dist/widget-store-registry-_W4Z4xp-.js +178 -0
  245. package/dist/widget-store-registry-_W4Z4xp-.js.map +1 -0
  246. package/dist/widgets/actions.js +688 -668
  247. package/dist/widgets/actions.js.map +1 -1
  248. package/dist/widgets/bar.js +14 -13
  249. package/dist/widgets/bar.js.map +1 -1
  250. package/dist/widgets/histogram.js +38 -37
  251. package/dist/widgets/histogram.js.map +1 -1
  252. package/dist/widgets/pie.js +19 -18
  253. package/dist/widgets/pie.js.map +1 -1
  254. package/dist/widgets/scatterplot.js +8 -7
  255. package/dist/widgets/scatterplot.js.map +1 -1
  256. package/dist/widgets/timeseries.js +11 -10
  257. package/dist/widgets/timeseries.js.map +1 -1
  258. package/dist/widgets/utils.js +8 -7
  259. package/dist/widgets/utils.js.map +1 -1
  260. package/dist/widgets-v2/actions.js +43 -0
  261. package/dist/widgets-v2/actions.js.map +1 -0
  262. package/dist/widgets-v2/bar.js +327 -0
  263. package/dist/widgets-v2/bar.js.map +1 -0
  264. package/dist/widgets-v2/category.js +104 -0
  265. package/dist/widgets-v2/category.js.map +1 -0
  266. package/dist/widgets-v2/echart.js +57 -0
  267. package/dist/widgets-v2/echart.js.map +1 -0
  268. package/dist/widgets-v2/formula.js +74 -0
  269. package/dist/widgets-v2/formula.js.map +1 -0
  270. package/dist/widgets-v2/histogram.js +350 -0
  271. package/dist/widgets-v2/histogram.js.map +1 -0
  272. package/dist/widgets-v2/markdown.js +68 -0
  273. package/dist/widgets-v2/markdown.js.map +1 -0
  274. package/dist/widgets-v2/pie.js +381 -0
  275. package/dist/widgets-v2/pie.js.map +1 -0
  276. package/dist/widgets-v2/range.js +52 -0
  277. package/dist/widgets-v2/range.js.map +1 -0
  278. package/dist/widgets-v2/scatterplot.js +405 -0
  279. package/dist/widgets-v2/scatterplot.js.map +1 -0
  280. package/dist/widgets-v2/spread.js +72 -0
  281. package/dist/widgets-v2/spread.js.map +1 -0
  282. package/dist/widgets-v2/stores.js +42 -0
  283. package/dist/widgets-v2/stores.js.map +1 -0
  284. package/dist/widgets-v2/table.js +78 -0
  285. package/dist/widgets-v2/table.js.map +1 -0
  286. package/dist/widgets-v2/timeseries.js +352 -0
  287. package/dist/widgets-v2/timeseries.js.map +1 -0
  288. package/dist/widgets-v2/utils.js +7 -0
  289. package/dist/widgets-v2/utils.js.map +1 -0
  290. package/dist/widgets-v2.js +953 -0
  291. package/dist/widgets-v2.js.map +1 -0
  292. package/package.json +73 -5
  293. package/src/components/lasso-tool/chip.test.tsx +176 -0
  294. package/src/components/lasso-tool/lasso-tool-inline.test.tsx +171 -0
  295. package/src/components/lasso-tool/lasso-tool.test.tsx +198 -0
  296. package/src/components/list-data/list-data.test.tsx +73 -0
  297. package/src/components/no-data-alert/no-data-alert.test.tsx +38 -0
  298. package/src/components/responsive-drawer/responsive-drawer.test.tsx +68 -0
  299. package/src/widgets/actions/brush-toggle/brush-overlay.test.tsx +465 -0
  300. package/src/widgets/actions/brush-toggle/brush-overlay.tsx +24 -2
  301. package/src/widgets/actions/brush-toggle/brush-toggle.test.tsx +208 -0
  302. package/src/widgets/actions/change-column/change-column-dnd.test.tsx +193 -0
  303. package/src/widgets/actions/change-column/sortable-column-item.test.tsx +124 -0
  304. package/src/widgets/actions/zoom-toggle/zoom-toggle.test.tsx +322 -0
  305. package/src/widgets/category/components/category-rows.test.tsx +213 -0
  306. package/src/widgets/echart/utils.test.ts +277 -0
  307. package/src/widgets/formula/config.test.ts +37 -0
  308. package/src/widgets/histogram/config.ts +1 -3
  309. package/src/widgets/range/components/range-item.test.tsx +243 -0
  310. package/src/widgets/stores/widget-store-branches.test.ts +275 -0
  311. package/src/widgets/table/config.test.ts +65 -0
  312. package/src/widgets/utils/chart-config/option-builders.test.ts +188 -0
  313. package/src/widgets-v2/PERFORMANCE.md +189 -0
  314. package/src/widgets-v2/actions/brush-toggle/brush-toggle.test.tsx +180 -0
  315. package/src/widgets-v2/actions/brush-toggle/brush-toggle.tsx +154 -0
  316. package/src/widgets-v2/actions/brush-toggle/index.ts +3 -0
  317. package/src/widgets-v2/actions/brush-toggle/labels.ts +9 -0
  318. package/src/widgets-v2/actions/brush-toggle/style.ts +11 -0
  319. package/src/widgets-v2/actions/brush-toggle/transforms.test.ts +47 -0
  320. package/src/widgets-v2/actions/brush-toggle/transforms.ts +31 -0
  321. package/src/widgets-v2/actions/change-column/change-column-icon.tsx +14 -0
  322. package/src/widgets-v2/actions/change-column/change-column.test.tsx +59 -0
  323. package/src/widgets-v2/actions/change-column/change-column.tsx +180 -0
  324. package/src/widgets-v2/actions/change-column/index.ts +7 -0
  325. package/src/widgets-v2/actions/change-column/labels.ts +9 -0
  326. package/src/widgets-v2/actions/change-column/sortable-column-item.tsx +56 -0
  327. package/src/widgets-v2/actions/change-column/style.ts +32 -0
  328. package/src/widgets-v2/actions/change-column/types.ts +11 -0
  329. package/src/widgets-v2/actions/download/download.test.tsx +327 -0
  330. package/src/widgets-v2/actions/download/download.tsx +144 -0
  331. package/src/widgets-v2/actions/download/exports.test.tsx +198 -0
  332. package/src/widgets-v2/actions/download/exports.ts +115 -0
  333. package/src/widgets-v2/actions/download/icons.tsx +26 -0
  334. package/src/widgets-v2/actions/download/index.ts +13 -0
  335. package/src/widgets-v2/actions/download/labels.ts +16 -0
  336. package/src/widgets-v2/actions/download/png-item.test.tsx +72 -0
  337. package/src/widgets-v2/actions/download/png-item.tsx +52 -0
  338. package/src/widgets-v2/actions/download/style.ts +3 -0
  339. package/src/widgets-v2/actions/download/types.ts +32 -0
  340. package/src/widgets-v2/actions/fullscreen/fullscreen.test.tsx +150 -0
  341. package/src/widgets-v2/actions/fullscreen/fullscreen.tsx +230 -0
  342. package/src/widgets-v2/actions/fullscreen/index.ts +7 -0
  343. package/src/widgets-v2/actions/fullscreen/labels.ts +9 -0
  344. package/src/widgets-v2/actions/fullscreen/style.ts +59 -0
  345. package/src/widgets-v2/actions/fullscreen/types.ts +15 -0
  346. package/src/widgets-v2/actions/index.ts +82 -0
  347. package/src/widgets-v2/actions/lock-selection/index.ts +10 -0
  348. package/src/widgets-v2/actions/lock-selection/labels.ts +11 -0
  349. package/src/widgets-v2/actions/lock-selection/lock-selection.test.tsx +187 -0
  350. package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +130 -0
  351. package/src/widgets-v2/actions/lock-selection/style.ts +11 -0
  352. package/src/widgets-v2/actions/lock-selection/transforms.ts +27 -0
  353. package/src/widgets-v2/actions/relative-data/index.ts +3 -0
  354. package/src/widgets-v2/actions/relative-data/labels.ts +9 -0
  355. package/src/widgets-v2/actions/relative-data/relative-data.test.tsx +71 -0
  356. package/src/widgets-v2/actions/relative-data/relative-data.tsx +107 -0
  357. package/src/widgets-v2/actions/relative-data/style.ts +11 -0
  358. package/src/widgets-v2/actions/relative-data/transforms.test.ts +151 -0
  359. package/src/widgets-v2/actions/relative-data/transforms.ts +70 -0
  360. package/src/widgets-v2/actions/searcher/filter.ts +28 -0
  361. package/src/widgets-v2/actions/searcher/index.ts +8 -0
  362. package/src/widgets-v2/actions/searcher/labels.ts +13 -0
  363. package/src/widgets-v2/actions/searcher/searcher-toggle.tsx +91 -0
  364. package/src/widgets-v2/actions/searcher/searcher.test.tsx +92 -0
  365. package/src/widgets-v2/actions/searcher/searcher.tsx +112 -0
  366. package/src/widgets-v2/actions/searcher/style.ts +15 -0
  367. package/src/widgets-v2/actions/stack-toggle/index.ts +3 -0
  368. package/src/widgets-v2/actions/stack-toggle/labels.ts +9 -0
  369. package/src/widgets-v2/actions/stack-toggle/stack-toggle.test.tsx +61 -0
  370. package/src/widgets-v2/actions/stack-toggle/stack-toggle.tsx +54 -0
  371. package/src/widgets-v2/actions/stack-toggle/style.ts +11 -0
  372. package/src/widgets-v2/actions/stack-toggle/transforms.test.ts +43 -0
  373. package/src/widgets-v2/actions/stack-toggle/transforms.ts +25 -0
  374. package/src/widgets-v2/actions/zoom-toggle/index.ts +9 -0
  375. package/src/widgets-v2/actions/zoom-toggle/labels.ts +9 -0
  376. package/src/widgets-v2/actions/zoom-toggle/style.ts +11 -0
  377. package/src/widgets-v2/actions/zoom-toggle/transforms.test.ts +148 -0
  378. package/src/widgets-v2/actions/zoom-toggle/transforms.ts +171 -0
  379. package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.test.tsx +107 -0
  380. package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.tsx +106 -0
  381. package/src/widgets-v2/bar/download.test.tsx +91 -0
  382. package/src/widgets-v2/bar/download.tsx +66 -0
  383. package/src/widgets-v2/bar/index.ts +10 -0
  384. package/src/widgets-v2/bar/options.test.ts +317 -0
  385. package/src/widgets-v2/bar/options.ts +326 -0
  386. package/src/widgets-v2/bar/skeleton.test.tsx +19 -0
  387. package/src/widgets-v2/bar/skeleton.tsx +69 -0
  388. package/src/widgets-v2/bar/types.ts +46 -0
  389. package/src/widgets-v2/category/category-ui.test.tsx +746 -0
  390. package/src/widgets-v2/category/category-ui.tsx +389 -0
  391. package/src/widgets-v2/category/category.relative-data.test.tsx +107 -0
  392. package/src/widgets-v2/category/category.stack-toggle.test.tsx +85 -0
  393. package/src/widgets-v2/category/category.test.tsx +305 -0
  394. package/src/widgets-v2/category/category.tsx +121 -0
  395. package/src/widgets-v2/category/components/category-bar-stacked.test.tsx +121 -0
  396. package/src/widgets-v2/category/components/category-bar-stacked.tsx +73 -0
  397. package/src/widgets-v2/category/components/category-bar.test.tsx +64 -0
  398. package/src/widgets-v2/category/components/category-bar.tsx +49 -0
  399. package/src/widgets-v2/category/components/category-legend.test.tsx +51 -0
  400. package/src/widgets-v2/category/components/category-legend.tsx +39 -0
  401. package/src/widgets-v2/category/components/category-row-multi.tsx +86 -0
  402. package/src/widgets-v2/category/components/category-row-other.test.tsx +28 -0
  403. package/src/widgets-v2/category/components/category-row-other.tsx +33 -0
  404. package/src/widgets-v2/category/components/category-row-single.tsx +76 -0
  405. package/src/widgets-v2/category/components/category-row-stacked.test.tsx +244 -0
  406. package/src/widgets-v2/category/components/category-row-stacked.tsx +99 -0
  407. package/src/widgets-v2/category/download.test.ts +71 -0
  408. package/src/widgets-v2/category/download.ts +54 -0
  409. package/src/widgets-v2/category/index.ts +32 -0
  410. package/src/widgets-v2/category/skeleton.test.tsx +26 -0
  411. package/src/widgets-v2/category/skeleton.tsx +74 -0
  412. package/src/widgets-v2/category/style.ts +290 -0
  413. package/src/widgets-v2/category/types.ts +54 -0
  414. package/src/widgets-v2/echart/echart-ui.test.tsx +232 -0
  415. package/src/widgets-v2/echart/echart-ui.tsx +184 -0
  416. package/src/widgets-v2/echart/echart.test.tsx +229 -0
  417. package/src/widgets-v2/echart/echart.tsx +199 -0
  418. package/src/widgets-v2/echart/index.ts +22 -0
  419. package/src/widgets-v2/echart/shared-resize-observer.test.ts +91 -0
  420. package/src/widgets-v2/echart/shared-resize-observer.ts +56 -0
  421. package/src/widgets-v2/echart/style.ts +8 -0
  422. package/src/widgets-v2/echart/use-chart-selection.test.tsx +118 -0
  423. package/src/widgets-v2/echart/use-chart-selection.ts +115 -0
  424. package/src/widgets-v2/formula/delta.tsx +61 -0
  425. package/src/widgets-v2/formula/download.test.tsx +65 -0
  426. package/src/widgets-v2/formula/download.tsx +69 -0
  427. package/src/widgets-v2/formula/formula-ui.test.tsx +91 -0
  428. package/src/widgets-v2/formula/formula-ui.tsx +66 -0
  429. package/src/widgets-v2/formula/formula.test.tsx +50 -0
  430. package/src/widgets-v2/formula/formula.tsx +34 -0
  431. package/src/widgets-v2/formula/index.ts +17 -0
  432. package/src/widgets-v2/formula/note.tsx +25 -0
  433. package/src/widgets-v2/formula/prefix.tsx +25 -0
  434. package/src/widgets-v2/formula/series.tsx +67 -0
  435. package/src/widgets-v2/formula/skeleton.test.tsx +21 -0
  436. package/src/widgets-v2/formula/skeleton.tsx +27 -0
  437. package/src/widgets-v2/formula/style.ts +31 -0
  438. package/src/widgets-v2/formula/subcomponents.test.tsx +107 -0
  439. package/src/widgets-v2/formula/suffix.tsx +25 -0
  440. package/src/widgets-v2/formula/types.ts +44 -0
  441. package/src/widgets-v2/formula/value.tsx +31 -0
  442. package/src/widgets-v2/histogram/download.test.ts +94 -0
  443. package/src/widgets-v2/histogram/download.ts +60 -0
  444. package/src/widgets-v2/histogram/index.ts +10 -0
  445. package/src/widgets-v2/histogram/options.test.ts +304 -0
  446. package/src/widgets-v2/histogram/options.ts +337 -0
  447. package/src/widgets-v2/histogram/skeleton.test.tsx +16 -0
  448. package/src/widgets-v2/histogram/skeleton.tsx +70 -0
  449. package/src/widgets-v2/histogram/transforms.test.ts +46 -0
  450. package/src/widgets-v2/histogram/transforms.ts +30 -0
  451. package/src/widgets-v2/histogram/types.ts +51 -0
  452. package/src/widgets-v2/index.ts +201 -0
  453. package/src/widgets-v2/markdown/download.test.ts +66 -0
  454. package/src/widgets-v2/markdown/download.ts +53 -0
  455. package/src/widgets-v2/markdown/index.ts +6 -0
  456. package/src/widgets-v2/markdown/markdown-content.test.tsx +155 -0
  457. package/src/widgets-v2/markdown/markdown-content.tsx +72 -0
  458. package/src/widgets-v2/markdown/markdown-ui.test.tsx +75 -0
  459. package/src/widgets-v2/markdown/markdown-ui.tsx +55 -0
  460. package/src/widgets-v2/markdown/markdown.test.tsx +39 -0
  461. package/src/widgets-v2/markdown/markdown.tsx +17 -0
  462. package/src/widgets-v2/markdown/skeleton.test.tsx +15 -0
  463. package/src/widgets-v2/markdown/skeleton.tsx +32 -0
  464. package/src/widgets-v2/markdown/style.ts +53 -0
  465. package/src/widgets-v2/markdown/types.ts +4 -0
  466. package/src/widgets-v2/note/labels.ts +9 -0
  467. package/src/widgets-v2/note/style.ts +26 -0
  468. package/src/widgets-v2/note/widget-note.test.tsx +158 -0
  469. package/src/widgets-v2/note/widget-note.tsx +172 -0
  470. package/src/widgets-v2/pie/download.test.ts +78 -0
  471. package/src/widgets-v2/pie/download.ts +55 -0
  472. package/src/widgets-v2/pie/index.ts +10 -0
  473. package/src/widgets-v2/pie/options.test.ts +585 -0
  474. package/src/widgets-v2/pie/options.ts +509 -0
  475. package/src/widgets-v2/pie/skeleton.test.tsx +17 -0
  476. package/src/widgets-v2/pie/skeleton.tsx +32 -0
  477. package/src/widgets-v2/pie/types.ts +55 -0
  478. package/src/widgets-v2/provider/widget-provider.test.tsx +119 -0
  479. package/src/widgets-v2/provider/widget-provider.tsx +111 -0
  480. package/src/widgets-v2/range/index.ts +4 -0
  481. package/src/widgets-v2/range/range-ui.test.tsx +130 -0
  482. package/src/widgets-v2/range/range-ui.tsx +211 -0
  483. package/src/widgets-v2/range/range.test.tsx +68 -0
  484. package/src/widgets-v2/range/range.tsx +46 -0
  485. package/src/widgets-v2/range/skeleton.test.tsx +17 -0
  486. package/src/widgets-v2/range/skeleton.tsx +47 -0
  487. package/src/widgets-v2/range/style.ts +41 -0
  488. package/src/widgets-v2/range/types.ts +37 -0
  489. package/src/widgets-v2/scatterplot/download.test.ts +71 -0
  490. package/src/widgets-v2/scatterplot/download.ts +54 -0
  491. package/src/widgets-v2/scatterplot/index.ts +11 -0
  492. package/src/widgets-v2/scatterplot/options.test.ts +399 -0
  493. package/src/widgets-v2/scatterplot/options.ts +421 -0
  494. package/src/widgets-v2/scatterplot/skeleton.test.tsx +17 -0
  495. package/src/widgets-v2/scatterplot/skeleton.tsx +84 -0
  496. package/src/widgets-v2/scatterplot/transforms.test.ts +97 -0
  497. package/src/widgets-v2/scatterplot/transforms.ts +38 -0
  498. package/src/widgets-v2/scatterplot/types.ts +55 -0
  499. package/src/widgets-v2/selection-summary/labels.ts +11 -0
  500. package/src/widgets-v2/selection-summary/selection-summary.test.tsx +53 -0
  501. package/src/widgets-v2/selection-summary/selection-summary.tsx +62 -0
  502. package/src/widgets-v2/selection-summary/style.ts +23 -0
  503. package/src/widgets-v2/spread/download.test.ts +64 -0
  504. package/src/widgets-v2/spread/download.ts +59 -0
  505. package/src/widgets-v2/spread/index.ts +6 -0
  506. package/src/widgets-v2/spread/separator.tsx +11 -0
  507. package/src/widgets-v2/spread/skeleton.test.tsx +17 -0
  508. package/src/widgets-v2/spread/skeleton.tsx +38 -0
  509. package/src/widgets-v2/spread/spread-ui.test.tsx +108 -0
  510. package/src/widgets-v2/spread/spread-ui.tsx +52 -0
  511. package/src/widgets-v2/spread/spread.test.tsx +50 -0
  512. package/src/widgets-v2/spread/spread.tsx +31 -0
  513. package/src/widgets-v2/spread/types.ts +27 -0
  514. package/src/widgets-v2/state/labels.test.ts +33 -0
  515. package/src/widgets-v2/state/labels.ts +20 -0
  516. package/src/widgets-v2/state/style.ts +25 -0
  517. package/src/widgets-v2/state/widget-state.test.tsx +294 -0
  518. package/src/widgets-v2/state/widget-state.tsx +184 -0
  519. package/src/widgets-v2/stores/index.ts +49 -0
  520. package/src/widgets-v2/stores/pipeline-middleware.test.ts +187 -0
  521. package/src/widgets-v2/stores/pipeline-middleware.ts +91 -0
  522. package/src/widgets-v2/stores/transforms.test.ts +162 -0
  523. package/src/widgets-v2/stores/transforms.ts +70 -0
  524. package/src/widgets-v2/stores/types.ts +64 -0
  525. package/src/widgets-v2/stores/use-echart-instance.test.tsx +91 -0
  526. package/src/widgets-v2/stores/use-echart-instance.ts +29 -0
  527. package/src/widgets-v2/stores/use-transform-enabled.test.tsx +127 -0
  528. package/src/widgets-v2/stores/use-transform-enabled.ts +25 -0
  529. package/src/widgets-v2/stores/use-transform.test.tsx +262 -0
  530. package/src/widgets-v2/stores/use-transform.ts +158 -0
  531. package/src/widgets-v2/stores/widget-context.test.tsx +58 -0
  532. package/src/widgets-v2/stores/widget-context.ts +15 -0
  533. package/src/widgets-v2/stores/widget-store-registry.test.ts +292 -0
  534. package/src/widgets-v2/stores/widget-store-registry.ts +248 -0
  535. package/src/widgets-v2/subheader/style.ts +12 -0
  536. package/src/widgets-v2/subheader/subheader.test.tsx +30 -0
  537. package/src/widgets-v2/subheader/subheader.tsx +16 -0
  538. package/src/widgets-v2/table/download.test.ts +75 -0
  539. package/src/widgets-v2/table/download.ts +47 -0
  540. package/src/widgets-v2/table/helpers.test.ts +214 -0
  541. package/src/widgets-v2/table/helpers.ts +136 -0
  542. package/src/widgets-v2/table/index.ts +23 -0
  543. package/src/widgets-v2/table/labels.tsx +41 -0
  544. package/src/widgets-v2/table/skeleton.test.tsx +26 -0
  545. package/src/widgets-v2/table/skeleton.tsx +65 -0
  546. package/src/widgets-v2/table/style.ts +46 -0
  547. package/src/widgets-v2/table/table-ui.test.tsx +200 -0
  548. package/src/widgets-v2/table/table-ui.tsx +331 -0
  549. package/src/widgets-v2/table/table.test.tsx +119 -0
  550. package/src/widgets-v2/table/table.tsx +174 -0
  551. package/src/widgets-v2/table/types.ts +44 -0
  552. package/src/widgets-v2/test-utils.ts +107 -0
  553. package/src/widgets-v2/timeseries/download.test.ts +95 -0
  554. package/src/widgets-v2/timeseries/download.ts +86 -0
  555. package/src/widgets-v2/timeseries/index.ts +10 -0
  556. package/src/widgets-v2/timeseries/options.test.ts +379 -0
  557. package/src/widgets-v2/timeseries/options.ts +341 -0
  558. package/src/widgets-v2/timeseries/skeleton.test.tsx +13 -0
  559. package/src/widgets-v2/timeseries/skeleton.tsx +76 -0
  560. package/src/widgets-v2/timeseries/types.ts +61 -0
  561. package/src/widgets-v2/toolbox/labels.ts +9 -0
  562. package/src/widgets-v2/toolbox/style.ts +33 -0
  563. package/src/widgets-v2/toolbox/toolbox.test.tsx +200 -0
  564. package/src/widgets-v2/toolbox/toolbox.tsx +309 -0
  565. package/src/widgets-v2/utils/data-zoom-layout.ts +26 -0
  566. package/src/widgets-v2/utils/index.ts +2 -0
  567. package/src/widgets-v2/utils/merge-options.test.ts +52 -0
  568. package/src/widgets-v2/utils/merge-options.ts +50 -0
  569. package/src/widgets-v2/wrapper/index.ts +14 -0
  570. package/src/widgets-v2/wrapper/labels.ts +11 -0
  571. package/src/widgets-v2/wrapper/style.ts +134 -0
  572. package/src/widgets-v2/wrapper/widget-actions.test.tsx +52 -0
  573. package/src/widgets-v2/wrapper/widget-actions.tsx +43 -0
  574. package/src/widgets-v2/wrapper/widget-content.test.tsx +27 -0
  575. package/src/widgets-v2/wrapper/widget-content.tsx +29 -0
  576. package/src/widgets-v2/wrapper/widget-wrapper.test.tsx +159 -0
  577. package/src/widgets-v2/wrapper/widget-wrapper.tsx +178 -0
  578. package/dist/styles-BYTyKQFP.js.map +0 -1
@@ -0,0 +1,201 @@
1
+ // ─── Internal imports (used to assemble the curated `Widget` const) ─────────
2
+ import { Provider } from './provider/widget-provider'
3
+ import {
4
+ Wrapper,
5
+ Actions,
6
+ Options,
7
+ Content,
8
+ Footer,
9
+ DEFAULT_WRAPPER_LABELS,
10
+ } from './wrapper'
11
+ import { Subheader } from './subheader/subheader'
12
+ import { State } from './state/widget-state'
13
+ import { DEFAULT_STATE_LABELS } from './state/labels'
14
+ import { SelectionSummary } from './selection-summary/selection-summary'
15
+ import { DEFAULT_SELECTION_SUMMARY_LABELS } from './selection-summary/labels'
16
+ import { Toolbox } from './toolbox/toolbox'
17
+ import { DEFAULT_TOOLBOX_LABELS } from './toolbox/labels'
18
+ import { Echart, EchartUI, DEFAULT_INIT_OPTS } from './echart'
19
+ import { Note } from './note/widget-note'
20
+ import { DEFAULT_NOTE_LABELS } from './note/labels'
21
+ import {
22
+ Searcher,
23
+ SearcherToggle,
24
+ StackToggle,
25
+ ZoomToggle,
26
+ BrushToggle,
27
+ RelativeData,
28
+ Download,
29
+ FullScreen,
30
+ LockSelection,
31
+ ChangeColumn,
32
+ } from './actions'
33
+ import { Formula, FormulaUI } from './formula'
34
+ import { Markdown, MarkdownUI } from './markdown'
35
+ import { Spread, SpreadUI } from './spread'
36
+ import { Range, RangeUI } from './range'
37
+ import { Category, CategoryUI } from './category'
38
+ import { Table, TableUI } from './table'
39
+
40
+ /**
41
+ * Curated namespace export — the only way to reach v2 widget components.
42
+ * Consumers import the const and access components via property access:
43
+ *
44
+ * ```tsx
45
+ * import { Widget } from '@carto/ps-react-ui/widgets-v2'
46
+ *
47
+ * <Widget.Provider id={id} data={data}>
48
+ * <Widget.Wrapper title='Sales'>
49
+ * <Widget.Content>
50
+ * <Widget.State skeleton={<BarSkeleton />}>
51
+ * <Widget.Echart optionFactory={optionFactory} />
52
+ * </Widget.State>
53
+ * </Widget.Content>
54
+ * </Widget.Wrapper>
55
+ * </Widget.Provider>
56
+ * ```
57
+ *
58
+ * Component identifiers are not surfaced as separate named exports — Types
59
+ * (props, data shapes, label types, default-label consts) and per-widget
60
+ * subpath entries (`@carto/ps-react-ui/widgets-v2/bar`, `…/category`,
61
+ * `…/table`, `…/actions`, `…/stores`, `…/utils`, etc.) remain available for
62
+ * direct import where needed.
63
+ */
64
+ export const Widget = {
65
+ // Composition shell
66
+ Provider,
67
+ Wrapper,
68
+ Actions,
69
+ Options,
70
+ Content,
71
+ Footer,
72
+ Subheader,
73
+ State,
74
+ SelectionSummary,
75
+ Toolbox,
76
+ Note,
77
+
78
+ // ECharts bridge
79
+ Echart,
80
+ EchartUI,
81
+
82
+ // Actions
83
+ Searcher,
84
+ SearcherToggle,
85
+ StackToggle,
86
+ ZoomToggle,
87
+ BrushToggle,
88
+ RelativeData,
89
+ Download,
90
+ FullScreen,
91
+ LockSelection,
92
+ ChangeColumn,
93
+
94
+ // Widget primitives (renderer bridges + pure UI). Pre-composed widget
95
+ // modules (Bar, FormulaWidget, TableWidget, etc.) are application-level
96
+ // compositions of these primitives and live outside the library —
97
+ // see `apps/storybook/stories/modules/widgets/` for canonical examples.
98
+ Formula,
99
+ FormulaUI,
100
+ Markdown,
101
+ MarkdownUI,
102
+ Spread,
103
+ SpreadUI,
104
+ Range,
105
+ RangeUI,
106
+ Category,
107
+ CategoryUI,
108
+ Table,
109
+ TableUI,
110
+ } as const
111
+
112
+ // ─── Default-label consts ──────────────────────────────────────────────────
113
+ // Exported separately so consumers can build customized label sets via spread.
114
+ export {
115
+ DEFAULT_WRAPPER_LABELS,
116
+ DEFAULT_STATE_LABELS,
117
+ DEFAULT_SELECTION_SUMMARY_LABELS,
118
+ DEFAULT_TOOLBOX_LABELS,
119
+ DEFAULT_NOTE_LABELS,
120
+ DEFAULT_INIT_OPTS,
121
+ }
122
+
123
+ // ─── Types ─────────────────────────────────────────────────────────────────
124
+ // Types are erased at runtime so they can't live on the `Widget` const.
125
+ // They are re-exported here for direct import by consumers.
126
+
127
+ export type { ProviderProps } from './provider/widget-provider'
128
+ export type {
129
+ WrapperProps,
130
+ ActionsProps,
131
+ OptionsProps,
132
+ ContentProps,
133
+ FooterProps,
134
+ WrapperLabels,
135
+ } from './wrapper'
136
+ export type { SubheaderProps } from './subheader/subheader'
137
+ export type { StateProps } from './state/widget-state'
138
+ export type { StateLabels } from './state/labels'
139
+ export type { SelectionSummaryProps } from './selection-summary/selection-summary'
140
+ export type { SelectionSummaryLabels } from './selection-summary/labels'
141
+ export type { ToolboxProps } from './toolbox/toolbox'
142
+ export type { ToolboxLabels } from './toolbox/labels'
143
+ export type { EchartProps, EchartUIProps, EchartsEventHandler } from './echart'
144
+ export type { NoteProps, NoteMarkdownProps } from './note/widget-note'
145
+ export type { NoteLabels } from './note/labels'
146
+
147
+ // Action types
148
+ export type {
149
+ SearcherProps,
150
+ SearcherToggleProps,
151
+ StackToggleProps,
152
+ ZoomToggleProps,
153
+ BrushToggleProps,
154
+ RelativeDataProps,
155
+ DownloadProps,
156
+ DownloadItem,
157
+ FullScreenTriggerProps,
158
+ FullScreenSlotProps,
159
+ LockSelectionProps,
160
+ LockSelectionKey,
161
+ ChangeColumnProps,
162
+ ChangeColumnItem,
163
+ } from './actions'
164
+
165
+ // Widget primitive types
166
+ export type {
167
+ FormulaUIProps,
168
+ FormulaDataItem,
169
+ FormulaWidgetData,
170
+ } from './formula'
171
+ export type { MarkdownUIProps, MarkdownWidgetData } from './markdown'
172
+ export type { PieDatum, PieWidgetData } from './pie'
173
+ export type { TimeseriesDatum, TimeseriesWidgetData } from './timeseries'
174
+ export type { ScatterplotDatum, ScatterplotWidgetData } from './scatterplot'
175
+ export type { SpreadUIProps, SpreadDataItem, SpreadWidgetData } from './spread'
176
+ export type {
177
+ RangeProps,
178
+ RangeUIProps,
179
+ RangeDataItem,
180
+ RangeWidgetData,
181
+ RangeItemValue,
182
+ } from './range'
183
+ export type {
184
+ CategoryProps,
185
+ CategoryUIProps,
186
+ CategoryDataItem,
187
+ CategoryWidgetData,
188
+ CategoryKey,
189
+ CategorySeriesConfig,
190
+ CategoryLabels,
191
+ } from './category'
192
+ export type {
193
+ TableProps,
194
+ TableUIProps,
195
+ TableColumn,
196
+ TableRow,
197
+ TableWidgetData,
198
+ TableWidgetState,
199
+ TableSortDirection,
200
+ TableSortState,
201
+ } from './table'
@@ -0,0 +1,66 @@
1
+ import { describe, it, expect, beforeEach, vi } from 'vitest'
2
+ import { createMarkdownDownloadConfig } from './download'
3
+
4
+ let mdText = ''
5
+
6
+ let revokeSpy: ReturnType<typeof vi.spyOn>
7
+
8
+ beforeEach(() => {
9
+ mdText = ''
10
+ vi.spyOn(URL, 'createObjectURL').mockReturnValue('blob:mock')
11
+ revokeSpy = vi
12
+ .spyOn(URL, 'revokeObjectURL')
13
+ .mockImplementation(() => undefined)
14
+ const RealBlob = global.Blob
15
+ vi.stubGlobal(
16
+ 'Blob',
17
+ class extends RealBlob {
18
+ constructor(parts: BlobPart[], opts?: BlobPropertyBag) {
19
+ mdText = typeof parts[0] === 'string' ? parts[0] : ''
20
+ super(parts, opts)
21
+ }
22
+ },
23
+ )
24
+ })
25
+
26
+ describe('createMarkdownDownloadConfig', () => {
27
+ it('returns a single .md item by default', () => {
28
+ const items = createMarkdownDownloadConfig({
29
+ filename: 'doc',
30
+ getData: () => ({ content: '# hi' }),
31
+ })
32
+ expect(items.map((i) => i.id)).toEqual(['md'])
33
+ })
34
+
35
+ it('prepends PNG when getCaptureEl is provided', () => {
36
+ const items = createMarkdownDownloadConfig({
37
+ filename: 'doc',
38
+ getData: () => ({ content: '' }),
39
+ getCaptureEl: () => document.createElement('div'),
40
+ })
41
+ expect(items.map((i) => i.id)).toEqual(['png', 'md'])
42
+ })
43
+
44
+ it('md resolve writes the source verbatim with a .md filename', async () => {
45
+ const items = createMarkdownDownloadConfig({
46
+ filename: 'doc',
47
+ getData: () => ({ content: '# title\n\nbody' }),
48
+ })
49
+ const handle = await items.find((i) => i.id === 'md')!.resolve()
50
+ expect(handle.url).toBe('blob:mock')
51
+ expect(handle.filename).toBe('doc.md')
52
+ expect(mdText).toBe('# title\n\nbody')
53
+ handle.revoke?.()
54
+ expect(revokeSpy).toHaveBeenCalledWith('blob:mock')
55
+ })
56
+
57
+ it('md resolve falls back to empty content when data.content is missing', async () => {
58
+ const items = createMarkdownDownloadConfig({
59
+ filename: 'doc',
60
+ // missing content field — exercise the `?? ''` branch
61
+ getData: () => ({}) as { content: string },
62
+ })
63
+ await items.find((i) => i.id === 'md')!.resolve()
64
+ expect(mdText).toBe('')
65
+ })
66
+ })
@@ -0,0 +1,53 @@
1
+ import {
2
+ buildPngDownloadItem,
3
+ toCsvString,
4
+ triggerLinkDownload,
5
+ type DownloadItem,
6
+ } from '../actions/download'
7
+ import type { MarkdownWidgetData } from './types'
8
+
9
+ /**
10
+ * Download menu items for the Markdown widget. Always includes a `.md`
11
+ * item that saves the markdown source verbatim. When `getCaptureEl` is
12
+ * supplied, prepends a PNG item that rasterises the captured element via
13
+ * `html2canvas`.
14
+ */
15
+ export function createMarkdownDownloadConfig(args: {
16
+ filename: string
17
+ getData: () => MarkdownWidgetData
18
+ getCaptureEl?: () => HTMLElement | null
19
+ pngPixelRatio?: number
20
+ pngBackgroundColor?: string | null
21
+ }): DownloadItem[] {
22
+ const items: DownloadItem[] = []
23
+ if (args.getCaptureEl) {
24
+ items.push(
25
+ buildPngDownloadItem({
26
+ filename: args.filename,
27
+ getCaptureEl: args.getCaptureEl,
28
+ pixelRatio: args.pngPixelRatio,
29
+ backgroundColor: args.pngBackgroundColor,
30
+ }),
31
+ )
32
+ }
33
+ items.push({
34
+ id: 'md',
35
+ label: 'Download as Markdown',
36
+ resolve: () => {
37
+ const data = args.getData()
38
+ const blob = new Blob([data.content ?? ''], {
39
+ type: 'text/markdown;charset=utf-8;',
40
+ })
41
+ const url = URL.createObjectURL(blob)
42
+ return Promise.resolve({
43
+ url,
44
+ filename: `${args.filename}.md`,
45
+ revoke: () => URL.revokeObjectURL(url),
46
+ })
47
+ },
48
+ })
49
+ return items
50
+ }
51
+
52
+ // Re-export pure helpers consumers may want when building a custom Download item.
53
+ export { toCsvString, triggerLinkDownload }
@@ -0,0 +1,6 @@
1
+ export { Markdown } from './markdown'
2
+ export { MarkdownUI, type MarkdownUIProps } from './markdown-ui'
3
+ export { MarkdownContent, type MarkdownContentProps } from './markdown-content'
4
+ export { MarkdownSkeleton, type MarkdownSkeletonProps } from './skeleton'
5
+ export { createMarkdownDownloadConfig } from './download'
6
+ export type { MarkdownWidgetData } from './types'
@@ -0,0 +1,155 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render } from '@testing-library/react'
3
+ import { MarkdownContent } from './markdown-content'
4
+
5
+ describe('<MarkdownContent>', () => {
6
+ it('renders markdown with the safe defaults (no html, no images)', () => {
7
+ const { container } = render(
8
+ <MarkdownContent
9
+ content={
10
+ '# Title\n\n![alt](https://example.com/img.png)\n\n<span>raw</span>'
11
+ }
12
+ />,
13
+ )
14
+ // Image must NOT render — disallowedElements blocks it.
15
+ expect(container.querySelector('img')).toBeNull()
16
+ // Raw HTML escapes to text — span never gets parsed as an element.
17
+ expect(container.querySelector('span')).toBeNull()
18
+ // Heading still renders normally.
19
+ expect(container.textContent).toContain('Title')
20
+ })
21
+
22
+ it('renders images when allowImages=true', () => {
23
+ const { container } = render(
24
+ <MarkdownContent
25
+ content={'![alt](https://example.com/img.png)'}
26
+ allowImages
27
+ />,
28
+ )
29
+ const img = container.querySelector('img')
30
+ expect(img).not.toBeNull()
31
+ expect(img?.getAttribute('alt')).toBe('alt')
32
+ })
33
+
34
+ it('parses raw HTML when allowHtml=true', () => {
35
+ const { container } = render(
36
+ <MarkdownContent content={'<span>raw <em>html</em></span>'} allowHtml />,
37
+ )
38
+ // Both inline tags survive sanitization; the text content is preserved.
39
+ expect(container.querySelector('span')).not.toBeNull()
40
+ expect(container.querySelector('em')?.textContent).toBe('html')
41
+ expect(container.textContent).toContain('raw html')
42
+ })
43
+
44
+ describe('XSS hardening', () => {
45
+ it('drops <script> tags when allowHtml=true', () => {
46
+ const { container } = render(
47
+ <MarkdownContent
48
+ content={'<script>window.__xss=true</script>safe'}
49
+ allowHtml
50
+ allowImages
51
+ />,
52
+ )
53
+ expect(container.querySelector('script')).toBeNull()
54
+ expect(container.textContent).toContain('safe')
55
+ })
56
+
57
+ it('strips event handlers from <img>', () => {
58
+ const { container } = render(
59
+ <MarkdownContent
60
+ content={'<img src="https://example.com/x.png" onerror="alert(1)">'}
61
+ allowHtml
62
+ allowImages
63
+ />,
64
+ )
65
+ const img = container.querySelector('img')
66
+ expect(img).not.toBeNull()
67
+ expect(img?.getAttribute('onerror')).toBeNull()
68
+ })
69
+
70
+ it('drops <iframe> with srcdoc', () => {
71
+ const { container } = render(
72
+ <MarkdownContent
73
+ content={'<iframe srcdoc="<script>alert(1)</script>"></iframe>'}
74
+ allowHtml
75
+ allowImages
76
+ />,
77
+ )
78
+ expect(container.querySelector('iframe')).toBeNull()
79
+ })
80
+
81
+ it('drops <svg> with onload', () => {
82
+ const { container } = render(
83
+ <MarkdownContent
84
+ content={'<svg onload="alert(1)"><circle cx="5" cy="5" r="4"/></svg>'}
85
+ allowHtml
86
+ allowImages
87
+ />,
88
+ )
89
+ const svg = container.querySelector('svg')
90
+ // defaultSchema doesn't allowlist <svg>, so the element should be gone.
91
+ // Even if a future schema variant allows it, `onload` must not survive.
92
+ expect(svg?.getAttribute('onload') ?? null).toBeNull()
93
+ })
94
+
95
+ it('drops <base> tags that could rewrite relative URLs', () => {
96
+ const { container } = render(
97
+ <MarkdownContent
98
+ content={'<base href="https://attacker.example/">link'}
99
+ allowHtml
100
+ />,
101
+ )
102
+ expect(container.querySelector('base')).toBeNull()
103
+ })
104
+
105
+ it('strips href for javascript: URLs in markdown links', () => {
106
+ const { container } = render(
107
+ <MarkdownContent content={'[click](javascript:alert(1))'} />,
108
+ )
109
+ const a = container.querySelector('a')
110
+ // Either the anchor renders without `href` or with empty `href` — both
111
+ // are safe (no navigation). Concretely we assert no `javascript:` value.
112
+ expect(a?.getAttribute('href') ?? '').not.toMatch(/^javascript:/i)
113
+ })
114
+
115
+ it('strips href for data: URLs in markdown links (Note path)', () => {
116
+ const { container } = render(
117
+ <MarkdownContent
118
+ content={'[click](data:text/html,<script>alert(1)</script>)'}
119
+ />,
120
+ )
121
+ const a = container.querySelector('a')
122
+ expect(a?.getAttribute('href') ?? '').not.toMatch(/^data:/i)
123
+ })
124
+
125
+ it('strips data: URLs from <img src> on the rich path', () => {
126
+ const { container } = render(
127
+ <MarkdownContent
128
+ content={'![alt](data:image/svg+xml,<svg onload=alert(1)/>)'}
129
+ allowImages
130
+ />,
131
+ )
132
+ const img = container.querySelector('img')
133
+ expect(img?.getAttribute('src') ?? '').not.toMatch(/^data:/i)
134
+ })
135
+
136
+ it('preserves safe URLs (https, mailto, relative)', () => {
137
+ const { container } = render(
138
+ <MarkdownContent
139
+ content={
140
+ '[ext](https://example.com) [mail](mailto:a@b.co) [rel](./page) [hash](#x)'
141
+ }
142
+ />,
143
+ )
144
+ const links = Array.from(container.querySelectorAll('a')).map((a) =>
145
+ a.getAttribute('href'),
146
+ )
147
+ expect(links).toEqual([
148
+ 'https://example.com',
149
+ 'mailto:a@b.co',
150
+ './page',
151
+ '#x',
152
+ ])
153
+ })
154
+ })
155
+ })
@@ -0,0 +1,72 @@
1
+ import ReactMarkdown, { type Components } from 'react-markdown'
2
+ import rehypeRaw from 'rehype-raw'
3
+ import rehypeSanitize from 'rehype-sanitize'
4
+
5
+ export interface MarkdownContentProps {
6
+ /** Markdown source. */
7
+ content: string
8
+ /**
9
+ * Element overrides. Consumers (`MarkdownUI`, `Note`, …) supply their own
10
+ * typography / link styling here; the engine itself stays opinion-free.
11
+ */
12
+ components?: Components
13
+ /**
14
+ * When `true`, raw HTML in the source is rendered. Defaults to `false` so
15
+ * caption slots like `Note` stay safe-by-default; the document-style
16
+ * Markdown widget opts in.
17
+ */
18
+ allowHtml?: boolean
19
+ /**
20
+ * When `true`, `<img>` / `![alt](url)` markdown produces an `<img>` tag.
21
+ * Defaults to `false` so caption slots stay text-only by default.
22
+ */
23
+ allowImages?: boolean
24
+ }
25
+
26
+ // Allowlist of URL schemes considered safe for `<a href>` and `<img src>`.
27
+ // Anything outside this set (e.g. `data:`, `javascript:`, `vbscript:`) is
28
+ // stripped by `safeUrlTransform`. Belt-and-braces with `rehype-sanitize`'s
29
+ // `defaultSchema` (which already restricts protocols when raw HTML is parsed)
30
+ // — this layer also covers the `allowHtml=false` path, where the sanitizer
31
+ // doesn't run but `react-markdown`'s default `urlTransform` only blocks
32
+ // `javascript:`.
33
+ const SAFE_URL_PREFIX = /^(https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i
34
+
35
+ function safeUrlTransform(url: string): string {
36
+ const trimmed = (url ?? '').trim()
37
+ if (!trimmed) return ''
38
+ if (SAFE_URL_PREFIX.test(trimmed)) return url
39
+ return ''
40
+ }
41
+
42
+ /**
43
+ * Low-level Markdown rendering primitive. Wraps `react-markdown` with two
44
+ * opt-in capabilities (`allowHtml`, `allowImages`) and a consumer-supplied
45
+ * component map for typography. Both default OFF — Note-style consumers
46
+ * are safe-by-default; MarkdownUI opts both ON to render rich content.
47
+ *
48
+ * `allowHtml` plugs in `rehype-raw` so raw HTML nodes in the source are
49
+ * actually parsed, then `rehype-sanitize` with the default schema strips
50
+ * `<script>`, event handlers, and dangerous URL schemes from the parsed
51
+ * tree. `safeUrlTransform` is always applied as a second layer for markdown
52
+ * links/images on the `allowHtml=false` path.
53
+ */
54
+ export function MarkdownContent({
55
+ content,
56
+ components,
57
+ allowHtml = false,
58
+ allowImages = false,
59
+ }: MarkdownContentProps) {
60
+ const disallowed = allowImages ? undefined : ['img']
61
+ return (
62
+ <ReactMarkdown
63
+ components={components}
64
+ disallowedElements={disallowed}
65
+ skipHtml={!allowHtml}
66
+ rehypePlugins={allowHtml ? [rehypeRaw, rehypeSanitize] : undefined}
67
+ urlTransform={safeUrlTransform}
68
+ >
69
+ {content}
70
+ </ReactMarkdown>
71
+ )
72
+ }
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render, screen } from '@testing-library/react'
3
+ import { MarkdownUI } from './markdown-ui'
4
+
5
+ describe('<MarkdownUI>', () => {
6
+ it('renders headings, paragraphs, and inline emphasis', () => {
7
+ render(
8
+ <MarkdownUI
9
+ content={'# Title\n\nSome **bold** text and _italic_ text.'}
10
+ />,
11
+ )
12
+ expect(screen.getByText('Title')).toBeTruthy()
13
+ expect(screen.getByText('bold')).toBeTruthy()
14
+ expect(screen.getByText('italic')).toBeTruthy()
15
+ })
16
+
17
+ it('renders lists', () => {
18
+ render(<MarkdownUI content={'- one\n- two\n- three'} />)
19
+ expect(screen.getByText('one')).toBeTruthy()
20
+ expect(screen.getByText('two')).toBeTruthy()
21
+ expect(screen.getByText('three')).toBeTruthy()
22
+ })
23
+
24
+ it('renders links', () => {
25
+ render(<MarkdownUI content={'[CARTO](https://carto.com)'} />)
26
+ const link = screen.getByRole('link', { name: 'CARTO' })
27
+ expect(link.getAttribute('href')).toBe('https://carto.com')
28
+ })
29
+
30
+ it('renders inline images', () => {
31
+ const { container } = render(
32
+ <MarkdownUI
33
+ content={'![alt text](https://example.com/img.png)\n\nplain text'}
34
+ />,
35
+ )
36
+ const img = container.querySelector('img')
37
+ expect(img).not.toBeNull()
38
+ expect(img?.getAttribute('src')).toBe('https://example.com/img.png')
39
+ expect(img?.getAttribute('alt')).toBe('alt text')
40
+ expect(screen.getByText('plain text')).toBeTruthy()
41
+ })
42
+
43
+ it('renders raw HTML', () => {
44
+ const { container } = render(
45
+ <MarkdownUI
46
+ content={'<span>inline <em>html</em></span>\n\nplain text'}
47
+ />,
48
+ )
49
+ // Sanitizer keeps safe inline tags; only `data-*` attrs are stripped.
50
+ expect(container.querySelector('span')).not.toBeNull()
51
+ expect(container.querySelector('em')?.textContent).toBe('html')
52
+ expect(container.textContent).toContain('inline html')
53
+ expect(screen.getByText('plain text')).toBeTruthy()
54
+ })
55
+
56
+ it('renders empty content without errors', () => {
57
+ const { container } = render(<MarkdownUI content='' />)
58
+ // Root box exists, but no markdown elements inside.
59
+ expect(container.querySelector('p, h1, h2, h3')).toBeNull()
60
+ })
61
+
62
+ it('maps every heading level (h1–h6) through MUI Typography', () => {
63
+ const { getByText } = render(
64
+ <MarkdownUI
65
+ content={'# H1\n\n## H2\n\n### H3\n\n#### H4\n\n##### H5\n\n###### H6'}
66
+ />,
67
+ )
68
+ expect(getByText('H1')).toBeTruthy()
69
+ expect(getByText('H2')).toBeTruthy()
70
+ expect(getByText('H3')).toBeTruthy()
71
+ expect(getByText('H4')).toBeTruthy()
72
+ expect(getByText('H5')).toBeTruthy()
73
+ expect(getByText('H6')).toBeTruthy()
74
+ })
75
+ })
@@ -0,0 +1,55 @@
1
+ import { Box, Typography, type TypographyProps } from '@mui/material'
2
+ import type { Components } from 'react-markdown'
3
+ import { MarkdownContent } from './markdown-content'
4
+ import { styles } from './style'
5
+
6
+ export interface MarkdownUIProps {
7
+ content: string
8
+ }
9
+
10
+ /** MUI-styled element mapping for `react-markdown`. */
11
+ const components: Components = {
12
+ h1: (props) => mdHeading(props, 'h4'),
13
+ h2: (props) => mdHeading(props, 'h5'),
14
+ h3: (props) => mdHeading(props, 'h6'),
15
+ h4: (props) => mdHeading(props, 'subtitle1'),
16
+ h5: (props) => mdHeading(props, 'subtitle2'),
17
+ h6: (props) => mdHeading(props, 'subtitle2'),
18
+ p: ({ children }) => (
19
+ <Typography variant='body2' component='p' sx={styles.paragraph}>
20
+ {children}
21
+ </Typography>
22
+ ),
23
+ }
24
+
25
+ function mdHeading(
26
+ props: { children?: React.ReactNode },
27
+ variant: TypographyProps['variant'],
28
+ ) {
29
+ return (
30
+ <Typography variant={variant} component='div' sx={styles.heading}>
31
+ {props.children}
32
+ </Typography>
33
+ )
34
+ }
35
+
36
+ /**
37
+ * Pure presentational component for the Markdown widget. Delegates the
38
+ * `react-markdown` engine to {@link MarkdownContent} and supplies a
39
+ * document-style MUI element mapping (body2 paragraphs, real heading
40
+ * typography). Opts INTO raw HTML and inline images — the Markdown widget is
41
+ * the one slot in the library where authors can ship rich content. Caption
42
+ * slots like `Note` keep the conservative defaults.
43
+ */
44
+ export function MarkdownUI({ content }: MarkdownUIProps) {
45
+ return (
46
+ <Box sx={styles.root}>
47
+ <MarkdownContent
48
+ content={content}
49
+ components={components}
50
+ allowHtml
51
+ allowImages
52
+ />
53
+ </Box>
54
+ )
55
+ }