@carto/ps-react-ui 4.20.0 → 4.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/dist/actions-DKX98LlI.js +1318 -0
  2. package/dist/actions-DKX98LlI.js.map +1 -0
  3. package/dist/actions-Dy9JVr7F.js +1004 -0
  4. package/dist/actions-Dy9JVr7F.js.map +1 -0
  5. package/dist/category-DHZscHaS.js +826 -0
  6. package/dist/category-DHZscHaS.js.map +1 -0
  7. package/dist/chart-config-BGt7wkK7.js +108 -0
  8. package/dist/chart-config-BGt7wkK7.js.map +1 -0
  9. package/dist/chat.js +1589 -1711
  10. package/dist/chat.js.map +1 -1
  11. package/dist/cjs-CBrZjPCj.js +75 -0
  12. package/dist/cjs-CBrZjPCj.js.map +1 -0
  13. package/dist/components-DDt4mOQn.js +2403 -0
  14. package/dist/components-DDt4mOQn.js.map +1 -0
  15. package/dist/components.js +5 -1841
  16. package/dist/copy-button-DaQqWVu0.js +25 -0
  17. package/dist/copy-button-DaQqWVu0.js.map +1 -0
  18. package/dist/csv-modifiers-D6HGC24b.js +26 -0
  19. package/dist/csv-modifiers-D6HGC24b.js.map +1 -0
  20. package/dist/download-BT6qBamM.js +232 -0
  21. package/dist/download-BT6qBamM.js.map +1 -0
  22. package/dist/echart-BkaV3V5G.js +133 -0
  23. package/dist/echart-BkaV3V5G.js.map +1 -0
  24. package/dist/echart-DSz2Tu0z.js +250 -0
  25. package/dist/echart-DSz2Tu0z.js.map +1 -0
  26. package/dist/formatter-wVO81tYk.js +6 -0
  27. package/dist/formatter-wVO81tYk.js.map +1 -0
  28. package/dist/formula-Bk9CBzm2.js +190 -0
  29. package/dist/formula-Bk9CBzm2.js.map +1 -0
  30. package/dist/formula-Dsru_p-g.js +285 -0
  31. package/dist/formula-Dsru_p-g.js.map +1 -0
  32. package/dist/hooks-zf5gKZYq.js +22 -0
  33. package/dist/hooks-zf5gKZYq.js.map +1 -0
  34. package/dist/legend/stores.js +2 -24
  35. package/dist/legend.js +2274 -2323
  36. package/dist/legend.js.map +1 -1
  37. package/dist/markdown-DnSJMPjQ.js +165 -0
  38. package/dist/markdown-DnSJMPjQ.js.map +1 -0
  39. package/dist/markdown-content-BzKoX3eu.js +8764 -0
  40. package/dist/markdown-content-BzKoX3eu.js.map +1 -0
  41. package/dist/range-BPWVrAsY.js +277 -0
  42. package/dist/range-BPWVrAsY.js.map +1 -0
  43. package/dist/rolldown-runtime-B0aSnxlc.js +20 -0
  44. package/dist/row-CvVGBuy_.js +35 -0
  45. package/dist/row-CvVGBuy_.js.map +1 -0
  46. package/dist/shared-resize-observer-BEiP2rQt.js +157 -0
  47. package/dist/shared-resize-observer-BEiP2rQt.js.map +1 -0
  48. package/dist/smart-tooltip-CwGHCqab.js +34 -0
  49. package/dist/smart-tooltip-CwGHCqab.js.map +1 -0
  50. package/dist/spread-Dy8pshpN.js +149 -0
  51. package/dist/spread-Dy8pshpN.js.map +1 -0
  52. package/dist/stores-B81-IU1G.js +374 -0
  53. package/dist/stores-B81-IU1G.js.map +1 -0
  54. package/dist/stores-BVFMfgyo.js +248 -0
  55. package/dist/stores-BVFMfgyo.js.map +1 -0
  56. package/dist/styles-Y-qGBELO.js +13 -0
  57. package/dist/styles-Y-qGBELO.js.map +1 -0
  58. package/dist/table-BfTG6rrs.js +439 -0
  59. package/dist/table-BfTG6rrs.js.map +1 -0
  60. package/dist/tooltip-DJUGNZxY.js +23 -0
  61. package/dist/tooltip-DJUGNZxY.js.map +1 -0
  62. package/dist/types/chat/bubbles/chat-agent-message-markdown.d.ts +1 -1
  63. package/dist/types/chat/bubbles/chat-error-message.d.ts +1 -1
  64. package/dist/types/chat/bubbles/chat-suggestion-button.d.ts +1 -1
  65. package/dist/types/chat/bubbles/chat-user-message.d.ts +1 -1
  66. package/dist/types/chat/containers/chat-footer.d.ts +1 -1
  67. package/dist/types/chat/containers/chat-header.d.ts +1 -1
  68. package/dist/types/chat/containers/chat-starter.d.ts +1 -1
  69. package/dist/types/chat/feedback/chat-loader.d.ts +1 -1
  70. package/dist/types/chat/feedback/chat-rating-action.d.ts +1 -1
  71. package/dist/types/chat/feedback/chat-thinking.d.ts +1 -1
  72. package/dist/types/chat/feedback/chat-tool-code-area.d.ts +1 -1
  73. package/dist/types/chat/feedback/chat-tool-full-view-dialog.d.ts +1 -1
  74. package/dist/types/chat/feedback/chat-tool-group.d.ts +1 -1
  75. package/dist/types/chat/feedback/chat-tool-trace.d.ts +2 -2
  76. package/dist/types/components/basemaps/group-wrapper.d.ts +1 -1
  77. package/dist/types/components/basemaps/group.d.ts +1 -1
  78. package/dist/types/components/basemaps/header.d.ts +1 -1
  79. package/dist/types/components/copy-button/copy-button.d.ts +1 -1
  80. package/dist/types/components/lasso-tool/chip.d.ts +1 -1
  81. package/dist/types/components/lasso-tool/icons.d.ts +7 -7
  82. package/dist/types/components/lasso-tool/lasso-tool.d.ts +4 -4
  83. package/dist/types/components/lasso-tool/message.d.ts +1 -1
  84. package/dist/types/components/list-data/list-data-skeleton.d.ts +1 -1
  85. package/dist/types/components/measurement-tools/icons.d.ts +3 -3
  86. package/dist/types/components/no-data-alert/no-data-alert.d.ts +1 -1
  87. package/dist/types/components/responsive-drawer/responsive-drawer.d.ts +1 -1
  88. package/dist/types/components/smart-tooltip/smart-tooltip.d.ts +1 -1
  89. package/dist/types/components/tooltip/tooltip.d.ts +1 -1
  90. package/dist/types/hooks/use-widget-ref.d.ts +2 -1
  91. package/dist/types/legend/components/legend-actions/legend-actions.d.ts +1 -1
  92. package/dist/types/legend/components/legend-category/legend-category-ui.d.ts +1 -1
  93. package/dist/types/legend/components/legend-config-select/legend-config-select.d.ts +1 -1
  94. package/dist/types/legend/components/legend-group/legend-group.d.ts +1 -1
  95. package/dist/types/legend/components/legend-group-menu/legend-group-menu-items.d.ts +4 -4
  96. package/dist/types/legend/components/legend-group-menu/legend-group-menu.d.ts +1 -1
  97. package/dist/types/legend/components/legend-icon/legend-icon-ui.d.ts +1 -1
  98. package/dist/types/legend/components/legend-item/legend-item-ui.d.ts +1 -1
  99. package/dist/types/legend/components/legend-item/legend-item.d.ts +1 -1
  100. package/dist/types/legend/components/legend-opacity/legend-opacity.d.ts +2 -2
  101. package/dist/types/legend/components/legend-overflow-menu/legend-overflow-menu.d.ts +1 -1
  102. package/dist/types/legend/components/legend-panel-menu/legend-panel-menu.d.ts +1 -1
  103. package/dist/types/legend/components/legend-proportion/legend-proportion-ui.d.ts +1 -1
  104. package/dist/types/legend/components/legend-ramp/legend-ramp-ui.d.ts +1 -1
  105. package/dist/types/legend/components/legend-row/legend-row.d.ts +1 -1
  106. package/dist/types/legend/components/legend-row-menu/legend-row-menu-items.d.ts +2 -2
  107. package/dist/types/legend/components/legend-row-menu/legend-row-menu.d.ts +1 -1
  108. package/dist/types/legend/components/legend-row-menu/legend-zoom-to.d.ts +1 -1
  109. package/dist/types/legend/components/legend-sortable/legend-sortable.d.ts +1 -1
  110. package/dist/types/legend/components/legend-swatch/legend-swatch.d.ts +1 -1
  111. package/dist/types/legend/components/legend-visibility-toggle/legend-visibility-toggle.d.ts +1 -1
  112. package/dist/types/legend/components/legend-visible-layers/legend-visible-layers.d.ts +1 -1
  113. package/dist/types/legend/index.d.ts +2 -2
  114. package/dist/types/legend/provider/legend-provider.d.ts +1 -1
  115. package/dist/types/widgets/actions/brush-toggle/brush-toggle.d.ts +1 -1
  116. package/dist/types/widgets/actions/change-column/change-column-icon.d.ts +1 -1
  117. package/dist/types/widgets/actions/change-column/change-column.d.ts +1 -1
  118. package/dist/types/widgets/actions/change-column/sortable-column-item.d.ts +1 -1
  119. package/dist/types/widgets/actions/download/download.d.ts +1 -1
  120. package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +1 -1
  121. package/dist/types/widgets/actions/lock-selection/lock-selection.d.ts +1 -1
  122. package/dist/types/widgets/actions/relative-data/relative-data.d.ts +1 -1
  123. package/dist/types/widgets/actions/searcher/searcher-toggle.d.ts +1 -1
  124. package/dist/types/widgets/actions/searcher/searcher.d.ts +1 -1
  125. package/dist/types/widgets/actions/stack-toggle/grouped-bar-chart-icon.d.ts +1 -1
  126. package/dist/types/widgets/actions/stack-toggle/stack-toggle.d.ts +1 -1
  127. package/dist/types/widgets/actions/zoom-toggle/zoom-toggle.d.ts +1 -1
  128. package/dist/types/widgets/bar/skeleton.d.ts +1 -1
  129. package/dist/types/widgets/category/category-ui.d.ts +1 -1
  130. package/dist/types/widgets/category/components/category-bar.d.ts +1 -1
  131. package/dist/types/widgets/category/components/category-legend.d.ts +1 -1
  132. package/dist/types/widgets/category/components/category-row-multi.d.ts +1 -1
  133. package/dist/types/widgets/category/components/category-row-other.d.ts +1 -1
  134. package/dist/types/widgets/category/components/category-row-single.d.ts +1 -1
  135. package/dist/types/widgets/category/skeleton.d.ts +1 -1
  136. package/dist/types/widgets/echart/echart-ui.d.ts +1 -1
  137. package/dist/types/widgets/echart/echart.d.ts +1 -1
  138. package/dist/types/widgets/error/error.d.ts +1 -1
  139. package/dist/types/widgets/formula/components/item.d.ts +1 -1
  140. package/dist/types/widgets/formula/components/prefix.d.ts +1 -1
  141. package/dist/types/widgets/formula/components/row.d.ts +1 -1
  142. package/dist/types/widgets/formula/components/series.d.ts +1 -1
  143. package/dist/types/widgets/formula/components/suffix.d.ts +1 -1
  144. package/dist/types/widgets/formula/components/value.d.ts +1 -1
  145. package/dist/types/widgets/formula/formula-ui.d.ts +1 -1
  146. package/dist/types/widgets/formula/skeleton.d.ts +1 -1
  147. package/dist/types/widgets/histogram/skeleton.d.ts +1 -1
  148. package/dist/types/widgets/markdown/markdown-ui.d.ts +1 -1
  149. package/dist/types/widgets/markdown/markdown.d.ts +1 -1
  150. package/dist/types/widgets/markdown/skeleton.d.ts +1 -1
  151. package/dist/types/widgets/no-data/no-data.d.ts +1 -1
  152. package/dist/types/widgets/note/note.d.ts +1 -1
  153. package/dist/types/widgets/pie/skeleton.d.ts +1 -1
  154. package/dist/types/widgets/range/components/range-item.d.ts +1 -1
  155. package/dist/types/widgets/range/range-ui.d.ts +1 -1
  156. package/dist/types/widgets/range/skeleton.d.ts +1 -1
  157. package/dist/types/widgets/scatterplot/skeleton.d.ts +1 -1
  158. package/dist/types/widgets/selection-summary/selection-summary.d.ts +1 -1
  159. package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +1 -1
  160. package/dist/types/widgets/spread/components/max-value.d.ts +1 -1
  161. package/dist/types/widgets/spread/components/min-value.d.ts +1 -1
  162. package/dist/types/widgets/spread/components/separator.d.ts +1 -1
  163. package/dist/types/widgets/spread/skeleton.d.ts +1 -1
  164. package/dist/types/widgets/spread/spread-ui.d.ts +1 -1
  165. package/dist/types/widgets/subheader/subheader.d.ts +1 -1
  166. package/dist/types/widgets/table/components/cell-header.d.ts +1 -1
  167. package/dist/types/widgets/table/components/cell.d.ts +1 -1
  168. package/dist/types/widgets/table/components/pagination-actions.d.ts +1 -1
  169. package/dist/types/widgets/table/components/pagination.d.ts +1 -1
  170. package/dist/types/widgets/table/components/row.d.ts +1 -1
  171. package/dist/types/widgets/table/skeleton.d.ts +1 -1
  172. package/dist/types/widgets/table/table-ui.d.ts +2 -2
  173. package/dist/types/widgets/timeseries/skeleton.d.ts +1 -1
  174. package/dist/types/widgets/wrapper/components/actions.d.ts +1 -1
  175. package/dist/types/widgets/wrapper/components/options.d.ts +1 -1
  176. package/dist/types/widgets/wrapper/components/title.d.ts +1 -1
  177. package/dist/types/widgets/wrapper/wrapper-ui.d.ts +1 -1
  178. package/dist/types/widgets/wrapper/wrapper.d.ts +1 -1
  179. package/dist/types/widgets-v2/actions/brush-toggle/brush-toggle.d.ts +1 -1
  180. package/dist/types/widgets-v2/actions/change-column/change-column-icon.d.ts +1 -1
  181. package/dist/types/widgets-v2/actions/change-column/change-column.d.ts +1 -1
  182. package/dist/types/widgets-v2/actions/change-column/sortable-column-item.d.ts +1 -1
  183. package/dist/types/widgets-v2/actions/download/download.d.ts +1 -1
  184. package/dist/types/widgets-v2/actions/download/icons.d.ts +3 -3
  185. package/dist/types/widgets-v2/actions/fullscreen/fullscreen.d.ts +2 -2
  186. package/dist/types/widgets-v2/actions/lock-selection/lock-selection.d.ts +1 -1
  187. package/dist/types/widgets-v2/actions/relative-data/relative-data.d.ts +1 -1
  188. package/dist/types/widgets-v2/actions/searcher/searcher-toggle.d.ts +1 -1
  189. package/dist/types/widgets-v2/actions/searcher/searcher.d.ts +1 -1
  190. package/dist/types/widgets-v2/actions/show-all/show-all.d.ts +1 -1
  191. package/dist/types/widgets-v2/actions/stack-toggle/stack-toggle.d.ts +1 -1
  192. package/dist/types/widgets-v2/actions/zoom-toggle/zoom-toggle.d.ts +1 -1
  193. package/dist/types/widgets-v2/bar/skeleton.d.ts +1 -1
  194. package/dist/types/widgets-v2/category/category-ui.d.ts +1 -1
  195. package/dist/types/widgets-v2/category/category.d.ts +1 -1
  196. package/dist/types/widgets-v2/category/components/category-bar-stacked.d.ts +1 -1
  197. package/dist/types/widgets-v2/category/components/category-bar.d.ts +1 -1
  198. package/dist/types/widgets-v2/category/components/category-legend.d.ts +1 -1
  199. package/dist/types/widgets-v2/category/components/category-row-multi.d.ts +1 -1
  200. package/dist/types/widgets-v2/category/components/category-row-other.d.ts +1 -1
  201. package/dist/types/widgets-v2/category/components/category-row-single.d.ts +1 -1
  202. package/dist/types/widgets-v2/category/components/category-row-stacked.d.ts +1 -1
  203. package/dist/types/widgets-v2/category/skeleton.d.ts +1 -1
  204. package/dist/types/widgets-v2/echart/echart-ui.d.ts +1 -1
  205. package/dist/types/widgets-v2/echart/echart.d.ts +1 -1
  206. package/dist/types/widgets-v2/formula/delta.d.ts +1 -1
  207. package/dist/types/widgets-v2/formula/formula-ui.d.ts +1 -1
  208. package/dist/types/widgets-v2/formula/formula.d.ts +1 -1
  209. package/dist/types/widgets-v2/formula/note.d.ts +1 -1
  210. package/dist/types/widgets-v2/formula/prefix.d.ts +1 -1
  211. package/dist/types/widgets-v2/formula/series.d.ts +1 -1
  212. package/dist/types/widgets-v2/formula/skeleton.d.ts +1 -1
  213. package/dist/types/widgets-v2/formula/suffix.d.ts +1 -1
  214. package/dist/types/widgets-v2/formula/value.d.ts +1 -1
  215. package/dist/types/widgets-v2/histogram/skeleton.d.ts +1 -1
  216. package/dist/types/widgets-v2/index.d.ts +4 -4
  217. package/dist/types/widgets-v2/markdown/markdown-content.d.ts +1 -1
  218. package/dist/types/widgets-v2/markdown/markdown-ui.d.ts +1 -1
  219. package/dist/types/widgets-v2/markdown/markdown.d.ts +1 -1
  220. package/dist/types/widgets-v2/markdown/skeleton.d.ts +1 -1
  221. package/dist/types/widgets-v2/note/widget-note.d.ts +2 -2
  222. package/dist/types/widgets-v2/pie/skeleton.d.ts +1 -1
  223. package/dist/types/widgets-v2/provider/widget-provider.d.ts +1 -1
  224. package/dist/types/widgets-v2/range/range-ui.d.ts +1 -1
  225. package/dist/types/widgets-v2/range/range.d.ts +1 -1
  226. package/dist/types/widgets-v2/range/skeleton.d.ts +1 -1
  227. package/dist/types/widgets-v2/scatterplot/skeleton.d.ts +1 -1
  228. package/dist/types/widgets-v2/selection-summary/selection-summary.d.ts +1 -1
  229. package/dist/types/widgets-v2/spread/separator.d.ts +1 -1
  230. package/dist/types/widgets-v2/spread/skeleton.d.ts +1 -1
  231. package/dist/types/widgets-v2/spread/spread-ui.d.ts +1 -1
  232. package/dist/types/widgets-v2/spread/spread.d.ts +1 -1
  233. package/dist/types/widgets-v2/state/widget-state.d.ts +1 -1
  234. package/dist/types/widgets-v2/subheader/subheader.d.ts +1 -1
  235. package/dist/types/widgets-v2/table/skeleton.d.ts +1 -1
  236. package/dist/types/widgets-v2/table/table-ui.d.ts +1 -1
  237. package/dist/types/widgets-v2/table/table.d.ts +1 -1
  238. package/dist/types/widgets-v2/timeseries/skeleton.d.ts +1 -1
  239. package/dist/types/widgets-v2/toolbox/toolbox.d.ts +1 -1
  240. package/dist/types/widgets-v2/wrapper/widget-actions.d.ts +2 -2
  241. package/dist/types/widgets-v2/wrapper/widget-content.d.ts +2 -2
  242. package/dist/types/widgets-v2/wrapper/widget-wrapper.d.ts +1 -1
  243. package/dist/use-widget-selector-VSPhfhNm.js +12 -0
  244. package/dist/{use-widget-selector-DFl2hW0R.js.map → use-widget-selector-VSPhfhNm.js.map} +1 -1
  245. package/dist/utils-DtvTjjMq.js +58 -0
  246. package/dist/utils-DtvTjjMq.js.map +1 -0
  247. package/dist/widget-store-BFPKYm4R.js +187 -0
  248. package/dist/widget-store-BFPKYm4R.js.map +1 -0
  249. package/dist/widgets/actions.js +2 -1317
  250. package/dist/widgets/bar.js +183 -175
  251. package/dist/widgets/bar.js.map +1 -1
  252. package/dist/widgets/category.js +429 -434
  253. package/dist/widgets/category.js.map +1 -1
  254. package/dist/widgets/echart.js +3 -120
  255. package/dist/widgets/error.js +28 -38
  256. package/dist/widgets/error.js.map +1 -1
  257. package/dist/widgets/formula.js +3 -123
  258. package/dist/widgets/histogram.js +183 -202
  259. package/dist/widgets/histogram.js.map +1 -1
  260. package/dist/widgets/loader.js +63 -61
  261. package/dist/widgets/loader.js.map +1 -1
  262. package/dist/widgets/markdown.js +141 -123
  263. package/dist/widgets/markdown.js.map +1 -1
  264. package/dist/widgets/no-data.js +52 -58
  265. package/dist/widgets/no-data.js.map +1 -1
  266. package/dist/widgets/note.js +125 -122
  267. package/dist/widgets/note.js.map +1 -1
  268. package/dist/widgets/pie.js +245 -259
  269. package/dist/widgets/pie.js.map +1 -1
  270. package/dist/widgets/range.js +225 -204
  271. package/dist/widgets/range.js.map +1 -1
  272. package/dist/widgets/scatterplot.js +220 -215
  273. package/dist/widgets/scatterplot.js.map +1 -1
  274. package/dist/widgets/selection-summary.js +39 -38
  275. package/dist/widgets/selection-summary.js.map +1 -1
  276. package/dist/widgets/skeleton-loader.js +22 -23
  277. package/dist/widgets/skeleton-loader.js.map +1 -1
  278. package/dist/widgets/spread.js +150 -156
  279. package/dist/widgets/spread.js.map +1 -1
  280. package/dist/widgets/stores.js +3 -8
  281. package/dist/widgets/subheader.js +49 -50
  282. package/dist/widgets/subheader.js.map +1 -1
  283. package/dist/widgets/table.js +576 -644
  284. package/dist/widgets/table.js.map +1 -1
  285. package/dist/widgets/timeseries.js +175 -170
  286. package/dist/widgets/timeseries.js.map +1 -1
  287. package/dist/widgets/toolbar-actions.js +140 -145
  288. package/dist/widgets/toolbar-actions.js.map +1 -1
  289. package/dist/widgets/utils.js +17 -33
  290. package/dist/widgets/utils.js.map +1 -1
  291. package/dist/widgets/wrapper.js +265 -276
  292. package/dist/widgets/wrapper.js.map +1 -1
  293. package/dist/widgets-v2/actions.js +4 -51
  294. package/dist/widgets-v2/bar.js +253 -307
  295. package/dist/widgets-v2/bar.js.map +1 -1
  296. package/dist/widgets-v2/category.js +2 -98
  297. package/dist/widgets-v2/echart.js +2 -57
  298. package/dist/widgets-v2/formula.js +2 -68
  299. package/dist/widgets-v2/histogram.js +285 -350
  300. package/dist/widgets-v2/histogram.js.map +1 -1
  301. package/dist/widgets-v2/markdown.js +3 -69
  302. package/dist/widgets-v2/pie.js +363 -461
  303. package/dist/widgets-v2/pie.js.map +1 -1
  304. package/dist/widgets-v2/range.js +2 -52
  305. package/dist/widgets-v2/scatterplot.js +316 -391
  306. package/dist/widgets-v2/scatterplot.js.map +1 -1
  307. package/dist/widgets-v2/spread.js +2 -78
  308. package/dist/widgets-v2/stores.js +2 -42
  309. package/dist/widgets-v2/table.js +2 -78
  310. package/dist/widgets-v2/timeseries.js +285 -340
  311. package/dist/widgets-v2/timeseries.js.map +1 -1
  312. package/dist/widgets-v2/utils.js +2 -8
  313. package/dist/widgets-v2.js +955 -951
  314. package/dist/widgets-v2.js.map +1 -1
  315. package/dist/zoom-toggle-CA0ifG23.js +164 -0
  316. package/dist/zoom-toggle-CA0ifG23.js.map +1 -0
  317. package/package.json +4 -4
  318. package/src/hooks/use-widget-ref.ts +1 -0
  319. package/dist/category-Ct2BzADB.js +0 -753
  320. package/dist/category-Ct2BzADB.js.map +0 -1
  321. package/dist/change-column-Fu1DCYQ3.js +0 -1186
  322. package/dist/change-column-Fu1DCYQ3.js.map +0 -1
  323. package/dist/cjs-D4KH3azB.js +0 -85
  324. package/dist/cjs-D4KH3azB.js.map +0 -1
  325. package/dist/components.js.map +0 -1
  326. package/dist/copy-button-DGL1tyli.js +0 -26
  327. package/dist/copy-button-DGL1tyli.js.map +0 -1
  328. package/dist/csv-item-hH_Gt7ur.js +0 -32
  329. package/dist/csv-item-hH_Gt7ur.js.map +0 -1
  330. package/dist/data-zoom-layout-D_FYdnap.js +0 -28
  331. package/dist/data-zoom-layout-D_FYdnap.js.map +0 -1
  332. package/dist/download-config-OKlLLSW_.js +0 -58
  333. package/dist/download-config-OKlLLSW_.js.map +0 -1
  334. package/dist/echart-B10dhEaM.js +0 -262
  335. package/dist/echart-B10dhEaM.js.map +0 -1
  336. package/dist/exports-Cr43OCul.js +0 -51
  337. package/dist/exports-Cr43OCul.js.map +0 -1
  338. package/dist/exports-Cx-f6m6U.js +0 -63
  339. package/dist/exports-Cx-f6m6U.js.map +0 -1
  340. package/dist/formatter-B9Bxn1k7.js +0 -6
  341. package/dist/formatter-B9Bxn1k7.js.map +0 -1
  342. package/dist/formula-DuC0NQLH.js +0 -79
  343. package/dist/formula-DuC0NQLH.js.map +0 -1
  344. package/dist/lasso-tool-YLFRgb-S.js +0 -582
  345. package/dist/lasso-tool-YLFRgb-S.js.map +0 -1
  346. package/dist/legend/stores.js.map +0 -1
  347. package/dist/legend-store-registry-p1tSwJXH.js +0 -472
  348. package/dist/legend-store-registry-p1tSwJXH.js.map +0 -1
  349. package/dist/markdown-DdqANCiN.js +0 -102
  350. package/dist/markdown-DdqANCiN.js.map +0 -1
  351. package/dist/markdown-content-Dk2DSgbf.js +0 -10287
  352. package/dist/markdown-content-Dk2DSgbf.js.map +0 -1
  353. package/dist/option-builders-DPeoyQaM.js +0 -130
  354. package/dist/option-builders-DPeoyQaM.js.map +0 -1
  355. package/dist/options-CthfUJDz.js +0 -46
  356. package/dist/options-CthfUJDz.js.map +0 -1
  357. package/dist/png-item-9dNbB37T.js +0 -57
  358. package/dist/png-item-9dNbB37T.js.map +0 -1
  359. package/dist/range-l4fNHLEg.js +0 -213
  360. package/dist/range-l4fNHLEg.js.map +0 -1
  361. package/dist/resolve-theme-color-BdojIw0K.js +0 -47
  362. package/dist/resolve-theme-color-BdojIw0K.js.map +0 -1
  363. package/dist/row-DZSP99LW.js +0 -34
  364. package/dist/row-DZSP99LW.js.map +0 -1
  365. package/dist/series-DLNHDWs0.js +0 -90
  366. package/dist/series-DLNHDWs0.js.map +0 -1
  367. package/dist/shared-resize-observer-98b1SK1e.js +0 -17
  368. package/dist/shared-resize-observer-98b1SK1e.js.map +0 -1
  369. package/dist/smart-tooltip-DFV6GD8R.js +0 -40
  370. package/dist/smart-tooltip-DFV6GD8R.js.map +0 -1
  371. package/dist/spread-4MYPOntd.js +0 -66
  372. package/dist/spread-4MYPOntd.js.map +0 -1
  373. package/dist/style-DVnT6HC1.js +0 -131
  374. package/dist/style-DVnT6HC1.js.map +0 -1
  375. package/dist/styles-cohnxh9F.js +0 -23
  376. package/dist/styles-cohnxh9F.js.map +0 -1
  377. package/dist/table-CTcLOycx.js +0 -383
  378. package/dist/table-CTcLOycx.js.map +0 -1
  379. package/dist/tooltip-BDnrRKrp.js +0 -25
  380. package/dist/tooltip-BDnrRKrp.js.map +0 -1
  381. package/dist/transforms-Cdx4fkU5.js +0 -106
  382. package/dist/transforms-Cdx4fkU5.js.map +0 -1
  383. package/dist/use-transform-DXPN3nY7.js +0 -110
  384. package/dist/use-transform-DXPN3nY7.js.map +0 -1
  385. package/dist/use-widget-ref-Ddr_SlJJ.js +0 -22
  386. package/dist/use-widget-ref-Ddr_SlJJ.js.map +0 -1
  387. package/dist/use-widget-selector-DFl2hW0R.js +0 -12
  388. package/dist/utils-BOhInag6.js +0 -170
  389. package/dist/utils-BOhInag6.js.map +0 -1
  390. package/dist/widget-context-DTGO0Yta.js +0 -13
  391. package/dist/widget-context-DTGO0Yta.js.map +0 -1
  392. package/dist/widget-store-Bw5zRUGg.js +0 -261
  393. package/dist/widget-store-Bw5zRUGg.js.map +0 -1
  394. package/dist/widget-store-registry-_W4Z4xp-.js +0 -178
  395. package/dist/widget-store-registry-_W4Z4xp-.js.map +0 -1
  396. package/dist/widgets/actions.js.map +0 -1
  397. package/dist/widgets/echart.js.map +0 -1
  398. package/dist/widgets/formula.js.map +0 -1
  399. package/dist/widgets/stores.js.map +0 -1
  400. package/dist/widgets-v2/actions.js.map +0 -1
  401. package/dist/widgets-v2/category.js.map +0 -1
  402. package/dist/widgets-v2/echart.js.map +0 -1
  403. package/dist/widgets-v2/formula.js.map +0 -1
  404. package/dist/widgets-v2/markdown.js.map +0 -1
  405. package/dist/widgets-v2/range.js.map +0 -1
  406. package/dist/widgets-v2/spread.js.map +0 -1
  407. package/dist/widgets-v2/stores.js.map +0 -1
  408. package/dist/widgets-v2/table.js.map +0 -1
  409. package/dist/widgets-v2/utils.js.map +0 -1
