@carto/ps-react-ui 4.7.1 → 4.9.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 (580) 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/{styles-BYTyKQFP.js → option-builders-F-c9ELi1.js} +25 -45
  16. package/dist/option-builders-F-c9ELi1.js.map +1 -0
  17. package/dist/png-item-CS4z1iSH.js +45 -0
  18. package/dist/png-item-CS4z1iSH.js.map +1 -0
  19. package/dist/range-l4fNHLEg.js +213 -0
  20. package/dist/range-l4fNHLEg.js.map +1 -0
  21. package/dist/resolve-theme-color-BdojIw0K.js +47 -0
  22. package/dist/resolve-theme-color-BdojIw0K.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-CQCAnDLb.js +388 -0
  30. package/dist/table-CQCAnDLb.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 +46 -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 +53 -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 +43 -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 +51 -0
  143. package/dist/types/widgets-v2/index.d.ts +108 -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 +57 -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 +27 -0
  166. package/dist/types/widgets-v2/range/range.d.ts +24 -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 +54 -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 +40 -0
  216. package/dist/types/widgets-v2/table/table-ui.d.ts +44 -0
  217. package/dist/types/widgets-v2/table/table.d.ts +50 -0
  218. package/dist/types/widgets-v2/table/types.d.ts +48 -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 +60 -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/types.d.ts +25 -0
  231. package/dist/types/widgets-v2/utils/data-zoom-layout.d.ts +11 -0
  232. package/dist/types/widgets-v2/utils/index.d.ts +3 -0
  233. package/dist/types/widgets-v2/utils/merge-options.d.ts +12 -0
  234. package/dist/types/widgets-v2/utils/merge-options.test.d.ts +1 -0
  235. package/dist/types/widgets-v2/utils/resolve-theme-color.d.ts +18 -0
  236. package/dist/types/widgets-v2/utils/resolve-theme-color.test.d.ts +1 -0
  237. package/dist/types/widgets-v2/wrapper/index.d.ts +4 -0
  238. package/dist/types/widgets-v2/wrapper/labels.d.ts +6 -0
  239. package/dist/types/widgets-v2/wrapper/style.d.ts +111 -0
  240. package/dist/types/widgets-v2/wrapper/widget-actions.d.ts +22 -0
  241. package/dist/types/widgets-v2/wrapper/widget-content.d.ts +12 -0
  242. package/dist/types/widgets-v2/wrapper/widget-wrapper.d.ts +51 -0
  243. package/dist/use-transform-DXPN3nY7.js +110 -0
  244. package/dist/use-transform-DXPN3nY7.js.map +1 -0
  245. package/dist/widget-context-DTGO0Yta.js +13 -0
  246. package/dist/widget-context-DTGO0Yta.js.map +1 -0
  247. package/dist/widget-store-registry-_W4Z4xp-.js +178 -0
  248. package/dist/widget-store-registry-_W4Z4xp-.js.map +1 -0
  249. package/dist/widgets/bar.js +14 -13
  250. package/dist/widgets/bar.js.map +1 -1
  251. package/dist/widgets/histogram.js +8 -7
  252. package/dist/widgets/histogram.js.map +1 -1
  253. package/dist/widgets/pie.js +19 -18
  254. package/dist/widgets/pie.js.map +1 -1
  255. package/dist/widgets/scatterplot.js +8 -7
  256. package/dist/widgets/scatterplot.js.map +1 -1
  257. package/dist/widgets/timeseries.js +11 -10
  258. package/dist/widgets/timeseries.js.map +1 -1
  259. package/dist/widgets/utils.js +8 -7
  260. package/dist/widgets/utils.js.map +1 -1
  261. package/dist/widgets-v2/actions.js +43 -0
  262. package/dist/widgets-v2/actions.js.map +1 -0
  263. package/dist/widgets-v2/bar.js +330 -0
  264. package/dist/widgets-v2/bar.js.map +1 -0
  265. package/dist/widgets-v2/category.js +104 -0
  266. package/dist/widgets-v2/category.js.map +1 -0
  267. package/dist/widgets-v2/echart.js +57 -0
  268. package/dist/widgets-v2/echart.js.map +1 -0
  269. package/dist/widgets-v2/formula.js +74 -0
  270. package/dist/widgets-v2/formula.js.map +1 -0
  271. package/dist/widgets-v2/histogram.js +353 -0
  272. package/dist/widgets-v2/histogram.js.map +1 -0
  273. package/dist/widgets-v2/markdown.js +68 -0
  274. package/dist/widgets-v2/markdown.js.map +1 -0
  275. package/dist/widgets-v2/pie.js +387 -0
  276. package/dist/widgets-v2/pie.js.map +1 -0
  277. package/dist/widgets-v2/range.js +52 -0
  278. package/dist/widgets-v2/range.js.map +1 -0
  279. package/dist/widgets-v2/scatterplot.js +411 -0
  280. package/dist/widgets-v2/scatterplot.js.map +1 -0
  281. package/dist/widgets-v2/spread.js +72 -0
  282. package/dist/widgets-v2/spread.js.map +1 -0
  283. package/dist/widgets-v2/stores.js +42 -0
  284. package/dist/widgets-v2/stores.js.map +1 -0
  285. package/dist/widgets-v2/table.js +78 -0
  286. package/dist/widgets-v2/table.js.map +1 -0
  287. package/dist/widgets-v2/timeseries.js +358 -0
  288. package/dist/widgets-v2/timeseries.js.map +1 -0
  289. package/dist/widgets-v2/utils.js +8 -0
  290. package/dist/widgets-v2/utils.js.map +1 -0
  291. package/dist/widgets-v2.js +953 -0
  292. package/dist/widgets-v2.js.map +1 -0
  293. package/package.json +71 -3
  294. package/src/components/lasso-tool/chip.test.tsx +176 -0
  295. package/src/components/lasso-tool/lasso-tool-inline.test.tsx +171 -0
  296. package/src/components/lasso-tool/lasso-tool.test.tsx +198 -0
  297. package/src/components/list-data/list-data.test.tsx +73 -0
  298. package/src/components/no-data-alert/no-data-alert.test.tsx +38 -0
  299. package/src/components/responsive-drawer/responsive-drawer.test.tsx +68 -0
  300. package/src/widgets/actions/brush-toggle/brush-overlay.test.tsx +465 -0
  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/range/components/range-item.test.tsx +243 -0
  309. package/src/widgets/stores/widget-store-branches.test.ts +275 -0
  310. package/src/widgets/table/config.test.ts +65 -0
  311. package/src/widgets/utils/chart-config/option-builders.test.ts +188 -0
  312. package/src/widgets-v2/PERFORMANCE.md +189 -0
  313. package/src/widgets-v2/actions/brush-toggle/brush-toggle.test.tsx +180 -0
  314. package/src/widgets-v2/actions/brush-toggle/brush-toggle.tsx +154 -0
  315. package/src/widgets-v2/actions/brush-toggle/index.ts +3 -0
  316. package/src/widgets-v2/actions/brush-toggle/labels.ts +9 -0
  317. package/src/widgets-v2/actions/brush-toggle/style.ts +11 -0
  318. package/src/widgets-v2/actions/brush-toggle/transforms.test.ts +47 -0
  319. package/src/widgets-v2/actions/brush-toggle/transforms.ts +31 -0
  320. package/src/widgets-v2/actions/change-column/change-column-icon.tsx +14 -0
  321. package/src/widgets-v2/actions/change-column/change-column.test.tsx +59 -0
  322. package/src/widgets-v2/actions/change-column/change-column.tsx +180 -0
  323. package/src/widgets-v2/actions/change-column/index.ts +7 -0
  324. package/src/widgets-v2/actions/change-column/labels.ts +9 -0
  325. package/src/widgets-v2/actions/change-column/sortable-column-item.tsx +56 -0
  326. package/src/widgets-v2/actions/change-column/style.ts +32 -0
  327. package/src/widgets-v2/actions/change-column/types.ts +11 -0
  328. package/src/widgets-v2/actions/download/download.test.tsx +327 -0
  329. package/src/widgets-v2/actions/download/download.tsx +144 -0
  330. package/src/widgets-v2/actions/download/exports.test.tsx +198 -0
  331. package/src/widgets-v2/actions/download/exports.ts +115 -0
  332. package/src/widgets-v2/actions/download/icons.tsx +26 -0
  333. package/src/widgets-v2/actions/download/index.ts +13 -0
  334. package/src/widgets-v2/actions/download/labels.ts +16 -0
  335. package/src/widgets-v2/actions/download/png-item.test.tsx +72 -0
  336. package/src/widgets-v2/actions/download/png-item.tsx +52 -0
  337. package/src/widgets-v2/actions/download/style.ts +3 -0
  338. package/src/widgets-v2/actions/download/types.ts +32 -0
  339. package/src/widgets-v2/actions/fullscreen/fullscreen.test.tsx +150 -0
  340. package/src/widgets-v2/actions/fullscreen/fullscreen.tsx +230 -0
  341. package/src/widgets-v2/actions/fullscreen/index.ts +7 -0
  342. package/src/widgets-v2/actions/fullscreen/labels.ts +9 -0
  343. package/src/widgets-v2/actions/fullscreen/style.ts +59 -0
  344. package/src/widgets-v2/actions/fullscreen/types.ts +15 -0
  345. package/src/widgets-v2/actions/index.ts +82 -0
  346. package/src/widgets-v2/actions/lock-selection/index.ts +10 -0
  347. package/src/widgets-v2/actions/lock-selection/labels.ts +11 -0
  348. package/src/widgets-v2/actions/lock-selection/lock-selection.test.tsx +187 -0
  349. package/src/widgets-v2/actions/lock-selection/lock-selection.tsx +130 -0
  350. package/src/widgets-v2/actions/lock-selection/style.ts +11 -0
  351. package/src/widgets-v2/actions/lock-selection/transforms.ts +27 -0
  352. package/src/widgets-v2/actions/relative-data/index.ts +3 -0
  353. package/src/widgets-v2/actions/relative-data/labels.ts +9 -0
  354. package/src/widgets-v2/actions/relative-data/relative-data.test.tsx +71 -0
  355. package/src/widgets-v2/actions/relative-data/relative-data.tsx +107 -0
  356. package/src/widgets-v2/actions/relative-data/style.ts +11 -0
  357. package/src/widgets-v2/actions/relative-data/transforms.test.ts +151 -0
  358. package/src/widgets-v2/actions/relative-data/transforms.ts +70 -0
  359. package/src/widgets-v2/actions/searcher/filter.ts +28 -0
  360. package/src/widgets-v2/actions/searcher/index.ts +8 -0
  361. package/src/widgets-v2/actions/searcher/labels.ts +13 -0
  362. package/src/widgets-v2/actions/searcher/searcher-toggle.tsx +91 -0
  363. package/src/widgets-v2/actions/searcher/searcher.test.tsx +92 -0
  364. package/src/widgets-v2/actions/searcher/searcher.tsx +112 -0
  365. package/src/widgets-v2/actions/searcher/style.ts +15 -0
  366. package/src/widgets-v2/actions/stack-toggle/index.ts +3 -0
  367. package/src/widgets-v2/actions/stack-toggle/labels.ts +9 -0
  368. package/src/widgets-v2/actions/stack-toggle/stack-toggle.test.tsx +61 -0
  369. package/src/widgets-v2/actions/stack-toggle/stack-toggle.tsx +54 -0
  370. package/src/widgets-v2/actions/stack-toggle/style.ts +11 -0
  371. package/src/widgets-v2/actions/stack-toggle/transforms.test.ts +43 -0
  372. package/src/widgets-v2/actions/stack-toggle/transforms.ts +25 -0
  373. package/src/widgets-v2/actions/zoom-toggle/index.ts +9 -0
  374. package/src/widgets-v2/actions/zoom-toggle/labels.ts +9 -0
  375. package/src/widgets-v2/actions/zoom-toggle/style.ts +11 -0
  376. package/src/widgets-v2/actions/zoom-toggle/transforms.test.ts +148 -0
  377. package/src/widgets-v2/actions/zoom-toggle/transforms.ts +171 -0
  378. package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.test.tsx +107 -0
  379. package/src/widgets-v2/actions/zoom-toggle/zoom-toggle.tsx +106 -0
  380. package/src/widgets-v2/bar/download.test.tsx +91 -0
  381. package/src/widgets-v2/bar/download.tsx +66 -0
  382. package/src/widgets-v2/bar/index.ts +10 -0
  383. package/src/widgets-v2/bar/options.test.ts +334 -0
  384. package/src/widgets-v2/bar/options.ts +332 -0
  385. package/src/widgets-v2/bar/skeleton.test.tsx +19 -0
  386. package/src/widgets-v2/bar/skeleton.tsx +69 -0
  387. package/src/widgets-v2/bar/types.ts +51 -0
  388. package/src/widgets-v2/category/category-ui.test.tsx +746 -0
  389. package/src/widgets-v2/category/category-ui.tsx +389 -0
  390. package/src/widgets-v2/category/category.relative-data.test.tsx +107 -0
  391. package/src/widgets-v2/category/category.stack-toggle.test.tsx +85 -0
  392. package/src/widgets-v2/category/category.test.tsx +305 -0
  393. package/src/widgets-v2/category/category.tsx +121 -0
  394. package/src/widgets-v2/category/components/category-bar-stacked.test.tsx +121 -0
  395. package/src/widgets-v2/category/components/category-bar-stacked.tsx +73 -0
  396. package/src/widgets-v2/category/components/category-bar.test.tsx +64 -0
  397. package/src/widgets-v2/category/components/category-bar.tsx +49 -0
  398. package/src/widgets-v2/category/components/category-legend.test.tsx +51 -0
  399. package/src/widgets-v2/category/components/category-legend.tsx +39 -0
  400. package/src/widgets-v2/category/components/category-row-multi.tsx +86 -0
  401. package/src/widgets-v2/category/components/category-row-other.test.tsx +28 -0
  402. package/src/widgets-v2/category/components/category-row-other.tsx +33 -0
  403. package/src/widgets-v2/category/components/category-row-single.tsx +76 -0
  404. package/src/widgets-v2/category/components/category-row-stacked.test.tsx +244 -0
  405. package/src/widgets-v2/category/components/category-row-stacked.tsx +99 -0
  406. package/src/widgets-v2/category/download.test.ts +71 -0
  407. package/src/widgets-v2/category/download.ts +54 -0
  408. package/src/widgets-v2/category/index.ts +32 -0
  409. package/src/widgets-v2/category/skeleton.test.tsx +26 -0
  410. package/src/widgets-v2/category/skeleton.tsx +74 -0
  411. package/src/widgets-v2/category/style.ts +290 -0
  412. package/src/widgets-v2/category/types.ts +59 -0
  413. package/src/widgets-v2/echart/echart-ui.test.tsx +232 -0
  414. package/src/widgets-v2/echart/echart-ui.tsx +184 -0
  415. package/src/widgets-v2/echart/echart.test.tsx +229 -0
  416. package/src/widgets-v2/echart/echart.tsx +199 -0
  417. package/src/widgets-v2/echart/index.ts +22 -0
  418. package/src/widgets-v2/echart/shared-resize-observer.test.ts +91 -0
  419. package/src/widgets-v2/echart/shared-resize-observer.ts +56 -0
  420. package/src/widgets-v2/echart/style.ts +8 -0
  421. package/src/widgets-v2/echart/use-chart-selection.test.tsx +118 -0
  422. package/src/widgets-v2/echart/use-chart-selection.ts +115 -0
  423. package/src/widgets-v2/formula/delta.tsx +61 -0
  424. package/src/widgets-v2/formula/download.test.tsx +65 -0
  425. package/src/widgets-v2/formula/download.tsx +69 -0
  426. package/src/widgets-v2/formula/formula-ui.test.tsx +91 -0
  427. package/src/widgets-v2/formula/formula-ui.tsx +66 -0
  428. package/src/widgets-v2/formula/formula.test.tsx +50 -0
  429. package/src/widgets-v2/formula/formula.tsx +34 -0
  430. package/src/widgets-v2/formula/index.ts +17 -0
  431. package/src/widgets-v2/formula/note.tsx +25 -0
  432. package/src/widgets-v2/formula/prefix.tsx +25 -0
  433. package/src/widgets-v2/formula/series.tsx +67 -0
  434. package/src/widgets-v2/formula/skeleton.test.tsx +21 -0
  435. package/src/widgets-v2/formula/skeleton.tsx +27 -0
  436. package/src/widgets-v2/formula/style.ts +31 -0
  437. package/src/widgets-v2/formula/subcomponents.test.tsx +107 -0
  438. package/src/widgets-v2/formula/suffix.tsx +25 -0
  439. package/src/widgets-v2/formula/types.ts +48 -0
  440. package/src/widgets-v2/formula/value.tsx +31 -0
  441. package/src/widgets-v2/histogram/download.test.ts +94 -0
  442. package/src/widgets-v2/histogram/download.ts +60 -0
  443. package/src/widgets-v2/histogram/index.ts +10 -0
  444. package/src/widgets-v2/histogram/options.test.ts +318 -0
  445. package/src/widgets-v2/histogram/options.ts +338 -0
  446. package/src/widgets-v2/histogram/skeleton.test.tsx +16 -0
  447. package/src/widgets-v2/histogram/skeleton.tsx +70 -0
  448. package/src/widgets-v2/histogram/transforms.test.ts +46 -0
  449. package/src/widgets-v2/histogram/transforms.ts +30 -0
  450. package/src/widgets-v2/histogram/types.ts +55 -0
  451. package/src/widgets-v2/index.ts +204 -0
  452. package/src/widgets-v2/markdown/download.test.ts +66 -0
  453. package/src/widgets-v2/markdown/download.ts +53 -0
  454. package/src/widgets-v2/markdown/index.ts +6 -0
  455. package/src/widgets-v2/markdown/markdown-content.test.tsx +155 -0
  456. package/src/widgets-v2/markdown/markdown-content.tsx +72 -0
  457. package/src/widgets-v2/markdown/markdown-ui.test.tsx +75 -0
  458. package/src/widgets-v2/markdown/markdown-ui.tsx +55 -0
  459. package/src/widgets-v2/markdown/markdown.test.tsx +39 -0
  460. package/src/widgets-v2/markdown/markdown.tsx +17 -0
  461. package/src/widgets-v2/markdown/skeleton.test.tsx +15 -0
  462. package/src/widgets-v2/markdown/skeleton.tsx +32 -0
  463. package/src/widgets-v2/markdown/style.ts +53 -0
  464. package/src/widgets-v2/markdown/types.ts +4 -0
  465. package/src/widgets-v2/note/labels.ts +9 -0
  466. package/src/widgets-v2/note/style.ts +26 -0
  467. package/src/widgets-v2/note/widget-note.test.tsx +158 -0
  468. package/src/widgets-v2/note/widget-note.tsx +172 -0
  469. package/src/widgets-v2/pie/download.test.ts +78 -0
  470. package/src/widgets-v2/pie/download.ts +55 -0
  471. package/src/widgets-v2/pie/index.ts +10 -0
  472. package/src/widgets-v2/pie/options.test.ts +601 -0
  473. package/src/widgets-v2/pie/options.ts +513 -0
  474. package/src/widgets-v2/pie/skeleton.test.tsx +17 -0
  475. package/src/widgets-v2/pie/skeleton.tsx +32 -0
  476. package/src/widgets-v2/pie/types.ts +62 -0
  477. package/src/widgets-v2/provider/widget-provider.test.tsx +119 -0
  478. package/src/widgets-v2/provider/widget-provider.tsx +111 -0
  479. package/src/widgets-v2/range/index.ts +4 -0
  480. package/src/widgets-v2/range/range-ui.test.tsx +136 -0
  481. package/src/widgets-v2/range/range-ui.tsx +278 -0
  482. package/src/widgets-v2/range/range.test.tsx +68 -0
  483. package/src/widgets-v2/range/range.tsx +52 -0
  484. package/src/widgets-v2/range/skeleton.test.tsx +17 -0
  485. package/src/widgets-v2/range/skeleton.tsx +47 -0
  486. package/src/widgets-v2/range/style.ts +41 -0
  487. package/src/widgets-v2/range/types.ts +37 -0
  488. package/src/widgets-v2/scatterplot/download.test.ts +71 -0
  489. package/src/widgets-v2/scatterplot/download.ts +54 -0
  490. package/src/widgets-v2/scatterplot/index.ts +11 -0
  491. package/src/widgets-v2/scatterplot/options.test.ts +411 -0
  492. package/src/widgets-v2/scatterplot/options.ts +425 -0
  493. package/src/widgets-v2/scatterplot/skeleton.test.tsx +17 -0
  494. package/src/widgets-v2/scatterplot/skeleton.tsx +84 -0
  495. package/src/widgets-v2/scatterplot/transforms.test.ts +97 -0
  496. package/src/widgets-v2/scatterplot/transforms.ts +38 -0
  497. package/src/widgets-v2/scatterplot/types.ts +59 -0
  498. package/src/widgets-v2/selection-summary/labels.ts +11 -0
  499. package/src/widgets-v2/selection-summary/selection-summary.test.tsx +53 -0
  500. package/src/widgets-v2/selection-summary/selection-summary.tsx +62 -0
  501. package/src/widgets-v2/selection-summary/style.ts +23 -0
  502. package/src/widgets-v2/spread/download.test.ts +64 -0
  503. package/src/widgets-v2/spread/download.ts +59 -0
  504. package/src/widgets-v2/spread/index.ts +6 -0
  505. package/src/widgets-v2/spread/separator.tsx +11 -0
  506. package/src/widgets-v2/spread/skeleton.test.tsx +17 -0
  507. package/src/widgets-v2/spread/skeleton.tsx +38 -0
  508. package/src/widgets-v2/spread/spread-ui.test.tsx +108 -0
  509. package/src/widgets-v2/spread/spread-ui.tsx +52 -0
  510. package/src/widgets-v2/spread/spread.test.tsx +50 -0
  511. package/src/widgets-v2/spread/spread.tsx +31 -0
  512. package/src/widgets-v2/spread/types.ts +27 -0
  513. package/src/widgets-v2/state/labels.test.ts +33 -0
  514. package/src/widgets-v2/state/labels.ts +20 -0
  515. package/src/widgets-v2/state/style.ts +25 -0
  516. package/src/widgets-v2/state/widget-state.test.tsx +294 -0
  517. package/src/widgets-v2/state/widget-state.tsx +184 -0
  518. package/src/widgets-v2/stores/index.ts +49 -0
  519. package/src/widgets-v2/stores/pipeline-middleware.test.ts +187 -0
  520. package/src/widgets-v2/stores/pipeline-middleware.ts +91 -0
  521. package/src/widgets-v2/stores/transforms.test.ts +162 -0
  522. package/src/widgets-v2/stores/transforms.ts +70 -0
  523. package/src/widgets-v2/stores/types.ts +64 -0
  524. package/src/widgets-v2/stores/use-echart-instance.test.tsx +91 -0
  525. package/src/widgets-v2/stores/use-echart-instance.ts +29 -0
  526. package/src/widgets-v2/stores/use-transform-enabled.test.tsx +127 -0
  527. package/src/widgets-v2/stores/use-transform-enabled.ts +25 -0
  528. package/src/widgets-v2/stores/use-transform.test.tsx +262 -0
  529. package/src/widgets-v2/stores/use-transform.ts +158 -0
  530. package/src/widgets-v2/stores/widget-context.test.tsx +58 -0
  531. package/src/widgets-v2/stores/widget-context.ts +15 -0
  532. package/src/widgets-v2/stores/widget-store-registry.test.ts +292 -0
  533. package/src/widgets-v2/stores/widget-store-registry.ts +248 -0
  534. package/src/widgets-v2/subheader/style.ts +12 -0
  535. package/src/widgets-v2/subheader/subheader.test.tsx +30 -0
  536. package/src/widgets-v2/subheader/subheader.tsx +16 -0
  537. package/src/widgets-v2/table/download.test.ts +75 -0
  538. package/src/widgets-v2/table/download.ts +47 -0
  539. package/src/widgets-v2/table/helpers.test.ts +214 -0
  540. package/src/widgets-v2/table/helpers.ts +136 -0
  541. package/src/widgets-v2/table/index.ts +23 -0
  542. package/src/widgets-v2/table/labels.tsx +41 -0
  543. package/src/widgets-v2/table/skeleton.test.tsx +26 -0
  544. package/src/widgets-v2/table/skeleton.tsx +65 -0
  545. package/src/widgets-v2/table/style.ts +43 -0
  546. package/src/widgets-v2/table/table-ui.test.tsx +200 -0
  547. package/src/widgets-v2/table/table-ui.tsx +364 -0
  548. package/src/widgets-v2/table/table.test.tsx +119 -0
  549. package/src/widgets-v2/table/table.tsx +179 -0
  550. package/src/widgets-v2/table/types.ts +55 -0
  551. package/src/widgets-v2/test-utils.ts +107 -0
  552. package/src/widgets-v2/timeseries/download.test.ts +95 -0
  553. package/src/widgets-v2/timeseries/download.ts +86 -0
  554. package/src/widgets-v2/timeseries/index.ts +10 -0
  555. package/src/widgets-v2/timeseries/options.test.ts +394 -0
  556. package/src/widgets-v2/timeseries/options.ts +348 -0
  557. package/src/widgets-v2/timeseries/skeleton.test.tsx +13 -0
  558. package/src/widgets-v2/timeseries/skeleton.tsx +76 -0
  559. package/src/widgets-v2/timeseries/types.ts +65 -0
  560. package/src/widgets-v2/toolbox/labels.ts +9 -0
  561. package/src/widgets-v2/toolbox/style.ts +33 -0
  562. package/src/widgets-v2/toolbox/toolbox.test.tsx +200 -0
  563. package/src/widgets-v2/toolbox/toolbox.tsx +309 -0
  564. package/src/widgets-v2/types.ts +25 -0
  565. package/src/widgets-v2/utils/data-zoom-layout.ts +26 -0
  566. package/src/widgets-v2/utils/index.ts +3 -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/utils/resolve-theme-color.test.ts +43 -0
  570. package/src/widgets-v2/utils/resolve-theme-color.ts +34 -0
  571. package/src/widgets-v2/wrapper/index.ts +14 -0
  572. package/src/widgets-v2/wrapper/labels.ts +11 -0
  573. package/src/widgets-v2/wrapper/style.ts +134 -0
  574. package/src/widgets-v2/wrapper/widget-actions.test.tsx +52 -0
  575. package/src/widgets-v2/wrapper/widget-actions.tsx +43 -0
  576. package/src/widgets-v2/wrapper/widget-content.test.tsx +27 -0
  577. package/src/widgets-v2/wrapper/widget-content.tsx +29 -0
  578. package/src/widgets-v2/wrapper/widget-wrapper.test.tsx +159 -0
  579. package/src/widgets-v2/wrapper/widget-wrapper.tsx +178 -0
  580. package/dist/styles-BYTyKQFP.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import { R as y, a as R } from "../range-l4fNHLEg.js";
