@carto/ps-react-ui 4.4.1 → 4.4.2

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 (210) hide show
  1. package/dist/components.js.map +1 -1
  2. package/dist/error-CEkRPccv.js.map +1 -1
  3. package/dist/exports-Cr43OCul.js.map +1 -1
  4. package/dist/formatter-B1Xh8XDH.js +5 -0
  5. package/dist/formatter-B1Xh8XDH.js.map +1 -0
  6. package/dist/lasso-tool-BYbxrJ-7.js.map +1 -1
  7. package/dist/note-t51drNe0.js.map +1 -1
  8. package/dist/options-D9wflre6.js.map +1 -1
  9. package/dist/row-DTCV0Ocm.js.map +1 -1
  10. package/dist/series-CYNOu2Ju.js.map +1 -1
  11. package/dist/smart-tooltip-D4vwQpFf.js.map +1 -1
  12. package/dist/styles-C_8vOEep.js +167 -0
  13. package/dist/styles-C_8vOEep.js.map +1 -0
  14. package/dist/tooltip-BDnrRKrp.js.map +1 -1
  15. package/dist/types/components/basemaps/basemaps.d.ts +20 -0
  16. package/dist/types/components/geolocation-controls/geolocation-controls.d.ts +11 -0
  17. package/dist/types/components/lasso-tool/lasso-tool-inline.d.ts +17 -0
  18. package/dist/types/components/lasso-tool/lasso-tool.d.ts +21 -0
  19. package/dist/types/components/list-data/list-data.d.ts +16 -0
  20. package/dist/types/components/measurement-tools/measurement-tools.d.ts +20 -0
  21. package/dist/types/components/smart-tooltip/smart-tooltip.d.ts +17 -0
  22. package/dist/types/components/tooltip/tooltip.d.ts +13 -0
  23. package/dist/types/components/zoom-controls/zoom-controls.d.ts +16 -0
  24. package/dist/types/hooks/use-widget-ref.d.ts +4 -4
  25. package/dist/types/widgets/actions/download/download.d.ts +11 -0
  26. package/dist/types/widgets/actions/download/exports.d.ts +15 -0
  27. package/dist/types/widgets/actions/fullscreen/fullscreen.d.ts +13 -0
  28. package/dist/types/widgets/actions/index.d.ts +1 -1
  29. package/dist/types/widgets/actions/relative-data/relative-data.d.ts +1 -0
  30. package/dist/types/widgets/bar/config.d.ts +8 -4
  31. package/dist/types/widgets/category/category-ui.d.ts +3 -0
  32. package/dist/types/widgets/category/components/category-bar.d.ts +3 -0
  33. package/dist/types/widgets/category/components/category-legend.d.ts +3 -0
  34. package/dist/types/widgets/category/components/category-row-multi.d.ts +3 -0
  35. package/dist/types/widgets/category/components/category-row-other.d.ts +3 -0
  36. package/dist/types/widgets/category/components/category-row-single.d.ts +3 -0
  37. package/dist/types/widgets/category/config.d.ts +11 -0
  38. package/dist/types/widgets/echart/echart-ui.d.ts +7 -0
  39. package/dist/types/widgets/echart/echart.d.ts +6 -0
  40. package/dist/types/widgets/echart/options.d.ts +7 -0
  41. package/dist/types/widgets/echart/types.d.ts +1 -0
  42. package/dist/types/widgets/echart/utils.d.ts +41 -0
  43. package/dist/types/widgets/error/error.d.ts +10 -0
  44. package/dist/types/widgets/formula/components/item.d.ts +3 -0
  45. package/dist/types/widgets/formula/components/prefix.d.ts +3 -0
  46. package/dist/types/widgets/formula/components/row.d.ts +3 -0
  47. package/dist/types/widgets/formula/components/series.d.ts +3 -0
  48. package/dist/types/widgets/formula/components/suffix.d.ts +3 -0
  49. package/dist/types/widgets/formula/components/value.d.ts +3 -0
  50. package/dist/types/widgets/formula/config.d.ts +11 -0
  51. package/dist/types/widgets/formula/formula-ui.d.ts +3 -0
  52. package/dist/types/widgets/histogram/config.d.ts +8 -4
  53. package/dist/types/widgets/loader/loader.d.ts +22 -0
  54. package/dist/types/widgets/loader/utils.d.ts +26 -3
  55. package/dist/types/widgets/markdown/config.d.ts +10 -0
  56. package/dist/types/widgets/markdown/markdown-ui.d.ts +7 -0
  57. package/dist/types/widgets/markdown/markdown.d.ts +3 -0
  58. package/dist/types/widgets/note/note.d.ts +10 -0
  59. package/dist/types/widgets/pie/config.d.ts +8 -4
  60. package/dist/types/widgets/range/components/range-item.d.ts +3 -0
  61. package/dist/types/widgets/range/config.d.ts +5 -0
  62. package/dist/types/widgets/range/range-ui.d.ts +3 -0
  63. package/dist/types/widgets/scatterplot/config.d.ts +7 -3
  64. package/dist/types/widgets/selection-summary/selection-summary.d.ts +11 -0
  65. package/dist/types/widgets/skeleton-loader/skeleton-loader.d.ts +10 -0
  66. package/dist/types/widgets/spread/components/max-value.d.ts +3 -0
  67. package/dist/types/widgets/spread/components/min-value.d.ts +3 -0
  68. package/dist/types/widgets/spread/components/separator.d.ts +3 -0
  69. package/dist/types/widgets/spread/config.d.ts +11 -0
  70. package/dist/types/widgets/spread/spread-ui.d.ts +3 -0
  71. package/dist/types/widgets/subheader/subheader.d.ts +11 -0
  72. package/dist/types/widgets/table/config.d.ts +8 -3
  73. package/dist/types/widgets/table/hooks/use-pagination.d.ts +11 -3
  74. package/dist/types/widgets/table/hooks/use-selection.d.ts +11 -2
  75. package/dist/types/widgets/table/hooks/use-sort.d.ts +11 -3
  76. package/dist/types/widgets/timeseries/config.d.ts +8 -4
  77. package/dist/types/widgets/utils/chart-config/download-config.d.ts +3 -0
  78. package/dist/types/widgets/{_shared → utils}/chart-config/index.d.ts +2 -0
  79. package/dist/types/widgets/{_shared → utils}/chart-config/option-builders.d.ts +1 -1
  80. package/dist/types/widgets/utils/formatter.d.ts +1 -0
  81. package/dist/types/widgets/utils/index.d.ts +7 -0
  82. package/dist/types/widgets/wrapper/components/actions.d.ts +3 -0
  83. package/dist/types/widgets/wrapper/components/options.d.ts +3 -0
  84. package/dist/types/widgets/wrapper/components/title.d.ts +3 -0
  85. package/dist/types/widgets/wrapper/wrapper-ui.d.ts +14 -0
  86. package/dist/types/widgets/wrapper/wrapper.d.ts +14 -0
  87. package/dist/use-widget-ref-wtFLDFCD.js.map +1 -1
  88. package/dist/utils-BOhInag6.js.map +1 -1
  89. package/dist/widgets/actions.js +651 -628
  90. package/dist/widgets/actions.js.map +1 -1
  91. package/dist/widgets/bar.js +66 -86
  92. package/dist/widgets/bar.js.map +1 -1
  93. package/dist/widgets/category.js +21 -21
  94. package/dist/widgets/category.js.map +1 -1
  95. package/dist/widgets/echart.js.map +1 -1
  96. package/dist/widgets/formula.js +54 -54
  97. package/dist/widgets/formula.js.map +1 -1
  98. package/dist/widgets/histogram.js +45 -65
  99. package/dist/widgets/histogram.js.map +1 -1
  100. package/dist/widgets/loader.js.map +1 -1
  101. package/dist/widgets/markdown.js.map +1 -1
  102. package/dist/widgets/pie.js +122 -99
  103. package/dist/widgets/pie.js.map +1 -1
  104. package/dist/widgets/range.js +23 -22
  105. package/dist/widgets/range.js.map +1 -1
  106. package/dist/widgets/scatterplot.js +39 -59
  107. package/dist/widgets/scatterplot.js.map +1 -1
  108. package/dist/widgets/selection-summary.js.map +1 -1
  109. package/dist/widgets/skeleton-loader.js.map +1 -1
  110. package/dist/widgets/spread.js +40 -41
  111. package/dist/widgets/spread.js.map +1 -1
  112. package/dist/widgets/subheader.js.map +1 -1
  113. package/dist/widgets/table.js.map +1 -1
  114. package/dist/widgets/timeseries.js +39 -59
  115. package/dist/widgets/timeseries.js.map +1 -1
  116. package/dist/widgets/utils.js +31 -0
  117. package/dist/widgets/utils.js.map +1 -0
  118. package/dist/widgets/wrapper.js.map +1 -1
  119. package/package.json +5 -1
  120. package/src/components/basemaps/basemaps.tsx +20 -0
  121. package/src/components/geolocation-controls/geolocation-controls.tsx +11 -0
  122. package/src/components/lasso-tool/lasso-tool-inline.tsx +17 -0
  123. package/src/components/lasso-tool/lasso-tool.tsx +21 -0
  124. package/src/components/list-data/list-data.tsx +16 -0
  125. package/src/components/measurement-tools/measurement-tools.tsx +20 -0
  126. package/src/components/smart-tooltip/smart-tooltip.tsx +17 -0
  127. package/src/components/tooltip/tooltip.tsx +13 -0
  128. package/src/components/zoom-controls/zoom-controls.tsx +16 -0
  129. package/src/hooks/use-widget-ref.ts +4 -4
  130. package/src/widgets/README.md +10 -10
  131. package/src/widgets/actions/download/download.tsx +11 -0
  132. package/src/widgets/actions/download/exports.tsx +15 -0
  133. package/src/widgets/actions/fullscreen/fullscreen.tsx +13 -0
  134. package/src/widgets/actions/index.ts +1 -0
  135. package/src/widgets/actions/relative-data/relative-data.test.tsx +62 -1
  136. package/src/widgets/actions/relative-data/relative-data.tsx +62 -39
  137. package/src/widgets/bar/config.ts +12 -20
  138. package/src/widgets/bar/style.ts +1 -1
  139. package/src/widgets/category/category-ui.tsx +4 -2
  140. package/src/widgets/category/components/category-bar.tsx +3 -0
  141. package/src/widgets/category/components/category-legend.tsx +3 -0
  142. package/src/widgets/category/components/category-row-multi.tsx +3 -0
  143. package/src/widgets/category/components/category-row-other.tsx +3 -0
  144. package/src/widgets/category/components/category-row-single.tsx +3 -0
  145. package/src/widgets/category/config.ts +11 -0
  146. package/src/widgets/echart/echart-ui.tsx +7 -0
  147. package/src/widgets/echart/echart.tsx +6 -0
  148. package/src/widgets/echart/options.ts +7 -0
  149. package/src/widgets/echart/types.ts +1 -0
  150. package/src/widgets/echart/utils.ts +41 -0
  151. package/src/widgets/error/error.tsx +10 -0
  152. package/src/widgets/formula/components/item.tsx +3 -0
  153. package/src/widgets/formula/components/prefix.tsx +3 -0
  154. package/src/widgets/formula/components/row.tsx +3 -0
  155. package/src/widgets/formula/components/series.tsx +3 -0
  156. package/src/widgets/formula/components/suffix.tsx +3 -0
  157. package/src/widgets/formula/components/value.tsx +4 -2
  158. package/src/widgets/formula/config.ts +11 -0
  159. package/src/widgets/formula/formula-ui.tsx +3 -0
  160. package/src/widgets/histogram/config.ts +11 -20
  161. package/src/widgets/histogram/style.ts +1 -1
  162. package/src/widgets/loader/loader.tsx +22 -0
  163. package/src/widgets/loader/utils.ts +26 -3
  164. package/src/widgets/markdown/config.ts +10 -0
  165. package/src/widgets/markdown/markdown-ui.tsx +7 -0
  166. package/src/widgets/markdown/markdown.tsx +3 -0
  167. package/src/widgets/note/note.tsx +10 -0
  168. package/src/widgets/pie/config.ts +85 -30
  169. package/src/widgets/pie/style.ts +1 -1
  170. package/src/widgets/range/components/range-item.tsx +5 -2
  171. package/src/widgets/range/config.ts +5 -0
  172. package/src/widgets/range/range-ui.tsx +3 -0
  173. package/src/widgets/scatterplot/config.ts +11 -20
  174. package/src/widgets/scatterplot/style.ts +1 -1
  175. package/src/widgets/selection-summary/selection-summary.tsx +11 -0
  176. package/src/widgets/skeleton-loader/skeleton-loader.tsx +10 -0
  177. package/src/widgets/spread/components/max-value.tsx +4 -2
  178. package/src/widgets/spread/components/min-value.tsx +4 -2
  179. package/src/widgets/spread/components/separator.tsx +3 -0
  180. package/src/widgets/spread/config.ts +11 -0
  181. package/src/widgets/spread/spread-ui.tsx +3 -0
  182. package/src/widgets/subheader/subheader.tsx +11 -0
  183. package/src/widgets/table/config.ts +8 -3
  184. package/src/widgets/table/hooks/use-pagination.ts +11 -3
  185. package/src/widgets/table/hooks/use-selection.ts +11 -2
  186. package/src/widgets/table/hooks/use-sort.ts +11 -3
  187. package/src/widgets/timeseries/config.ts +11 -20
  188. package/src/widgets/timeseries/style.ts +1 -1
  189. package/src/widgets/utils/chart-config/download-config.ts +22 -0
  190. package/src/widgets/{_shared → utils}/chart-config/index.ts +4 -0
  191. package/src/widgets/{_shared → utils}/chart-config/option-builders.ts +1 -1
  192. package/src/widgets/utils/formatter.ts +1 -0
  193. package/src/widgets/utils/index.ts +26 -0
  194. package/src/widgets/wrapper/components/actions.tsx +3 -0
  195. package/src/widgets/wrapper/components/options.tsx +3 -0
  196. package/src/widgets/wrapper/components/title.tsx +3 -0
  197. package/src/widgets/wrapper/wrapper-ui.tsx +14 -0
  198. package/src/widgets/wrapper/wrapper.tsx +14 -0
  199. package/dist/styles-CAroD5Rc.js +0 -123
  200. package/dist/styles-CAroD5Rc.js.map +0 -1
  201. /package/dist/types/widgets/{_shared → utils}/chart-config/config-factory.d.ts +0 -0
  202. /package/dist/types/widgets/{_shared → utils}/chart-config/csv-modifiers.d.ts +0 -0
  203. /package/dist/types/widgets/{_shared → utils}/chart-config/option-builders.test.d.ts +0 -0
  204. /package/dist/types/widgets/{_shared → utils}/skeleton/index.d.ts +0 -0
  205. /package/dist/types/widgets/{_shared → utils}/skeleton/styles.d.ts +0 -0
  206. /package/src/widgets/{_shared → utils}/chart-config/config-factory.ts +0 -0
  207. /package/src/widgets/{_shared → utils}/chart-config/csv-modifiers.ts +0 -0
  208. /package/src/widgets/{_shared → utils}/chart-config/option-builders.test.ts +0 -0
  209. /package/src/widgets/{_shared → utils}/skeleton/index.ts +0 -0
  210. /package/src/widgets/{_shared → utils}/skeleton/styles.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"echart.js","sources":["../../src/widgets/echart/echart-ui.tsx","../../src/widgets/echart/echart.tsx"],"sourcesContent":["import { useEffect, useRef, useImperativeHandle } from 'react'\nimport * as echarts from 'echarts'\nimport type { EchartUIProps } from './types'\nimport { useWidgetRef } from '../../hooks'\n\nexport function EchartUI(props: EchartUIProps) {\n const { id, ref, init, option, className, style, onEvents } = props\n\n const { ref: chartRef, instance: chartInstanceRef } =\n useWidgetRef<HTMLDivElement>(id)\n const chartInstance = useRef<echarts.ECharts>(null)\n const resizeObserverRef = useRef<ResizeObserver | null>(null)\n\n useImperativeHandle(ref, () => chartInstance.current!, [])\n\n useEffect(() => {\n if (!chartRef.current) return\n\n chartInstance.current = echarts.init(chartRef.current, null, {\n renderer: 'svg',\n height: 304,\n ...init,\n })\n chartInstanceRef.current = chartInstance.current\n // Cleanup function\n return () => {\n chartInstance.current?.dispose()\n chartInstance.current = null\n chartInstanceRef.current = null\n }\n }, [chartInstanceRef, chartRef, init])\n\n // Update chart when options change\n useEffect(() => {\n chartInstance.current?.setOption(option, {\n lazyUpdate: true,\n notMerge: true,\n })\n }, [option])\n\n // Handle resize using ResizeObserver\n useEffect(() => {\n const handleResize = () => {\n chartInstance.current?.resize()\n }\n\n resizeObserverRef.current = new ResizeObserver(handleResize)\n resizeObserverRef.current.observe(chartRef.current!)\n\n return () => {\n resizeObserverRef.current?.disconnect()\n resizeObserverRef.current = null\n }\n }, [chartRef])\n\n useEffect(() => {\n const _onEvents = { ...(onEvents ?? {}) }\n if (!_onEvents.click) {\n _onEvents.mousemove = () => {\n chartInstance.current?.getZr().setCursorStyle('default')\n }\n }\n\n // Attach event listeners\n Object.entries(_onEvents).forEach(([event, handler]) => {\n chartInstance.current?.on(event, handler)\n })\n // Cleanup function to remove event listeners\n return () => {\n Object.entries(_onEvents).forEach(([event]) => {\n chartInstance.current?.off(event)\n })\n }\n }, [onEvents])\n\n return <div id={id} ref={chartRef} style={style} className={className} />\n}\n","import type {\n EchartProps,\n EchartWidgetState,\n EchartWidgetData,\n EchartOptionsProps,\n} from './types'\nimport { EchartUI } from './echart-ui'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { useMemo } from 'react'\n\nexport function Echart(props: EchartProps) {\n const id = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.id),\n )\n\n const data = useWidgetStore(\n useShallow(\n (state) =>\n state.getWidget<EchartWidgetState>(props.id)?.data as\n | EchartWidgetData\n | undefined,\n ),\n )\n\n const widgetOption = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.option),\n )\n\n const onEvents = useWidgetStore(\n useShallow(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.onEvents,\n ),\n )\n\n const init = useWidgetStore(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.init,\n )\n\n // Memoize dataset transformation to avoid re-computing on every render\n const dataset = useMemo(() => buildDataset(data), [data])\n\n const option = useMemo<EchartOptionsProps>(\n () => ({\n ...widgetOption,\n ...(dataset && { dataset }),\n }),\n [widgetOption, dataset],\n )\n\n if (!id) {\n return null\n }\n\n return (\n <EchartUI id={props.id} option={option} onEvents={onEvents} init={init} />\n )\n}\n\n/**\n * Builds the dataset configuration from widget data\n * @param data - The widget data array\n * @returns The dataset configuration for ECharts\n */\nfunction buildDataset(\n data: EchartWidgetData | undefined,\n): EchartOptionsProps['dataset'] {\n if (!data || data.length === 0) {\n return undefined\n }\n\n return data.map((d) => ({\n source: d,\n }))\n}\n"],"names":["EchartUI","props","$","_c","id","ref","init","option","className","style","onEvents","chartRef","instance","chartInstanceRef","useWidgetRef","chartInstance","useRef","resizeObserverRef","t0","t1","Symbol","for","current","useImperativeHandle","t2","t3","echarts","renderer","height","dispose","useEffect","t4","t5","setOption","lazyUpdate","notMerge","t6","t7","handleResize","resize","ResizeObserver","observe","disconnect","t8","t9","_onEvents","click","mousemove","getZr","setCursorStyle","Object","entries","forEach","t10","event","handler","on","t11","event_0","off","Echart","state","getWidget","useWidgetStore","useShallow","state_0","data","state_1","widgetOption","state_2","state_3","buildDataset","dataset","length","map","d","source"],"mappings":"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"}