@@ -51,8 +51,8 @@ export declare const Widget: {
51
51
  readonly State: typeof State;
52
52
  readonly SelectionSummary: typeof SelectionSummary;
53
53
  readonly Toolbox: typeof Toolbox;
54
- readonly Note: (({ lineClamp, labels, children }: import('.').NoteProps) => import("react/jsx-runtime").JSX.Element) & {
55
- Markdown: ({ content, lineClamp, labels }: import('.').NoteMarkdownProps) => import("react/jsx-runtime").JSX.Element;
54
+ readonly Note: (({ lineClamp, labels, children }: import('.').NoteProps) => import("react").JSX.Element) & {
55
+ Markdown: ({ content, lineClamp, labels }: import('.').NoteMarkdownProps) => import("react").JSX.Element;
56
56
  };
57
57
  readonly Echart: typeof Echart;
58
58
  readonly EchartUI: typeof EchartUI;
@@ -65,8 +65,8 @@ export declare const Widget: {
65
65
  readonly RelativeData: typeof RelativeData;
66
66
  readonly Download: typeof Download;
67
67
  readonly FullScreen: {
68
- Trigger: ({ labels, enterIcon: EnterIcon, exitIcon: ExitIcon, iconProps, }: import('./actions').FullScreenTriggerProps) => import("react/jsx-runtime").JSX.Element;
69
- Slot: ({ children, title, labels, closeIcon: CloseSvg, iconProps, }: import('./actions').FullScreenSlotProps) => import("react/jsx-runtime").JSX.Element;
68
+ Trigger: ({ labels, enterIcon: EnterIcon, exitIcon: ExitIcon, iconProps, }: import('./actions').FullScreenTriggerProps) => import("react").JSX.Element;
69
+ Slot: ({ children, title, labels, closeIcon: CloseSvg, iconProps, }: import('./actions').FullScreenSlotProps) => import("react").JSX.Element;
70
70
  };
71
71
  readonly LockSelection: typeof LockSelection;
72
72
  readonly ChangeColumn: typeof ChangeColumn;
@@ -37,4 +37,4 @@ export interface MarkdownContentProps {
37
37
  * tree. `safeUrlTransform` is always applied as a second layer for markdown
38
38
  * links/images on the `allowHtml=false` path.
39
39
  */
40
- export declare function MarkdownContent({ content, components, allowHtml, allowImages, gfm, }: MarkdownContentProps): import("react/jsx-runtime").JSX.Element;
40
+ export declare function MarkdownContent({ content, components, allowHtml, allowImages, gfm, }: MarkdownContentProps): import("react").JSX.Element;
@@ -9,4 +9,4 @@ export interface MarkdownUIProps {
9
9
  * the one slot in the library where authors can ship rich content. Caption
10
10
  * slots like `Note` keep the conservative defaults.
11
11
  */
12
- export declare function MarkdownUI({ content }: MarkdownUIProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function MarkdownUI({ content }: MarkdownUIProps): import("react").JSX.Element;
@@ -3,4 +3,4 @@
3
3
  * per-widget store and forwards it to the pure {@link MarkdownUI}. Sits
4
4
  * inside `<Widget.Provider>`.
5
5
  */
6
- export declare function Markdown(): import("react/jsx-runtime").JSX.Element;
6
+ export declare function Markdown(): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
1
  export interface MarkdownSkeletonProps {
2
2
  lines?: number;
3
3
  }
4
- export declare function MarkdownSkeleton({ lines }: MarkdownSkeletonProps): import("react/jsx-runtime").JSX.Element;
4
+ export declare function MarkdownSkeleton({ lines }: MarkdownSkeletonProps): import("react").JSX.Element;
@@ -33,13 +33,13 @@ export interface NoteMarkdownProps {
33
33
  * Renders `children` verbatim through caption typography. For markdown
34
34
  * source, use the {@link NoteMarkdown} (`Note.Markdown`) subcomponent.
35
35
  */
36
- declare function NoteBase({ lineClamp, labels, children }: NoteProps): import("react/jsx-runtime").JSX.Element;
36
+ declare function NoteBase({ lineClamp, labels, children }: NoteProps): import("react").JSX.Element;
37
37
  /**
38
38
  * Markdown variant of {@link Note}. Pipes the `content` string through the
39
39
  * shared {@link MarkdownContent} engine with caption-safe element mapping
40
40
  * (headings demoted, links open in new tabs, images/HTML stripped).
41
41
  */
42
- declare function NoteMarkdown({ content, lineClamp, labels }: NoteMarkdownProps): import("react/jsx-runtime").JSX.Element;
42
+ declare function NoteMarkdown({ content, lineClamp, labels }: NoteMarkdownProps): import("react").JSX.Element;
43
43
  export declare const Note: typeof NoteBase & {
44
44
  Markdown: typeof NoteMarkdown;
45
45
  };
@@ -10,4 +10,4 @@ export interface PieSkeletonProps {
10
10
  * Single donut only: multi-series pie loads as a horizontal bar chart, so
11
11
  * rendering one ring stays honest regardless of `count`.
12
12
  */
13
- export declare function PieSkeleton({ count }: PieSkeletonProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function PieSkeleton({ count }: PieSkeletonProps): import("react").JSX.Element;
@@ -29,4 +29,4 @@ export interface ProviderProps {
29
29
  * (Formula, Spread, Range, Table, Category, Markdown) just don't pass
30
30
  * anything ECharts-shaped.
31
31
  */
32
- export declare function Provider({ id, data, isLoading, isFetching, error, formatter, labelFormatter, keepAlive, children, }: ProviderProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function Provider({ id, data, isLoading, isFetching, error, formatter, labelFormatter, keepAlive, children, }: ProviderProps): import("react").JSX.Element;
@@ -24,4 +24,4 @@ export interface RangeUIProps {
24
24
  * UX. Each item is always a two-thumb range; supply `value` to seed the
25
25
  * starting selection, otherwise it defaults to `[min, max]`.
26
26
  */
27
- export declare function RangeUI({ items, onChange, onChangeCommitted, formatter, }: RangeUIProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function RangeUI({ items, onChange, onChangeCommitted, formatter, }: RangeUIProps): import("react").JSX.Element;
@@ -21,4 +21,4 @@ export interface RangeProps {
21
21
  * is expected to update the data prop on `<Provider>`. Use `disabled` on
22
22
  * individual `RangeDataItem`s to disable specific rows.
23
23
  */
24
- export declare function Range({ onChange, onChangeCommitted }: RangeProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function Range({ onChange, onChangeCommitted }: RangeProps): import("react").JSX.Element;
@@ -6,4 +6,4 @@ export interface RangeSkeletonProps {
6
6
  * matching the slider-then-inputs layout of {@link RangeUI} so the layout
7
7
  * doesn't jump when data resolves.
8
8
  */
9
- export declare function RangeSkeleton({ count }: RangeSkeletonProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function RangeSkeleton({ count }: RangeSkeletonProps): import("react").JSX.Element;
@@ -9,4 +9,4 @@ export interface ScatterplotSkeletonProps {
9
9
  * rather than a generic list. Matches bar/histogram/pie skeleton structure
10
10
  * (grid stub + legend stub in a flex column).
11
11
  */
12
- export declare function ScatterplotSkeleton({ count }: ScatterplotSkeletonProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function ScatterplotSkeleton({ count }: ScatterplotSkeletonProps): import("react").JSX.Element;
@@ -26,4 +26,4 @@ export interface SelectionSummaryProps {
26
26
  * node instead — it receives the already-resolved displayed number (which
27
27
  * equals `total` when nothing is selected).
28
28
  */
29
- export declare function SelectionSummary({ count, total, onClear, labels, icon: Icon, iconProps, }: SelectionSummaryProps): import("react/jsx-runtime").JSX.Element | null;
29
+ export declare function SelectionSummary({ count, total, onClear, labels, icon: Icon, iconProps, }: SelectionSummaryProps): import("react").JSX.Element | null;
@@ -4,4 +4,4 @@
4
4
  * baseline alignment) matches the numbers around it. Renders with
5
5
  * `text.secondary` so it visually recedes between the two bounds.
6
6
  */
7
- export declare function Separator(): import("react/jsx-runtime").JSX.Element;
7
+ export declare function Separator(): import("react").JSX.Element;
@@ -6,4 +6,4 @@ export interface SpreadSkeletonProps {
6
6
  * sized for the `min — max` pair so the layout doesn't jump once data
7
7
  * resolves. Mirrors the row-per-item structure of {@link SpreadUI}.
8
8
  */
9
- export declare function SpreadSkeleton({ count }: SpreadSkeletonProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function SpreadSkeleton({ count }: SpreadSkeletonProps): import("react").JSX.Element;
@@ -15,4 +15,4 @@ export interface SpreadUIProps {
15
15
  * {@link Note}) and the Formula row styles so Spread and Formula stay
16
16
  * visually aligned when used together.
17
17
  */
18
- export declare function SpreadUI({ items, formatter, ref }: SpreadUIProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function SpreadUI({ items, formatter, ref }: SpreadUIProps): import("react").JSX.Element;
@@ -2,4 +2,4 @@
2
2
  * Stateful Spread bridge — reads `data` (post-pipeline) and `formatter` from
3
3
  * the per-widget store and forwards them to the pure {@link SpreadUI}.
4
4
  */
5
- export declare function Spread(): import("react/jsx-runtime").JSX.Element;
5
+ export declare function Spread(): import("react").JSX.Element;
@@ -16,4 +16,4 @@ export interface StateProps {
16
16
  * errors thrown by `children` are caught by the inlined error boundary and
17
17
  * routed through the same path.
18
18
  */
19
- export declare function State({ skeleton, children, isEmpty, fallback, labels, }: StateProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function State({ skeleton, children, isEmpty, fallback, labels, }: StateProps): import("react").JSX.Element;
@@ -8,4 +8,4 @@ export interface SubheaderProps {
8
8
  * Stateless layout: CSS grid `1fr auto`. Children self-place — typically
9
9
  * `<Widget.SelectionSummary />` (left) and `<Widget.Toolbox>` (right).
10
10
  */
11
- export declare function Subheader({ sx, children }: SubheaderProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function Subheader({ sx, children }: SubheaderProps): import("react").JSX.Element;
@@ -19,4 +19,4 @@ export interface TableSkeletonProps {
19
19
  * Mirrors the v1 widget's `<TableSkeleton>` structure with v2's themed
20
20
  * `styles.headerCell`.
21
21
  */
22
- export declare function TableSkeleton({ rows, columns, size, }: TableSkeletonProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function TableSkeleton({ rows, columns, size, }: TableSkeletonProps): import("react").JSX.Element;
@@ -41,4 +41,4 @@ export interface TableUIProps<T extends TableRow = TableRow> {
41
41
  * Has no widget-store coupling — `<Table>` (the bridge) reads from the store
42
42
  * and feeds this UI with already-projected data.
43
43
  */
44
- export declare function TableUI<T extends TableRow = TableRow>({ columns, rows, total, page, pageSize, pageSizeOptions, sort, keyColumn, selection, selectable, onSortChange, onPageChange, onPageSizeChange, onSelectionChange, onRowClick, onRowHover, labels, emptyContent, size, }: TableUIProps<T>): import("react/jsx-runtime").JSX.Element;
44
+ export declare function TableUI<T extends TableRow = TableRow>({ columns, rows, total, page, pageSize, pageSizeOptions, sort, keyColumn, selection, selectable, onSortChange, onPageChange, onPageSizeChange, onSelectionChange, onRowClick, onRowHover, labels, emptyContent, size, }: TableUIProps<T>): import("react").JSX.Element;
@@ -47,4 +47,4 @@ export interface TableProps<T extends TableRow = TableRow> extends Pick<TableUIP
47
47
  * locally, and feeds `<TableUI />`. Sort, page, and pageSize live on the
48
48
  * extended widget state ({@link TableWidgetState}).
49
49
  */
50
- export declare function Table<T extends TableRow = TableRow>({ columns, visibleColumns, initialPageSize, selection, onSelectionChange, onRowClick, onRowHover, remote, total: remoteTotal, onSortChange, onPageChange, onPageSizeChange, ...uiProps }: TableProps<T>): import("react/jsx-runtime").JSX.Element;
50
+ export declare function Table<T extends TableRow = TableRow>({ columns, visibleColumns, initialPageSize, selection, onSelectionChange, onRowClick, onRowHover, remote, total: remoteTotal, onSortChange, onPageChange, onPageSizeChange, ...uiProps }: TableProps<T>): import("react").JSX.Element;
@@ -5,4 +5,4 @@
5
5
  * with Bar / Histogram / Scatter skeletons (column-flex container with
6
6
  * legend strip below).
7
7
  */
8
- export declare function TimeseriesSkeleton(): import("react/jsx-runtime").JSX.Element;
8
+ export declare function TimeseriesSkeleton(): import("react").JSX.Element;
@@ -46,4 +46,4 @@ export interface ToolboxProps {
46
46
  * they don't appear as orphan separators in the inline row; they're still
47
47
  * there in the popover.
48
48
  */
49
- export declare function Toolbox({ visibleCount, labels, icon: Icon, iconProps, direction, sx, children, }: ToolboxProps): import("react/jsx-runtime").JSX.Element | null;
49
+ export declare function Toolbox({ visibleCount, labels, icon: Icon, iconProps, direction, sx, children, }: ToolboxProps): import("react").JSX.Element | null;
@@ -14,9 +14,9 @@ export interface ActionsProps {
14
14
  * The container also stops click propagation so interacting with an action
15
15
  * doesn't toggle the wrapper's collapse.
16
16
  */
17
- export declare function Actions({ sx, children }: ActionsProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function Actions({ sx, children }: ActionsProps): import("react").JSX.Element;
18
18
  export interface OptionsProps {
19
19
  sx?: SxProps<Theme>;
20
20
  children: ReactNode;
21
21
  }
22
- export declare function Options({ sx, children }: OptionsProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function Options({ sx, children }: OptionsProps): import("react").JSX.Element;
@@ -4,9 +4,9 @@ export interface ContentProps {
4
4
  sx?: SxProps<Theme>;
5
5
  children: ReactNode;
6
6
  }
7
- export declare function Content({ sx, children }: ContentProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function Content({ sx, children }: ContentProps): import("react").JSX.Element;
8
8
  export interface FooterProps {
9
9
  sx?: SxProps<Theme>;
10
10
  children: ReactNode;
11
11
  }
12
- export declare function Footer({ sx, children }: FooterProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function Footer({ sx, children }: FooterProps): import("react").JSX.Element;
@@ -53,4 +53,4 @@ export interface WrapperProps {
53
53
  * render inside the summary row; everything else (`<Content>`, `<Footer>`,
54
54
  * loose nodes) renders inside the details panel.
55
55
  */
56
- export declare function Wrapper({ title, collapsed, onCollapseChange, defaultCollapsed, disabled, variant, labels, expandIcon: ExpandIcon, iconProps, sx, children, }: WrapperProps): import("react/jsx-runtime").JSX.Element;
56
+ export declare function Wrapper({ title, collapsed, onCollapseChange, defaultCollapsed, disabled, variant, labels, expandIcon: ExpandIcon, iconProps, sx, children, }: WrapperProps): import("react").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { t as e } from "./widget-store-BFPKYm4R.js";
2
+ import { c as t } from "react/compiler-runtime";
3
+ import { useShallow as n } from "zustand/shallow";
4
+ //#region src/widgets/stores/use-widget-selector.ts
5
+ function r(r, i) {
6
+ let a = t(3), o;
7
+ return a[0] !== i || a[1] !== r ? (o = (e) => i(e.widgets[r]), a[0] = i, a[1] = r, a[2] = o) : o = a[2], e(n(o));
8
+ }
9
+ //#endregion
10
+ export { r as t };
11
+
12
+ //# sourceMappingURL=use-widget-selector-VSPhfhNm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-widget-selector-DFl2hW0R.js","sources":["../src/widgets/stores/use-widget-selector.ts"],"sourcesContent":["import { useWidgetStore } from './widget-store'\nimport type { WidgetState } from './types'\nimport { useShallow } from 'zustand/shallow'\n\n/**\n * Scoped selector hook for reading a single widget's state from the store.\n *\n * Consolidates multiple `useWidgetStore(useShallow(...))` calls into a single\n * subscription per component. The selector receives only this widget's state\n * (or undefined if not yet registered), and uses shallow comparison to avoid\n * re-renders when unrelated properties change.\n *\n * @param widgetId - The widget ID to subscribe to.\n * @param selector - A function that extracts the needed properties from the widget state.\n * Must be a stable reference (inline arrow is fine due to useCallback wrapping).\n *\n * @example\n * ```tsx\n * // Before: 4 separate subscriptions\n * const title = useWidgetStore(useShallow((s) => s.getWidget(id)?.title))\n * const collapsed = useWidgetStore(useShallow((s) => s.getWidget(id)?.collapsed))\n * const disabled = useWidgetStore(useShallow((s) => s.getWidget(id)?.disabled))\n * const isFetching = useWidgetStore(useShallow((s) => s.getWidget(id)?.isFetching))\n *\n * // After: 1 subscription\n * const { title, collapsed, disabled, isFetching } = useWidgetSelector(id, (w) => ({\n * title: w?.title, collapsed: w?.collapsed, disabled: w?.disabled, isFetching: w?.isFetching,\n * }))\n *\n * // With extra dependencies (e.g., index prop):\n * const value = useWidgetSelector(\n * id,\n * (w) => (w as MyState | undefined)?.data?.[index]?.value,\n * [index],\n * )\n * ```\n */\nexport function useWidgetSelector<T>(\n widgetId: string,\n selector: (widget: WidgetState | undefined) => T,\n): T {\n return useWidgetStore(\n useShallow((state: { widgets: Record<string, WidgetState> }) =>\n selector(state.widgets[widgetId]),\n ),\n )\n}\n"],"names":["useWidgetSelector","widgetId","selector","$","_c","t0","state","widgets","useWidgetStore","useShallow"],"mappings":";;;AAqCO,SAAAA,EAAAC,GAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,EAAA,CAAA,MAAAD,KAAAC,SAAAF,KAKQI,IAAAC,CAAAA,MACTJ,EAASI,EAAKC,QAASN,CAAQ,CAAC,GAACE,OAAAD,GAAAC,OAAAF,GAAAE,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAF9BK,EACLC,EAAWJ,CAEX,CACF;AAAC;"}
1
+ {"version":3,"file":"use-widget-selector-VSPhfhNm.js","names":["useWidgetStore","WidgetState","useShallow","useWidgetSelector","widgetId","selector","$","_c","t0","state","widgets"],"sources":["../src/widgets/stores/use-widget-selector.ts"],"sourcesContent":["import { useWidgetStore } from './widget-store'\nimport type { WidgetState } from './types'\nimport { useShallow } from 'zustand/shallow'\n\n/**\n * Scoped selector hook for reading a single widget's state from the store.\n *\n * Consolidates multiple `useWidgetStore(useShallow(...))` calls into a single\n * subscription per component. The selector receives only this widget's state\n * (or undefined if not yet registered), and uses shallow comparison to avoid\n * re-renders when unrelated properties change.\n *\n * @param widgetId - The widget ID to subscribe to.\n * @param selector - A function that extracts the needed properties from the widget state.\n * Must be a stable reference (inline arrow is fine due to useCallback wrapping).\n *\n * @example\n * ```tsx\n * // Before: 4 separate subscriptions\n * const title = useWidgetStore(useShallow((s) => s.getWidget(id)?.title))\n * const collapsed = useWidgetStore(useShallow((s) => s.getWidget(id)?.collapsed))\n * const disabled = useWidgetStore(useShallow((s) => s.getWidget(id)?.disabled))\n * const isFetching = useWidgetStore(useShallow((s) => s.getWidget(id)?.isFetching))\n *\n * // After: 1 subscription\n * const { title, collapsed, disabled, isFetching } = useWidgetSelector(id, (w) => ({\n * title: w?.title, collapsed: w?.collapsed, disabled: w?.disabled, isFetching: w?.isFetching,\n * }))\n *\n * // With extra dependencies (e.g., index prop):\n * const value = useWidgetSelector(\n * id,\n * (w) => (w as MyState | undefined)?.data?.[index]?.value,\n * [index],\n * )\n * ```\n */\nexport function useWidgetSelector<T>(\n widgetId: string,\n selector: (widget: WidgetState | undefined) => T,\n): T {\n return useWidgetStore(\n useShallow((state: { widgets: Record<string, WidgetState> }) =>\n selector(state.widgets[widgetId]),\n ),\n )\n}\n"],"mappings":";;;;AAqCA,SAAOG,EAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAMgC,OANhCF,EAAA,OAAAD,KAAAC,EAAA,OAAAF,KAKQI,KAAAC,MACTJ,EAASI,EAAKC,QAASN,EAAS,GAACE,EAAA,KAAAD,GAAAC,EAAA,KAAAF,GAAAE,EAAA,KAAAE,KAAAA,IAAAF,EAAA,IAF9BN,EACLE,EAAWM,CAEX,CACF;AAAC"}
@@ -0,0 +1,58 @@
1
+ import { r as e } from "./zoom-toggle-CA0ifG23.js";
2
+ //#region src/widgets-v2/utils/merge-options.ts
3
+ function t(e, t) {
4
+ if (!t) return e;
5
+ let r = { ...e };
6
+ for (let i of Object.keys(t)) {
7
+ let a = e[i], o = t[i];
8
+ o !== void 0 && (r[i] = n(a, o));
9
+ }
10
+ return r;
11
+ }
12
+ function n(e, t) {
13
+ if (Array.isArray(e) && Array.isArray(t)) {
14
+ let r = Math.max(e.length, t.length), i = Array(r);
15
+ for (let a = 0; a < r; a++) {
16
+ let r = e[a], o = t[a];
17
+ o === void 0 ? i[a] = r : r === void 0 ? i[a] = o : i[a] = n(r, o);
18
+ }
19
+ return i;
20
+ }
21
+ return r(e) && r(t) ? {
22
+ ...e,
23
+ ...t
24
+ } : t;
25
+ }
26
+ function r(e) {
27
+ if (typeof e != "object" || !e) return !1;
28
+ let t = Object.getPrototypeOf(e);
29
+ return t === Object.prototype || t === null;
30
+ }
31
+ //#endregion
32
+ //#region src/widgets-v2/utils/data-zoom-layout.ts
33
+ function i(t, n) {
34
+ return !Array.isArray(t) || t.length === 0 ? null : t.map((t) => {
35
+ if (typeof t != "object" || !t) return t;
36
+ let r = t;
37
+ return r.type === "slider" && n ? {
38
+ ...r,
39
+ bottom: e.sliderBottomWithLegend
40
+ } : r;
41
+ });
42
+ }
43
+ //#endregion
44
+ //#region src/widgets-v2/utils/resolve-theme-color.ts
45
+ function a(e, t) {
46
+ if (t == null) return;
47
+ if (!t.includes(".")) return t;
48
+ let n = t.split("."), r = e.palette;
49
+ for (let e of n) {
50
+ if (typeof r != "object" || !r) return t;
51
+ r = r[e];
52
+ }
53
+ return typeof r == "string" ? r : t;
54
+ }
55
+ //#endregion
56
+ export { i as n, t as r, a as t };
57
+
58
+ //# sourceMappingURL=utils-DtvTjjMq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-DtvTjjMq.js","names":["mergeOptions","Record","base","T","override","Partial","out","key","Object","keys","a","b","undefined","mergeValue","Array","isArray","len","Math","max","length","result","i","av","bv","isPlainObject","v","proto","getPrototypeOf","prototype","ZOOM_LAYOUT","positionDataZoomForLegend","dataZoom","hasLegend","Array","isArray","length","map","entry","dz","type","bottom","sliderBottomWithLegend","Theme","resolveThemeColor","theme","raw","undefined","includes","parts","split","cursor","palette","part","Record"],"sources":["../src/widgets-v2/utils/merge-options.ts","../src/widgets-v2/utils/data-zoom-layout.ts","../src/widgets-v2/utils/resolve-theme-color.ts"],"sourcesContent":["/**\n * Shallow-merges two ECharts option objects:\n * - Top-level keys from both are combined.\n * - Arrays are merged by index (element-wise shallow merge, primitive override).\n * - Plain objects are shallow-merged.\n * - Primitives are overridden by the override value.\n *\n * Designed for the two-stage memoization pattern: first build a base option\n * object from data + theme + formatters, then call `mergeOptions(base, override)`\n * inside a second `useMemo` keyed on `[base, override]`.\n */\nexport function mergeOptions<T extends Record<string, unknown>>(\n base: T,\n override?: Partial<T>,\n): T {\n if (!override) return base\n const out: Record<string, unknown> = { ...base }\n for (const key of Object.keys(override) as (keyof T)[]) {\n const a = base[key]\n const b = override[key]\n if (b === undefined) continue\n out[key as string] = mergeValue(a, b)\n }\n return out as T\n}\n\nfunction mergeValue(a: unknown, b: unknown): unknown {\n if (Array.isArray(a) && Array.isArray(b)) {\n const len = Math.max(a.length, b.length)\n const result = new Array<unknown>(len)\n for (let i = 0; i < len; i++) {\n const av: unknown = a[i]\n const bv: unknown = b[i]\n if (bv === undefined) result[i] = av\n else if (av === undefined) result[i] = bv\n else result[i] = mergeValue(av, bv)\n }\n return result\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n return { ...a, ...b }\n }\n return b\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n if (v === null || typeof v !== 'object') return false\n const proto = Object.getPrototypeOf(v) as unknown\n return proto === Object.prototype || proto === null\n}\n","import { ZOOM_LAYOUT } from '../actions/zoom-toggle'\n\n/**\n * If the option includes a `dataZoom` array (from ZoomToggle's transform),\n * lift any slider entries above the legend row so they don't overlap.\n * Returns `null` when there is no `dataZoom` — caller skips the layout\n * adjustment entirely.\n *\n * Shared between bar, histogram, and timeseries — every widget with a\n * horizontal x-axis dataZoom slider needs the same offset when a legend\n * is rendered below the plot.\n */\nexport function positionDataZoomForLegend(\n dataZoom: unknown,\n hasLegend: boolean,\n): unknown[] | null {\n if (!Array.isArray(dataZoom) || dataZoom.length === 0) return null\n return dataZoom.map((entry: unknown) => {\n if (entry == null || typeof entry !== 'object') return entry\n const dz = entry as { type?: string; bottom?: number }\n if (dz.type === 'slider' && hasLegend) {\n return { ...dz, bottom: ZOOM_LAYOUT.sliderBottomWithLegend }\n }\n return dz\n })\n}\n","import type { Theme } from '@mui/material'\n\n/**\n * Resolve a colour string against the MUI theme palette.\n *\n * - `'primary.main'`, `'secondary.dark'`, `'success.contrastText'`, … →\n * walks `theme.palette` along the dot-separated path and returns the\n * resolved string when traversal succeeds.\n * - `'#ff0000'`, `'rgb(255, 0, 0)'`, `'red'` → returned as-is (assumed\n * raw CSS; ECharts consumes them directly).\n * - `undefined` → `undefined` (callers fall back to ECharts' palette).\n *\n * Used by the echart option factories (Bar, Pie, Histogram, Scatterplot,\n * Timeseries) so per-series colours specified as theme paths in the\n * unified `WidgetSeries` shape paint correctly. Category, Formula, and\n * Spread render colours through MUI's `sx` resolver, which already\n * handles theme paths — they don't need this helper.\n */\nexport function resolveThemeColor(\n theme: Theme,\n raw: string | undefined,\n): string | undefined {\n if (raw == null) return undefined\n if (!raw.includes('.')) return raw\n const parts = raw.split('.')\n let cursor: unknown = theme.palette\n for (const part of parts) {\n if (cursor == null || typeof cursor !== 'object') {\n return raw\n }\n cursor = (cursor as Record<string, unknown>)[part]\n }\n return typeof cursor === 'string' ? cursor : raw\n}\n"],"mappings":";;AAWA,SAAgBA,EACdE,GACAE,GACG;CACH,IAAI,CAACA,GAAU,OAAOF;CACtB,IAAMI,IAA+B,EAAE,GAAGJ,EAAK;CAC/C,KAAK,IAAMK,KAAOC,OAAOC,KAAKL,CAAQ,GAAkB;EACtD,IAAMM,IAAIR,EAAKK,IACTI,IAAIP,EAASG;EACfI,MAAMC,KAAAA,MACVN,EAAIC,KAAiBM,EAAWH,GAAGC,CAAC;CACtC;CACA,OAAOL;AACT;AAEA,SAASO,EAAWH,GAAYC,GAAqB;CACnD,IAAIG,MAAMC,QAAQL,CAAC,KAAKI,MAAMC,QAAQJ,CAAC,GAAG;EACxC,IAAMK,IAAMC,KAAKC,IAAIR,EAAES,QAAQR,EAAEQ,MAAM,GACjCC,IAAaN,MAAeE,CAAG;EACrC,KAAK,IAAIK,IAAI,GAAGA,IAAIL,GAAKK,KAAK;GAC5B,IAAMC,IAAcZ,EAAEW,IAChBE,IAAcZ,EAAEU;GACtB,AAAIE,MAAOX,KAAAA,IAAWQ,EAAOC,KAAKC,IACzBA,MAAOV,KAAAA,IAAWQ,EAAOC,KAAKE,IAClCH,EAAOC,KAAKR,EAAWS,GAAIC,CAAE;EACpC;EACA,OAAOH;CACT;CAIA,OAHII,EAAcd,CAAC,KAAKc,EAAcb,CAAC,IAC9B;EAAE,GAAGD;EAAG,GAAGC;CAAE,IAEfA;AACT;AAEA,SAASa,EAAcC,GAA0C;CAC/D,IAAkB,OAAOA,KAAM,aAA3BA,GAAqC,OAAO;CAChD,IAAMC,IAAQlB,OAAOmB,eAAeF,CAAC;CACrC,OAAOC,MAAUlB,OAAOoB,aAAaF,MAAU;AACjD;;;ACrCA,SAAgBI,EACdC,GACAC,GACkB;CAElB,OADI,CAACC,MAAMC,QAAQH,CAAQ,KAAKA,EAASI,WAAW,IAAU,OACvDJ,EAASK,KAAKC,MAAmB;EACtC,IAAqB,OAAOA,KAAU,aAAlCA,GAA4C,OAAOA;EACvD,IAAMC,IAAKD;EAIX,OAHIC,EAAGC,SAAS,YAAYP,IACnB;GAAE,GAAGM;GAAIE,QAAQX,EAAYY;EAAuB,IAEtDH;CACT,CAAC;AACH;;;ACPA,SAAgBK,EACdC,GACAC,GACoB;CACpB,IAAIA,KAAO,MAAM;CACjB,IAAI,CAACA,EAAIE,SAAS,GAAG,GAAG,OAAOF;CAC/B,IAAMG,IAAQH,EAAII,MAAM,GAAG,GACvBC,IAAkBN,EAAMO;CAC5B,KAAK,IAAMC,KAAQJ,GAAO;EACxB,IAAsB,OAAOE,KAAW,aAApCA,GACF,OAAOL;EAETK,IAAUA,EAAmCE;CAC/C;CACA,OAAO,OAAOF,KAAW,WAAWA,IAASL;AAC/C"}
@@ -0,0 +1,187 @@
1
+ import { create as e } from "zustand";
2
+ //#region src/widgets/stores/widget-store.ts
3
+ var t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), r = e()((e, r) => ({
4
+ widgets: {},
5
+ setWidget: (t, n) => {
6
+ e((e) => {
7
+ let r = e.widgets[t] ?? {};
8
+ return { widgets: {
9
+ ...e.widgets,
10
+ [t]: {
11
+ ...r,
12
+ ...n,
13
+ id: t
14
+ }
15
+ } };
16
+ });
17
+ },
18
+ removeWidget: (t) => e((e) => {
19
+ let n = { ...e.widgets };
20
+ return delete n[t], { widgets: n };
21
+ }),
22
+ clearWidgets: () => e({ widgets: {} }),
23
+ getWidget: (e) => r().widgets[e],
24
+ registerTool: (t, n) => {
25
+ let i = r().widgets[t]?.registeredTools?.find((e) => e.id === n.id);
26
+ if (i?.order === n.order && i.enabled === n.enabled && i.type === n.type && i.disables === n.disables) {
27
+ i.fn = n.fn;
28
+ return;
29
+ }
30
+ e((e) => {
31
+ let r = e.widgets[t] ?? {}, i = (r.registeredTools ?? []).filter((e) => e.id !== n.id);
32
+ return { widgets: {
33
+ ...e.widgets,
34
+ [t]: {
35
+ ...r,
36
+ id: t,
37
+ registeredTools: [...i, n]
38
+ }
39
+ } };
40
+ });
41
+ },
42
+ unregisterTool: (t, n) => e((e) => {
43
+ let r = e.widgets[t];
44
+ if (!r) return e;
45
+ let i = (r.registeredTools ?? []).filter((e) => e.id !== n);
46
+ return { widgets: {
47
+ ...e.widgets,
48
+ [t]: {
49
+ ...r,
50
+ registeredTools: i
51
+ }
52
+ } };
53
+ }),
54
+ triggerToolPipeline: (t) => e((e) => {
55
+ let n = e.widgets[t];
56
+ return n ? { widgets: {
57
+ ...e.widgets,
58
+ [t]: {
59
+ ...n,
60
+ registeredTools: [...n.registeredTools ?? []]
61
+ }
62
+ } } : e;
63
+ }),
64
+ setToolEnabled: (t, n, i) => {
65
+ let a = r().widgets[t];
66
+ a && a.registeredTools?.find((e) => e.id === n)?.enabled === i || e((e) => {
67
+ let r = e.widgets[t];
68
+ if (!r) return e;
69
+ let a = (r.registeredTools ?? []).map((e) => e.id === n ? {
70
+ ...e,
71
+ enabled: i
72
+ } : e);
73
+ return { widgets: {
74
+ ...e.widgets,
75
+ [t]: {
76
+ ...r,
77
+ registeredTools: a
78
+ }
79
+ } };
80
+ });
81
+ },
82
+ executeToolPipeline: async (n, i) => {
83
+ let a = r().widgets[n];
84
+ if (!a) return;
85
+ let o = (t.get(n) ?? 0) + 1;
86
+ t.set(n, o);
87
+ let s = a, c = /* @__PURE__ */ new Set();
88
+ for (let e of s.registeredTools ?? []) e.enabled && e.disables && e.disables.forEach((e) => c.add(e));
89
+ let l = [...s.registeredTools ?? []].filter((e) => (e.type ?? "data") === "data" && e.enabled && !c.has(e.id)).sort((e, t) => e.order - t.order), u = i;
90
+ for (let e of l) {
91
+ if (t.get(n) !== o) return;
92
+ try {
93
+ u = await e.fn(u);
94
+ } catch (t) {
95
+ console.error(`Tool ${e.id} failed for widget ${n}:`, t);
96
+ }
97
+ }
98
+ let d = r().widgets[n];
99
+ if (d && Object.is(d.data, u) && Object.is(d.sourceData, i)) {
100
+ t.get(n) === o && t.delete(n);
101
+ return;
102
+ }
103
+ e((e) => {
104
+ let t = e.widgets[n];
105
+ return t ? { widgets: {
106
+ ...e.widgets,
107
+ [n]: {
108
+ ...t,
109
+ sourceData: i,
110
+ data: u
111
+ }
112
+ } } : e;
113
+ }), t.get(n) === o && t.delete(n);
114
+ },
115
+ executeConfigPipeline: async (t, i) => {
116
+ let a = r().widgets[t];
117
+ if (!a) return;
118
+ let o = (n.get(t) ?? 0) + 1;
119
+ n.set(t, o);
120
+ let s = /* @__PURE__ */ new Set();
121
+ for (let e of a.registeredTools ?? []) e.enabled && e.disables && e.disables.forEach((e) => s.add(e));
122
+ let c = [...a.registeredTools ?? []].filter((e) => e.type === "config" && e.enabled && !s.has(e.id)).sort((e, t) => e.order - t.order), l = i;
123
+ for (let e of c) {
124
+ if (n.get(t) !== o) return;
125
+ try {
126
+ l = await e.fn(l);
127
+ } catch (n) {
128
+ console.error(`Config tool ${e.id} failed for widget ${t}:`, n);
129
+ }
130
+ }
131
+ let u = i, d = l, f = r().widgets[t], p = f?._lastConfig, m = {};
132
+ for (let e of Object.keys(d)) {
133
+ let t = !Object.is(d[e], u[e]), n = !p || !(e in p), r = !n && Object.is(f[e], p[e]);
134
+ (t || n || r) && (m[e] = d[e]);
135
+ }
136
+ if (!Object.keys(m).some((e) => !Object.is(f?.[e], m[e])) && Object.is(l, p)) {
137
+ n.get(t) === o && n.delete(t);
138
+ return;
139
+ }
140
+ e((e) => {
141
+ let n = e.widgets[t];
142
+ return n ? { widgets: {
143
+ ...e.widgets,
144
+ [t]: {
145
+ ...n,
146
+ ...m,
147
+ _lastConfig: l
148
+ }
149
+ } } : e;
150
+ }), n.get(t) === o && n.delete(t);
151
+ }
152
+ })), i = {
153
+ get setWidget() {
154
+ return r.getState().setWidget;
155
+ },
156
+ get removeWidget() {
157
+ return r.getState().removeWidget;
158
+ },
159
+ get clearWidgets() {
160
+ return r.getState().clearWidgets;
161
+ },
162
+ get getWidget() {
163
+ return r.getState().getWidget;
164
+ },
165
+ get registerTool() {
166
+ return r.getState().registerTool;
167
+ },
168
+ get unregisterTool() {
169
+ return r.getState().unregisterTool;
170
+ },
171
+ get setToolEnabled() {
172
+ return r.getState().setToolEnabled;
173
+ },
174
+ get triggerToolPipeline() {
175
+ return r.getState().triggerToolPipeline;
176
+ },
177
+ get executeToolPipeline() {
178
+ return r.getState().executeToolPipeline;
179
+ },
180
+ get executeConfigPipeline() {
181
+ return r.getState().executeConfigPipeline;
182
+ }
183
+ };
184
+ //#endregion
185
+ export { i as n, r as t };
186
+
187
+ //# sourceMappingURL=widget-store-BFPKYm4R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-store-BFPKYm4R.js","names":["create","WidgetState","WidgetStore","ToolRegistration","WidgetStoreActions","activePipelines","Map","activeConfigPipelines","useWidgetStore","set","get","widgets","setWidget","id","widget","state","prev","removeWidget","clearWidgets","getWidget","T","registerTool","widgetId","tool","current","existingTool","registeredTools","find","t","order","enabled","type","disables","fn","filteredTools","filter","unregisterTool","toolId","triggerToolPipeline","setToolEnabled","updatedTools","map","executeToolPipeline","sourceData","currentExecution","widgetWithTools","disabledToolIds","Set","forEach","add","sortedTools","has","sort","a","b","transformedData","error","console","widgetAfter","Object","is","data","delete","currentWidget","executeConfigPipeline","baseConfig","transformedConfig","base","Record","result","widgetNow","lastConfig","_lastConfig","patch","key","keys","toolChanged","isFirstRun","userUnmodified","hasChanges","some","k","configRefChanged","widgetStoreActions","getState"],"sources":["../src/widgets/stores/widget-store.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type {\n WidgetState,\n WidgetStore,\n ToolRegistration,\n WidgetStoreActions,\n} from './types'\n\n// Track active pipeline executions for cancellation\nconst activePipelines = new Map<string, number>()\nconst activeConfigPipelines = new Map<string, number>()\n\n/**\n * Zustand store for managing widget state across the application.\n *\n * Provides centralized state management for all widget UI components, including\n * data/config transformation pipelines via registered tools.\n *\n * **Performance optimizations:**\n * - `registerTool` skips the store update when structural properties (order, enabled,\n * type, disables) haven't changed — only `fn` is updated via direct mutation,\n * avoiding a new `registeredTools` array reference and WidgetLoader pipeline cascades.\n * - `setToolEnabled` skips the store update when the enabled state is already the\n * requested value.\n * - `executeToolPipeline` / `executeConfigPipeline` skip the final `set()` when\n * the transformed data/config is referentially identical to what's already in the store.\n * - Both pipelines support cancellation — newer executions for the same widget\n * automatically cancel in-progress ones.\n *\n * @example Reading widget state (prefer useWidgetSelector for performance)\n * ```tsx\n * import { useWidgetSelector } from '@carto/ps-react-ui/widgets'\n *\n * function MyWidget({ id }: { id: string }) {\n * const { title, data } = useWidgetSelector(id, (w) => ({\n * title: w?.title,\n * data: w?.data,\n * }))\n * return <div>{title}: {JSON.stringify(data)}</div>\n * }\n * ```\n *\n * @example Writing widget state\n * ```tsx\n * import { widgetStoreActions } from '@carto/ps-react-ui/widgets'\n *\n * const { setWidget } = widgetStoreActions\n * setWidget('my-widget', { type: 'formula', isLoading: false, data: { value: 1000 } })\n * ```\n */\nexport const useWidgetStore = create<WidgetStore>()((set, get) => ({\n // State\n widgets: {},\n\n // Actions\n\n /** Merges partial state into the widget entry. Creates the widget if it doesn't exist. */\n setWidget: (id, widget) => {\n set((state) => {\n const prev = state.widgets[id] ?? ({} as WidgetStore['widgets'][string])\n return {\n widgets: {\n ...state.widgets,\n [id]: {\n ...prev,\n ...widget,\n id,\n },\n },\n }\n })\n },\n\n removeWidget: (id) =>\n set((state) => {\n const widgets = { ...state.widgets }\n\n delete widgets[id]\n\n return { widgets }\n }),\n\n clearWidgets: () =>\n set({\n widgets: {},\n }),\n\n getWidget: <T extends WidgetState>(id: string) => {\n return get().widgets[id] as T | undefined\n },\n\n /**\n * Registers a transformation tool for a widget's data or config pipeline.\n *\n * **No-op optimization:** When a tool with the same `id` already exists and its\n * structural properties (`order`, `enabled`, `type`, `disables`) are unchanged,\n * only `fn` is updated via direct mutation — no store update is triggered. This\n * allows action components to include all reactive dependencies in their\n * `useEffect` arrays without causing WidgetLoader pipeline cascades.\n */\n registerTool: (widgetId: string, tool: ToolRegistration) => {\n const current = get().widgets[widgetId]\n const existingTool = current?.registeredTools?.find(\n (t: ToolRegistration) => t.id === tool.id,\n )\n\n // No-op: structural properties unchanged — update fn via direct mutation.\n // Safe because fn is only consumed imperatively during pipeline execution.\n if (\n existingTool?.order === tool.order &&\n existingTool.enabled === tool.enabled &&\n existingTool.type === tool.type &&\n existingTool.disables === tool.disables\n ) {\n existingTool.fn = tool.fn\n return\n }\n\n set((state) => {\n const widget = state.widgets[widgetId] ?? ({} as WidgetState)\n const registeredTools = widget.registeredTools ?? []\n\n // Remove existing tool with same id if present\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== tool.id,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...widget,\n id: widgetId,\n registeredTools: [...filteredTools, tool],\n },\n },\n }\n })\n },\n\n unregisterTool: (widgetId: string, toolId: string) =>\n set((state) => {\n const current = state.widgets[widgetId]\n if (!current) return state\n\n const registeredTools = current.registeredTools ?? []\n const filteredTools = registeredTools.filter(\n (t: ToolRegistration) => t.id !== toolId,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...current,\n registeredTools: filteredTools,\n },\n },\n }\n }),\n\n /**\n * Triggers pipeline re-execution by creating a new `registeredTools` reference.\n * This is a lightweight operation that only bumps the array reference without\n * modifying any tool.\n */\n triggerToolPipeline: (widgetId: string) =>\n set((state) => {\n const widget = state.widgets[widgetId]\n if (!widget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...widget,\n registeredTools: [...(widget.registeredTools ?? [])],\n },\n },\n }\n }),\n\n /**\n * Updates a tool's enabled state.\n *\n * **No-op optimization:** Skips the store update if the tool already has the\n * requested enabled value.\n */\n setToolEnabled: (widgetId: string, toolId: string, enabled: boolean) => {\n const current = get().widgets[widgetId]\n if (current) {\n const tool = current.registeredTools?.find(\n (t: ToolRegistration) => t.id === toolId,\n )\n if (tool?.enabled === enabled) return\n }\n\n set((state) => {\n const widget = state.widgets[widgetId]\n if (!widget) return state\n\n const registeredTools = widget.registeredTools ?? []\n const updatedTools = registeredTools.map((tool: ToolRegistration) =>\n tool.id === toolId ? { ...tool, enabled } : tool,\n )\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...widget,\n registeredTools: updatedTools,\n },\n },\n }\n })\n },\n\n /**\n * Executes the data transformation pipeline for a widget.\n *\n * Filters to enabled data-type tools (respecting `disables`), sorts by `order`,\n * and chains their `fn` calls. Supports async tools.\n *\n * **Cancellation:** Newer executions for the same widget automatically cancel\n * in-progress ones via a version counter.\n *\n * **No-op optimization:** Skips the final `set()` if the transformed data is\n * referentially identical (`Object.is`) to what's already in the store.\n */\n executeToolPipeline: async (widgetId: string, sourceData: unknown) => {\n const widget = get().widgets[widgetId]\n if (!widget) return\n\n // Cancel any in-progress pipeline for this widget\n const currentExecution = (activePipelines.get(widgetId) ?? 0) + 1\n activePipelines.set(widgetId, currentExecution)\n\n const widgetWithTools = widget\n\n // Build set of tool IDs that should be disabled\n const disabledToolIds = new Set<string>()\n for (const tool of widgetWithTools.registeredTools ?? []) {\n if (tool.enabled && tool.disables) {\n tool.disables.forEach((id) => disabledToolIds.add(id))\n }\n }\n\n // Sort tools by order and filter enabled data-only tools, excluding disabled tools\n const sortedTools = [...(widgetWithTools.registeredTools ?? [])]\n .filter(\n (tool) =>\n (tool.type ?? 'data') === 'data' &&\n tool.enabled &&\n !disabledToolIds.has(tool.id),\n )\n .sort((a, b) => a.order - b.order)\n\n // Execute pipeline - handle both sync and async tools\n let transformedData = sourceData\n for (const tool of sortedTools) {\n // Check if this execution was cancelled\n if (activePipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n try {\n // Call tool function (may return Promise or direct value)\n transformedData = await tool.fn(transformedData)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Tool ${tool.id} failed for widget ${widgetId}:`, error)\n // Continue with current data to prevent one tool from breaking all\n }\n }\n\n // Skip store update if neither data nor sourceData changed\n const widgetAfter = get().widgets[widgetId]\n if (\n widgetAfter &&\n Object.is(widgetAfter.data, transformedData) &&\n Object.is(widgetAfter.sourceData, sourceData)\n ) {\n if (activePipelines.get(widgetId) === currentExecution) {\n activePipelines.delete(widgetId)\n }\n return\n }\n\n // Single store update with final transformed data\n set((state) => {\n const currentWidget = state.widgets[widgetId]\n if (!currentWidget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...currentWidget,\n sourceData,\n data: transformedData,\n },\n },\n }\n })\n\n // Clean up tracking\n if (activePipelines.get(widgetId) === currentExecution) {\n activePipelines.delete(widgetId)\n }\n },\n\n /**\n * Executes the config transformation pipeline for a widget.\n *\n * Filters to enabled config-type tools (respecting `disables`), sorts by `order`,\n * and chains their `fn` calls. The transformed config is spread into the widget state.\n *\n * **Cancellation:** Newer executions for the same widget automatically cancel\n * in-progress ones via a version counter.\n *\n * **No-op optimization:** Skips the final `set()` when the config object is unchanged\n * and all its properties already match what's in the store.\n */\n executeConfigPipeline: async (widgetId: string, baseConfig: object) => {\n const widget = get().widgets[widgetId]\n if (!widget) return\n\n // Cancel any in-progress config pipeline for this widget\n const currentExecution = (activeConfigPipelines.get(widgetId) ?? 0) + 1\n activeConfigPipelines.set(widgetId, currentExecution)\n\n // Build set of tool IDs that should be disabled (cross-type disabling works)\n const disabledToolIds = new Set<string>()\n for (const tool of widget.registeredTools ?? []) {\n if (tool.enabled && tool.disables) {\n tool.disables.forEach((id) => disabledToolIds.add(id))\n }\n }\n\n // Filter to config tools only, sort by order\n const sortedTools = [...(widget.registeredTools ?? [])]\n .filter(\n (tool) =>\n tool.type === 'config' &&\n tool.enabled &&\n !disabledToolIds.has(tool.id),\n )\n .sort((a, b) => a.order - b.order)\n\n // Chain config tools\n let transformedConfig: unknown = baseConfig\n for (const tool of sortedTools) {\n if (activeConfigPipelines.get(widgetId) !== currentExecution) {\n return\n }\n\n try {\n transformedConfig = await tool.fn(transformedConfig)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `Config tool ${tool.id} failed for widget ${widgetId}:`,\n error,\n )\n }\n }\n\n // Build a patch that only includes properties the pipeline should set.\n // A property is applied when:\n // 1. A config tool explicitly changed it (transformedConfig[k] !== baseConfig[k])\n // 2. First pipeline run for this widget (no _lastConfig yet)\n // 3. The widget value still matches what the pipeline last set — meaning the\n // user hasn't modified it via setWidget, so it's safe to overwrite.\n // A property is SKIPPED when the widget value differs from _lastConfig,\n // meaning the user (or a hook) changed it since the last pipeline run.\n const base = baseConfig as Record<string, unknown>\n const result = transformedConfig as Record<string, unknown>\n const widgetNow = get().widgets[widgetId] as unknown as Record<\n string,\n unknown\n >\n const lastConfig = widgetNow?._lastConfig as\n | Record<string, unknown>\n | undefined\n\n const patch: Record<string, unknown> = {}\n for (const key of Object.keys(result)) {\n const toolChanged = !Object.is(result[key], base[key])\n const isFirstRun = !lastConfig || !(key in lastConfig)\n const userUnmodified =\n !isFirstRun && Object.is(widgetNow[key], lastConfig[key])\n\n if (toolChanged || isFirstRun || userUnmodified) {\n patch[key] = result[key]\n }\n }\n\n // Skip store update if every patch value already matches the widget\n const hasChanges = Object.keys(patch).some(\n (k) => !Object.is(widgetNow?.[k], patch[k]),\n )\n const configRefChanged = !Object.is(transformedConfig, lastConfig)\n\n if (!hasChanges && !configRefChanged) {\n if (activeConfigPipelines.get(widgetId) === currentExecution) {\n activeConfigPipelines.delete(widgetId)\n }\n return\n }\n\n // Apply the patch and store the pipeline output for next run's comparison\n set((state) => {\n const currentWidget = state.widgets[widgetId]\n if (!currentWidget) return state\n\n return {\n widgets: {\n ...state.widgets,\n [widgetId]: {\n ...currentWidget,\n ...patch,\n _lastConfig: transformedConfig,\n },\n },\n }\n })\n\n if (activeConfigPipelines.get(widgetId) === currentExecution) {\n activeConfigPipelines.delete(widgetId)\n }\n },\n}))\n\n/**\n * Stable references to store actions, accessible without creating a subscription.\n *\n * Use this instead of `useWidgetStore((state) => state.setWidget)` to avoid\n * unnecessary subscriber evaluations. Actions are stable functions that never\n * change, so subscribing to them wastes cycles on every store update.\n *\n * @example\n * ```tsx\n * import { widgetStoreActions } from '@carto/ps-react-ui/widgets'\n *\n * const { setWidget, registerTool } = widgetStoreActions\n *\n * useEffect(() => {\n * registerTool(id, { id: 'my-tool', order: 10, enabled: true, fn: (d) => d })\n * return () => widgetStoreActions.unregisterTool(id, 'my-tool')\n * }, [id])\n * ```\n */\nexport const widgetStoreActions: WidgetStoreActions = {\n get setWidget() {\n return useWidgetStore.getState().setWidget\n },\n get removeWidget() {\n return useWidgetStore.getState().removeWidget\n },\n get clearWidgets() {\n return useWidgetStore.getState().clearWidgets\n },\n get getWidget() {\n return useWidgetStore.getState().getWidget\n },\n get registerTool() {\n return useWidgetStore.getState().registerTool\n },\n get unregisterTool() {\n return useWidgetStore.getState().unregisterTool\n },\n get setToolEnabled() {\n return useWidgetStore.getState().setToolEnabled\n },\n get triggerToolPipeline() {\n return useWidgetStore.getState().triggerToolPipeline\n },\n get executeToolPipeline() {\n return useWidgetStore.getState().executeToolPipeline\n },\n get executeConfigPipeline() {\n return useWidgetStore.getState().executeConfigPipeline\n },\n} as WidgetStoreActions\n"],"mappings":"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"}