2
+ import { jsx as r, jsxs as c } from "react/jsx-runtime";
3
+ import { c as p } from "react/compiler-runtime";
4
+ import { Box as a, Skeleton as i } from "@mui/material";
5
+ const e = {
6
+ root: {
7
+ display: "flex",
8
+ flexDirection: "column",
9
+ gap: 3,
10
+ py: 1
11
+ },
12
+ item: {
13
+ display: "flex",
14
+ flexDirection: "column",
15
+ gap: 1.5
16
+ },
17
+ track: {
18
+ height: 32
19
+ },
20
+ inputsRow: {
21
+ display: "flex",
22
+ gap: 2
23
+ },
24
+ input: {
25
+ flex: 1,
26
+ height: 40
27
+ }
28
+ };
29
+ function g(l) {
30
+ const t = p(2), {
31
+ count: s
32
+ } = l, o = s === void 0 ? 1 : s;
33
+ let n;
34
+ return t[0] !== o ? (n = /* @__PURE__ */ r(a, { sx: e.root, children: Array.from({
35
+ length: o
36
+ }).map(x) }), t[0] = o, t[1] = n) : n = t[1], n;
37
+ }
38
+ function x(l, t) {
39
+ return /* @__PURE__ */ c(a, { sx: e.item, children: [
40
+ /* @__PURE__ */ r(i, { variant: "rectangular", sx: e.track }),
41
+ /* @__PURE__ */ c(a, { sx: e.inputsRow, children: [
42
+ /* @__PURE__ */ r(i, { variant: "rectangular", sx: e.input }),
43
+ /* @__PURE__ */ r(i, { variant: "rectangular", sx: e.input })
44
+ ] })
45
+ ] }, `item-${t}`);
46
+ }
47
+ export {
48
+ y as Range,
49
+ g as RangeSkeleton,
50
+ R as RangeUI
51
+ };
52
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","sources":["../../src/widgets-v2/range/skeleton.tsx"],"sourcesContent":["import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\n\nconst styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 3,\n py: 1,\n },\n item: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1.5,\n },\n track: { height: 32 },\n inputsRow: {\n display: 'flex',\n gap: 2,\n },\n input: { flex: 1, height: 40 },\n} satisfies Record<string, SxProps<Theme>>\n\nexport interface RangeSkeletonProps {\n count?: number\n}\n\n/**\n * Loading placeholder for the Range widget. Renders `count` rows, each\n * matching the slider-then-inputs layout of {@link RangeUI} so the layout\n * doesn't jump when data resolves.\n */\nexport function RangeSkeleton({ count = 1 }: RangeSkeletonProps) {\n return (\n <Box sx={styles.root}>\n {Array.from({ length: count }).map((_, i) => (\n <Box key={`item-${i}`} sx={styles.item}>\n <Skeleton variant='rectangular' sx={styles.track} />\n <Box sx={styles.inputsRow}>\n <Skeleton variant='rectangular' sx={styles.input} />\n <Skeleton variant='rectangular' sx={styles.input} />\n </Box>\n </Box>\n ))}\n </Box>\n )\n}\n"],"names":["styles","root","display","flexDirection","gap","py","item","track","height","inputsRow","input","flex","RangeSkeleton","t0","$","_c","count","t1","undefined","t2","Box","Array","from","length","map","_temp","_","i","jsxs","jsx","Skeleton"],"mappings":";;;;AAGA,MAAMA,IAAS;AAAA,EACbC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,KAAK;AAAA,IACLC,IAAI;AAAA,EAAA;AAAA,EAENC,MAAM;AAAA,IACJJ,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,KAAK;AAAA,EAAA;AAAA,EAEPG,OAAO;AAAA,IAAEC,QAAQ;AAAA,EAAA;AAAA,EACjBC,WAAW;AAAA,IACTP,SAAS;AAAA,IACTE,KAAK;AAAA,EAAA;AAAA,EAEPM,OAAO;AAAA,IAAEC,MAAM;AAAA,IAAGH,QAAQ;AAAA,EAAA;AAC5B;AAWO,SAAAI,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAuB;AAAA,IAAAC,OAAAC;AAAAA,EAAAA,IAAAJ,GAAEG,IAAAC,MAAAC,SAAA,IAAAD;AAAS,MAAAE;AAAA,SAAAL,SAAAE,KAErCG,sBAACC,GAAA,EAAQ,IAAApB,EAAMC,MACZoB,gBAAKC,KAAM;AAAA,IAAAC,QAAUP;AAAAA,EAAAA,CAAO,EAACQ,IAAKC,CAQlC,GACH,GAAMX,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAVNK;AAUM;AAZH,SAAAM,EAAAC,GAAAC,GAAA;AAAA,SAIC,gBAAAC,EAACR,GAAA,EAA0B,IAAApB,EAAMM,MAC/B,UAAA;AAAA,IAAA,gBAAAuB,EAACC,GAAA,EAAiB,SAAA,eAAkB,IAAA9B,EAAMO,OAAM;AAAA,IAChD,gBAAAqB,EAACR,GAAA,EAAQ,IAAApB,EAAMS,WACb,UAAA;AAAA,MAAA,gBAAAoB,EAACC,GAAA,EAAiB,SAAA,eAAkB,IAAA9B,EAAMU,OAAM;AAAA,wBAC/CoB,GAAA,EAAiB,SAAA,eAAkB,IAAA9B,EAAMU,MAAAA,CAAM;AAAA,IAAA,EAAA,CAClD;AAAA,EAAA,EAAA,WALgBiB,CAAC,EAMnB;AAAM;"}
@@ -0,0 +1,411 @@
1
+ import * as E from "echarts";
2
+ import { d as H, g as V, c as W, n as S, f as F } from "../option-builders-F-c9ELi1.js";
3
+ import { jsx as x, jsxs as M } from "react/jsx-runtime";
4
+ import { c as q } from "react/compiler-runtime";
5
+ import { Skeleton as I, Box as A } from "@mui/material";
6
+ import "../widget-store-Bw5zRUGg.js";
7
+ import "zustand/shallow";
8
+ import "@mui/icons-material";
9
+ import "react";
10
+ import "html2canvas";
11
+ import "../lasso-tool-BYbxrJ-7.js";
12
+ import "../cjs-D4KH3azB.js";
13
+ import "@dnd-kit/core";
14
+ import "@dnd-kit/sortable";
15
+ import "@dnd-kit/utilities";
16
+ import "react-dom";
17
+ import "@mui/icons-material/ZoomIn";
18
+ import "../widget-context-DTGO0Yta.js";
19
+ import "zustand";
20
+ import "zustand/vanilla";
21
+ import "zustand/middleware";
22
+ import "zustand/react/shallow";
23
+ import { Z as b } from "../transforms-Cdx4fkU5.js";
24
+ import { m as U, r as J } from "../resolve-theme-color-BdojIw0K.js";
25
+ import "@mui/icons-material/FileDownload";
26
+ import { a as K } from "../exports-Cx-f6m6U.js";
27
+ import "@mui/icons-material/ImageOutlined";
28
+ import { b as Q } from "../png-item-CS4z1iSH.js";
29
+ function ee({
30
+ theme: e,
31
+ xFormatter: t,
32
+ yFormatter: r
33
+ }) {
34
+ return {
35
+ grid: {
36
+ left: parseInt(e.spacing(1)),
37
+ top: parseInt(e.spacing(3)),
38
+ right: parseInt(e.spacing(1)),
39
+ // Default: no legend. Merger bumps `bottom` when there are >1 series.
40
+ ...W(!1, e),
41
+ containLabel: !0
42
+ },
43
+ tooltip: {
44
+ // Per-point trigger — different from Bar's 'axis' trigger because
45
+ // points don't share an x-coordinate.
46
+ trigger: "item",
47
+ backgroundColor: e.palette.grey[900],
48
+ borderWidth: 0,
49
+ padding: [parseInt(e.spacing(1)), parseInt(e.spacing(1))],
50
+ textStyle: {
51
+ color: e.palette.common.white,
52
+ fontSize: 11,
53
+ fontFamily: e.typography.caption.fontFamily
54
+ },
55
+ position: V(e),
56
+ formatter: oe(t, r)
57
+ },
58
+ // Legend styling baked here; `show` is toggled by the merger based on
59
+ // series count.
60
+ legend: {
61
+ ...H({
62
+ hasLegend: !1,
63
+ labelFormatter: void 0
64
+ })
65
+ },
66
+ axisPointer: {
67
+ lineStyle: {
68
+ color: e.palette.grey[400]
69
+ }
70
+ },
71
+ color: [e.palette.secondary.main, ...Object.values(e.palette.qualitative?.bold ?? {})],
72
+ xAxis: {
73
+ type: "value",
74
+ axisLine: {
75
+ show: !1
76
+ },
77
+ axisTick: {
78
+ show: !1
79
+ },
80
+ axisLabel: {
81
+ fontSize: e.typography.overlineDelicate?.fontSize,
82
+ fontFamily: e.typography.overlineDelicate?.fontFamily,
83
+ color: e.palette.black?.[60],
84
+ margin: parseInt(e.spacing(1)),
85
+ hideOverlap: !0,
86
+ showMinLabel: !0,
87
+ showMaxLabel: !0,
88
+ ...t && {
89
+ formatter: t
90
+ }
91
+ },
92
+ splitLine: {
93
+ show: !0,
94
+ lineStyle: {
95
+ color: e.palette.black?.[4] ?? e.palette.divider
96
+ }
97
+ }
98
+ },
99
+ yAxis: {
100
+ type: "value",
101
+ axisLine: {
102
+ show: !1
103
+ },
104
+ axisTick: {
105
+ show: !1
106
+ },
107
+ axisLabel: {
108
+ fontSize: e.typography.overlineDelicate?.fontSize,
109
+ fontFamily: e.typography.overlineDelicate?.fontFamily,
110
+ color: e.palette.black?.[60],
111
+ margin: parseInt(e.spacing(1)),
112
+ hideOverlap: !0,
113
+ showMinLabel: !0,
114
+ showMaxLabel: !0,
115
+ ...r && {
116
+ formatter: r
117
+ }
118
+ },
119
+ splitLine: {
120
+ show: !0,
121
+ lineStyle: {
122
+ color: e.palette.black?.[4] ?? e.palette.divider
123
+ }
124
+ }
125
+ }
126
+ };
127
+ }
128
+ function Oe(e) {
129
+ const {
130
+ theme: t,
131
+ xFormatter: r,
132
+ yFormatter: i,
133
+ optionsOverride: n
134
+ } = e, s = e.series, a = e.symbolSize ?? 8, l = e.selection, c = l && l.length > 0 ? new Set(l) : null;
135
+ return (o, u, p) => {
136
+ if (o == null) {
137
+ const d = ee({
138
+ theme: t,
139
+ xFormatter: r,
140
+ yFormatter: i
141
+ });
142
+ return n ? U(d, n) : d;
143
+ }
144
+ const f = Array.isArray(u) ? u : [];
145
+ if (f.length === 0)
146
+ return {
147
+ ...o,
148
+ dataset: [],
149
+ series: []
150
+ };
151
+ const k = f.length > 1, Y = typeof o.legend == "object" && !Array.isArray(o.legend) ? o.legend : {}, g = typeof o.grid == "object" && !Array.isArray(o.grid) ? o.grid : {}, L = typeof o.tooltip == "object" && !Array.isArray(o.tooltip) ? o.tooltip : {}, T = typeof o.xAxis == "object" && !Array.isArray(o.xAxis) ? o.xAxis : {}, N = typeof o.yAxis == "object" && !Array.isArray(o.yAxis) ? o.yAxis : {}, w = p?.formatter, {
152
+ niceMinX: X,
153
+ niceMaxX: D,
154
+ niceMinY: j,
155
+ niceMaxY: O
156
+ } = ie(f), z = (d) => (m) => {
157
+ const y = m.color;
158
+ if (!c) return y;
159
+ const Z = `${d}:${m.dataIndex}`;
160
+ return c.has(Z) ? y : E.color.modifyAlpha(y, 0.15);
161
+ }, h = te(o.dataZoom, k), _ = h?.hasXSlider ?? !1, B = h?.hasYSlider ?? !1, R = typeof g.bottom == "number" ? g.bottom : 24, $ = k ? 56 : R, P = _ ? $ + b.sliderHeight + b.sliderGap : $, C = typeof g.right == "number" ? g.right : 8, G = B ? C + b.sliderHeight + b.sliderGap : C;
162
+ return {
163
+ ...o,
164
+ // ECharts dataset.source wants a mutable [number, number][] shape; we
165
+ // hold readonly tuples internally, so cast at the boundary.
166
+ dataset: f.map((d) => ({
167
+ source: d
168
+ })),
169
+ series: f.map((d, m) => {
170
+ const y = J(t, s?.[m]?.color);
171
+ return {
172
+ type: "scatter",
173
+ datasetIndex: m,
174
+ name: s?.[m]?.name ?? `Series ${m + 1}`,
175
+ encode: {
176
+ x: 0,
177
+ y: 1
178
+ },
179
+ symbolSize: a,
180
+ emphasis: {
181
+ focus: "series"
182
+ },
183
+ itemStyle: {
184
+ color: z(m)
185
+ },
186
+ ...y ? {
187
+ color: y
188
+ } : {}
189
+ };
190
+ }),
191
+ legend: {
192
+ ...Y,
193
+ show: k
194
+ },
195
+ grid: {
196
+ ...g,
197
+ bottom: P,
198
+ right: G
199
+ },
200
+ ...h ? {
201
+ dataZoom: h.entries
202
+ } : {},
203
+ xAxis: {
204
+ ...T,
205
+ min: X,
206
+ max: D
207
+ },
208
+ yAxis: {
209
+ ...N,
210
+ min: j,
211
+ max: O,
212
+ axisLabel: {
213
+ ...N.axisLabel ?? {},
214
+ // Re-derive the y-axis formatter at fusion time so RelativeData's
215
+ // percent formatter (written to `state.formatter`) flows through
216
+ // without rebuilding the structural option. Falls back to the
217
+ // structural `yFormatter` already baked in `baseYAxis.axisLabel`
218
+ // (which `String(value)` if neither is set).
219
+ ...w ? {
220
+ formatter: w
221
+ } : {}
222
+ }
223
+ },
224
+ tooltip: {
225
+ ...L,
226
+ // Rebuild the tooltip formatter so the live y-axis formatter is
227
+ // applied to the y-coordinate in the (x, y) label. xFormatter is
228
+ // structural — relative is a values-axis concept, so xFormatter
229
+ // doesn't change under RelativeData.
230
+ formatter: re(L.formatter, w, r)
231
+ }
232
+ };
233
+ };
234
+ }
235
+ function te(e, t) {
236
+ if (!Array.isArray(e) || e.length === 0) return null;
237
+ let r = !1, i = !1;
238
+ return {
239
+ entries: e.map((s) => {
240
+ if (s == null || typeof s != "object") return s;
241
+ const a = s;
242
+ return a.type !== "slider" ? a : a.yAxisIndex !== void 0 ? (i = !0, a) : (r = !0, t ? {
243
+ ...a,
244
+ bottom: b.sliderBottomWithLegend
245
+ } : a);
246
+ }),
247
+ hasXSlider: r,
248
+ hasYSlider: i
249
+ };
250
+ }
251
+ function re(e, t, r) {
252
+ return t ? F((i) => {
253
+ const n = i.value, s = n?.[0], a = n?.[1], l = typeof s == "number" ? r ? r(s) : String(s) : "", c = typeof a == "number" ? t(a) : String(a ?? ""), o = typeof i.marker == "string" ? i.marker : "", u = i.seriesName ? `${i.seriesName}: ` : "";
254
+ return {
255
+ name: `(${l}, ${c})`,
256
+ seriesName: u,
257
+ marker: o,
258
+ value: ""
259
+ };
260
+ }) : e;
261
+ }
262
+ function oe(e, t) {
263
+ return F((r) => {
264
+ const i = r.value, n = i?.[0], s = i?.[1], a = typeof n == "number" ? e ? e(n) : String(n) : "", l = typeof s == "number" ? t ? t(s) : String(s) : "", c = typeof r.marker == "string" ? r.marker : "", o = r.seriesName ? `${r.seriesName}: ` : "";
265
+ return {
266
+ name: `(${a}, ${l})`,
267
+ seriesName: o,
268
+ marker: c,
269
+ value: ""
270
+ };
271
+ });
272
+ }
273
+ function ie(e) {
274
+ let t = 1 / 0, r = -1 / 0, i = 1 / 0, n = -1 / 0;
275
+ for (const o of e)
276
+ for (const u of o) {
277
+ const p = u?.[0], f = u?.[1];
278
+ typeof p == "number" && Number.isFinite(p) && (p < t && (t = p), p > r && (r = p)), typeof f == "number" && Number.isFinite(f) && (f < i && (i = f), f > n && (n = f));
279
+ }
280
+ const s = Number.isFinite(r) ? r <= 0 ? 1 : S(r) : 1, a = Number.isFinite(n) ? n <= 0 ? 1 : S(n) : 1, l = Number.isFinite(t) && t < 0 ? S(t) : 0, c = Number.isFinite(i) && i < 0 ? S(i) : 0;
281
+ return {
282
+ niceMinX: l,
283
+ niceMaxX: s,
284
+ niceMinY: c,
285
+ niceMaxY: a
286
+ };
287
+ }
288
+ const v = {
289
+ container: {
290
+ display: "flex",
291
+ alignItems: "center",
292
+ justifyContent: "space-between",
293
+ flexDirection: "column",
294
+ gap: ({
295
+ spacing: e
296
+ }) => e(1),
297
+ height: ({
298
+ spacing: e
299
+ }) => e(38)
300
+ },
301
+ grid: {
302
+ position: "relative",
303
+ flex: "1 1 auto",
304
+ width: "100%"
305
+ },
306
+ legend: {
307
+ display: "flex",
308
+ alignItems: "center",
309
+ gap: ({
310
+ spacing: e
311
+ }) => e(2),
312
+ height: ({
313
+ spacing: e
314
+ }) => e(5)
315
+ },
316
+ legendItem: {
317
+ display: "flex",
318
+ alignItems: "center",
319
+ gap: ({
320
+ spacing: e
321
+ }) => e(1.5)
322
+ }
323
+ }, ne = (e, t, r) => ({
324
+ position: "absolute",
325
+ top: e,
326
+ left: t,
327
+ width: r,
328
+ height: r,
329
+ borderRadius: "50%"
330
+ });
331
+ function ze(e) {
332
+ const t = q(15), {
333
+ count: r
334
+ } = e, i = r === void 0 ? 24 : r;
335
+ let n, s, a, l, c;
336
+ if (t[0] !== i) {
337
+ const f = Array.from({
338
+ length: i
339
+ }, le);
340
+ s = A, c = v.container, n = A, a = v.grid, l = f.map(ae), t[0] = i, t[1] = n, t[2] = s, t[3] = a, t[4] = l, t[5] = c;
341
+ } else
342
+ n = t[1], s = t[2], a = t[3], l = t[4], c = t[5];
343
+ let o;
344
+ t[6] !== n || t[7] !== a || t[8] !== l ? (o = /* @__PURE__ */ x(n, { sx: a, children: l }), t[6] = n, t[7] = a, t[8] = l, t[9] = o) : o = t[9];
345
+ let u;
346
+ t[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (u = /* @__PURE__ */ x(A, { sx: v.legend, children: [0, 1].map(se) }), t[10] = u) : u = t[10];
347
+ let p;
348
+ return t[11] !== s || t[12] !== c || t[13] !== o ? (p = /* @__PURE__ */ M(s, { sx: c, children: [
349
+ o,
350
+ u
351
+ ] }), t[11] = s, t[12] = c, t[13] = o, t[14] = p) : p = t[14], p;
352
+ }
353
+ function se(e) {
354
+ return /* @__PURE__ */ M(A, { sx: v.legendItem, children: [
355
+ /* @__PURE__ */ x(I, { variant: "circular", width: 8, height: 8 }),
356
+ /* @__PURE__ */ x(I, { width: 48, height: 8 })
357
+ ] }, `legend-${e}`);
358
+ }
359
+ function ae(e, t) {
360
+ return /* @__PURE__ */ x(I, { variant: "circular", sx: ne(e.top, e.left, e.size) }, `dot-${t}`);
361
+ }
362
+ function le(e, t) {
363
+ const r = 10 + t * 37 % 80, i = 5 + t * 53 % 90, n = 8 + t * 7 % 6;
364
+ return {
365
+ top: `${r}%`,
366
+ left: `${i}%`,
367
+ size: n
368
+ };
369
+ }
370
+ function _e(e) {
371
+ const t = [];
372
+ return e.getCaptureEl && t.push(Q({
373
+ filename: e.filename,
374
+ getCaptureEl: e.getCaptureEl,
375
+ pixelRatio: e.pngPixelRatio,
376
+ backgroundColor: e.pngBackgroundColor
377
+ })), t.push({
378
+ id: "csv",
379
+ label: "Download as CSV",
380
+ resolve: () => {
381
+ const r = e.getData(), i = [["series", "x", "y"]];
382
+ for (const [s, a] of r.entries()) {
383
+ const l = e.seriesNames?.[s] ?? `series_${s + 1}`;
384
+ for (const [c, o] of a)
385
+ i.push([l, c, o]);
386
+ }
387
+ const n = K(i);
388
+ return Promise.resolve({
389
+ url: n.url,
390
+ filename: `${e.filename}.csv`,
391
+ revoke: n.revoke
392
+ });
393
+ }
394
+ }), t;
395
+ }
396
+ const Be = (e) => Array.isArray(e) ? e.map((t) => {
397
+ if (!ce(t)) return t;
398
+ const r = t.reduce((i, [, n]) => i + Math.abs(n), 0);
399
+ return r <= 0 ? t : t.map(([i, n]) => [i, n / r * 100]);
400
+ }) : e;
401
+ function ce(e) {
402
+ return Array.isArray(e) ? e.every((t) => Array.isArray(t) && t.length === 2 && typeof t[0] == "number" && Number.isFinite(t[0]) && typeof t[1] == "number" && Number.isFinite(t[1])) : !1;
403
+ }
404
+ export {
405
+ ze as ScatterplotSkeleton,
406
+ _e as createScatterplotDownloadConfig,
407
+ Oe as createScatterplotOptionFactory,
408
+ ee as scatterplotOptions,
409
+ Be as toRelativeScatterplotData
410
+ };
411
+ //# sourceMappingURL=scatterplot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scatterplot.js","sources":["../../src/widgets-v2/scatterplot/options.ts","../../src/widgets-v2/scatterplot/skeleton.tsx","../../src/widgets-v2/scatterplot/download.ts","../../src/widgets-v2/scatterplot/transforms.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport type { CallbackDataParams } from 'echarts/types/dist/shared'\nimport {\n buildGridConfig,\n buildLegendConfig,\n createTooltipFormatter,\n createTooltipPositioner,\n niceNum,\n} from '../../widgets/utils/chart-config'\nimport { ZOOM_LAYOUT } from '../actions/zoom-toggle'\nimport type { OptionFactory } from '../echart'\nimport { mergeOptions, resolveThemeColor } from '../utils'\nimport type {\n ScatterplotEChartsOption,\n ScatterplotOptionFactoryInput,\n ScatterplotOptionsInput,\n ScatterplotWidgetData,\n} from './types'\n\n/**\n * Builds the **structural** ECharts option for a scatterplot widget — both\n * axes `type: 'value'` (not category, unlike Bar/Histogram), grid, tooltip\n * triggered per-item rather than per-axis. Intentionally data-agnostic: no\n * series, no dataset, no `legend.show` (those depend on data and are added\n * by {@link createScatterplotOptionFactory}).\n *\n * Styling parity with v1: dark themed tooltip via `createTooltipFormatter`\n * + `createTooltipPositioner`, `buildGridConfig`-based grid, polished\n * axisLine/Tick/splitLine, `overlineDelicate` axis labels, structural\n * legend wired via `buildLegendConfig` (toggled by the merger), and the\n * CARTO `qualitative.bold + secondary` palette — same pattern bar /\n * histogram / pie already use. {@link createScatterplotOptionFactory}\n * wraps this builder in its structural-phase branch.\n */\nexport function scatterplotOptions({\n theme,\n xFormatter,\n yFormatter,\n}: ScatterplotOptionsInput): ScatterplotEChartsOption {\n return {\n grid: {\n left: parseInt(theme.spacing(1)),\n top: parseInt(theme.spacing(3)),\n right: parseInt(theme.spacing(1)),\n // Default: no legend. Merger bumps `bottom` when there are >1 series.\n ...buildGridConfig(false, theme),\n containLabel: true,\n },\n tooltip: {\n // Per-point trigger — different from Bar's 'axis' trigger because\n // points don't share an x-coordinate.\n trigger: 'item',\n backgroundColor: theme.palette.grey[900],\n borderWidth: 0,\n padding: [parseInt(theme.spacing(1)), parseInt(theme.spacing(1))],\n textStyle: {\n color: theme.palette.common.white,\n fontSize: 11,\n fontFamily: theme.typography.caption.fontFamily,\n },\n position: createTooltipPositioner(theme),\n formatter: buildScatterTooltipFormatter(xFormatter, yFormatter),\n },\n // Legend styling baked here; `show` is toggled by the merger based on\n // series count.\n legend: {\n ...buildLegendConfig({ hasLegend: false, labelFormatter: undefined }),\n },\n axisPointer: { lineStyle: { color: theme.palette.grey[400] } },\n color: [\n theme.palette.secondary.main,\n ...Object.values(\n (theme.palette as { qualitative?: { bold?: Record<string, string> } })\n .qualitative?.bold ?? {},\n ),\n ],\n xAxis: {\n type: 'value',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n color: theme.palette.black?.[60],\n margin: parseInt(theme.spacing(1)),\n hideOverlap: true,\n showMinLabel: true,\n showMaxLabel: true,\n ...(xFormatter && { formatter: xFormatter }),\n },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black?.[4] ?? theme.palette.divider },\n },\n },\n yAxis: {\n type: 'value',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate?.fontSize,\n fontFamily: theme.typography.overlineDelicate?.fontFamily,\n color: theme.palette.black?.[60],\n margin: parseInt(theme.spacing(1)),\n hideOverlap: true,\n showMinLabel: true,\n showMaxLabel: true,\n ...(yFormatter && { formatter: yFormatter }),\n },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black?.[4] ?? theme.palette.divider },\n },\n },\n } as ScatterplotEChartsOption\n}\n\n/**\n * Returns the scatterplot widget's {@link OptionFactory} — one closure\n * that owns BOTH phases of option construction:\n *\n * - **Structural phase** (`option == null`) — builds the theme-aware\n * structural option via {@link scatterplotOptions}, optionally merging\n * the consumer-supplied `optionsOverride`. Called once by Provider to\n * seed `rawOptions` in the store.\n * - **Merge phase** (`option != null`) — fuses post-pipeline `state.data`\n * (`ScatterplotWidgetData`) into the option via the dataset API. Each\n * series's `[x, y]` tuples land in `dataset[i].source` as 2-column\n * rows; the series uses positional encoding (`encode: { x: 0, y: 1 }`)\n * and `type: 'scatter'`. niceMin/niceMax are computed over both axes\n * so the chart frames data on rounded extents and numeric jitters\n * don't shift gridlines per render. Reactive `ctx.formatter` (driven\n * by RelativeData) re-derives the y-axis label and tooltip at fusion\n * time; `xFormatter` stays baked at structural-build time (relative\n * is a values-axis concept; x is coordinate-space).\n *\n * When `ZoomToggle` installs a `dataZoom` slider, grid bottom is\n * extended and the slider is positioned above the legend row (if any) —\n * same layout dance bar / histogram / timeseries do.\n */\nexport function createScatterplotOptionFactory(\n options: ScatterplotOptionFactoryInput,\n): OptionFactory {\n const { theme, xFormatter, yFormatter, optionsOverride } = options\n const series = options.series\n const symbolSize = options.symbolSize ?? 8\n const selection = options.selection\n const selectionSet =\n selection && selection.length > 0 ? new Set<string>(selection) : null\n return (option, data, ctx) => {\n if (option == null) {\n const structural = scatterplotOptions({ theme, xFormatter, yFormatter })\n return optionsOverride\n ? (mergeOptions(\n structural as unknown as Record<string, unknown>,\n optionsOverride as Partial<Record<string, unknown>>,\n ) as EChartsOption)\n : structural\n }\n\n const seriesArr = Array.isArray(data) ? (data as ScatterplotWidgetData) : []\n if (seriesArr.length === 0) {\n return { ...option, dataset: [], series: [] }\n }\n const hasLegend = seriesArr.length > 1\n const baseLegend =\n typeof option.legend === 'object' && !Array.isArray(option.legend)\n ? option.legend\n : {}\n const baseGrid =\n typeof option.grid === 'object' && !Array.isArray(option.grid)\n ? option.grid\n : {}\n const baseTooltip =\n typeof option.tooltip === 'object' && !Array.isArray(option.tooltip)\n ? option.tooltip\n : {}\n const baseXAxis =\n typeof option.xAxis === 'object' && !Array.isArray(option.xAxis)\n ? option.xAxis\n : {}\n const baseYAxis =\n typeof option.yAxis === 'object' && !Array.isArray(option.yAxis)\n ? option.yAxis\n : {}\n\n const reactiveFormatter = ctx?.formatter\n\n const { niceMinX, niceMaxX, niceMinY, niceMaxY } =\n computeScatterBounds(seriesArr)\n\n // Dim non-selected points via `series.itemStyle.color`. The selection\n // key is `${seriesIndex}:${dataIndex}`; we read those off the params\n // ECharts hands to the callback per-data.\n //\n // We *always* emit `itemStyle.color` (a passthrough when nothing is\n // selected), not conditionally — dropping the key between renders\n // would let ECharts' default merge keep the previous callback alive\n // and items would stay dimmed forever after an external clear.\n // Keeping the key always-present means a plain setOption merge swaps\n // the callback in place, no `replaceMerge` and no entry-animation\n // flash on selection on/off.\n const makeDimColor =\n (seriesIdx: number) => (params: CallbackDataParams) => {\n const base = params.color as string\n if (!selectionSet) return base\n const key = `${seriesIdx}:${params.dataIndex}`\n return selectionSet.has(key)\n ? base\n : echarts.color.modifyAlpha(base, 0.15)\n }\n\n // Zoom slider layout: when ZoomToggle has installed `dataZoom`,\n // reserve grid space and lift any x-slider above the legend (if\n // present). Scatter supports 2D zoom via `axes: ['x', 'y']` — in\n // that case there's also a vertical y-slider on the right edge, so\n // we reserve `grid.right` separately. Inside-only dataZoom entries\n // (no `type: 'slider'`) take no grid space.\n const dataZoomLayout = layoutDataZoomForScatter(option.dataZoom, hasLegend)\n const hasXSlider = dataZoomLayout?.hasXSlider ?? false\n const hasYSlider = dataZoomLayout?.hasYSlider ?? false\n const fallbackBottom =\n typeof baseGrid.bottom === 'number' ? baseGrid.bottom : 24\n const baseBottom = hasLegend ? 56 : fallbackBottom\n const gridBottom = hasXSlider\n ? baseBottom + ZOOM_LAYOUT.sliderHeight + ZOOM_LAYOUT.sliderGap\n : baseBottom\n const fallbackRight =\n typeof baseGrid.right === 'number' ? baseGrid.right : 8\n const gridRight = hasYSlider\n ? fallbackRight + ZOOM_LAYOUT.sliderHeight + ZOOM_LAYOUT.sliderGap\n : fallbackRight\n\n return {\n ...option,\n // ECharts dataset.source wants a mutable [number, number][] shape; we\n // hold readonly tuples internally, so cast at the boundary.\n dataset: seriesArr.map((s) => ({ source: s as unknown as number[][] })),\n series: seriesArr.map((_, i) => {\n const overrideColor = resolveThemeColor(theme, series?.[i]?.color)\n return {\n type: 'scatter' as const,\n datasetIndex: i,\n name: series?.[i]?.name ?? `Series ${i + 1}`,\n encode: { x: 0, y: 1 },\n symbolSize,\n emphasis: { focus: 'series' },\n itemStyle: { color: makeDimColor(i) },\n ...(overrideColor ? { color: overrideColor } : {}),\n }\n }),\n legend: { ...baseLegend, show: hasLegend },\n grid: { ...baseGrid, bottom: gridBottom, right: gridRight },\n ...(dataZoomLayout ? { dataZoom: dataZoomLayout.entries } : {}),\n xAxis: {\n ...baseXAxis,\n min: niceMinX,\n max: niceMaxX,\n } as EChartsOption['xAxis'],\n yAxis: {\n ...baseYAxis,\n min: niceMinY,\n max: niceMaxY,\n axisLabel: {\n ...((baseYAxis as { axisLabel?: object }).axisLabel ?? {}),\n // Re-derive the y-axis formatter at fusion time so RelativeData's\n // percent formatter (written to `state.formatter`) flows through\n // without rebuilding the structural option. Falls back to the\n // structural `yFormatter` already baked in `baseYAxis.axisLabel`\n // (which `String(value)` if neither is set).\n ...(reactiveFormatter ? { formatter: reactiveFormatter } : {}),\n },\n } as EChartsOption['yAxis'],\n tooltip: {\n ...baseTooltip,\n // Rebuild the tooltip formatter so the live y-axis formatter is\n // applied to the y-coordinate in the (x, y) label. xFormatter is\n // structural — relative is a values-axis concept, so xFormatter\n // doesn't change under RelativeData.\n formatter: buildReactiveScatterTooltipFormatter(\n (baseTooltip as { formatter?: unknown }).formatter,\n reactiveFormatter,\n xFormatter,\n ),\n },\n } as EChartsOption\n }\n}\n\n/**\n * Lay out the `dataZoom` array for the scatter chart:\n * - Detect whether any horizontal (x-axis) slider is present — if so\n * lift it above the legend row when a legend is shown.\n * - Detect whether any vertical (y-axis) slider is present — the\n * caller reserves `grid.right` so the slider doesn't overlap the\n * plot area.\n *\n * Returns `null` when there's no `dataZoom` so callers can skip the\n * layout adjustment entirely. An entry is considered an \"x-slider\" if\n * it has `xAxisIndex` set (or no axis index — defaults to x in ECharts).\n * A \"y-slider\" has `yAxisIndex` set.\n */\nfunction layoutDataZoomForScatter(\n dataZoom: unknown,\n hasLegend: boolean,\n): { entries: unknown[]; hasXSlider: boolean; hasYSlider: boolean } | null {\n if (!Array.isArray(dataZoom) || dataZoom.length === 0) return null\n let hasXSlider = false\n let hasYSlider = false\n const entries = dataZoom.map((entry: unknown) => {\n if (entry == null || typeof entry !== 'object') return entry\n const dz = entry as {\n type?: string\n xAxisIndex?: unknown\n yAxisIndex?: unknown\n bottom?: number\n }\n if (dz.type !== 'slider') return dz\n const targetsY = dz.yAxisIndex !== undefined\n if (targetsY) {\n hasYSlider = true\n return dz\n }\n // Either explicit x or defaulted (ECharts defaults sliders to xAxis\n // when no axis index is provided).\n hasXSlider = true\n if (hasLegend) {\n return { ...dz, bottom: ZOOM_LAYOUT.sliderBottomWithLegend }\n }\n return dz\n })\n return { entries, hasXSlider, hasYSlider }\n}\n\n/**\n * If a reactive (store-driven) y formatter is provided, re-build the\n * scatter tooltip formatter using it. Otherwise, return the structural\n * formatter unchanged so the original `xFormatter` / `yFormatter`\n * baked into `scatterplotOptions` still applies. The structural\n * formatter has stable identity per `scatterplotOptions` call, so this\n * path doesn't churn ECharts on every render.\n */\nfunction buildReactiveScatterTooltipFormatter(\n structuralFormatter: unknown,\n reactiveYFormatter: ((value: number) => string) | undefined,\n xFormatter: ((value: number) => string) | undefined,\n) {\n if (!reactiveYFormatter) return structuralFormatter\n return createTooltipFormatter((item) => {\n const value = item.value as readonly [number, number] | undefined\n const x = value?.[0]\n const y = value?.[1]\n const formattedX =\n typeof x === 'number' ? (xFormatter ? xFormatter(x) : String(x)) : ''\n const formattedY =\n typeof y === 'number' ? reactiveYFormatter(y) : String(y ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n return {\n name: `(${formattedX}, ${formattedY})`,\n seriesName,\n marker,\n value: '',\n }\n })\n}\n\nfunction buildScatterTooltipFormatter(\n xFormatter: ((value: number) => string) | undefined,\n yFormatter: ((value: number) => string) | undefined,\n) {\n return createTooltipFormatter((item) => {\n const value = item.value as readonly [number, number] | undefined\n const x = value?.[0]\n const y = value?.[1]\n const formattedX =\n typeof x === 'number' ? (xFormatter ? xFormatter(x) : String(x)) : ''\n const formattedY =\n typeof y === 'number' ? (yFormatter ? yFormatter(y) : String(y)) : ''\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n return {\n name: `(${formattedX}, ${formattedY})`,\n seriesName,\n marker,\n value: '',\n }\n })\n}\n\nfunction computeScatterBounds(seriesArr: ScatterplotWidgetData): {\n niceMinX: number\n niceMaxX: number\n niceMinY: number\n niceMaxY: number\n} {\n let minX = Infinity\n let maxX = -Infinity\n let minY = Infinity\n let maxY = -Infinity\n for (const series of seriesArr) {\n for (const point of series) {\n const x = point?.[0]\n const y = point?.[1]\n if (typeof x === 'number' && Number.isFinite(x)) {\n if (x < minX) minX = x\n if (x > maxX) maxX = x\n }\n if (typeof y === 'number' && Number.isFinite(y)) {\n if (y < minY) minY = y\n if (y > maxY) maxY = y\n }\n }\n }\n // Mirror bar's `computeNiceBounds`: clamp min to 0 when data is\n // non-negative (gridline reads cleanly from zero), apply `niceNum` to\n // negative mins, and floor max=0 to 1 so the chart always has range.\n // Scatter can have free coordinates so we apply this per-axis.\n const niceMaxX = Number.isFinite(maxX) ? (maxX <= 0 ? 1 : niceNum(maxX)) : 1\n const niceMaxY = Number.isFinite(maxY) ? (maxY <= 0 ? 1 : niceNum(maxY)) : 1\n const niceMinX = Number.isFinite(minX) ? (minX < 0 ? niceNum(minX) : 0) : 0\n const niceMinY = Number.isFinite(minY) ? (minY < 0 ? niceNum(minY) : 0) : 0\n return { niceMinX, niceMaxX, niceMinY, niceMaxY }\n}\n","import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\n\nconst styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n height: ({ spacing }) => spacing(38),\n },\n grid: {\n position: 'relative',\n flex: '1 1 auto',\n width: '100%',\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n },\n} satisfies Record<string, SxProps<Theme>>\n\n// `sx` callback that needs runtime args — extracted at module scope so the\n// `styles` object can satisfy `Record<string, SxProps<Theme>>` cleanly\n// (function `sx`-with-args isn't assignable to plain `SxProps<Theme>`).\nconst dotSx = (top: string, left: string, size: number): SxProps<Theme> => ({\n position: 'absolute',\n top,\n left,\n width: size,\n height: size,\n borderRadius: '50%',\n})\n\nexport interface ScatterplotSkeletonProps {\n /** Number of dots to render. */\n count?: number\n}\n\n/**\n * Loading state for the Scatterplot widget. Mirrors a scatter chart's\n * silhouette — a deterministic spread of small circular dots in the plot\n * area plus a legend stub — so the skeleton reads as \"a scatter chart\"\n * rather than a generic list. Matches bar/histogram/pie skeleton structure\n * (grid stub + legend stub in a flex column).\n */\nexport function ScatterplotSkeleton({ count = 24 }: ScatterplotSkeletonProps) {\n // Deterministic pseudo-scatter positions so the skeleton doesn't flicker.\n const dots = Array.from({ length: count }, (_, i) => {\n const top = 10 + ((i * 37) % 80)\n const left = 5 + ((i * 53) % 90)\n const size = 8 + ((i * 7) % 6)\n return { top: `${top}%`, left: `${left}%`, size }\n })\n return (\n <Box sx={styles.container}>\n <Box sx={styles.grid}>\n {dots.map((d, i) => (\n <Skeleton\n key={`dot-${i}`}\n variant='circular'\n sx={dotSx(d.top, d.left, d.size)}\n />\n ))}\n </Box>\n <Box sx={styles.legend}>\n {[0, 1].map((i) => (\n <Box key={`legend-${i}`} sx={styles.legendItem}>\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import {\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { ScatterplotWidgetData } from './types'\n\n/**\n * Download menu items for the Scatterplot widget. Always includes a CSV\n * item with `series, x, y` columns (one row per point). When\n * `getCaptureEl` is supplied, prepends a PNG item that rasterises the\n * captured element via `html2canvas`.\n */\nexport function createScatterplotDownloadConfig(args: {\n filename: string\n getData: () => ScatterplotWidgetData\n seriesNames?: readonly string[]\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const data = args.getData()\n const rows: unknown[][] = [['series', 'x', 'y']]\n for (const [i, series] of data.entries()) {\n const seriesName = args.seriesNames?.[i] ?? `series_${i + 1}`\n for (const [x, y] of series) {\n rows.push([seriesName, x, y])\n }\n }\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n","/**\n * Scatterplot-specific `RelativeData` transform. Scatter data is\n * `[number, number][]` — each series is a list of `[x, y]` tuples.\n * Relative is a values-axis concept, so this rewrites `y` to its\n * share of the series's total `y` (0–100) and leaves `x` raw — x is\n * coordinate space, not part of the cohort total.\n *\n * Pass to `<Widget.RelativeData transform={toRelativeScatterplotData} />`.\n *\n * The denominator is the sum of |y| across the series so mixed-sign\n * y values produce sane signed shares-of-magnitude. A series whose\n * total y-magnitude is zero (all-zero or empty input) is returned\n * unchanged so a stalled or empty data set doesn't show misleading 0%\n * values. Inputs whose shape isn't `[number, number][]` fall through\n * untouched.\n */\nexport const toRelativeScatterplotData = (input: unknown): unknown => {\n if (!Array.isArray(input)) return input\n return input.map((series: unknown): unknown => {\n if (!isXyTupleArray(series)) return series\n const total = series.reduce((acc, [, y]) => acc + Math.abs(y), 0)\n if (total <= 0) return series\n return series.map(([x, y]) => [x, (y / total) * 100] as [number, number])\n })\n}\n\nfunction isXyTupleArray(v: unknown): v is [number, number][] {\n if (!Array.isArray(v)) return false\n return v.every(\n (item) =>\n Array.isArray(item) &&\n item.length === 2 &&\n typeof item[0] === 'number' &&\n Number.isFinite(item[0]) &&\n typeof item[1] === 'number' &&\n Number.isFinite(item[1]),\n )\n}\n"],"names":["scatterplotOptions","theme","xFormatter","yFormatter","grid","left","parseInt","spacing","top","right","buildGridConfig","containLabel","tooltip","trigger","backgroundColor","palette","grey","borderWidth","padding","textStyle","color","common","white","fontSize","fontFamily","typography","caption","position","createTooltipPositioner","formatter","buildScatterTooltipFormatter","legend","buildLegendConfig","hasLegend","labelFormatter","undefined","axisPointer","lineStyle","secondary","main","Object","values","qualitative","bold","xAxis","type","axisLine","show","axisTick","axisLabel","overlineDelicate","black","margin","hideOverlap","showMinLabel","showMaxLabel","splitLine","divider","yAxis","createScatterplotOptionFactory","options","optionsOverride","series","symbolSize","selection","selectionSet","length","Set","option","data","ctx","structural","mergeOptions","seriesArr","Array","isArray","dataset","baseLegend","baseGrid","baseTooltip","baseXAxis","baseYAxis","reactiveFormatter","niceMinX","niceMaxX","niceMinY","niceMaxY","computeScatterBounds","makeDimColor","seriesIdx","params","base","key","dataIndex","has","echarts","modifyAlpha","dataZoomLayout","layoutDataZoomForScatter","dataZoom","hasXSlider","hasYSlider","fallbackBottom","bottom","baseBottom","gridBottom","ZOOM_LAYOUT","sliderHeight","sliderGap","fallbackRight","gridRight","map","s","source","_","i","overrideColor","resolveThemeColor","datasetIndex","name","encode","x","y","emphasis","focus","itemStyle","entries","min","max","buildReactiveScatterTooltipFormatter","entry","dz","yAxisIndex","sliderBottomWithLegend","structuralFormatter","reactiveYFormatter","createTooltipFormatter","item","value","formattedX","String","formattedY","marker","seriesName","minX","Infinity","maxX","minY","maxY","point","Number","isFinite","niceNum","styles","container","display","alignItems","justifyContent","flexDirection","gap","height","flex","width","legendItem","dotSx","size","borderRadius","ScatterplotSkeleton","t0","$","_c","count","t1","T0","T1","t2","t3","t4","dots","from","_temp","Box","_temp2","t5","jsx","t6","Symbol","for","_temp3","t7","i_1","jsxs","Skeleton","d","i_0","createScatterplotDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","pngBackgroundColor","id","label","resolve","getData","rows","seriesNames","handle","downloadToCSV","Promise","url","revoke","toRelativeScatterplotData","input","isXyTupleArray","total","reduce","acc","Math","abs","v","every"],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { S as $, a as B, b as R } from "../spread-CTuIXZSM.js";
2
+ import { jsx as a } from "react/jsx-runtime";
3
+ import { c as m } from "react/compiler-runtime";
4
+ import { Box as p, Skeleton as s } from "@mui/material";
5
+ import "react";
6
+ import "@mui/icons-material/FileDownload";
7
+ import "../lasso-tool-BYbxrJ-7.js";
8
+ import "../cjs-D4KH3azB.js";
9
+ import "@mui/icons-material";
10
+ import { a as c } from "../exports-Cx-f6m6U.js";
11
+ import "@mui/icons-material/ImageOutlined";
12
+ import { b as f } from "../png-item-CS4z1iSH.js";
13
+ const l = {
14
+ root: {
15
+ display: "flex",
16
+ flexDirection: "column",
17
+ gap: 2,
18
+ py: 1
19
+ },
20
+ row: {
21
+ display: "flex",
22
+ alignItems: "center",
23
+ gap: 1.5
24
+ },
25
+ block: {
26
+ width: 200,
27
+ height: 32
28
+ }
29
+ };
30
+ function D(o) {
31
+ const e = m(2), {
32
+ count: i
33
+ } = o, r = i === void 0 ? 1 : i;
34
+ let t;
35
+ return e[0] !== r ? (t = /* @__PURE__ */ a(p, { sx: l.root, children: Array.from({
36
+ length: r
37
+ }).map(u) }), e[0] = r, e[1] = t) : t = e[1], t;
38
+ }
39
+ function u(o, e) {
40
+ return /* @__PURE__ */ a(p, { sx: l.row, children: /* @__PURE__ */ a(s, { variant: "rectangular", sx: l.block }) }, `row-${e}`);
41
+ }
42
+ function E(o) {
43
+ const e = [];
44
+ return o.getCaptureEl && e.push(f({
45
+ filename: o.filename,
46
+ getCaptureEl: o.getCaptureEl,
47
+ pixelRatio: o.pngPixelRatio,
48
+ backgroundColor: o.pngBackgroundColor
49
+ })), e.push({
50
+ id: "csv",
51
+ label: "Download as CSV",
52
+ resolve: () => {
53
+ const i = o.getData(), r = [["series", "prefix", "min", "max", "suffix", "note"]];
54
+ for (const n of i)
55
+ r.push([n.series?.name ?? "", n.prefix ?? "", n.min, n.max, n.suffix ?? "", n.note ?? ""]);
56
+ const t = c(r);
57
+ return Promise.resolve({
58
+ url: t.url,
59
+ filename: `${o.filename}.csv`,
60
+ revoke: t.revoke
61
+ });
62
+ }
63
+ }), e;
64
+ }
65
+ export {
66
+ $ as Separator,
67
+ B as Spread,
68
+ D as SpreadSkeleton,
69
+ R as SpreadUI,
70
+ E as createSpreadDownloadConfig
71
+ };
72
+ //# sourceMappingURL=spread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spread.js","sources":["../../src/widgets-v2/spread/skeleton.tsx","../../src/widgets-v2/spread/download.ts"],"sourcesContent":["import { Box, Skeleton } from '@mui/material'\nimport type { SxProps, Theme } from '@mui/material'\n\nconst styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n py: 1,\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n },\n block: { width: 200, height: 32 },\n} satisfies Record<string, SxProps<Theme>>\n\nexport interface SpreadSkeletonProps {\n count?: number\n}\n\n/**\n * Loading placeholder for the Spread widget. Renders `count` rows, each\n * sized for the `min — max` pair so the layout doesn't jump once data\n * resolves. Mirrors the row-per-item structure of {@link SpreadUI}.\n */\nexport function SpreadSkeleton({ count = 1 }: SpreadSkeletonProps) {\n return (\n <Box sx={styles.root}>\n {Array.from({ length: count }).map((_, i) => (\n <Box key={`row-${i}`} sx={styles.row}>\n <Skeleton variant='rectangular' sx={styles.block} />\n </Box>\n ))}\n </Box>\n )\n}\n","import {\n buildPngDownloadItem,\n downloadToCSV,\n type DownloadItem,\n} from '../actions/download'\nimport type { SpreadWidgetData } from './types'\n\n/**\n * Download menu items for the Spread widget. Always includes a CSV item\n * with `series, prefix, min, max, suffix, note` columns (one row per\n * entry). When `getCaptureEl` is supplied, prepends a PNG item that\n * rasterises the captured element via `html2canvas`.\n */\nexport function createSpreadDownloadConfig(args: {\n filename: string\n getData: () => SpreadWidgetData\n getCaptureEl?: () => HTMLElement | null\n pngPixelRatio?: number\n pngBackgroundColor?: string | null\n}): DownloadItem[] {\n const items: DownloadItem[] = []\n if (args.getCaptureEl) {\n items.push(\n buildPngDownloadItem({\n filename: args.filename,\n getCaptureEl: args.getCaptureEl,\n pixelRatio: args.pngPixelRatio,\n backgroundColor: args.pngBackgroundColor,\n }),\n )\n }\n items.push({\n id: 'csv',\n label: 'Download as CSV',\n resolve: () => {\n const data = args.getData()\n const rows: unknown[][] = [\n ['series', 'prefix', 'min', 'max', 'suffix', 'note'],\n ]\n for (const item of data) {\n rows.push([\n item.series?.name ?? '',\n item.prefix ?? '',\n item.min,\n item.max,\n item.suffix ?? '',\n item.note ?? '',\n ])\n }\n const handle = downloadToCSV(rows)\n return Promise.resolve({\n url: handle.url,\n filename: `${args.filename}.csv`,\n revoke: handle.revoke,\n })\n },\n })\n return items\n}\n"],"names":["styles","root","display","flexDirection","gap","py","row","alignItems","block","width","height","SpreadSkeleton","t0","$","_c","count","t1","undefined","t2","Box","Array","from","length","map","_temp","_","i","jsx","Skeleton","createSpreadDownloadConfig","args","items","getCaptureEl","push","buildPngDownloadItem","filename","pixelRatio","pngPixelRatio","backgroundColor","pngBackgroundColor","id","label","resolve","data","getData","rows","item","series","name","prefix","min","max","suffix","note","handle","downloadToCSV","Promise","url","revoke"],"mappings":";;;;;;;;;;;;AAGA,MAAMA,IAAS;AAAA,EACbC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,KAAK;AAAA,IACLC,IAAI;AAAA,EAAA;AAAA,EAENC,KAAK;AAAA,IACHJ,SAAS;AAAA,IACTK,YAAY;AAAA,IACZH,KAAK;AAAA,EAAA;AAAA,EAEPI,OAAO;AAAA,IAAEC,OAAO;AAAA,IAAKC,QAAQ;AAAA,EAAA;AAC/B;AAWO,SAAAC,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAwB;AAAA,IAAAC,OAAAC;AAAAA,EAAAA,IAAAJ,GAAEG,IAAAC,MAAAC,SAAA,IAAAD;AAAS,MAAAE;AAAA,SAAAL,SAAAE,KAEtCG,sBAACC,GAAA,EAAQ,IAAAnB,EAAMC,MACZmB,gBAAKC,KAAM;AAAA,IAAAC,QAAUP;AAAAA,EAAAA,CAAO,EAACQ,IAAKC,CAIlC,GACH,GAAMX,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GANNK;AAMM;AARH,SAAAM,EAAAC,GAAAC,GAAA;AAAA,SAIC,gBAAAC,EAACR,GAAA,EAAyB,IAAAnB,EAAMM,KAC9B,UAAA,gBAAAqB,EAACC,GAAA,EAAiB,SAAA,eAAkB,IAAA5B,EAAMQ,MAAAA,CAAM,EAAA,GADxC,OAAOkB,CAAC,EAElB;AAAM;ACpBP,SAASG,EAA2BC,GAMxB;AACjB,QAAMC,IAAwB,CAAA;AAC9B,SAAID,EAAKE,gBACPD,EAAME,KACJC,EAAqB;AAAA,IACnBC,UAAUL,EAAKK;AAAAA,IACfH,cAAcF,EAAKE;AAAAA,IACnBI,YAAYN,EAAKO;AAAAA,IACjBC,iBAAiBR,EAAKS;AAAAA,EAAAA,CACvB,CACH,GAEFR,EAAME,KAAK;AAAA,IACTO,IAAI;AAAA,IACJC,OAAO;AAAA,IACPC,SAASA,MAAM;AACb,YAAMC,IAAOb,EAAKc,QAAAA,GACZC,IAAoB,CACxB,CAAC,UAAU,UAAU,OAAO,OAAO,UAAU,MAAM,CAAC;AAEtD,iBAAWC,KAAQH;AACjBE,QAAAA,EAAKZ,KAAK,CACRa,EAAKC,QAAQC,QAAQ,IACrBF,EAAKG,UAAU,IACfH,EAAKI,KACLJ,EAAKK,KACLL,EAAKM,UAAU,IACfN,EAAKO,QAAQ,EAAE,CAChB;AAEH,YAAMC,IAASC,EAAcV,CAAI;AACjC,aAAOW,QAAQd,QAAQ;AAAA,QACrBe,KAAKH,EAAOG;AAAAA,QACZtB,UAAU,GAAGL,EAAKK,QAAQ;AAAA,QAC1BuB,QAAQJ,EAAOI;AAAAA,MAAAA,CAChB;AAAA,IACH;AAAA,EAAA,CACD,GACM3B;AACT;"}