1
+ {"version":3,"file":"echart.js","sources":["../../src/widgets/echart/echart-ui.tsx","../../src/widgets/echart/echart.tsx"],"sourcesContent":["import { useEffect, useRef, useImperativeHandle } from 'react'\nimport * as echarts from 'echarts'\nimport type { EchartUIProps } from './types'\nimport { useWidgetRef } from '../../hooks'\n\n/**\n * Presentational component that initializes and manages an Apache ECharts instance.\n *\n * @remarks\n * Handles chart lifecycle (init, dispose), option updates, resize observation, and event listener management.\n * Uses SVG renderer with a default height of 304px.\n */\nexport function EchartUI(props: EchartUIProps) {\n const { id, ref, init, option, className, style, onEvents } = props\n\n const { ref: chartRef, instance: chartInstanceRef } =\n useWidgetRef<HTMLDivElement>(id)\n const chartInstance = useRef<echarts.ECharts>(null)\n const resizeObserverRef = useRef<ResizeObserver | null>(null)\n\n useImperativeHandle(ref, () => chartInstance.current!, [])\n\n useEffect(() => {\n if (!chartRef.current) return\n\n chartInstance.current = echarts.init(chartRef.current, null, {\n renderer: 'svg',\n height: 304,\n ...init,\n })\n chartInstanceRef.current = chartInstance.current\n // Cleanup function\n return () => {\n chartInstance.current?.dispose()\n chartInstance.current = null\n chartInstanceRef.current = null\n }\n }, [chartInstanceRef, chartRef, init])\n\n // Update chart when options change\n useEffect(() => {\n chartInstance.current?.setOption(option, {\n lazyUpdate: true,\n notMerge: true,\n })\n }, [option])\n\n // Handle resize using ResizeObserver\n useEffect(() => {\n const handleResize = () => {\n chartInstance.current?.resize()\n }\n\n resizeObserverRef.current = new ResizeObserver(handleResize)\n resizeObserverRef.current.observe(chartRef.current!)\n\n return () => {\n resizeObserverRef.current?.disconnect()\n resizeObserverRef.current = null\n }\n }, [chartRef])\n\n useEffect(() => {\n const _onEvents = { ...(onEvents ?? {}) }\n if (!_onEvents.click) {\n _onEvents.mousemove = () => {\n chartInstance.current?.getZr().setCursorStyle('default')\n }\n }\n\n // Attach event listeners\n Object.entries(_onEvents).forEach(([event, handler]) => {\n chartInstance.current?.on(event, handler)\n })\n // Cleanup function to remove event listeners\n return () => {\n Object.entries(_onEvents).forEach(([event]) => {\n chartInstance.current?.off(event)\n })\n }\n }, [onEvents])\n\n return <div id={id} ref={chartRef} style={style} className={className} />\n}\n","import type {\n EchartProps,\n EchartWidgetState,\n EchartWidgetData,\n EchartOptionsProps,\n} from './types'\nimport { EchartUI } from './echart-ui'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { useMemo } from 'react'\n\n/**\n * Stateful EChart widget component that reads data and options from the widget store and renders an ECharts chart.\n *\n * @remarks\n * Transforms widget data into ECharts dataset format and delegates rendering to {@link EchartUI}.\n */\nexport function Echart(props: EchartProps) {\n const id = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.id),\n )\n\n const data = useWidgetStore(\n useShallow(\n (state) =>\n state.getWidget<EchartWidgetState>(props.id)?.data as\n | EchartWidgetData\n | undefined,\n ),\n )\n\n const widgetOption = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.option),\n )\n\n const onEvents = useWidgetStore(\n useShallow(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.onEvents,\n ),\n )\n\n const init = useWidgetStore(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.init,\n )\n\n // Memoize dataset transformation to avoid re-computing on every render\n const dataset = useMemo(() => buildDataset(data), [data])\n\n const option = useMemo<EchartOptionsProps>(\n () => ({\n ...widgetOption,\n ...(dataset && { dataset }),\n }),\n [widgetOption, dataset],\n )\n\n if (!id) {\n return null\n }\n\n return (\n <EchartUI id={props.id} option={option} onEvents={onEvents} init={init} />\n )\n}\n\n/**\n * Builds the dataset configuration from widget data\n * @param data - The widget data array\n * @returns The dataset configuration for ECharts\n */\nfunction buildDataset(\n data: EchartWidgetData | undefined,\n): EchartOptionsProps['dataset'] {\n if (!data || data.length === 0) {\n return undefined\n }\n\n return data.map((d) => ({\n source: d,\n }))\n}\n"],"names":["EchartUI","props","$","_c","id","ref","init","option","className","style","onEvents","chartRef","instance","chartInstanceRef","useWidgetRef","chartInstance","useRef","resizeObserverRef","t0","t1","Symbol","for","current","useImperativeHandle","t2","t3","echarts","renderer","height","dispose","useEffect","t4","t5","setOption","lazyUpdate","notMerge","t6","t7","handleResize","resize","ResizeObserver","observe","disconnect","t8","t9","_onEvents","click","mousemove","getZr","setCursorStyle","Object","entries","forEach","t10","event","handler","on","t11","event_0","off","Echart","state","getWidget","useWidgetStore","useShallow","state_0","data","state_1","widgetOption","state_2","state_3","buildDataset","dataset","length","map","d","source"],"mappings":"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"}
@@ -3,8 +3,9 @@ import { jsx as f, jsxs as k, Fragment as C } from "react/jsx-runtime";
3
3
  import { c as w } from "react/compiler-runtime";
