@fusedashlabs/widgets 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/README.md +10 -13
  3. package/dist/catalog/load.js +86 -82
  4. package/dist/catalog/load.js.map +1 -1
  5. package/dist/components/area-chart/element/ui9000-area-chart.d.ts +0 -1
  6. package/dist/components/area-chart/element/ui9000-area-chart.d.ts.map +1 -1
  7. package/dist/components/area-chart/element/ui9000-area-chart.js +10 -27
  8. package/dist/components/area-chart/element/ui9000-area-chart.js.map +1 -1
  9. package/dist/components/area-chart/index.js +1 -1
  10. package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.d.ts +1 -2
  11. package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.d.ts.map +1 -1
  12. package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.js +11 -27
  13. package/dist/components/area-grouped-bar-chart/element/ui9000-area-grouped-bar-chart.js.map +1 -1
  14. package/dist/components/area-grouped-bar-chart/index.js +1 -1
  15. package/dist/components/bar-chart/element/styles.js +1 -1
  16. package/dist/components/bar-chart/element/styles.js.map +1 -1
  17. package/dist/components/bar-chart/element/ui9000-bar-chart.d.ts +0 -1
  18. package/dist/components/bar-chart/element/ui9000-bar-chart.d.ts.map +1 -1
  19. package/dist/components/bar-chart/element/ui9000-bar-chart.js +10 -30
  20. package/dist/components/bar-chart/element/ui9000-bar-chart.js.map +1 -1
  21. package/dist/components/bar-chart/index.js +3 -3
  22. package/dist/components/bar-chart/metadata.json.d.ts +6 -0
  23. package/dist/components/bar-chart/metadata.json.js +1 -1
  24. package/dist/components/bias-variance-tradeoff-chart/element/styles.js +3 -1
  25. package/dist/components/bias-variance-tradeoff-chart/element/styles.js.map +1 -1
  26. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts +0 -1
  27. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.d.ts.map +1 -1
  28. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js +13 -36
  29. package/dist/components/bias-variance-tradeoff-chart/element/ui9000-bias-variance-tradeoff-chart.js.map +1 -1
  30. package/dist/components/bias-variance-tradeoff-chart/index.js +3 -3
  31. package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.d.ts +0 -1
  32. package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.d.ts.map +1 -1
  33. package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.js +13 -35
  34. package/dist/components/box-plot-chart/element/ui9000-box-plot-chart.js.map +1 -1
  35. package/dist/components/box-plot-chart/index.js +2 -2
  36. package/dist/components/box-plot-chart/render/draw.js +1 -1
  37. package/dist/components/bubble-chart/element/ui9000-bubble-chart.d.ts +0 -1
  38. package/dist/components/bubble-chart/element/ui9000-bubble-chart.d.ts.map +1 -1
  39. package/dist/components/bubble-chart/element/ui9000-bubble-chart.js +7 -25
  40. package/dist/components/bubble-chart/element/ui9000-bubble-chart.js.map +1 -1
  41. package/dist/components/bubble-chart/index.js +1 -1
  42. package/dist/components/chart-renderer/element/styles.d.ts.map +1 -1
  43. package/dist/components/chart-renderer/element/styles.js +4 -0
  44. package/dist/components/chart-renderer/element/styles.js.map +1 -1
  45. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts +10 -0
  46. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
  47. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +40 -4
  48. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
  49. package/dist/components/chart-renderer/index.js +1 -1
  50. package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
  51. package/dist/components/chart-renderer/lib/registry.js +2 -0
  52. package/dist/components/chart-renderer/lib/registry.js.map +1 -1
  53. package/dist/components/custom-widget/element/ui9000-custom-widget.js +2 -2
  54. package/dist/components/custom-widget/index.js +1 -1
  55. package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts +0 -1
  56. package/dist/components/donut-chart/element/ui9000-donut-chart.d.ts.map +1 -1
  57. package/dist/components/donut-chart/element/ui9000-donut-chart.js +11 -23
  58. package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +1 -1
  59. package/dist/components/donut-chart/index.js +2 -2
  60. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts +0 -2
  61. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.d.ts.map +1 -1
  62. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js +12 -35
  63. package/dist/components/gini-impurity-entropy-chart/element/ui9000-gini-impurity-entropy-chart.js.map +1 -1
  64. package/dist/components/gini-impurity-entropy-chart/index.js +5 -5
  65. package/dist/components/gini-impurity-entropy-chart/render/draw.js +1 -1
  66. package/dist/components/histogram-chart/element/ui9000-histogram-chart.d.ts +0 -1
  67. package/dist/components/histogram-chart/element/ui9000-histogram-chart.d.ts.map +1 -1
  68. package/dist/components/histogram-chart/element/ui9000-histogram-chart.js +10 -26
  69. package/dist/components/histogram-chart/element/ui9000-histogram-chart.js.map +1 -1
  70. package/dist/components/histogram-chart/index.js +2 -2
  71. package/dist/components/histogram-chart/lib/normalize.d.ts.map +1 -1
  72. package/dist/components/histogram-chart/lib/normalize.js +1 -3
  73. package/dist/components/histogram-chart/lib/normalize.js.map +1 -1
  74. package/dist/components/inspector/element/styles.d.ts +2 -0
  75. package/dist/components/inspector/element/styles.d.ts.map +1 -0
  76. package/dist/components/inspector/element/styles.js +98 -0
  77. package/dist/components/inspector/element/styles.js.map +1 -0
  78. package/dist/components/inspector/element/ui9000-inspector.d.ts +26 -0
  79. package/dist/components/inspector/element/ui9000-inspector.d.ts.map +1 -0
  80. package/dist/components/inspector/element/ui9000-inspector.js +142 -0
  81. package/dist/components/inspector/element/ui9000-inspector.js.map +1 -0
  82. package/dist/components/inspector/index.d.ts +4 -0
  83. package/dist/components/inspector/index.d.ts.map +1 -0
  84. package/dist/components/inspector/index.js +13 -0
  85. package/dist/components/inspector/index.js.map +1 -0
  86. package/dist/components/inspector/lib/index.d.ts +3 -0
  87. package/dist/components/inspector/lib/index.d.ts.map +1 -0
  88. package/dist/components/inspector/lib/normalize.d.ts +4 -0
  89. package/dist/components/inspector/lib/normalize.d.ts.map +1 -0
  90. package/dist/components/inspector/lib/normalize.js +95 -0
  91. package/dist/components/inspector/lib/normalize.js.map +1 -0
  92. package/dist/components/inspector/lib/types.d.ts +44 -0
  93. package/dist/components/inspector/lib/types.d.ts.map +1 -0
  94. package/dist/components/inspector/lib/types.js +5 -0
  95. package/dist/components/inspector/lib/types.js.map +1 -0
  96. package/dist/components/inspector/metadata.json.d.ts +43 -0
  97. package/dist/components/inspector/metadata.json.js +45 -0
  98. package/dist/components/inspector/metadata.json.js.map +1 -0
  99. package/dist/components/kpi-widget/element/ui9000-kpi-widget.js +2 -2
  100. package/dist/components/kpi-widget/index.js +3 -3
  101. package/dist/components/line-chart/element/ui9000-line-chart.d.ts +0 -1
  102. package/dist/components/line-chart/element/ui9000-line-chart.d.ts.map +1 -1
  103. package/dist/components/line-chart/element/ui9000-line-chart.js +6 -24
  104. package/dist/components/line-chart/element/ui9000-line-chart.js.map +1 -1
  105. package/dist/components/line-chart/index.js +2 -2
  106. package/dist/components/line-chart/render/draw.d.ts.map +1 -1
  107. package/dist/components/line-chart/render/draw.js +1 -1
  108. package/dist/components/line-chart/render/draw.js.map +1 -1
  109. package/dist/components/lollipop/element/ui9000-lollipop.d.ts +0 -1
  110. package/dist/components/lollipop/element/ui9000-lollipop.d.ts.map +1 -1
  111. package/dist/components/lollipop/element/ui9000-lollipop.js +7 -25
  112. package/dist/components/lollipop/element/ui9000-lollipop.js.map +1 -1
  113. package/dist/components/lollipop/index.js +2 -2
  114. package/dist/components/map-chart/element/ui9000-map-chart.d.ts +0 -1
  115. package/dist/components/map-chart/element/ui9000-map-chart.d.ts.map +1 -1
  116. package/dist/components/map-chart/element/ui9000-map-chart.js +16 -25
  117. package/dist/components/map-chart/element/ui9000-map-chart.js.map +1 -1
  118. package/dist/components/map-chart/index.js +4 -4
  119. package/dist/components/map-chart/lib/domain.js +1 -1
  120. package/dist/components/map-chart/lib/geo-index.d.ts.map +1 -1
  121. package/dist/components/map-chart/lib/geo-index.js +5 -0
  122. package/dist/components/map-chart/lib/geo-index.js.map +1 -1
  123. package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts +1 -2
  124. package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts.map +1 -1
  125. package/dist/components/matrix-chart/element/ui9000-matrix-chart.js +16 -26
  126. package/dist/components/matrix-chart/element/ui9000-matrix-chart.js.map +1 -1
  127. package/dist/components/matrix-chart/index.js +2 -2
  128. package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -1
  129. package/dist/components/network-graph/element/ui9000-network-graph.js +5 -4
  130. package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -1
  131. package/dist/components/network-graph/index.js +3 -3
  132. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts +0 -1
  133. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.d.ts.map +1 -1
  134. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js +7 -30
  135. package/dist/components/parallel-coordinates-chart/element/ui9000-parallel-coordinates-chart.js.map +1 -1
  136. package/dist/components/parallel-coordinates-chart/index.js +3 -3
  137. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts +0 -1
  138. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.d.ts.map +1 -1
  139. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js +7 -23
  140. package/dist/components/partial-dependence-chart/element/ui9000-partial-dependence-chart.js.map +1 -1
  141. package/dist/components/partial-dependence-chart/index.js +2 -2
  142. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +0 -1
  143. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts.map +1 -1
  144. package/dist/components/pie-chart/element/ui9000-pie-chart.js +11 -23
  145. package/dist/components/pie-chart/element/ui9000-pie-chart.js.map +1 -1
  146. package/dist/components/pie-chart/index.js +2 -2
  147. package/dist/components/pie-chart/lib/normalize.js +1 -1
  148. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts +0 -1
  149. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts.map +1 -1
  150. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js +14 -23
  151. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -1
  152. package/dist/components/polar-area-chart/index.js +1 -1
  153. package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.d.ts +0 -1
  154. package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.d.ts.map +1 -1
  155. package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.js +6 -24
  156. package/dist/components/punchcard-chart/element/ui9000-punchcard-chart.js.map +1 -1
  157. package/dist/components/punchcard-chart/index.js +2 -2
  158. package/dist/components/punchcard-chart/render/draw.js +1 -1
  159. package/dist/components/radar-chart/element/ui9000-radar-chart.d.ts +0 -1
  160. package/dist/components/radar-chart/element/ui9000-radar-chart.d.ts.map +1 -1
  161. package/dist/components/radar-chart/element/ui9000-radar-chart.js +8 -25
  162. package/dist/components/radar-chart/element/ui9000-radar-chart.js.map +1 -1
  163. package/dist/components/radar-chart/index.js +2 -2
  164. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts +0 -1
  165. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.d.ts.map +1 -1
  166. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js +14 -25
  167. package/dist/components/radial-bar-chart/element/ui9000-radial-bar-chart.js.map +1 -1
  168. package/dist/components/radial-bar-chart/index.js +3 -3
  169. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +0 -3
  170. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts.map +1 -1
  171. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +19 -37
  172. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +1 -1
  173. package/dist/components/sankey-chart/index.js +3 -3
  174. package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.d.ts +0 -1
  175. package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.d.ts.map +1 -1
  176. package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.js +8 -23
  177. package/dist/components/scatter-plot-chart/element/ui9000-scatter-plot.js.map +1 -1
  178. package/dist/components/scatter-plot-chart/index.js +1 -1
  179. package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.d.ts +0 -1
  180. package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.d.ts.map +1 -1
  181. package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.js +12 -50
  182. package/dist/components/scatter-sparkline-chart/element/ui9000-scatter-sparkline-chart.js.map +1 -1
  183. package/dist/components/scatter-sparkline-chart/index.js +3 -3
  184. package/dist/components/scatter-sparkline-chart/render/draw.js +1 -1
  185. package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.d.ts +0 -1
  186. package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.d.ts.map +1 -1
  187. package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.js +10 -30
  188. package/dist/components/spark-area-chart/element/ui9000-spark-area-chart.js.map +1 -1
  189. package/dist/components/spark-area-chart/index.js +2 -2
  190. package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.d.ts +0 -1
  191. package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.d.ts.map +1 -1
  192. package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.js +10 -30
  193. package/dist/components/spark-line-chart/element/ui9000-spark-line-chart.js.map +1 -1
  194. package/dist/components/spark-line-chart/index.js +2 -2
  195. package/dist/components/status-gauge-widget/element/styles.d.ts +7 -0
  196. package/dist/components/status-gauge-widget/element/styles.d.ts.map +1 -0
  197. package/dist/components/status-gauge-widget/element/styles.js +266 -0
  198. package/dist/components/status-gauge-widget/element/styles.js.map +1 -0
  199. package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.d.ts +29 -0
  200. package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.d.ts.map +1 -0
  201. package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.js +154 -0
  202. package/dist/components/status-gauge-widget/element/ui9000-status-gauge-widget.js.map +1 -0
  203. package/dist/components/status-gauge-widget/index.d.ts +4 -0
  204. package/dist/components/status-gauge-widget/index.d.ts.map +1 -0
  205. package/dist/components/status-gauge-widget/index.js +12 -0
  206. package/dist/components/status-gauge-widget/index.js.map +1 -0
  207. package/dist/components/status-gauge-widget/lib/index.d.ts +3 -0
  208. package/dist/components/status-gauge-widget/lib/index.d.ts.map +1 -0
  209. package/dist/components/status-gauge-widget/lib/normalize.d.ts +8 -0
  210. package/dist/components/status-gauge-widget/lib/normalize.d.ts.map +1 -0
  211. package/dist/components/status-gauge-widget/lib/normalize.js +111 -0
  212. package/dist/components/status-gauge-widget/lib/normalize.js.map +1 -0
  213. package/dist/components/status-gauge-widget/lib/types.d.ts +56 -0
  214. package/dist/components/status-gauge-widget/lib/types.d.ts.map +1 -0
  215. package/dist/components/status-gauge-widget/metadata.json.d.ts +20 -0
  216. package/dist/components/status-gauge-widget/metadata.json.js +39 -0
  217. package/dist/components/status-gauge-widget/metadata.json.js.map +1 -0
  218. package/dist/components/status-gauge-widget/render/draw.d.ts +4 -0
  219. package/dist/components/status-gauge-widget/render/draw.d.ts.map +1 -0
  220. package/dist/components/status-gauge-widget/render/draw.js +60 -0
  221. package/dist/components/status-gauge-widget/render/draw.js.map +1 -0
  222. package/dist/components/step-line-chart/element/ui9000-step-line-chart.d.ts +0 -1
  223. package/dist/components/step-line-chart/element/ui9000-step-line-chart.d.ts.map +1 -1
  224. package/dist/components/step-line-chart/element/ui9000-step-line-chart.js +10 -30
  225. package/dist/components/step-line-chart/element/ui9000-step-line-chart.js.map +1 -1
  226. package/dist/components/step-line-chart/index.js +2 -2
  227. package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts +0 -1
  228. package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts.map +1 -1
  229. package/dist/components/treemap-chart/element/ui9000-treemap-chart.js +5 -24
  230. package/dist/components/treemap-chart/element/ui9000-treemap-chart.js.map +1 -1
  231. package/dist/components/treemap-chart/index.js +4 -4
  232. package/dist/components/violin-chart/element/ui9000-violin-chart.js +1 -1
  233. package/dist/components/violin-chart/index.js +2 -2
  234. package/dist/components/violin-chart/render/draw.js +1 -1
  235. package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.d.ts +0 -1
  236. package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.d.ts.map +1 -1
  237. package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.js +11 -29
  238. package/dist/components/waterfall-chart/element/ui9000-waterfall-chart.js.map +1 -1
  239. package/dist/components/waterfall-chart/index.js +2 -2
  240. package/dist/element/chart-shell-render.d.ts +3 -0
  241. package/dist/element/chart-shell-render.d.ts.map +1 -1
  242. package/dist/element/chart-shell-render.js +80 -19
  243. package/dist/element/chart-shell-render.js.map +1 -1
  244. package/dist/element/chart-shell-styles.d.ts +5 -1
  245. package/dist/element/chart-shell-styles.d.ts.map +1 -1
  246. package/dist/element/chart-shell-styles.js +126 -7
  247. package/dist/element/chart-shell-styles.js.map +1 -1
  248. package/dist/element/chart-tooltip-portal.d.ts +29 -0
  249. package/dist/element/chart-tooltip-portal.d.ts.map +1 -0
  250. package/dist/element/chart-tooltip-portal.js +278 -0
  251. package/dist/element/chart-tooltip-portal.js.map +1 -0
  252. package/dist/element/header-icons.d.ts +18 -0
  253. package/dist/element/header-icons.d.ts.map +1 -0
  254. package/dist/element/header-icons.js +44 -0
  255. package/dist/element/header-icons.js.map +1 -0
  256. package/dist/element/ui9000-chart-base.d.ts +19 -0
  257. package/dist/element/ui9000-chart-base.d.ts.map +1 -1
  258. package/dist/element/ui9000-chart-base.js +34 -0
  259. package/dist/element/ui9000-chart-base.js.map +1 -1
  260. package/dist/element/widget-header.d.ts +35 -0
  261. package/dist/element/widget-header.d.ts.map +1 -0
  262. package/dist/element/widget-header.js +59 -0
  263. package/dist/element/widget-header.js.map +1 -0
  264. package/dist/index.d.ts +4 -1
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +74 -64
  267. package/dist/index.js.map +1 -1
  268. package/dist/lazy/index.d.ts +2 -1
  269. package/dist/lazy/index.d.ts.map +1 -1
  270. package/dist/lazy/index.js +8 -0
  271. package/dist/lazy/index.js.map +1 -1
  272. package/dist/lazy/status-gauge-widget.d.ts +4 -0
  273. package/dist/lazy/status-gauge-widget.d.ts.map +1 -0
  274. package/dist/lazy/status-gauge-widget.js +5 -0
  275. package/dist/lazy/status-gauge-widget.js.map +1 -0
  276. package/dist/utils/chart-shell.d.ts +1 -1
  277. package/dist/utils/chart-shell.d.ts.map +1 -1
  278. package/dist/utils/chart-shell.js +4 -6
  279. package/dist/utils/chart-shell.js.map +1 -1
  280. package/dist/utils/lit-draw.d.ts +1 -0
  281. package/dist/utils/lit-draw.d.ts.map +1 -1
  282. package/dist/utils/lit-draw.js +4 -1
  283. package/dist/utils/lit-draw.js.map +1 -1
  284. package/package.json +19 -3
