@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,405 @@
1
+ import * as E from "echarts";
2
+ import { d as H, g as V, c as W, n as h, f as M } from "../option-builders-F-c9ELi1.js";
3
+ import { jsx as b, jsxs as Y } from "react/jsx-runtime";
4
+ import { c as q } from "react/compiler-runtime";
5
+ import { Skeleton as I, Box as S } 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 g } from "../transforms-Cdx4fkU5.js";
24
+ import { m as U } from "../merge-options-DCkkHZIf.js";
25
+ import "@mui/icons-material/FileDownload";
26
+ import { a as J } from "../exports-Cx-f6m6U.js";
27
+ import "@mui/icons-material/ImageOutlined";
28
+ import { b as K } from "../png-item-CS4z1iSH.js";
29
+ function Q({
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: re(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 je(e) {
129
+ const {
130
+ theme: t,
131
+ xFormatter: r,
132
+ yFormatter: i,
133
+ optionsOverride: n
134
+ } = e, a = e.seriesNames, s = 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 m = Q({
138
+ theme: t,
139
+ xFormatter: r,
140
+ yFormatter: i
141
+ });
142
+ return n ? U(m, n) : m;
143
+ }
144
+ const f = Array.isArray(u) ? u : [];
145
+ if (f.length === 0)
146
+ return {
147
+ ...o,
148
+ dataset: [],
149
+ series: []
150
+ };
151
+ const v = f.length > 1, C = typeof o.legend == "object" && !Array.isArray(o.legend) ? o.legend : {}, y = typeof o.grid == "object" && !Array.isArray(o.grid) ? o.grid : {}, L = typeof o.tooltip == "object" && !Array.isArray(o.tooltip) ? o.tooltip : {}, X = typeof o.xAxis == "object" && !Array.isArray(o.xAxis) ? o.xAxis : {}, N = typeof o.yAxis == "object" && !Array.isArray(o.yAxis) ? o.yAxis : {}, k = p?.formatter, {
152
+ niceMinX: D,
153
+ niceMaxX: T,
154
+ niceMinY: j,
155
+ niceMaxY: O
156
+ } = oe(f), z = (m) => (d) => {
157
+ const w = d.color;
158
+ if (!c) return w;
159
+ const Z = `${m}:${d.dataIndex}`;
160
+ return c.has(Z) ? w : E.color.modifyAlpha(w, 0.15);
161
+ }, x = ee(o.dataZoom, v), _ = x?.hasXSlider ?? !1, B = x?.hasYSlider ?? !1, R = typeof y.bottom == "number" ? y.bottom : 24, $ = v ? 56 : R, P = _ ? $ + g.sliderHeight + g.sliderGap : $, F = typeof y.right == "number" ? y.right : 8, G = B ? F + g.sliderHeight + g.sliderGap : F;
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((m) => ({
167
+ source: m
168
+ })),
169
+ series: f.map((m, d) => ({
170
+ type: "scatter",
171
+ datasetIndex: d,
172
+ name: a?.[d] ?? `Series ${d + 1}`,
173
+ encode: {
174
+ x: 0,
175
+ y: 1
176
+ },
177
+ symbolSize: s,
178
+ emphasis: {
179
+ focus: "series"
180
+ },
181
+ itemStyle: {
182
+ color: z(d)
183
+ }
184
+ })),
185
+ legend: {
186
+ ...C,
187
+ show: v
188
+ },
189
+ grid: {
190
+ ...y,
191
+ bottom: P,
192
+ right: G
193
+ },
194
+ ...x ? {
195
+ dataZoom: x.entries
196
+ } : {},
197
+ xAxis: {
198
+ ...X,
199
+ min: D,
200
+ max: T
201
+ },
202
+ yAxis: {
203
+ ...N,
204
+ min: j,
205
+ max: O,
206
+ axisLabel: {
207
+ ...N.axisLabel ?? {},
208
+ // Re-derive the y-axis formatter at fusion time so RelativeData's
209
+ // percent formatter (written to `state.formatter`) flows through
210
+ // without rebuilding the structural option. Falls back to the
211
+ // structural `yFormatter` already baked in `baseYAxis.axisLabel`
212
+ // (which `String(value)` if neither is set).
213
+ ...k ? {
214
+ formatter: k
215
+ } : {}
216
+ }
217
+ },
218
+ tooltip: {
219
+ ...L,
220
+ // Rebuild the tooltip formatter so the live y-axis formatter is
221
+ // applied to the y-coordinate in the (x, y) label. xFormatter is
222
+ // structural — relative is a values-axis concept, so xFormatter
223
+ // doesn't change under RelativeData.
224
+ formatter: te(L.formatter, k, r)
225
+ }
226
+ };
227
+ };
228
+ }
229
+ function ee(e, t) {
230
+ if (!Array.isArray(e) || e.length === 0) return null;
231
+ let r = !1, i = !1;
232
+ return {
233
+ entries: e.map((a) => {
234
+ if (a == null || typeof a != "object") return a;
235
+ const s = a;
236
+ return s.type !== "slider" ? s : s.yAxisIndex !== void 0 ? (i = !0, s) : (r = !0, t ? {
237
+ ...s,
238
+ bottom: g.sliderBottomWithLegend
239
+ } : s);
240
+ }),
241
+ hasXSlider: r,
242
+ hasYSlider: i
243
+ };
244
+ }
245
+ function te(e, t, r) {
246
+ return t ? M((i) => {
247
+ const n = i.value, a = n?.[0], s = n?.[1], l = typeof a == "number" ? r ? r(a) : String(a) : "", c = typeof s == "number" ? t(s) : String(s ?? ""), o = typeof i.marker == "string" ? i.marker : "", u = i.seriesName ? `${i.seriesName}: ` : "";
248
+ return {
249
+ name: `(${l}, ${c})`,
250
+ seriesName: u,
251
+ marker: o,
252
+ value: ""
253
+ };
254
+ }) : e;
255
+ }
256
+ function re(e, t) {
257
+ return M((r) => {
258
+ const i = r.value, n = i?.[0], a = i?.[1], s = typeof n == "number" ? e ? e(n) : String(n) : "", l = typeof a == "number" ? t ? t(a) : String(a) : "", c = typeof r.marker == "string" ? r.marker : "", o = r.seriesName ? `${r.seriesName}: ` : "";
259
+ return {
260
+ name: `(${s}, ${l})`,
261
+ seriesName: o,
262
+ marker: c,
263
+ value: ""
264
+ };
265
+ });
266
+ }
267
+ function oe(e) {
268
+ let t = 1 / 0, r = -1 / 0, i = 1 / 0, n = -1 / 0;
269
+ for (const o of e)
270
+ for (const u of o) {
271
+ const p = u?.[0], f = u?.[1];
272
+ 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));
273
+ }
274
+ const a = Number.isFinite(r) ? r <= 0 ? 1 : h(r) : 1, s = Number.isFinite(n) ? n <= 0 ? 1 : h(n) : 1, l = Number.isFinite(t) && t < 0 ? h(t) : 0, c = Number.isFinite(i) && i < 0 ? h(i) : 0;
275
+ return {
276
+ niceMinX: l,
277
+ niceMaxX: a,
278
+ niceMinY: c,
279
+ niceMaxY: s
280
+ };
281
+ }
282
+ const A = {
283
+ container: {
284
+ display: "flex",
285
+ alignItems: "center",
286
+ justifyContent: "space-between",
287
+ flexDirection: "column",
288
+ gap: ({
289
+ spacing: e
290
+ }) => e(1),
291
+ height: ({
292
+ spacing: e
293
+ }) => e(38)
294
+ },
295
+ grid: {
296
+ position: "relative",
297
+ flex: "1 1 auto",
298
+ width: "100%"
299
+ },
300
+ legend: {
301
+ display: "flex",
302
+ alignItems: "center",
303
+ gap: ({
304
+ spacing: e
305
+ }) => e(2),
306
+ height: ({
307
+ spacing: e
308
+ }) => e(5)
309
+ },
310
+ legendItem: {
311
+ display: "flex",
312
+ alignItems: "center",
313
+ gap: ({
314
+ spacing: e
315
+ }) => e(1.5)
316
+ }
317
+ }, ie = (e, t, r) => ({
318
+ position: "absolute",
319
+ top: e,
320
+ left: t,
321
+ width: r,
322
+ height: r,
323
+ borderRadius: "50%"
324
+ });
325
+ function Oe(e) {
326
+ const t = q(15), {
327
+ count: r
328
+ } = e, i = r === void 0 ? 24 : r;
329
+ let n, a, s, l, c;
330
+ if (t[0] !== i) {
331
+ const f = Array.from({
332
+ length: i
333
+ }, se);
334
+ a = S, c = A.container, n = S, s = A.grid, l = f.map(ae), t[0] = i, t[1] = n, t[2] = a, t[3] = s, t[4] = l, t[5] = c;
335
+ } else
336
+ n = t[1], a = t[2], s = t[3], l = t[4], c = t[5];
337
+ let o;
338
+ t[6] !== n || t[7] !== s || t[8] !== l ? (o = /* @__PURE__ */ b(n, { sx: s, children: l }), t[6] = n, t[7] = s, t[8] = l, t[9] = o) : o = t[9];
339
+ let u;
340
+ t[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (u = /* @__PURE__ */ b(S, { sx: A.legend, children: [0, 1].map(ne) }), t[10] = u) : u = t[10];
341
+ let p;
342
+ return t[11] !== a || t[12] !== c || t[13] !== o ? (p = /* @__PURE__ */ Y(a, { sx: c, children: [
343
+ o,
344
+ u
345
+ ] }), t[11] = a, t[12] = c, t[13] = o, t[14] = p) : p = t[14], p;
346
+ }
347
+ function ne(e) {
348
+ return /* @__PURE__ */ Y(S, { sx: A.legendItem, children: [
349
+ /* @__PURE__ */ b(I, { variant: "circular", width: 8, height: 8 }),
350
+ /* @__PURE__ */ b(I, { width: 48, height: 8 })
351
+ ] }, `legend-${e}`);
352
+ }
353
+ function ae(e, t) {
354
+ return /* @__PURE__ */ b(I, { variant: "circular", sx: ie(e.top, e.left, e.size) }, `dot-${t}`);
355
+ }
356
+ function se(e, t) {
357
+ const r = 10 + t * 37 % 80, i = 5 + t * 53 % 90, n = 8 + t * 7 % 6;
358
+ return {
359
+ top: `${r}%`,
360
+ left: `${i}%`,
361
+ size: n
362
+ };
363
+ }
364
+ function ze(e) {
365
+ const t = [];
366
+ return e.getCaptureEl && t.push(K({
367
+ filename: e.filename,
368
+ getCaptureEl: e.getCaptureEl,
369
+ pixelRatio: e.pngPixelRatio,
370
+ backgroundColor: e.pngBackgroundColor
371
+ })), t.push({
372
+ id: "csv",
373
+ label: "Download as CSV",
374
+ resolve: () => {
375
+ const r = e.getData(), i = [["series", "x", "y"]];
376
+ for (const [a, s] of r.entries()) {
377
+ const l = e.seriesNames?.[a] ?? `series_${a + 1}`;
378
+ for (const [c, o] of s)
379
+ i.push([l, c, o]);
380
+ }
381
+ const n = J(i);
382
+ return Promise.resolve({
383
+ url: n.url,
384
+ filename: `${e.filename}.csv`,
385
+ revoke: n.revoke
386
+ });
387
+ }
388
+ }), t;
389
+ }
390
+ const _e = (e) => Array.isArray(e) ? e.map((t) => {
391
+ if (!le(t)) return t;
392
+ const r = t.reduce((i, [, n]) => i + Math.abs(n), 0);
393
+ return r <= 0 ? t : t.map(([i, n]) => [i, n / r * 100]);
394
+ }) : e;
395
+ function le(e) {
396
+ 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;
397
+ }
398
+ export {
399
+ Oe as ScatterplotSkeleton,
400
+ ze as createScatterplotDownloadConfig,
401
+ je as createScatterplotOptionFactory,
402
+ Q as scatterplotOptions,
403
+ _e as toRelativeScatterplotData
404
+ };
405
+ //# 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 } 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 seriesNames = options.seriesNames\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 type: 'scatter' as const,\n datasetIndex: i,\n name: seriesNames?.[i] ?? `Series ${i + 1}`,\n encode: { x: 0, y: 1 },\n symbolSize,\n emphasis: { focus: 'series' },\n itemStyle: { color: makeDimColor(i) },\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","seriesNames","symbolSize","selection","selectionSet","length","Set","option","data","ctx","structural","mergeOptions","seriesArr","Array","isArray","dataset","series","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","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","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;"}
@@ -0,0 +1,42 @@
1
+ import { u as o } from "../widget-store-registry-_W4Z4xp-.js";
2
+ import { _ as c, a as p, c as W, b as m, d as f, e as S, f as E, g as h, h as b, i as T, j as x, p as C, r as I, k as A, l as _, s as v, m as w, n as y, o as j, q as k, t as q, v as L } from "../widget-store-registry-_W4Z4xp-.js";
3
+ import { W as $, u as z } from "../widget-context-DTGO0Yta.js";
4
+ import { u as D, a as F, b as G } from "../use-transform-DXPN3nY7.js";
5
+ import { c as i } from "react/compiler-runtime";
6
+ function g(a, s) {
7
+ const e = i(2);
8
+ let t;
9
+ return e[0] !== s ? (t = (r) => r.transformStates?.[s]?.enabled === !0, e[0] = s, e[1] = t) : t = e[1], o(a, t);
10
+ }
11
+ export {
12
+ $ as WidgetContext,
13
+ c as __debugListWidgetStores,
14
+ p as applyTransforms,
15
+ W as clearAllCaptureEls,
16
+ m as clearAllEchartInstances,
17
+ f as clearAllWidgetStores,
18
+ S as createWidgetStore,
19
+ E as deleteWidgetStore,
20
+ h as getCaptureEl,
21
+ b as getEchartInstance,
22
+ T as getWidgetStore,
23
+ x as hasWidgetStore,
24
+ C as pipelineMiddleware,
25
+ I as registerWidgetStore,
26
+ A as removeTransform,
27
+ _ as resetWidgetStore,
28
+ v as setCaptureEl,
29
+ w as setEchartInstance,
30
+ y as setWidgetStoreEntry,
31
+ j as subscribeEchartInstance,
32
+ k as unregisterWidgetStore,
33
+ q as upsertTransform,
34
+ D as useEchartInstance,
35
+ F as useSingleTransform,
36
+ G as useTransform,
37
+ g as useTransformEnabled,
38
+ L as useWidget,
39
+ z as useWidgetId,
40
+ o as useWidgetShallow
41
+ };
42
+ //# sourceMappingURL=stores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stores.js","sources":["../../src/widgets-v2/stores/use-transform-enabled.ts"],"sourcesContent":["import { useWidgetShallow } from './widget-store-registry'\nimport type { WidgetState } from './types'\n\n/**\n * Reactive read of a single transform's `enabled` flag from the\n * per-widget store. Returns `false` if the transform hasn't been\n * registered yet (i.e., the action component hasn't mounted) — safe\n * default for \"the feature is off\".\n *\n * Used by widget composers that want to react to an action's on/off\n * cycle without having the widget primitive import the action. For\n * example, the `CategoryWidget` storybook composer wires the\n * SearcherToggle's open state into `<Widget.Category searcherOpen=…>`\n * so the library primitive stays renderer-agnostic.\n *\n * Magic-string `transformId` is intentional — it lives at the composer\n * layer where the action is already imported by JSX, so the string\n * appears alongside the same name in the toolbox.\n */\nexport function useTransformEnabled(id: string, transformId: string): boolean {\n return useWidgetShallow(\n id,\n (s: WidgetState) => s.transformStates?.[transformId]?.enabled === true,\n )\n}\n"],"names":["useTransformEnabled","id","transformId","$","_c","t0","s","transformStates","enabled","useWidgetShallow"],"mappings":";;;;;AAmBO,SAAAA,EAAAC,GAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,SAAAD,KAGHG,IAAAC,CAAAA,MAAoBA,EAACC,kBAAmBL,CAAW,GAAUM,YAAK,IAAIL,OAAAD,GAAAC,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAFjEM,EACLR,GACAI,CACF;AAAC;"}