4
4
  import { u as h } from "../widget-store-CzDt8oSK.js";
5
5
  import { useShallow as S } from "zustand/shallow";
6
- import { R, s as T } from "../row-DTCV0Ocm.js";
7
- import { Box as F, Skeleton as $ } from "@mui/material";
6
+ import { d as R } from "../formatter-B1Xh8XDH.js";
7
+ import { R as T, s as $ } from "../row-DTCV0Ocm.js";
8
+ import { Box as F, Skeleton as b } from "@mui/material";
8
9
  import "@mui/icons-material";
9
10
  import "react";
10
11
  import "react-markdown";
@@ -14,100 +15,99 @@ import "../cjs-D4KH3azB.js";
14
15
  import "@dnd-kit/core";
15
16
  import "@dnd-kit/sortable";
16
17
  import "@dnd-kit/utilities";
17
- import { u as b } from "../use-widget-ref-wtFLDFCD.js";
18
- const j = (e) => e.toString();
19
- function z(e) {
20
- const t = w(19);
18
+ import { u as j } from "../use-widget-ref-wtFLDFCD.js";
19
+ function z(t) {
20
+ const e = w(19);
21
21
  let i, o, r;
22
- t[0] !== e ? ({
22
+ e[0] !== t ? ({
23
23
  id: i,
24
24
  index: r,
25
25
  ...o
26
- } = e, t[0] = e, t[1] = i, t[2] = o, t[3] = r) : (i = t[1], o = t[2], r = t[3]);
26
+ } = t, e[0] = t, e[1] = i, e[2] = o, e[3] = r) : (i = e[1], o = e[2], r = e[3]);
27
27
  const n = r === void 0 ? 0 : r;
28
- let l;
29
- t[4] !== i || t[5] !== n ? (l = (m) => m.getWidget(i)?.data?.[n]?.value, t[4] = i, t[5] = n, t[6] = l) : l = t[6];
30
- const a = h(S(l));
28
+ let a;
29
+ e[4] !== i || e[5] !== n ? (a = (m) => m.getWidget(i)?.data?.[n]?.value, e[4] = i, e[5] = n, e[6] = a) : a = e[6];
30
+ const l = h(S(a));
31
31
  let u;
32
- t[7] !== i || t[8] !== n ? (u = (m) => m.getWidget(i)?.data?.[n]?.color, t[7] = i, t[8] = n, t[9] = u) : u = t[9];
33
- const g = h(S(u)), x = h(S((m) => m.getWidget(i)?.formatter)) ?? j;
32
+ e[7] !== i || e[8] !== n ? (u = (m) => m.getWidget(i)?.data?.[n]?.color, e[7] = i, e[8] = n, e[9] = u) : u = e[9];
33
+ const x = h(S(u)), g = h(S((m) => m.getWidget(i)?.formatter)) ?? R;
34
34
  let s;
35
- t[10] !== g ? (s = {
36
- color: g
37
- }, t[10] = g, t[11] = s) : s = t[11];
38
- const p = a ?? 0;
35
+ e[10] !== x ? (s = {
36
+ color: x
37
+ }, e[10] = x, e[11] = s) : s = e[11];
38
+ const p = l ?? 0;
39
39
  let d;
40
- t[12] !== x || t[13] !== p ? (d = x(p), t[12] = x, t[13] = p, t[14] = d) : d = t[14];
40
+ e[12] !== g || e[13] !== p ? (d = g(p), e[12] = g, e[13] = p, e[14] = d) : d = e[14];
41
41
  let c;
42
- return t[15] !== o || t[16] !== s || t[17] !== d ? (c = /* @__PURE__ */ f(I, { TypographyProps: s, ...o, children: d }), t[15] = o, t[16] = s, t[17] = d, t[18] = c) : c = t[18], c;
42
+ return e[15] !== o || e[16] !== s || e[17] !== d ? (c = /* @__PURE__ */ f(I, { TypographyProps: s, ...o, children: d }), e[15] = o, e[16] = s, e[17] = d, e[18] = c) : c = e[18], c;
43
43
  }
44
- function Z({
45
- refUI: e
44
+ function ee({
45
+ refUI: t
46
46
  }) {
47
47
  return [{
48
48
  ...y,
49
- modifier: () => y.modifier(e)
49
+ modifier: () => y.modifier(t)
50
50
  }, {
51
51
  ...v,
52
- modifier: async (t) => {
53
- const i = [t?.map((o) => o.value) ?? []];
52
+ modifier: async (e) => {
53
+ const i = [e?.map((o) => o.value) ?? []];
54
54
  return v.modifier(i);
55
55
  }
56
56
  }];
57
57
  }
58
- function tt() {
58
+ function te() {
59
59
  return {
60
60
  series: []
61
61
  };
62
62
  }
63
- function et(e) {
64
- const t = w(8), {
63
+ function ie(t) {
64
+ const e = w(8), {
65
65
  ref: i
66
- } = b(e.id);
66
+ } = j(t.id);
67
67
  let o;
68
- t[0] !== e.id ? (o = (l) => {
68
+ e[0] !== t.id ? (o = (a) => {
69
69
  const {
70
- index: a
71
- } = l;
70
+ index: l
71
+ } = a;
72
72
  return /* @__PURE__ */ k(C, { children: [
73
- /* @__PURE__ */ f(W, { id: e.id, index: a }),
74
- /* @__PURE__ */ f(D, { id: e.id, index: a }),
75
- /* @__PURE__ */ f(z, { id: e.id, index: a }),
76
- /* @__PURE__ */ f(P, { id: e.id, index: a })
73
+ /* @__PURE__ */ f(W, { id: t.id, index: l }),
74
+ /* @__PURE__ */ f(D, { id: t.id, index: l }),
75
+ /* @__PURE__ */ f(z, { id: t.id, index: l }),
76
+ /* @__PURE__ */ f(P, { id: t.id, index: l })
77
77
  ] });
78
- }, t[0] = e.id, t[1] = o) : o = t[1];
78
+ }, e[0] = t.id, e[1] = o) : o = e[1];
79
79
  let r;
80
- t[2] !== e.id || t[3] !== o ? (r = /* @__PURE__ */ f(R, { id: e.id, children: o }), t[2] = e.id, t[3] = o, t[4] = r) : r = t[4];
80
+ e[2] !== t.id || e[3] !== o ? (r = /* @__PURE__ */ f(T, { id: t.id, children: o }), e[2] = t.id, e[3] = o, e[4] = r) : r = e[4];
81
81
  let n;
82
- return t[5] !== i || t[6] !== r ? (n = /* @__PURE__ */ f(F, { ref: i, children: r }), t[5] = i, t[6] = r, t[7] = n) : n = t[7], n;
82
+ return e[5] !== i || e[6] !== r ? (n = /* @__PURE__ */ f(F, { ref: i, children: r }), e[5] = i, e[6] = r, e[7] = n) : n = e[7], n;
83
83
  }
84
- function it() {
85
- const e = w(1);
86
- let t;
87
- return e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ f(F, { sx: T.row, "aria-label": "Formula skeleton", children: /* @__PURE__ */ f($, { width: 120, height: 32 }) }), e[0] = t) : t = e[0], t;
84
+ function oe() {
85
+ const t = w(1);
86
+ let e;
87
+ return t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ f(F, { sx: $.row, "aria-label": "Formula skeleton", children: /* @__PURE__ */ f(b, { width: 120, height: 32 }) }), t[0] = e) : e = t[0], e;
88
88
  }
89
- function V(e) {
89
+ function V(t) {
90
90
  return {
91
- ...e,
92
- prefix: typeof e.prefix == "string" ? e.prefix : void 0,
93
- suffix: typeof e.suffix == "string" ? e.suffix : void 0
91
+ ...t,
92
+ prefix: typeof t.prefix == "string" ? t.prefix : void 0,
93
+ suffix: typeof t.suffix == "string" ? t.suffix : void 0
94
94
  };
95
95
  }
96
- function ot(e) {
97
- return e?.map(V);
96
+ function re(t) {
97
+ return t?.map(V);
98
98
  }
99
99
  export {
100
- it as FormulaSkeleton,
101
- et as FormulaUI,
100
+ oe as FormulaSkeleton,
101
+ ie as FormulaUI,
102
102
  I as Item,
103
103
  D as Prefix,
104
- R as Row,
104
+ T as Row,
105
105
  W as Series,
106
106
  P as Suffix,
107
107
  z as Value,
108
- tt as formulaConfig,
109
- Z as formulaDownloadConfig,
108
+ te as formulaConfig,
109
+ ee as formulaDownloadConfig,
110
110
  V as sanitizeDataItem,
111
- ot as sanitizeDataItems
111
+ re as sanitizeDataItems
112
112
  };
113
113
  //# sourceMappingURL=formula.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Item } from './item'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const value = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.value,\n ),\n )\n const color = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.color,\n ),\n )\n const formatter =\n useWidgetStore(\n useShallow((state) => state.getWidget<FormulaWidgetState>(id)?.formatter),\n ) ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\nexport function FormulaUI(props: FormulaUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["defaultFormatter","value","toString","Value","t0","$","_c","id","props","t1","index","undefined","t2","state","getWidget","data","useWidgetStore","useShallow","t3","state_0","color","formatter","state_1","t4","t5","t6","t7","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useWidgetRef","jsxs","Fragment","jsx","Series","Prefix","Suffix","Row","Box","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":"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"}
1
+ {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Item } from './item'\nimport { useShallow } from 'zustand/shallow'\nimport { defaultFormatter } from '../../utils/formatter'\n\n/**\n * Displays the formatted numeric value for a formula widget data item, applying the widget's formatter and color.\n */\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const value = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.value,\n ),\n )\n const color = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.color,\n ),\n )\n const formatter =\n useWidgetStore(\n useShallow((state) => state.getWidget<FormulaWidgetState>(id)?.formatter),\n ) ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\n/**\n * Creates download configuration for formula widgets, supporting PNG (screenshot) and CSV (data) exports.\n *\n * @param props - Configuration with `refUI` reference for PNG export.\n * @returns Array of download items for use with the Download action.\n */\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for formula (single or multiple numeric value) widgets.\n *\n * @returns Default formula widget config with empty series.\n */\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\n/**\n * Renders a formula widget displaying one or more KPI values with optional prefixes, suffixes, and series indicators.\n */\nexport function FormulaUI(props: FormulaUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["Value","t0","$","_c","id","props","t1","index","undefined","t2","state","getWidget","data","value","useWidgetStore","useShallow","t3","state_0","color","formatter","state_1","defaultFormatter","t4","t5","t6","t7","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useWidgetRef","jsxs","Fragment","jsx","Series","Prefix","Suffix","Row","Box","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":";;;;;;;;;;;;;;;;;;AASO,SAAAA,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAC,GAAAC,GAAAC;AAAA,EAAAJ,SAAAD,KAAe;AAAA,IAAAG,IAAAA;AAAAA,IAAAG,OAAAD;AAAAA,IAAA,GAAAD;AAAAA,EAAAA,IAAAJ,GAAuCC,OAAAD,GAAAC,OAAAE,GAAAF,OAAAG,GAAAH,OAAAI,MAAAF,IAAAF,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA,GAAAI,IAAAJ,EAAA,CAAA;AAAjC,QAAAK,IAAAD,MAAAE,SAAA,IAAAF;AAAS,MAAAG;AAAA,EAAAP,EAAA,CAAA,MAAAE,KAAAF,SAAAK,KAG/BE,IAAAC,OAAWA,EAAKC,UAA+BP,CAAQ,GAACQ,OAAGL,CAAK,GAAQM,OAAAX,OAAAE,GAAAF,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAF5E,QAAAW,IAAcC,EACZC,EACEN,CACF,CACF;AAAC,MAAAO;AAAA,EAAAd,EAAA,CAAA,MAAAE,KAAAF,SAAAK,KAGGS,IAAAC,OAAWP,EAAKC,UAA+BP,CAAQ,GAACQ,OAAGL,CAAK,GAAQW,OAAAhB,OAAAE,GAAAF,OAAAK,GAAAL,OAAAc,KAAAA,IAAAd,EAAA,CAAA;AAF5E,QAAAgB,IAAcJ,EACZC,EACEC,CACF,CACF,GACAG,IACEL,EACEC,EAAWK,CAAAA,MAAWV,EAAKC,UAA+BP,CAAa,GAACe,SAAA,CACtD,KAFpBE;AAEqB,MAAAC;AAAA,EAAApB,UAAAgB,KAGEI,IAAA;AAAA,IAAAJ,OAAAA;AAAAA,EAAAA,GAAShB,QAAAgB,GAAAhB,QAAAoB,KAAAA,IAAApB,EAAA,EAAA;AACnB,QAAAqB,IAAAV,KAAA;AAAU,MAAAW;AAAA,EAAAtB,EAAA,EAAA,MAAAiB,KAAAjB,UAAAqB,KAApBC,IAAAL,EAAUI,CAAU,GAACrB,QAAAiB,GAAAjB,QAAAqB,GAAArB,QAAAsB,KAAAA,IAAAtB,EAAA,EAAA;AAAA,MAAAuB;AAAA,SAAAvB,EAAA,EAAA,MAAAG,KAAAH,UAAAoB,KAAApB,EAAA,EAAA,MAAAsB,KADxBC,sBAACC,GAAA,EAAsB,iBAAAJ,GAAS,GAAMjB,GACnCmB,UAAAA,GACH,GAAOtB,QAAAG,GAAAH,QAAAoB,GAAApB,QAAAsB,GAAAtB,QAAAuB,KAAAA,IAAAvB,EAAA,EAAA,GAFPuB;AAEO;AClBJ,SAASE,GAAsB;AAAA,EACpCC,OAAAA;AACW,GAA0B;AACrC,SAAO,CACL;AAAA,IACE,GAAGC;AAAAA,IACHC,UAAUA,MAAMD,EAAcC,SAASF,CAAK;AAAA,EAAA,GAE9C;AAAA,IACE,GAAGG;AAAAA,IACHD,UAAU,OAAOlB,MAAS;AACxB,YAAMoB,IAAc,CAACpB,GAAMqB,IAAKC,OAASA,EAAKrB,KAAK,KAAK,EAAE;AAC1D,aAAOkB,EAAcD,SAASE,CAAW;AAAA,IAC3C;AAAA,EAAA,CACD;AAEL;AAOO,SAASG,KAAqC;AACnD,SAAO;AAAA,IACLC,QAAQ,CAAA;AAAA,EAAA;AAEZ;ACzBO,SAAAC,GAAAhC,GAAA;AAAA,QAAAH,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAmC,KAAAA;AAAAA,EAAAA,IAAgBC,EAAalC,EAAKD,EAAG;AAAC,MAAAH;AAAA,EAAAC,EAAA,CAAA,MAAAG,EAAAD,MAK/BH,IAAAK,CAAAA,MAAA;AAAC,UAAA;AAAA,MAAAC,OAAAA;AAAAA,IAAAA,IAAAD;AAAS,WACT,gBAAAkC,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC,EAACC,GAAA,EAAW,IAAAtC,EAAKD,IAAYG,OAAAA,GAAK;AAAA,MAClC,gBAAAmC,EAACE,GAAA,EAAW,IAAAvC,EAAKD,IAAYG,OAAAA,GAAK;AAAA,MAClC,gBAAAmC,EAAC1C,GAAA,EAAU,IAAAK,EAAKD,IAAYG,OAAAA,GAAK;AAAA,MACjC,gBAAAmC,EAACG,GAAA,EAAW,IAAAxC,EAAKD,IAAYG,OAAAA,EAAAA;OAAS;AAAA,EACrC,GACJL,EAAA,CAAA,IAAAG,EAAAD,IAAAF,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,EAAAJ,SAAAG,EAAAD,MAAAF,SAAAD,KARHK,sBAACwC,GAAA,EAAQ,IAAAzC,EAAKD,IACXH,UAAAA,GAQH,GAAMC,EAAA,CAAA,IAAAG,EAAAD,IAAAF,OAAAD,GAAAC,OAAAI,KAAAA,IAAAJ,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,EAAA,CAAA,MAAAoC,KAAApC,SAAAI,KAVRG,IAAA,gBAAAiC,EAACK,GAAA,EAAST,KAAAA,GACRhC,UAAAA,GAUF,GAAMJ,OAAAoC,GAAApC,OAAAI,GAAAJ,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GAXNO;AAWM;ACxBH,SAAAuC,KAAA;AAAA,QAAA9C,IAAAC,EAAA,CAAA;AAAA,MAAAF;AAAA,SAAAC,EAAA,CAAA,MAAA+C,uBAAAC,IAAA,2BAAA,KAEHjD,IAAA,gBAAAyC,EAACK,GAAA,EAAQ,IAAAI,EAAMC,KAAiB,cAAA,oBAC9B,UAAA,gBAAAV,EAACW,GAAA,EAAgB,OAAA,KAAa,QAAA,IAAE,GAClC,GAAMnD,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GAFND;AAEM;ACEH,SAASqD,EAAiBpB,GAA0B;AACzD,SAAO;AAAA,IACL,GAAGA;AAAAA,IACHqB,QAAQ,OAAOrB,EAAKqB,UAAW,WAAWrB,EAAKqB,SAAS/C;AAAAA,IACxDgD,QAAQ,OAAOtB,EAAKsB,UAAW,WAAWtB,EAAKsB,SAAShD;AAAAA,EAAAA;AAE5D;AAQO,SAASiD,GACdC,GACwB;AACxB,SAAOA,GAAOzB,IAAIqB,CAAgB;AACpC;"}
@@ -1,51 +1,31 @@
1
- import { jsx as r, jsxs as b } from "react/jsx-runtime";
2
- import { c as w } from "react/compiler-runtime";
1
+ import { jsx as o, jsxs as d } from "react/jsx-runtime";
2
+ import { c as x } from "react/compiler-runtime";
3
3
  import "react";
4
4
  import "echarts";
5
5
  import "../widget-store-CzDt8oSK.js";
6
6
  import "zustand/shallow";
7
- import { g as _ } from "../options-D9wflre6.js";
8
- import { m as k } from "../utils-BOhInag6.js";
9
- import { f as S, c as L, a as C, n as m, b as v, d as I, e as N } from "../styles-CAroD5Rc.js";
10
- import { Box as c, Skeleton as u } from "@mui/material";
11
- import "@mui/icons-material";
12
- import "react-markdown";
13
- import { d as f, a as g } from "../exports-Cr43OCul.js";
14
- import "../lasso-tool-BYbxrJ-7.js";
15
- import "../cjs-D4KH3azB.js";
16
- import "@dnd-kit/core";
17
- import "@dnd-kit/sortable";
18
- import "@dnd-kit/utilities";
19
- function te({
20
- refUI: t
21
- }) {
22
- return [{
23
- ...f,
24
- modifier: () => f.modifier(t)
25
- }, {
26
- ...g,
27
- modifier: async (e) => {
28
- const o = S(e);
29
- return g.modifier(o);
30
- }
31
- }];
32
- }
33
- function ne(t) {
7
+ import { g as b } from "../options-D9wflre6.js";
8
+ import { m as w } from "../utils-BOhInag6.js";
9
+ import { g as _, h as k, i as S, n as g, d as C, e as L, j as v, c as I } from "../styles-C_8vOEep.js";
10
+ import { Box as p, Skeleton as m } from "@mui/material";
11
+ const J = _(v);
12
+ function K(t) {
34
13
  return {
35
14
  type: "histogram",
36
- option: k(_(t), T(t))
15
+ option: w(b(t), j(t)),
16
+ formatter: t.formatter
37
17
  };
38
18
  }
39
- function T({
19
+ function j({
40
20
  data: t = [],
41
21
  theme: e,
42
- formatter: o
22
+ formatter: a
43
23
  }) {
44
24
  const i = (t?.length ?? 0) > 1;
45
- let a = 0, s = 1;
25
+ let r = 0, s = 1;
46
26
  return {
47
- legend: I(i),
48
- grid: v(i, e),
27
+ legend: L(i),
28
+ grid: C(i, e),
49
29
  xAxis: {
50
30
  type: "category",
51
31
  axisLine: {
@@ -73,8 +53,8 @@ function T({
73
53
  },
74
54
  yAxis: {
75
55
  type: "value",
76
- min: (n) => (a = n.min < 0 ? m(n.min) : 0, a),
77
- max: (n) => (s = n.max <= 0 ? 1 : m(n.max), s),
56
+ min: (n) => (r = n.min < 0 ? g(n.min) : 0, r),
57
+ max: (n) => (s = n.max <= 0 ? 1 : g(n.max), s),
78
58
  splitNumber: 1,
79
59
  axisLabel: {
80
60
  fontSize: e.typography.overlineDelicate.fontSize,
@@ -84,7 +64,7 @@ function T({
84
64
  showMaxLabel: !0,
85
65
  showMinLabel: !0,
86
66
  verticalAlign: "bottom",
87
- formatter: (n) => n !== s && n !== a || n === 0 ? "" : o ? o(n) : String(n)
67
+ formatter: (n) => n !== s && n !== r || n === 0 ? "" : a ? a(n) : String(n)
88
68
  },
89
69
  axisLine: {
90
70
  show: !1
@@ -100,14 +80,14 @@ function T({
100
80
  }
101
81
  },
102
82
  tooltip: {
103
- position: C(e),
104
- formatter: L((n) => {
105
- const l = n.value, d = n.dimensionNames?.[n.encode?.y?.at(0) ?? 1], p = l[d ?? ""], y = typeof p == "number" && o ? o(p) : p ?? "", h = typeof n.marker == "string" ? n.marker : "", x = n.seriesName ? `${n.seriesName}: ` : "";
83
+ position: S(e),
84
+ formatter: k((n) => {
85
+ const l = n.value, f = n.dimensionNames?.[n.encode?.y?.at(0) ?? 1], c = l[f ?? ""], u = typeof c == "number" && a ? a(c) : c ?? "", y = typeof n.marker == "string" ? n.marker : "", h = n.seriesName ? `${n.seriesName}: ` : "";
106
86
  return {
107
87
  name: n.name ?? "",
108
- seriesName: x,
109
- marker: h,
110
- value: y
88
+ seriesName: h,
89
+ marker: y,
90
+ value: u
111
91
  };
112
92
  })
113
93
  },
@@ -126,44 +106,44 @@ function T({
126
106
  }
127
107
  const A = {
128
108
  skeleton: {
129
- graph: N.graph
109
+ graph: I.graph
130
110
  }
131
111
  };
132
- function oe() {
133
- const t = w(2);
112
+ function Q() {
113
+ const t = x(2);
134
114
  let e;
135
- t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ r(c, { sx: {
115
+ t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ o(p, { sx: {
136
116
  display: "flex",
137
117
  alignItems: "flex-end",
138
118
  justifyContent: "space-between",
139
- gap: $,
119
+ gap: T,
140
120
  height: F,
141
121
  width: "100%"
142
- }, children: Array(8).fill(0).map(D) }), t[0] = e) : e = t[0];
143
- let o;
144
- return t[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ b(c, { sx: A.skeleton.graph.container, children: [
122
+ }, children: Array(8).fill(0).map(N) }), t[0] = e) : e = t[0];
123
+ let a;
124
+ return t[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (a = /* @__PURE__ */ d(p, { sx: A.skeleton.graph.container, children: [
145
125
  e,
146
- /* @__PURE__ */ r(c, { sx: {
126
+ /* @__PURE__ */ o(p, { sx: {
147
127
  display: "flex",
148
128
  alignItems: "center",
149
129
  justifyContent: "space-between",
150
130
  width: "100%",
151
- mt: j
152
- }, children: Array(4).fill(0).map(M) })
153
- ] }), t[1] = o) : o = t[1], o;
131
+ mt: M
132
+ }, children: Array(4).fill(0).map(D) })
133
+ ] }), t[1] = a) : a = t[1], a;
154
134
  }
155
- function M(t, e) {
156
- return /* @__PURE__ */ r(u, { width: 32, height: 8 }, `skeleton-label-${e}`);
135
+ function D(t, e) {
136
+ return /* @__PURE__ */ o(m, { width: 32, height: 8 }, `skeleton-label-${e}`);
157
137
  }
158
- function j(t) {
138
+ function M(t) {
159
139
  const {
160
140
  spacing: e
161
141
  } = t;
162
142
  return e(1);
163
143
  }
164
- function D(t, e) {
144
+ function N(t, e) {
165
145
  const i = `${[60, 80, 95, 85, 70, 55, 40, 30][e]}%`;
166
- return /* @__PURE__ */ r(u, { variant: "rectangular", sx: {
146
+ return /* @__PURE__ */ o(m, { variant: "rectangular", sx: {
167
147
  flex: 1,
168
148
  height: i
169
149
  } }, `skeleton-bar-${e}`);
@@ -174,15 +154,15 @@ function F(t) {
174
154
  } = t;
175
155
  return e(30);
176
156
  }
177
- function $(t) {
157
+ function T(t) {
178
158
  const {
179
159
  spacing: e
180
160
  } = t;
181
161
  return e(0.5);
182
162
  }
183
163
  export {
184
- oe as HistogramSkeleton,
185
- ne as histogramConfig,
186
- te as histogramDownloadConfig
164
+ Q as HistogramSkeleton,
165
+ K as histogramConfig,
166
+ J as histogramDownloadConfig
187
167
  };
188
168
  //# sourceMappingURL=histogram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n HistogramConfig,\n HistogramWidgetConfig,\n HistogramWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport function histogramDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<HistogramWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\nfunction getOption({\n data = [],\n theme,\n formatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig(hasLegend),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value' as const,\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n splitNumber: 1,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom' as const,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const value = item.value as Record<string, string | number>\n const index = item.dimensionNames?.[item.encode?.y?.at(0) ?? 1]\n const _value = value[index ?? '']\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : (_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = item.name ?? ''\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'bar',\n barGap: '1%', // No gap between bars in histogram\n barCategoryGap: '1%', // No gap between categories in histogram\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={`skeleton-bar-${i}`}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={`skeleton-label-${i}`} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","formatter","hasLegend","length","niceMin","niceMax","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","min","extent","niceNum","max","splitNumber","verticalAlign","value","String","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","index","dimensionNames","encode","y","at","_value","formattedValue","marker","seriesName","name","series","map","_","datasetIndex","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","Array","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","i","spacing_1","flex","spacing_0"],"mappings":"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"}
1
+ {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n HistogramConfig,\n HistogramWidgetConfig,\n HistogramWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n createChartDownloadConfig,\n niceNum,\n} from '../utils/chart-config'\n\nexport const histogramDownloadConfig =\n createChartDownloadConfig<HistogramWidgetData>(flattenObjectArrayToCSV)\n/**\n * Generates ECharts configuration for distribution histogram widgets with adjacent bars (minimal gap) and axis formatting styled with the CARTO theme.\n *\n * @param props - Histogram configuration including bin data and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n }\n}\nfunction getOption({\n data = [],\n theme,\n formatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig(hasLegend),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value' as const,\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n splitNumber: 1,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom' as const,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const value = item.value as Record<string, string | number>\n const index = item.dimensionNames?.[item.encode?.y?.at(0) ?? 1]\n const _value = value[index ?? '']\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : (_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = item.name ?? ''\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'bar',\n barGap: '1%', // No gap between bars in histogram\n barCategoryGap: '1%', // No gap between categories in histogram\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={`skeleton-bar-${i}`}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={`skeleton-label-${i}`} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDownloadConfig","createChartDownloadConfig","flattenObjectArrayToCSV","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","data","theme","hasLegend","length","niceMin","niceMax","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","min","extent","niceNum","max","splitNumber","verticalAlign","value","String","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","index","dimensionNames","encode","y","at","_value","formattedValue","marker","seriesName","name","series","map","_","datasetIndex","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","Array","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","i","spacing_1","flex","spacing_0"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sources":["../../src/widgets/loader/loader.tsx","../../src/widgets/loader/utils.ts"],"sourcesContent":["import { useEffect, useRef, useSyncExternalStore } from 'react'\nimport type { WidgetLoaderProps } from './types'\nimport { useWidgetStore } from '../stores/widget-store'\nimport type { WrapperState } from '../wrapper'\n\nexport function WidgetLoader<T extends object = Record<string, unknown>>(\n props: WidgetLoaderProps<T>,\n) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const executeToolPipeline = useWidgetStore(\n (state) => state.executeToolPipeline,\n )\n const executeConfigPipeline = useWidgetStore(\n (state) => state.executeConfigPipeline,\n )\n\n const registeredTools = useSyncExternalStore(\n useWidgetStore.subscribe,\n () => useWidgetStore.getState().widgets[props.id]?.registeredTools,\n )\n\n const dataRef = useRef(props.data)\n const configRef = useRef(props.config)\n const isMountedRef = useRef(false)\n\n useEffect(() => {\n dataRef.current = props.data\n configRef.current = props.config\n })\n\n // Split into 3 effects for metadata and 1 for data pipeline:\n // Each property that can be modified independently gets its own effect to avoid\n // accidentally resetting other properties.\n //\n // - Effect 1: Type (can be modified by tools that change visualization type)\n // - Effect 2: Loading/Error states (change during fetch lifecycle)\n // - Effect 3: Config (can be modified by tools that change widget configuration)\n // - Effect 4: Data pipeline execution (transforms data through registered tools)\n // - Effect 5: Re-execute pipeline when tool state changes\n\n // Effect 1: Type updates\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n type: props.type,\n })\n }, [props.id, props.type, setWidget])\n\n // Effect 2: Loading and error states\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n isLoading: props.isLoading ?? false,\n isFetching: props.isFetching ?? false,\n error: props.error,\n })\n }, [props.id, props.isLoading, props.isFetching, props.error, setWidget])\n\n // Effect 3: Config updates — run through config pipeline\n useEffect(() => {\n if (props.config) {\n void executeConfigPipeline(props.id, props.config)\n }\n }, [props.id, props.config, executeConfigPipeline])\n\n // Effect 4: Execute tool pipeline when props.data changes\n useEffect(() => {\n void executeToolPipeline(props.id, props.data)\n }, [props.id, props.data, executeToolPipeline])\n\n // Effect 5: Re-execute pipelines when registered tools change\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true\n return\n }\n\n void executeToolPipeline(props.id, dataRef.current)\n if (configRef.current) {\n void executeConfigPipeline(props.id, configRef.current)\n }\n }, [registeredTools, props.id, executeToolPipeline, executeConfigPipeline])\n\n return props.children\n}\n","import deepmerge from 'deepmerge'\n\n/**\n * Config can be either an object or a function that receives baseConfig and data\n * and returns a partial config to be merged with the base.\n */\nexport type ConfigOrFn<TConfig, TData = unknown> =\n | Partial<TConfig>\n | ((baseConfig: TConfig, data: TData) => Partial<TConfig>)\n\n/**\n * Resolves a config that may be either an object or a function.\n * If it's a function, calls it with baseConfig and data.\n * If it's an object (or undefined), returns it as-is.\n */\nexport function resolveConfig<TConfig, TData>(\n config: ConfigOrFn<TConfig, TData> | undefined,\n baseConfig: TConfig,\n data: TData,\n): Partial<TConfig> | undefined {\n if (typeof config === 'function') {\n return config(baseConfig, data)\n }\n return config\n}\n\nexport function mergeWidgetConfig<T>(\n ...options: [Partial<T> | undefined, Partial<T> | undefined]\n): T {\n return deepmerge(options[0] ?? {}, options[1] ?? {}, {\n arrayMerge(_, source) {\n return source as T[keyof T][]\n },\n })\n}\n"],"names":["WidgetLoader","props","$","_c","setWidget","useWidgetStore","_temp","executeToolPipeline","_temp2","executeConfigPipeline","_temp3","t0","id","getState","widgets","registeredTools","useSyncExternalStore","subscribe","dataRef","useRef","data","configRef","config","isMountedRef","t1","current","useEffect","t2","t3","type","t4","t5","error","isFetching","isLoading","t6","t7","t8","t9","t10","t11","children","state_1","state","state_0","resolveConfig","baseConfig","mergeWidgetConfig","options","deepmerge","arrayMerge","_","source"],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sources":["../../src/widgets/loader/loader.tsx","../../src/widgets/loader/utils.ts"],"sourcesContent":["import { useEffect, useRef, useSyncExternalStore } from 'react'\nimport type { WidgetLoaderProps } from './types'\nimport { useWidgetStore } from '../stores/widget-store'\nimport type { WrapperState } from '../wrapper'\n\n/**\n * Foundation component for all widgets that manages state initialization, synchronization with the widget store, and data transformation pipeline execution.\n *\n * @remarks\n * The WidgetLoader is stateless -- it manages data flow but does not render any UI. Always wrap it with WidgetWrapper for consistent widget appearance.\n *\n * @example\n * ```tsx\n * <WidgetLoader\n * id=\"sales-chart\"\n * type=\"bar\"\n * data={data}\n * isLoading={false}\n * isFetching={false}\n * config={barConfig({ data })}\n * >\n * <WidgetWrapper id=\"sales-chart\" title=\"Sales\">\n * <Echart id=\"sales-chart\" />\n * </WidgetWrapper>\n * </WidgetLoader>\n * ```\n */\nexport function WidgetLoader<T extends object = Record<string, unknown>>(\n props: WidgetLoaderProps<T>,\n) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const executeToolPipeline = useWidgetStore(\n (state) => state.executeToolPipeline,\n )\n const executeConfigPipeline = useWidgetStore(\n (state) => state.executeConfigPipeline,\n )\n\n const registeredTools = useSyncExternalStore(\n useWidgetStore.subscribe,\n () => useWidgetStore.getState().widgets[props.id]?.registeredTools,\n )\n\n const dataRef = useRef(props.data)\n const configRef = useRef(props.config)\n const isMountedRef = useRef(false)\n\n useEffect(() => {\n dataRef.current = props.data\n configRef.current = props.config\n })\n\n // Split into 3 effects for metadata and 1 for data pipeline:\n // Each property that can be modified independently gets its own effect to avoid\n // accidentally resetting other properties.\n //\n // - Effect 1: Type (can be modified by tools that change visualization type)\n // - Effect 2: Loading/Error states (change during fetch lifecycle)\n // - Effect 3: Config (can be modified by tools that change widget configuration)\n // - Effect 4: Data pipeline execution (transforms data through registered tools)\n // - Effect 5: Re-execute pipeline when tool state changes\n\n // Effect 1: Type updates\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n type: props.type,\n })\n }, [props.id, props.type, setWidget])\n\n // Effect 2: Loading and error states\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n isLoading: props.isLoading ?? false,\n isFetching: props.isFetching ?? false,\n error: props.error,\n })\n }, [props.id, props.isLoading, props.isFetching, props.error, setWidget])\n\n // Effect 3: Config updates — run through config pipeline\n useEffect(() => {\n if (props.config) {\n void executeConfigPipeline(props.id, props.config)\n }\n }, [props.id, props.config, executeConfigPipeline])\n\n // Effect 4: Execute tool pipeline when props.data changes\n useEffect(() => {\n void executeToolPipeline(props.id, props.data)\n }, [props.id, props.data, executeToolPipeline])\n\n // Effect 5: Re-execute pipelines when registered tools change\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true\n return\n }\n\n void executeToolPipeline(props.id, dataRef.current)\n if (configRef.current) {\n void executeConfigPipeline(props.id, configRef.current)\n }\n }, [registeredTools, props.id, executeToolPipeline, executeConfigPipeline])\n\n return props.children\n}\n","import deepmerge from 'deepmerge'\n\n/**\n * Config can be either an object or a function that receives baseConfig and data\n * and returns a partial config to be merged with the base.\n */\nexport type ConfigOrFn<TConfig, TData = unknown> =\n | Partial<TConfig>\n | ((baseConfig: TConfig, data: TData) => Partial<TConfig>)\n\n/**\n * Resolves a widget config that may be either a partial object or a function receiving the computed base config and data. If it is a function, calls it with `baseConfig` and `data`; otherwise returns the value as-is.\n *\n * @param config - The config object or function to resolve.\n * @param baseConfig - The computed base configuration.\n * @param data - The widget data.\n * @returns Resolved partial config, or undefined.\n *\n * @example\n * ```tsx\n * const resolved = resolveConfig(\n * (base, data) => ({ maxItems: base.maxItems + 5 }),\n * baseConfig,\n * widgetData,\n * )\n * ```\n */\nexport function resolveConfig<TConfig, TData>(\n config: ConfigOrFn<TConfig, TData> | undefined,\n baseConfig: TConfig,\n data: TData,\n): Partial<TConfig> | undefined {\n if (typeof config === 'function') {\n return config(baseConfig, data)\n }\n return config\n}\n\n/**\n * Deep-merges two partial widget config objects using `deepmerge`, with arrays replaced rather than concatenated.\n *\n * @param options - A tuple of two partial configs to merge (base and override).\n * @returns The merged config object.\n *\n * @example\n * ```tsx\n * const finalConfig = mergeWidgetConfig(baseConfig, resolvedConfig)\n * ```\n */\nexport function mergeWidgetConfig<T>(\n ...options: [Partial<T> | undefined, Partial<T> | undefined]\n): T {\n return deepmerge(options[0] ?? {}, options[1] ?? {}, {\n arrayMerge(_, source) {\n return source as T[keyof T][]\n },\n })\n}\n"],"names":["WidgetLoader","props","$","_c","setWidget","useWidgetStore","_temp","executeToolPipeline","_temp2","executeConfigPipeline","_temp3","t0","id","getState","widgets","registeredTools","useSyncExternalStore","subscribe","dataRef","useRef","data","configRef","config","isMountedRef","t1","current","useEffect","t2","t3","type","t4","t5","error","isFetching","isLoading","t6","t7","t8","t9","t10","t11","children","state_1","state","state_0","resolveConfig","baseConfig","mergeWidgetConfig","options","deepmerge","arrayMerge","_","source"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sources":["../../src/widgets/markdown/markdown.tsx","../../src/widgets/markdown/style.ts","../../src/widgets/markdown/markdown-ui.tsx","../../src/widgets/markdown/skeleton.tsx","../../src/widgets/markdown/config.ts"],"sourcesContent":["import type { MarkdownUIProps } from './types'\nimport { useWidgetStore } from '../stores/widget-store'\nimport type { MarkdownWidgetData } from './types'\nimport { MarkdownUI } from '.'\nimport { useShallow } from 'zustand/shallow'\n\nexport function Markdown({ id }: MarkdownUIProps) {\n const content = useWidgetStore(\n useShallow(\n (state) =>\n (state.getWidget(id)?.data as MarkdownWidgetData | undefined)?.content,\n ),\n )\n\n if (!content) {\n return null\n }\n\n return <MarkdownUI>{content}</MarkdownUI>\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles: Record<string, SxProps<Theme>> = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(2),\n },\n markdown: {\n overflow: 'hidden',\n typography: ({ typography }) => ({\n ...typography.body1,\n }),\n },\n li: {\n display: 'list-item',\n paddingTop: 0,\n paddingBottom: 0,\n },\n ul: {\n listStyleType: 'disc',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n ol: {\n listStyleType: 'decimal',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n}\n","import { Link, List, ListItem, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport { styles } from '../markdown/style'\nimport type { MarkdownComponentProps } from './types'\n\nconst COMPONENTS: Components = {\n h1: ({ children }) => (\n <Typography variant='h4' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h2: ({ children }) => (\n <Typography variant='h5' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h3: ({ children }) => (\n <Typography variant='h6' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n p: ({ children }) => (\n <Typography paragraph color='inherit'>\n {children}\n </Typography>\n ),\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link href={href} target={target} rel={rel}>\n {children}\n </Link>\n ),\n ul: ({ children }) => <List sx={styles.ul}>{children}</List>,\n ol: ({ children }) => (\n <List component='ol' sx={styles.ol}>\n {children}\n </List>\n ),\n li: ({ children }) => <ListItem sx={styles.li}>{children}</ListItem>,\n}\n\nexport function MarkdownUI({ children, overrides }: MarkdownComponentProps) {\n return (\n <ReactMarkdown\n components={{\n ...COMPONENTS,\n ...overrides,\n }}\n >\n {children}\n </ReactMarkdown>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\n\nexport function MarkdownSkeleton() {\n return (\n <Box aria-label='Markdown skeleton'>\n <Skeleton width='80%' height={24} sx={{ mb: 1 }} />\n <Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='85%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='75%' height={20} />\n </Box>\n )\n}\n","import { downloadToCSV, type DownloadItem } from '../actions'\nimport type { MarkdownWidgetConfig, MarkdownWidgetData } from './types'\n\nexport function markdownDownloadConfig(): DownloadItem<MarkdownWidgetData>[] {\n return [\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const content = data?.content ?? ''\n return downloadToCSV.modifier([['Content'], [content]])\n },\n },\n ]\n}\n\nexport function markdownConfig(): MarkdownWidgetConfig {\n return {}\n}\n"],"names":["Markdown","t0","$","_c","id","t1","state","getWidget","data","content","useWidgetStore","useShallow","t2","MarkdownUI","styles","li","display","paddingTop","paddingBottom","ul","listStyleType","paddingLeft","spacing","ol","COMPONENTS","h1","children","Typography","h2","h3","p","jsx","a","href","target","rel","Link","List","ListItem","overrides","ReactMarkdown","MarkdownSkeleton","Symbol","for","Skeleton","mb","jsxs","Box","markdownDownloadConfig","downloadToCSV","modifier","markdownConfig"],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sources":["../../src/widgets/markdown/markdown.tsx","../../src/widgets/markdown/style.ts","../../src/widgets/markdown/markdown-ui.tsx","../../src/widgets/markdown/skeleton.tsx","../../src/widgets/markdown/config.ts"],"sourcesContent":["import type { MarkdownUIProps } from './types'\nimport { useWidgetStore } from '../stores/widget-store'\nimport type { MarkdownWidgetData } from './types'\nimport { MarkdownUI } from '.'\nimport { useShallow } from 'zustand/shallow'\n\n/**\n * Stateful markdown widget component that reads content from the widget store and renders it as formatted rich text.\n */\nexport function Markdown({ id }: MarkdownUIProps) {\n const content = useWidgetStore(\n useShallow(\n (state) =>\n (state.getWidget(id)?.data as MarkdownWidgetData | undefined)?.content,\n ),\n )\n\n if (!content) {\n return null\n }\n\n return <MarkdownUI>{content}</MarkdownUI>\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles: Record<string, SxProps<Theme>> = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(2),\n },\n markdown: {\n overflow: 'hidden',\n typography: ({ typography }) => ({\n ...typography.body1,\n }),\n },\n li: {\n display: 'list-item',\n paddingTop: 0,\n paddingBottom: 0,\n },\n ul: {\n listStyleType: 'disc',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n ol: {\n listStyleType: 'decimal',\n paddingLeft: ({ spacing }) => spacing(2),\n },\n}\n","import { Link, List, ListItem, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport { styles } from '../markdown/style'\nimport type { MarkdownComponentProps } from './types'\n\nconst COMPONENTS: Components = {\n h1: ({ children }) => (\n <Typography variant='h4' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h2: ({ children }) => (\n <Typography variant='h5' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n h3: ({ children }) => (\n <Typography variant='h6' gutterBottom color='inherit'>\n {children}\n </Typography>\n ),\n p: ({ children }) => (\n <Typography paragraph color='inherit'>\n {children}\n </Typography>\n ),\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link href={href} target={target} rel={rel}>\n {children}\n </Link>\n ),\n ul: ({ children }) => <List sx={styles.ul}>{children}</List>,\n ol: ({ children }) => (\n <List component='ol' sx={styles.ol}>\n {children}\n </List>\n ),\n li: ({ children }) => <ListItem sx={styles.li}>{children}</ListItem>,\n}\n\n/**\n * Presentational component that renders a Markdown string as MUI-styled HTML using react-markdown.\n *\n * @remarks\n * Maps Markdown elements (headings, paragraphs, links, lists) to MUI Typography and Link components.\n * Custom component overrides can be passed via the `overrides` prop.\n */\nexport function MarkdownUI({ children, overrides }: MarkdownComponentProps) {\n return (\n <ReactMarkdown\n components={{\n ...COMPONENTS,\n ...overrides,\n }}\n >\n {children}\n </ReactMarkdown>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\n\nexport function MarkdownSkeleton() {\n return (\n <Box aria-label='Markdown skeleton'>\n <Skeleton width='80%' height={24} sx={{ mb: 1 }} />\n <Skeleton width='90%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='85%' height={20} sx={{ mb: 0.5 }} />\n <Skeleton width='75%' height={20} />\n </Box>\n )\n}\n","import { downloadToCSV, type DownloadItem } from '../actions'\nimport type { MarkdownWidgetConfig, MarkdownWidgetData } from './types'\n\n/**\n * Creates download configuration for markdown widgets, supporting CSV export of text content. Does not require `refUI` since it only exports text.\n *\n * @returns Array of download items for use with the Download action.\n */\nexport function markdownDownloadConfig(): DownloadItem<MarkdownWidgetData>[] {\n return [\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const content = data?.content ?? ''\n return downloadToCSV.modifier([['Content'], [content]])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for markdown content display widgets.\n *\n * @returns Default markdown widget config (empty object).\n */\nexport function markdownConfig(): MarkdownWidgetConfig {\n return {}\n}\n"],"names":["Markdown","t0","$","_c","id","t1","state","getWidget","data","content","useWidgetStore","useShallow","t2","MarkdownUI","styles","li","display","paddingTop","paddingBottom","ul","listStyleType","paddingLeft","spacing","ol","COMPONENTS","h1","children","Typography","h2","h3","p","jsx","a","href","target","rel","Link","List","ListItem","overrides","ReactMarkdown","MarkdownSkeleton","Symbol","for","Skeleton","mb","jsxs","Box","markdownDownloadConfig","downloadToCSV","modifier","markdownConfig"],"mappings":"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"}