@@ -0,0 +1,154 @@
1
+ import { html, nothing, svg } from "lit";
2
+ import { property, state, customElement } from "lit/decorators.js";
3
+ import { readCssVar } from "../../../context/widget-context.js";
4
+ import { Ui9000ChartElement } from "../../../element/ui9000-chart-base.js";
5
+ import { parseJsonAttr } from "../../../utils/chart-helpers.js";
6
+ import { normalizeStatusGauge, formatStatusNumber } from "../lib/normalize.js";
7
+ import { drawStatusGauge } from "../render/draw.js";
8
+ import { statusGaugeStyles } from "./styles.js";
9
+ import { chartShellStyles } from "../../../element/chart-shell-styles.js";
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __decorateClass = (decorators, target, key, kind) => {
13
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
14
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
15
+ if (decorator = decorators[i])
16
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
17
+ if (kind && result) __defProp(target, key, result);
18
+ return result;
19
+ };
20
+ const CHECK = svg`<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M3.2 8.2 6.3 11.3 12.8 4.7" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"></path></svg>`;
21
+ let nextGradientId = 0;
22
+ let Ui9000StatusGaugeWidget = class extends Ui9000ChartElement {
23
+ constructor() {
24
+ super();
25
+ this.theme = "";
26
+ this._model = {
27
+ title: "",
28
+ subtitle: "",
29
+ gauge: null,
30
+ metrics: [],
31
+ empty: true
32
+ };
33
+ this._columns = 2;
34
+ this._mode = "light";
35
+ this._raf = 0;
36
+ this._gradientId = `ui9000-status-gauge-${++nextGradientId}`;
37
+ this.showHeader = false;
38
+ }
39
+ connectedCallback() {
40
+ super.connectedCallback();
41
+ if (typeof ResizeObserver === "undefined") return;
42
+ this._resizeObserver = new ResizeObserver(() => this.scheduleLayout());
43
+ this._resizeObserver.observe(this);
44
+ }
45
+ disconnectedCallback() {
46
+ var _a;
47
+ (_a = this._resizeObserver) == null ? void 0 : _a.disconnect();
48
+ cancelAnimationFrame(this._raf);
49
+ super.disconnectedCallback();
50
+ }
51
+ willUpdate(changed) {
52
+ this.syncMode();
53
+ if (changed.has("dataJson")) {
54
+ this._model = normalizeStatusGauge(parseJsonAttr(this.dataJson, null));
55
+ }
56
+ }
57
+ syncMode() {
58
+ const explicit = this.theme === "dark" || this.theme === "light" ? this.theme : "";
59
+ const fromHost = this.closest('[data-theme="dark"]') ? "dark" : "";
60
+ const fromVar = readCssVar(this, "--ui9000-mode", "light") === "dark" ? "dark" : "light";
61
+ const next = (explicit || fromHost || fromVar) === "dark" ? "dark" : "light";
62
+ if (this.getAttribute("data-mode") !== next) this.setAttribute("data-mode", next);
63
+ if (this._mode !== next) this._mode = next;
64
+ }
65
+ updated() {
66
+ this.drawGauge();
67
+ }
68
+ render() {
69
+ if (this._model.empty) {
70
+ return html`<div class="panel" data-mode=${this._mode}><p class="empty">No status data</p></div>`;
71
+ }
72
+ const { title, subtitle, gauge, metrics } = this._model;
73
+ return html`
74
+ <div class="panel" data-mode=${this._mode}>
75
+ ${title ? html`<h2 class="title">${title}</h2>` : nothing}
76
+ ${subtitle ? html`<p class="subtitle">${subtitle}</p>` : nothing}
77
+ ${title || subtitle ? html`<div class="rule"></div>` : nothing}
78
+ ${gauge ? html`
79
+ <div class="health">
80
+ <span class="health-name">
81
+ <span class="check">${CHECK}</span>
82
+ ${gauge.label}
83
+ </span>
84
+ ${gauge.status ? html`<span class="badge ${gauge.level}"><span class="dot"></span>${gauge.status}</span>` : nothing}
85
+ </div>
86
+ <div class="gauge"></div>
87
+ ` : nothing}
88
+ ${metrics.length ? html`
89
+ <div class="metrics" data-cols=${this._columns}>
90
+ ${metrics.map(
91
+ (metric) => html`
92
+ <article class="card ${metric.level}">
93
+ <div class="card-top">
94
+ <span class="card-label">${metric.label}</span>
95
+ <span class="dot"></span>
96
+ </div>
97
+ <div class="value">
98
+ ${formatStatusNumber(metric.value)}${metric.unit ? html`<span class="unit">${metric.unit}</span>` : nothing}
99
+ </div>
100
+ <div class="bar">
101
+ <span style="width:${Math.round(metric.ratio * 100)}%"></span>
102
+ </div>
103
+ </article>
104
+ `
105
+ )}
106
+ </div>
107
+ ` : nothing}
108
+ </div>
109
+ `;
110
+ }
111
+ scheduleLayout() {
112
+ cancelAnimationFrame(this._raf);
113
+ this._raf = requestAnimationFrame(() => {
114
+ const next = this.clientWidth > 0 && this.clientWidth < 280 ? 1 : 2;
115
+ if (next !== this._columns) {
116
+ this._columns = next;
117
+ this.requestUpdate();
118
+ return;
119
+ }
120
+ this.drawGauge();
121
+ });
122
+ }
123
+ drawGauge() {
124
+ const root = this.renderRoot.querySelector(".gauge");
125
+ if (!(root instanceof HTMLElement) || !this._model.gauge) return;
126
+ drawStatusGauge(root, this._model.gauge, this._gradientId);
127
+ }
128
+ };
129
+ Ui9000StatusGaugeWidget.styles = [chartShellStyles, statusGaugeStyles];
130
+ __decorateClass([
131
+ property({ type: String, reflect: true })
132
+ ], Ui9000StatusGaugeWidget.prototype, "theme", 2);
133
+ __decorateClass([
134
+ state()
135
+ ], Ui9000StatusGaugeWidget.prototype, "_model", 2);
136
+ __decorateClass([
137
+ state()
138
+ ], Ui9000StatusGaugeWidget.prototype, "_columns", 2);
139
+ __decorateClass([
140
+ state()
141
+ ], Ui9000StatusGaugeWidget.prototype, "_mode", 2);
142
+ Ui9000StatusGaugeWidget = __decorateClass([
143
+ customElement("ui9000-status-gauge-widget")
144
+ ], Ui9000StatusGaugeWidget);
145
+ function registerStatusGaugeWidget() {
146
+ if (!customElements.get("ui9000-status-gauge-widget")) {
147
+ customElements.define("ui9000-status-gauge-widget", Ui9000StatusGaugeWidget);
148
+ }
149
+ }
150
+ export {
151
+ Ui9000StatusGaugeWidget,
152
+ registerStatusGaugeWidget
153
+ };
154
+ //# sourceMappingURL=ui9000-status-gauge-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui9000-status-gauge-widget.js","sources":["../../../../src/components/status-gauge-widget/element/ui9000-status-gauge-widget.ts"],"sourcesContent":["import { html, nothing, svg, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { readCssVar } from '../../../context/widget-context.js';\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport {\n formatStatusNumber,\n normalizeStatusGauge,\n type StatusGaugeModel,\n} from '../lib/index.js';\nimport { drawStatusGauge } from '../render/draw.js';\nimport { statusGaugeStyles } from './styles.js';\n\nconst CHECK = svg`<svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.2 8.2 6.3 11.3 12.8 4.7\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>`;\n\nlet nextGradientId = 0;\n\n@customElement('ui9000-status-gauge-widget')\nexport class Ui9000StatusGaugeWidget extends Ui9000ChartElement {\n static override styles = [chartShellStyles, statusGaugeStyles];\n\n /** `light` or `dark`. Empty follows `--ui9000-mode` and the host `data-theme`. */\n @property({ type: String, reflect: true })\n theme = '';\n\n @state()\n private _model: StatusGaugeModel = {\n title: '',\n subtitle: '',\n gauge: null,\n metrics: [],\n empty: true,\n };\n\n @state()\n private _columns = 2;\n\n @state()\n private _mode: 'light' | 'dark' = 'light';\n\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n private readonly _gradientId = `ui9000-status-gauge-${++nextGradientId}`;\n\n constructor() {\n super();\n this.showHeader = false;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (typeof ResizeObserver === 'undefined') return;\n this._resizeObserver = new ResizeObserver(() => this.scheduleLayout());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n super.disconnectedCallback();\n }\n\n override willUpdate(changed: PropertyValues): void {\n this.syncMode();\n if (changed.has('dataJson')) {\n this._model = normalizeStatusGauge(parseJsonAttr(this.dataJson, null));\n }\n }\n\n private syncMode(): void {\n const explicit = this.theme === 'dark' || this.theme === 'light' ? this.theme : '';\n const fromHost = this.closest('[data-theme=\"dark\"]') ? 'dark' : '';\n const fromVar = readCssVar(this, '--ui9000-mode', 'light') === 'dark' ? 'dark' : 'light';\n const next = (explicit || fromHost || fromVar) === 'dark' ? 'dark' : 'light';\n if (this.getAttribute('data-mode') !== next) this.setAttribute('data-mode', next);\n if (this._mode !== next) this._mode = next;\n }\n\n override updated(): void {\n this.drawGauge();\n }\n\n override render() {\n if (this._model.empty) {\n return html`<div class=\"panel\" data-mode=${this._mode}><p class=\"empty\">No status data</p></div>`;\n }\n\n const { title, subtitle, gauge, metrics } = this._model;\n return html`\n <div class=\"panel\" data-mode=${this._mode}>\n ${title ? html`<h2 class=\"title\">${title}</h2>` : nothing}\n ${subtitle ? html`<p class=\"subtitle\">${subtitle}</p>` : nothing}\n ${title || subtitle ? html`<div class=\"rule\"></div>` : nothing}\n ${gauge\n ? html`\n <div class=\"health\">\n <span class=\"health-name\">\n <span class=\"check\">${CHECK}</span>\n ${gauge.label}\n </span>\n ${gauge.status\n ? html`<span class=\"badge ${gauge.level}\"><span class=\"dot\"></span>${gauge.status}</span>`\n : nothing}\n </div>\n <div class=\"gauge\"></div>\n `\n : nothing}\n ${metrics.length\n ? html`\n <div class=\"metrics\" data-cols=${this._columns}>\n ${metrics.map(\n (metric) => html`\n <article class=\"card ${metric.level}\">\n <div class=\"card-top\">\n <span class=\"card-label\">${metric.label}</span>\n <span class=\"dot\"></span>\n </div>\n <div class=\"value\">\n ${formatStatusNumber(metric.value)}${metric.unit\n ? html`<span class=\"unit\">${metric.unit}</span>`\n : nothing}\n </div>\n <div class=\"bar\">\n <span style=\"width:${Math.round(metric.ratio * 100)}%\"></span>\n </div>\n </article>\n `,\n )}\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n private scheduleLayout(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => {\n const next = this.clientWidth > 0 && this.clientWidth < 280 ? 1 : 2;\n if (next !== this._columns) {\n this._columns = next;\n this.requestUpdate();\n return;\n }\n this.drawGauge();\n });\n }\n\n private drawGauge(): void {\n const root = this.renderRoot.querySelector('.gauge');\n if (!(root instanceof HTMLElement) || !this._model.gauge) return;\n drawStatusGauge(root, this._model.gauge, this._gradientId);\n }\n}\n\nexport function registerStatusGaugeWidget(): void {\n if (!customElements.get('ui9000-status-gauge-widget')) {\n customElements.define('ui9000-status-gauge-widget', Ui9000StatusGaugeWidget);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-status-gauge-widget': Ui9000StatusGaugeWidget;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { Ui9000StatusGaugeWidget, registerStatusGaugeWidget, } from './element/ui9000-status-gauge-widget.js';
2
+ export { formatStatusNumber, normalizeStatusGauge, type StatusGaugeAxisDetail, type StatusGaugeItem, type StatusGaugeModel, type StatusGaugePayload, type StatusGaugeRowInput, type StatusLevel, } from './lib/index.js';
3
+ export { default as statusGaugeWidgetMetadata } from './metadata.json';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/status-gauge-widget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { registerStatusGaugeWidget } from "./element/ui9000-status-gauge-widget.js";
2
+ import { Ui9000StatusGaugeWidget } from "./element/ui9000-status-gauge-widget.js";
3
+ import { formatStatusNumber, normalizeStatusGauge } from "./lib/normalize.js";
4
+ import { default as default2 } from "./metadata.json.js";
5
+ export {
6
+ Ui9000StatusGaugeWidget,
7
+ formatStatusNumber,
8
+ normalizeStatusGauge,
9
+ registerStatusGaugeWidget,
10
+ default2 as statusGaugeWidgetMetadata
11
+ };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,3 @@
1
+ export { formatStatusNumber, normalizeStatusGauge } from './normalize.js';
2
+ export type { StatusGaugeAxisDetail, StatusGaugeItem, StatusGaugeModel, StatusGaugePayload, StatusGaugeRowInput, StatusLevel, } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/status-gauge-widget/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,GACZ,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { StatusGaugeModel } from './types.js';
2
+ /**
3
+ * WidgetItem-shaped payload → one gauge and N metric cards.
4
+ * The gauge is the row with `role: "gauge"`. When none is marked, the first valid row is the gauge.
5
+ */
6
+ export declare function normalizeStatusGauge(input: unknown): StatusGaugeModel;
7
+ export declare function formatStatusNumber(value: number): string;
8
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/components/status-gauge-widget/lib/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAIjB,MAAM,YAAY,CAAC;AAgGpB;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CA8BrE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD"}
@@ -0,0 +1,111 @@
1
+ const LEVELS = /* @__PURE__ */ new Set(["ok", "warning", "critical", "neutral"]);
2
+ function isRecord(value) {
3
+ return !!value && typeof value === "object" && !Array.isArray(value);
4
+ }
5
+ function num(value) {
6
+ if (typeof value === "number" && Number.isFinite(value)) return value;
7
+ if (typeof value === "string" && value.trim() && Number.isFinite(Number(value))) {
8
+ return Number(value);
9
+ }
10
+ return void 0;
11
+ }
12
+ function clamp01(value) {
13
+ if (!Number.isFinite(value)) return 0;
14
+ return Math.min(1, Math.max(0, value));
15
+ }
16
+ function levelFromText(status) {
17
+ const text = String(status ?? "").trim().toLowerCase();
18
+ if (!text) return "neutral";
19
+ if (/(ok|good|healthy|normal|pass|success)/.test(text)) return "ok";
20
+ if (/(warn|degrad|caution|attention)/.test(text)) return "warning";
21
+ if (/(crit|bad|fail|error|danger|down)/.test(text)) return "critical";
22
+ return "neutral";
23
+ }
24
+ function readLevel(row) {
25
+ const explicit = String(row.level ?? "").trim().toLowerCase();
26
+ if (LEVELS.has(explicit)) return explicit;
27
+ return levelFromText(row.status);
28
+ }
29
+ function readRatio(row, value, min, max) {
30
+ const explicit = num(row.ratio);
31
+ if (explicit !== void 0) {
32
+ if (explicit > 1 && explicit <= 100) return clamp01(explicit / 100);
33
+ return clamp01(explicit);
34
+ }
35
+ const span = max - min;
36
+ if (!Number.isFinite(span) || span === 0) return 0;
37
+ return clamp01((value - min) / span);
38
+ }
39
+ function rowsOf(input) {
40
+ if (Array.isArray(input)) return input.filter(isRecord);
41
+ if (isRecord(input) && Array.isArray(input.data)) {
42
+ return input.data.filter(isRecord);
43
+ }
44
+ return [];
45
+ }
46
+ function firstField(value, fallback) {
47
+ if (Array.isArray(value) && typeof value[0] === "string" && value[0].trim()) return value[0];
48
+ return fallback;
49
+ }
50
+ function toItem(row, role, xField, yField, axisDetails) {
51
+ const key = String(row.key ?? row[xField] ?? "").trim();
52
+ const value = num(row.value ?? row[yField]);
53
+ if (!key || value === void 0) return null;
54
+ const detail = axisDetails == null ? void 0 : axisDetails[key];
55
+ const label = String((detail == null ? void 0 : detail.label) ?? row.label ?? key).trim() || key;
56
+ const unit = String(
57
+ (detail == null ? void 0 : detail.measure_unit) ?? (detail == null ? void 0 : detail.measure_unit_symbol) ?? row.unit ?? ""
58
+ ).trim();
59
+ const min = num(row.min) ?? 0;
60
+ const max = num(row.max) ?? (role === "gauge" ? 100 : 100);
61
+ const lo = Math.min(min, max);
62
+ const hi = Math.max(min, max);
63
+ const scaleMax = hi === lo ? lo + (role === "gauge" ? 100 : 1) : hi;
64
+ return {
65
+ key,
66
+ role,
67
+ value,
68
+ label,
69
+ unit,
70
+ status: String(row.status ?? "").trim(),
71
+ level: readLevel(row),
72
+ min: lo,
73
+ max: scaleMax,
74
+ ratio: readRatio(row, value, lo, scaleMax)
75
+ };
76
+ }
77
+ function normalizeStatusGauge(input) {
78
+ const payload = isRecord(input) ? input : {};
79
+ const xField = firstField(payload.xAxe, "key");
80
+ const yField = firstField(payload.yAxe, "value");
81
+ const rows = rowsOf(input);
82
+ const gaugeIndex = rows.findIndex((row) => String(row.role ?? "").toLowerCase() === "gauge");
83
+ const gaugeSource = gaugeIndex >= 0 ? rows[gaugeIndex] : rows[0];
84
+ const gauge = gaugeSource ? toItem(gaugeSource, "gauge", xField, yField, payload.axisDetails) : null;
85
+ const metrics = [];
86
+ rows.forEach((row, index) => {
87
+ if (gaugeSource && row === gaugeSource) return;
88
+ if (gaugeIndex < 0 && index === 0) return;
89
+ const item = toItem(row, "metric", xField, yField, payload.axisDetails);
90
+ if (item) metrics.push(item);
91
+ });
92
+ const title = String(payload.name ?? payload.title ?? "").trim();
93
+ const subtitle = String(payload.description ?? payload.subtitle ?? "").trim();
94
+ return {
95
+ title,
96
+ subtitle,
97
+ gauge,
98
+ metrics,
99
+ empty: !gauge && metrics.length === 0
100
+ };
101
+ }
102
+ function formatStatusNumber(value) {
103
+ if (!Number.isFinite(value)) return "—";
104
+ const rounded = Math.round(value * 10) / 10;
105
+ return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1);
106
+ }
107
+ export {
108
+ formatStatusNumber,
109
+ normalizeStatusGauge
110
+ };
111
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sources":["../../../../src/components/status-gauge-widget/lib/normalize.ts"],"sourcesContent":["import type {\n StatusGaugeItem,\n StatusGaugeModel,\n StatusGaugePayload,\n StatusGaugeRowInput,\n StatusLevel,\n} from './types.js';\n\nconst LEVELS = new Set<StatusLevel>(['ok', 'warning', 'critical', 'neutral']);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction num(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string' && value.trim() && Number.isFinite(Number(value))) {\n return Number(value);\n }\n return undefined;\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction levelFromText(status: unknown): StatusLevel {\n const text = String(status ?? '').trim().toLowerCase();\n if (!text) return 'neutral';\n if (/(ok|good|healthy|normal|pass|success)/.test(text)) return 'ok';\n if (/(warn|degrad|caution|attention)/.test(text)) return 'warning';\n if (/(crit|bad|fail|error|danger|down)/.test(text)) return 'critical';\n return 'neutral';\n}\n\nfunction readLevel(row: StatusGaugeRowInput): StatusLevel {\n const explicit = String(row.level ?? '').trim().toLowerCase();\n if (LEVELS.has(explicit as StatusLevel)) return explicit as StatusLevel;\n return levelFromText(row.status);\n}\n\nfunction readRatio(row: StatusGaugeRowInput, value: number, min: number, max: number): number {\n const explicit = num(row.ratio);\n if (explicit !== undefined) {\n if (explicit > 1 && explicit <= 100) return clamp01(explicit / 100);\n return clamp01(explicit);\n }\n const span = max - min;\n if (!Number.isFinite(span) || span === 0) return 0;\n return clamp01((value - min) / span);\n}\n\nfunction rowsOf(input: unknown): StatusGaugeRowInput[] {\n if (Array.isArray(input)) return input.filter(isRecord) as StatusGaugeRowInput[];\n if (isRecord(input) && Array.isArray(input.data)) {\n return input.data.filter(isRecord) as StatusGaugeRowInput[];\n }\n return [];\n}\n\nfunction firstField(value: unknown, fallback: string): string {\n if (Array.isArray(value) && typeof value[0] === 'string' && value[0].trim()) return value[0];\n return fallback;\n}\n\nfunction toItem(\n row: StatusGaugeRowInput,\n role: 'gauge' | 'metric',\n xField: string,\n yField: string,\n axisDetails: StatusGaugePayload['axisDetails'],\n): StatusGaugeItem | null {\n const key = String(row.key ?? row[xField] ?? '').trim();\n const value = num(row.value ?? row[yField]);\n if (!key || value === undefined) return null;\n\n const detail = axisDetails?.[key];\n const label = String(detail?.label ?? row.label ?? key).trim() || key;\n const unit = String(\n detail?.measure_unit ?? detail?.measure_unit_symbol ?? row.unit ?? '',\n ).trim();\n const min = num(row.min) ?? 0;\n const max = num(row.max) ?? (role === 'gauge' ? 100 : 100);\n const lo = Math.min(min, max);\n const hi = Math.max(min, max);\n const scaleMax = hi === lo ? lo + (role === 'gauge' ? 100 : 1) : hi;\n\n return {\n key,\n role,\n value,\n label,\n unit,\n status: String(row.status ?? '').trim(),\n level: readLevel(row),\n min: lo,\n max: scaleMax,\n ratio: readRatio(row, value, lo, scaleMax),\n };\n}\n\n/**\n * WidgetItem-shaped payload → one gauge and N metric cards.\n * The gauge is the row with `role: \"gauge\"`. When none is marked, the first valid row is the gauge.\n */\nexport function normalizeStatusGauge(input: unknown): StatusGaugeModel {\n const payload = isRecord(input) ? (input as StatusGaugePayload) : {};\n const xField = firstField(payload.xAxe, 'key');\n const yField = firstField(payload.yAxe, 'value');\n const rows = rowsOf(input);\n const gaugeIndex = rows.findIndex((row) => String(row.role ?? '').toLowerCase() === 'gauge');\n const gaugeSource = gaugeIndex >= 0 ? rows[gaugeIndex] : rows[0];\n\n const gauge = gaugeSource\n ? toItem(gaugeSource, 'gauge', xField, yField, payload.axisDetails)\n : null;\n\n const metrics: StatusGaugeItem[] = [];\n rows.forEach((row, index) => {\n if (gaugeSource && row === gaugeSource) return;\n if (gaugeIndex < 0 && index === 0) return;\n const item = toItem(row, 'metric', xField, yField, payload.axisDetails);\n if (item) metrics.push(item);\n });\n\n const title = String(payload.name ?? payload.title ?? '').trim();\n const subtitle = String(payload.description ?? payload.subtitle ?? '').trim();\n\n return {\n title,\n subtitle,\n gauge,\n metrics,\n empty: !gauge && metrics.length === 0,\n };\n}\n\nexport function formatStatusNumber(value: number): string {\n if (!Number.isFinite(value)) return '—';\n const rounded = Math.round(value * 10) / 10;\n return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export type StatusLevel = 'ok' | 'warning' | 'critical' | 'neutral';
2
+ export interface StatusGaugeAxisDetail {
3
+ label?: string;
4
+ measure_unit?: string;
5
+ measure_unit_symbol?: string;
6
+ measure_unit_type?: string;
7
+ type?: string;
8
+ subtype?: string;
9
+ }
10
+ /** One `WidgetItem.data` row. `role: "gauge"` is the semicircle; every other row is a card. */
11
+ export interface StatusGaugeRowInput {
12
+ key?: string;
13
+ role?: string;
14
+ value?: number | string;
15
+ status?: string;
16
+ level?: string;
17
+ min?: number | string;
18
+ max?: number | string;
19
+ /** Bar fill, 0–1. Omitted → derived from value between min and max. */
20
+ ratio?: number | string;
21
+ label?: string;
22
+ unit?: string;
23
+ [key: string]: unknown;
24
+ }
25
+ export interface StatusGaugePayload {
26
+ name?: string;
27
+ title?: string;
28
+ description?: string;
29
+ subtitle?: string;
30
+ chartType?: string;
31
+ xAxe?: string[];
32
+ yAxe?: string[];
33
+ data?: StatusGaugeRowInput[];
34
+ axisDetails?: Record<string, StatusGaugeAxisDetail>;
35
+ }
36
+ export interface StatusGaugeItem {
37
+ key: string;
38
+ role: 'gauge' | 'metric';
39
+ value: number;
40
+ label: string;
41
+ unit: string;
42
+ status: string;
43
+ level: StatusLevel;
44
+ min: number;
45
+ max: number;
46
+ /** 0–1 fill for the metric bar, or the gauge needle position. */
47
+ ratio: number;
48
+ }
49
+ export interface StatusGaugeModel {
50
+ title: string;
51
+ subtitle: string;
52
+ gauge: StatusGaugeItem | null;
53
+ metrics: StatusGaugeItem[];
54
+ empty: boolean;
55
+ }
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/status-gauge-widget/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,+FAA+F;AAC/F,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,20 @@
1
+ declare const _default: {
2
+ "id": "status-gauge-widget",
3
+ "tag": "ui9000-status-gauge-widget",
4
+ "title": "Status Gauge Widget",
5
+ "description": "Semicircular health gauge plus a wrapping grid of status metric cards. Reads a WidgetItem: name, description, data rows, and axisDetails. One row with role gauge is the dial; every other row is a card.",
6
+ "chartTypeKeys": ["statusGaugeWidget"],
7
+ "stack": "lit",
8
+ "lazyImport": "@ui9000/widgets/lazy/status-gauge-widget",
9
+ "entry": "@ui9000/widgets/status-gauge-widget",
10
+ "usageConditions": {
11
+ "host": "mcp-chat",
12
+ "notFor": "fusedash-editor",
13
+ "mapsExcluded": true
14
+ },
15
+ "allowedActions": ["resize"],
16
+ "tier": "host"
17
+ }
18
+ ;
19
+
20
+ export default _default;
@@ -0,0 +1,39 @@
1
+ const id = "status-gauge-widget";
2
+ const tag = "ui9000-status-gauge-widget";
3
+ const title = "Status Gauge Widget";
4
+ const description = "Semicircular health gauge plus a wrapping grid of status metric cards. Reads a WidgetItem: name, description, data rows, and axisDetails. One row with role gauge is the dial; every other row is a card.";
5
+ const chartTypeKeys = ["statusGaugeWidget"];
6
+ const stack = "lit";
7
+ const lazyImport = "@ui9000/widgets/lazy/status-gauge-widget";
8
+ const entry = "@ui9000/widgets/status-gauge-widget";
9
+ const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true };
10
+ const allowedActions = ["resize"];
11
+ const tier = "host";
12
+ const statusGaugeMeta = {
13
+ id,
14
+ tag,
15
+ title,
16
+ description,
17
+ chartTypeKeys,
18
+ stack,
19
+ lazyImport,
20
+ entry,
21
+ usageConditions,
22
+ allowedActions,
23
+ tier
24
+ };
25
+ export {
26
+ allowedActions,
27
+ chartTypeKeys,
28
+ statusGaugeMeta as default,
29
+ description,
30
+ entry,
31
+ id,
32
+ lazyImport,
33
+ stack,
34
+ tag,
35
+ tier,
36
+ title,
37
+ usageConditions
38
+ };
39
+ //# sourceMappingURL=metadata.json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ import { StatusGaugeItem } from '../lib/index.js';
2
+ /** Semicircular gauge: gradient fill to the value, gray remainder, needle, center reading. */
3
+ export declare function drawStatusGauge(root: HTMLElement, gauge: StatusGaugeItem, gradientId: string): void;
4
+ //# sourceMappingURL=draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../../../src/components/status-gauge-widget/render/draw.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAS3E,8FAA8F;AAC9F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,GACjB,IAAI,CA2GN"}
@@ -0,0 +1,60 @@
1
+ import { select } from "d3-selection";
2
+ import { arc } from "d3-shape";
3
+ import { formatStatusNumber } from "../lib/normalize.js";
4
+ const START = -Math.PI / 2;
5
+ const SWEEP = Math.PI;
6
+ function polar(angle, radius) {
7
+ return [Math.sin(angle) * radius, -Math.cos(angle) * radius];
8
+ }
9
+ function drawStatusGauge(root, gauge, gradientId) {
10
+ const width = Math.max(root.clientWidth, 160);
11
+ const height = Math.max(root.clientHeight, 120);
12
+ const cx = width / 2;
13
+ const cy = height * 0.78;
14
+ const outer = Math.max(36, Math.min(width * 0.42, height * 0.7));
15
+ const inner = Math.max(18, outer - Math.max(14, outer * 0.22));
16
+ const valueAngle = START + gauge.ratio * SWEEP;
17
+ const track = arc().innerRadius(inner).outerRadius(outer).cornerRadius((outer - inner) / 2).startAngle((d) => d.startAngle).endAngle((d) => d.endAngle);
18
+ const host = select(root);
19
+ host.selectAll("*").remove();
20
+ const svg = host.append("svg").attr("viewBox", `0 0 ${width} ${height}`).attr("width", width).attr("height", height).attr("role", "img").attr("aria-label", `${gauge.label} ${formatStatusNumber(gauge.value)}${gauge.unit}`);
21
+ const defs = svg.append("defs");
22
+ const gradient = defs.append("linearGradient").attr("id", gradientId).attr("x1", cx - outer).attr("x2", cx + outer).attr("y1", cy).attr("y2", cy).attr("gradientUnits", "userSpaceOnUse");
23
+ gradient.append("stop").attr("offset", "0%").attr("stop-color", "var(--sg-gauge-0, #36c4a5)");
24
+ gradient.append("stop").attr("offset", "38%").attr("stop-color", "var(--sg-gauge-1, #473dd9)");
25
+ gradient.append("stop").attr("offset", "68%").attr("stop-color", "var(--sg-gauge-2, #ff8c47)");
26
+ gradient.append("stop").attr("offset", "100%").attr("stop-color", "var(--sg-gauge-3, #ff4781)");
27
+ const g = svg.append("g").attr("transform", `translate(${cx},${cy})`);
28
+ g.append("path").attr("d", track({ startAngle: START, endAngle: START + SWEEP }) ?? "").attr("fill", "var(--sg-track, #cfd2d6)");
29
+ if (gauge.ratio > 1e-3) {
30
+ g.append("path").attr("d", track({ startAngle: START, endAngle: valueAngle }) ?? "").attr("fill", `url(#${gradientId})`);
31
+ }
32
+ const mid = (inner + outer) / 2;
33
+ const stroke = outer - inner;
34
+ const cap = stroke / 2 / mid + 0.06;
35
+ const tickCount = 4;
36
+ for (let i = 0; i < tickCount; i += 1) {
37
+ const t = cap + (1 - cap * 2) * i / (tickCount - 1);
38
+ const tickAngle = START + t * SWEEP;
39
+ if (Math.abs(tickAngle - valueAngle) < 0.12) continue;
40
+ const [x, y] = polar(tickAngle, mid);
41
+ g.append("circle").attr("cx", x).attr("cy", y).attr("r", 2.25).attr("fill", "var(--sg-thumb, #ffffff)").attr("stroke", "var(--sg-thumb-ink, #21262e)").attr("stroke-width", 1);
42
+ }
43
+ const [mx, my] = polar(valueAngle, mid);
44
+ const thumb = Math.max(5, stroke * 0.28);
45
+ g.append("circle").attr("cx", mx).attr("cy", my).attr("r", thumb).attr("fill", "var(--sg-thumb, #ffffff)").attr("stroke", "var(--sg-thumb-ink, #21262e)").attr("stroke-width", 1.5);
46
+ g.append("circle").attr("cx", mx).attr("cy", my).attr("r", thumb * 0.34).attr("fill", "var(--sg-thumb-ink, #21262e)");
47
+ const reading = formatStatusNumber(gauge.value);
48
+ const fontSize = Math.max(22, Math.min(36, outer * 0.32));
49
+ const text = g.append("text").attr("text-anchor", "middle").attr("y", -outer * 0.16).attr("fill", "var(--sg-text, #21262e)").attr("font-size", fontSize);
50
+ if (!gauge.unit || gauge.unit === "%") {
51
+ text.text(gauge.unit === "%" ? `${reading}%` : reading);
52
+ } else {
53
+ text.append("tspan").text(reading);
54
+ text.append("tspan").text(` ${gauge.unit}`).attr("font-size", Math.max(14, fontSize * 0.42)).attr("font-weight", 500).attr("fill", "var(--sg-muted, #6c7584)");
55
+ }
56
+ }
57
+ export {
58
+ drawStatusGauge
59
+ };
60
+ //# sourceMappingURL=draw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.js","sources":["../../../../src/components/status-gauge-widget/render/draw.ts"],"sourcesContent":["import { select } from 'd3-selection';\nimport { arc as arcShape } from 'd3-shape';\n\nimport { formatStatusNumber, type StatusGaugeItem } from '../lib/index.js';\n\nconst START = -Math.PI / 2;\nconst SWEEP = Math.PI;\n\nfunction polar(angle: number, radius: number): [number, number] {\n return [Math.sin(angle) * radius, -Math.cos(angle) * radius];\n}\n\n/** Semicircular gauge: gradient fill to the value, gray remainder, needle, center reading. */\nexport function drawStatusGauge(\n root: HTMLElement,\n gauge: StatusGaugeItem,\n gradientId: string,\n): void {\n const width = Math.max(root.clientWidth, 160);\n const height = Math.max(root.clientHeight, 120);\n const cx = width / 2;\n const cy = height * 0.78;\n const outer = Math.max(36, Math.min(width * 0.42, height * 0.7));\n const inner = Math.max(18, outer - Math.max(14, outer * 0.22));\n const valueAngle = START + gauge.ratio * SWEEP;\n\n const track = arcShape<{ startAngle: number; endAngle: number }>()\n .innerRadius(inner)\n .outerRadius(outer)\n .cornerRadius((outer - inner) / 2)\n .startAngle((d) => d.startAngle)\n .endAngle((d) => d.endAngle);\n\n const host = select(root);\n host.selectAll('*').remove();\n\n const svg = host\n .append('svg')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('width', width)\n .attr('height', height)\n .attr('role', 'img')\n .attr('aria-label', `${gauge.label} ${formatStatusNumber(gauge.value)}${gauge.unit}`);\n\n const defs = svg.append('defs');\n const gradient = defs\n .append('linearGradient')\n .attr('id', gradientId)\n .attr('x1', cx - outer)\n .attr('x2', cx + outer)\n .attr('y1', cy)\n .attr('y2', cy)\n .attr('gradientUnits', 'userSpaceOnUse');\n gradient.append('stop').attr('offset', '0%').attr('stop-color', 'var(--sg-gauge-0, #36c4a5)');\n gradient.append('stop').attr('offset', '38%').attr('stop-color', 'var(--sg-gauge-1, #473dd9)');\n gradient.append('stop').attr('offset', '68%').attr('stop-color', 'var(--sg-gauge-2, #ff8c47)');\n gradient.append('stop').attr('offset', '100%').attr('stop-color', 'var(--sg-gauge-3, #ff4781)');\n\n const g = svg.append('g').attr('transform', `translate(${cx},${cy})`);\n\n g.append('path')\n .attr('d', track({ startAngle: START, endAngle: START + SWEEP }) ?? '')\n .attr('fill', 'var(--sg-track, #cfd2d6)');\n\n if (gauge.ratio > 0.001) {\n g.append('path')\n .attr('d', track({ startAngle: START, endAngle: valueAngle }) ?? '')\n .attr('fill', `url(#${gradientId})`);\n }\n\n const mid = (inner + outer) / 2;\n const stroke = outer - inner;\n // Rounded caps eat the ends of the band. Keep ticks on the straight span.\n const cap = stroke / 2 / mid + 0.06;\n const tickCount = 4;\n for (let i = 0; i < tickCount; i += 1) {\n const t = cap + ((1 - cap * 2) * i) / (tickCount - 1);\n const tickAngle = START + t * SWEEP;\n if (Math.abs(tickAngle - valueAngle) < 0.12) continue;\n const [x, y] = polar(tickAngle, mid);\n g.append('circle')\n .attr('cx', x)\n .attr('cy', y)\n .attr('r', 2.25)\n .attr('fill', 'var(--sg-thumb, #ffffff)')\n .attr('stroke', 'var(--sg-thumb-ink, #21262e)')\n .attr('stroke-width', 1);\n }\n\n // Thumb on the band. A stem from the center would cut through the value.\n const [mx, my] = polar(valueAngle, mid);\n const thumb = Math.max(5, stroke * 0.28);\n g.append('circle')\n .attr('cx', mx)\n .attr('cy', my)\n .attr('r', thumb)\n .attr('fill', 'var(--sg-thumb, #ffffff)')\n .attr('stroke', 'var(--sg-thumb-ink, #21262e)')\n .attr('stroke-width', 1.5);\n g.append('circle')\n .attr('cx', mx)\n .attr('cy', my)\n .attr('r', thumb * 0.34)\n .attr('fill', 'var(--sg-thumb-ink, #21262e)');\n\n const reading = formatStatusNumber(gauge.value);\n const fontSize = Math.max(22, Math.min(36, outer * 0.32));\n const text = g\n .append('text')\n .attr('text-anchor', 'middle')\n .attr('y', -outer * 0.16)\n .attr('fill', 'var(--sg-text, #21262e)')\n .attr('font-size', fontSize);\n if (!gauge.unit || gauge.unit === '%') {\n text.text(gauge.unit === '%' ? `${reading}%` : reading);\n } else {\n text.append('tspan').text(reading);\n text\n .append('tspan')\n .text(` ${gauge.unit}`)\n .attr('font-size', Math.max(14, fontSize * 0.42))\n .attr('font-weight', 500)\n .attr('fill', 'var(--sg-muted, #6c7584)');\n }\n}\n"],"names":["arcShape"],"mappings":"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"}
@@ -11,7 +11,6 @@ export declare class Ui9000StepLineChart extends Ui9000ChartElement {
11
11
  showTooltip: boolean;
12
12
  xLabel: string;
13
13
  yLabel: string;
14
- private _tooltip;
15
14
  private _empty;
16
15
  private _resizeObserver?;
17
16
  private _raf;
@@ -1 +1 @@
1
- {"version":3,"file":"ui9000-step-line-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/step-line-chart/element/ui9000-step-line-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtE,OAAO,EAIL,KAAK,gBAAgB,EAGtB,MAAM,iBAAiB,CAAC;AAIzB,qBACa,mBAAoB,SAAQ,kBAAkB;IACzD,OAAgB,MAAM,4BAA2C;IAGjE,KAAK,EAAE,WAAW,CAAa;IAG/B,QAAQ,EAAE,gBAAgB,CAAU;IAGpC,QAAQ,UAAQ;IAGhB,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,MAAM,SAAM;IAGZ,MAAM,SAAM;IAGZ,OAAO,CAAC,QAAQ,CAKA;IAGhB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IAER,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,IAAI;IA0CH,MAAM;CAgChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,wBAAwB,EAAE,mBAAmB,CAAC;KAC/C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
1
+ {"version":3,"file":"ui9000-step-line-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/step-line-chart/element/ui9000-step-line-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtE,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAIzB,qBACa,mBAAoB,SAAQ,kBAAkB;IACzD,OAAgB,MAAM,4BAA2C;IAGjE,KAAK,EAAE,WAAW,CAAa;IAG/B,QAAQ,EAAE,gBAAgB,CAAU;IAGpC,QAAQ,UAAQ;IAGhB,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,MAAM,SAAM;IAGZ,MAAM,SAAM;IAGZ,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IAER,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAM5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,IAAI;IA0CH,MAAM;CAgBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,wBAAwB,EAAE,mBAAmB,CAAC;KAC/C;CACF;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}