@fusedashlabs/widgets 0.3.1 → 0.4.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 (342) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +1 -1
  3. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts +1 -0
  4. package/dist/components/chart-renderer/element/ui9000-chart-renderer.d.ts.map +1 -1
  5. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js +12 -1
  6. package/dist/components/chart-renderer/element/ui9000-chart-renderer.js.map +1 -1
  7. package/dist/components/chart-renderer/lib/registry.d.ts.map +1 -1
  8. package/dist/components/chart-renderer/lib/registry.js +17 -4
  9. package/dist/components/chart-renderer/lib/registry.js.map +1 -1
  10. package/dist/components/chart-renderer/lib/types.d.ts +5 -0
  11. package/dist/components/chart-renderer/lib/types.d.ts.map +1 -1
  12. package/dist/components/donut-chart/element/ui9000-donut-chart.js +1 -1
  13. package/dist/components/donut-chart/element/ui9000-donut-chart.js.map +1 -1
  14. package/dist/components/lollipop/element/styles.d.ts.map +1 -1
  15. package/dist/components/lollipop/element/styles.js +19 -1
  16. package/dist/components/lollipop/element/styles.js.map +1 -1
  17. package/dist/components/lollipop/element/ui9000-lollipop.d.ts +6 -1
  18. package/dist/components/lollipop/element/ui9000-lollipop.d.ts.map +1 -1
  19. package/dist/components/lollipop/element/ui9000-lollipop.js +68 -7
  20. package/dist/components/lollipop/element/ui9000-lollipop.js.map +1 -1
  21. package/dist/components/lollipop/index.d.ts +1 -1
  22. package/dist/components/lollipop/index.d.ts.map +1 -1
  23. package/dist/components/lollipop/index.js +2 -0
  24. package/dist/components/lollipop/index.js.map +1 -1
  25. package/dist/components/lollipop/lib/domain.d.ts +16 -1
  26. package/dist/components/lollipop/lib/domain.d.ts.map +1 -1
  27. package/dist/components/lollipop/lib/domain.js +56 -1
  28. package/dist/components/lollipop/lib/domain.js.map +1 -1
  29. package/dist/components/lollipop/lib/index.d.ts +3 -2
  30. package/dist/components/lollipop/lib/index.d.ts.map +1 -1
  31. package/dist/components/lollipop/lib/layout.d.ts +16 -0
  32. package/dist/components/lollipop/lib/layout.d.ts.map +1 -0
  33. package/dist/components/lollipop/lib/layout.js +16 -0
  34. package/dist/components/lollipop/lib/layout.js.map +1 -0
  35. package/dist/components/lollipop/lib/types.d.ts +5 -0
  36. package/dist/components/lollipop/lib/types.d.ts.map +1 -1
  37. package/dist/components/lollipop/metadata.json.d.ts +10 -0
  38. package/dist/components/lollipop/metadata.json.js +4 -1
  39. package/dist/components/lollipop/metadata.json.js.map +1 -1
  40. package/dist/components/lollipop/render/draw.d.ts +8 -1
  41. package/dist/components/lollipop/render/draw.d.ts.map +1 -1
  42. package/dist/components/lollipop/render/draw.js +155 -84
  43. package/dist/components/lollipop/render/draw.js.map +1 -1
  44. package/dist/components/map-chart/element/styles.d.ts +2 -0
  45. package/dist/components/map-chart/element/styles.d.ts.map +1 -0
  46. package/dist/components/map-chart/element/styles.js +372 -0
  47. package/dist/components/map-chart/element/styles.js.map +1 -0
  48. package/dist/components/map-chart/element/ui9000-map-chart.d.ts +54 -0
  49. package/dist/components/map-chart/element/ui9000-map-chart.d.ts.map +1 -0
  50. package/dist/components/map-chart/element/ui9000-map-chart.js +539 -0
  51. package/dist/components/map-chart/element/ui9000-map-chart.js.map +1 -0
  52. package/dist/components/map-chart/index.d.ts +5 -0
  53. package/dist/components/map-chart/index.d.ts.map +1 -0
  54. package/dist/components/map-chart/index.js +29 -0
  55. package/dist/components/map-chart/index.js.map +1 -0
  56. package/dist/components/map-chart/lib/constants.d.ts +34 -0
  57. package/dist/components/map-chart/lib/constants.d.ts.map +1 -0
  58. package/dist/components/map-chart/lib/constants.js +122 -0
  59. package/dist/components/map-chart/lib/constants.js.map +1 -0
  60. package/dist/components/map-chart/lib/domain.d.ts +12 -0
  61. package/dist/components/map-chart/lib/domain.d.ts.map +1 -0
  62. package/dist/components/map-chart/lib/domain.js +105 -0
  63. package/dist/components/map-chart/lib/domain.js.map +1 -0
  64. package/dist/components/map-chart/lib/format.d.ts +8 -0
  65. package/dist/components/map-chart/lib/format.d.ts.map +1 -0
  66. package/dist/components/map-chart/lib/format.js +45 -0
  67. package/dist/components/map-chart/lib/format.js.map +1 -0
  68. package/dist/components/map-chart/lib/geo-index.d.ts +7 -0
  69. package/dist/components/map-chart/lib/geo-index.d.ts.map +1 -0
  70. package/dist/components/map-chart/lib/geo-index.js +200 -0
  71. package/dist/components/map-chart/lib/geo-index.js.map +1 -0
  72. package/dist/components/map-chart/lib/geojson.d.ts +5 -0
  73. package/dist/components/map-chart/lib/geojson.d.ts.map +1 -0
  74. package/dist/components/map-chart/lib/geojson.js +47 -0
  75. package/dist/components/map-chart/lib/geojson.js.map +1 -0
  76. package/dist/components/map-chart/lib/index.d.ts +13 -0
  77. package/dist/components/map-chart/lib/index.d.ts.map +1 -0
  78. package/dist/components/map-chart/lib/join.d.ts +7 -0
  79. package/dist/components/map-chart/lib/join.d.ts.map +1 -0
  80. package/dist/components/map-chart/lib/join.js +156 -0
  81. package/dist/components/map-chart/lib/join.js.map +1 -0
  82. package/dist/components/map-chart/lib/legend.d.ts +45 -0
  83. package/dist/components/map-chart/lib/legend.d.ts.map +1 -0
  84. package/dist/components/map-chart/lib/legend.js +108 -0
  85. package/dist/components/map-chart/lib/legend.js.map +1 -0
  86. package/dist/components/map-chart/lib/normalize.d.ts +3 -0
  87. package/dist/components/map-chart/lib/normalize.d.ts.map +1 -0
  88. package/dist/components/map-chart/lib/normalize.js +177 -0
  89. package/dist/components/map-chart/lib/normalize.js.map +1 -0
  90. package/dist/components/map-chart/lib/pmtiles.d.ts +41 -0
  91. package/dist/components/map-chart/lib/pmtiles.d.ts.map +1 -0
  92. package/dist/components/map-chart/lib/pmtiles.js +112 -0
  93. package/dist/components/map-chart/lib/pmtiles.js.map +1 -0
  94. package/dist/components/map-chart/lib/types.d.ts +128 -0
  95. package/dist/components/map-chart/lib/types.d.ts.map +1 -0
  96. package/dist/components/map-chart/metadata.json.d.ts +83 -0
  97. package/dist/components/map-chart/metadata.json.js +42 -0
  98. package/dist/components/map-chart/metadata.json.js.map +1 -0
  99. package/dist/components/map-chart/render/draw.d.ts +24 -0
  100. package/dist/components/map-chart/render/draw.d.ts.map +1 -0
  101. package/dist/components/map-chart/render/draw.js +455 -0
  102. package/dist/components/map-chart/render/draw.js.map +1 -0
  103. package/dist/components/map-chart/render/index.d.ts +2 -0
  104. package/dist/components/map-chart/render/index.d.ts.map +1 -0
  105. package/dist/components/matrix-chart/element/styles.d.ts +2 -0
  106. package/dist/components/matrix-chart/element/styles.d.ts.map +1 -0
  107. package/dist/components/matrix-chart/element/styles.js +97 -0
  108. package/dist/components/matrix-chart/element/styles.js.map +1 -0
  109. package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts +39 -0
  110. package/dist/components/matrix-chart/element/ui9000-matrix-chart.d.ts.map +1 -0
  111. package/dist/components/matrix-chart/element/ui9000-matrix-chart.js +238 -0
  112. package/dist/components/matrix-chart/element/ui9000-matrix-chart.js.map +1 -0
  113. package/dist/components/matrix-chart/index.d.ts +5 -0
  114. package/dist/components/matrix-chart/index.d.ts.map +1 -0
  115. package/dist/components/matrix-chart/index.js +20 -0
  116. package/dist/components/matrix-chart/lib/domain.d.ts +7 -0
  117. package/dist/components/matrix-chart/lib/domain.d.ts.map +1 -0
  118. package/dist/components/matrix-chart/lib/domain.js +58 -0
  119. package/dist/components/matrix-chart/lib/domain.js.map +1 -0
  120. package/dist/components/matrix-chart/lib/format.d.ts +5 -0
  121. package/dist/components/matrix-chart/lib/format.d.ts.map +1 -0
  122. package/dist/components/matrix-chart/lib/format.js +16 -0
  123. package/dist/components/matrix-chart/lib/format.js.map +1 -0
  124. package/dist/components/matrix-chart/lib/index.d.ts +5 -0
  125. package/dist/components/matrix-chart/lib/index.d.ts.map +1 -0
  126. package/dist/components/matrix-chart/lib/normalize.d.ts +5 -0
  127. package/dist/components/matrix-chart/lib/normalize.d.ts.map +1 -0
  128. package/dist/components/matrix-chart/lib/normalize.js +165 -0
  129. package/dist/components/matrix-chart/lib/normalize.js.map +1 -0
  130. package/dist/components/matrix-chart/lib/types.d.ts +33 -0
  131. package/dist/components/matrix-chart/lib/types.d.ts.map +1 -0
  132. package/dist/components/matrix-chart/metadata.json.d.ts +110 -0
  133. package/dist/components/matrix-chart/metadata.json.js +42 -0
  134. package/dist/components/matrix-chart/metadata.json.js.map +1 -0
  135. package/dist/components/matrix-chart/render/draw.d.ts +63 -0
  136. package/dist/components/matrix-chart/render/draw.d.ts.map +1 -0
  137. package/dist/components/matrix-chart/render/draw.js +225 -0
  138. package/dist/components/matrix-chart/render/draw.js.map +1 -0
  139. package/dist/components/matrix-chart/render/index.d.ts +2 -0
  140. package/dist/components/matrix-chart/render/index.d.ts.map +1 -0
  141. package/dist/components/network-graph/element/styles.d.ts.map +1 -1
  142. package/dist/components/network-graph/element/styles.js +177 -57
  143. package/dist/components/network-graph/element/styles.js.map +1 -1
  144. package/dist/components/network-graph/element/ui9000-network-graph.d.ts +4 -0
  145. package/dist/components/network-graph/element/ui9000-network-graph.d.ts.map +1 -1
  146. package/dist/components/network-graph/element/ui9000-network-graph.js +116 -39
  147. package/dist/components/network-graph/element/ui9000-network-graph.js.map +1 -1
  148. package/dist/components/network-graph/lib/domain.d.ts +2 -2
  149. package/dist/components/network-graph/lib/domain.js.map +1 -1
  150. package/dist/components/network-graph/lib/index.d.ts +1 -0
  151. package/dist/components/network-graph/lib/index.d.ts.map +1 -1
  152. package/dist/components/network-graph/lib/legend.d.ts +15 -0
  153. package/dist/components/network-graph/lib/legend.d.ts.map +1 -0
  154. package/dist/components/network-graph/lib/legend.js +35 -0
  155. package/dist/components/network-graph/lib/legend.js.map +1 -0
  156. package/dist/components/network-graph/render/draw.d.ts +4 -1
  157. package/dist/components/network-graph/render/draw.d.ts.map +1 -1
  158. package/dist/components/network-graph/render/draw.js +34 -9
  159. package/dist/components/network-graph/render/draw.js.map +1 -1
  160. package/dist/components/pie-chart/element/styles.d.ts.map +1 -1
  161. package/dist/components/pie-chart/element/styles.js +34 -1
  162. package/dist/components/pie-chart/element/styles.js.map +1 -1
  163. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts +0 -2
  164. package/dist/components/pie-chart/element/ui9000-pie-chart.d.ts.map +1 -1
  165. package/dist/components/pie-chart/element/ui9000-pie-chart.js +2 -8
  166. package/dist/components/pie-chart/element/ui9000-pie-chart.js.map +1 -1
  167. package/dist/components/pie-chart/metadata.json.d.ts +1 -7
  168. package/dist/components/pie-chart/metadata.json.js +2 -2
  169. package/dist/components/polar-area-chart/element/styles.d.ts +1 -1
  170. package/dist/components/polar-area-chart/element/styles.d.ts.map +1 -1
  171. package/dist/components/{donut-group-chart → polar-area-chart}/element/styles.js +9 -27
  172. package/dist/components/polar-area-chart/element/styles.js.map +1 -0
  173. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.d.ts.map +1 -1
  174. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js +4 -3
  175. package/dist/components/polar-area-chart/element/ui9000-polar-area-chart.js.map +1 -1
  176. package/dist/components/polar-area-chart/index.d.ts +1 -1
  177. package/dist/components/polar-area-chart/index.d.ts.map +1 -1
  178. package/dist/components/polar-area-chart/index.js +2 -1
  179. package/dist/components/polar-area-chart/lib/domain.d.ts +8 -0
  180. package/dist/components/polar-area-chart/lib/domain.d.ts.map +1 -1
  181. package/dist/components/polar-area-chart/lib/domain.js +20 -0
  182. package/dist/components/polar-area-chart/lib/domain.js.map +1 -1
  183. package/dist/components/polar-area-chart/lib/index.d.ts +1 -1
  184. package/dist/components/polar-area-chart/lib/index.d.ts.map +1 -1
  185. package/dist/components/polar-area-chart/lib/normalize.d.ts.map +1 -1
  186. package/dist/components/polar-area-chart/lib/normalize.js +72 -6
  187. package/dist/components/polar-area-chart/lib/normalize.js.map +1 -1
  188. package/dist/components/polar-area-chart/lib/types.d.ts +6 -1
  189. package/dist/components/polar-area-chart/lib/types.d.ts.map +1 -1
  190. package/dist/components/polar-area-chart/metadata.json.d.ts +1 -1
  191. package/dist/components/polar-area-chart/metadata.json.js +1 -1
  192. package/dist/components/polar-area-chart/render/draw.d.ts.map +1 -1
  193. package/dist/components/polar-area-chart/render/draw.js +2 -2
  194. package/dist/components/polar-area-chart/render/draw.js.map +1 -1
  195. package/dist/components/punchcard-chart/metadata.json.d.ts +1 -1
  196. package/dist/components/punchcard-chart/metadata.json.js +1 -1
  197. package/dist/components/sankey-chart/element/styles.d.ts.map +1 -1
  198. package/dist/components/sankey-chart/element/styles.js +7 -27
  199. package/dist/components/sankey-chart/element/styles.js.map +1 -1
  200. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts +5 -5
  201. package/dist/components/sankey-chart/element/ui9000-sankey-chart.d.ts.map +1 -1
  202. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js +37 -35
  203. package/dist/components/sankey-chart/element/ui9000-sankey-chart.js.map +1 -1
  204. package/dist/components/treemap-chart/element/styles.d.ts +2 -0
  205. package/dist/components/treemap-chart/element/styles.d.ts.map +1 -0
  206. package/dist/components/treemap-chart/element/styles.js +141 -0
  207. package/dist/components/treemap-chart/element/styles.js.map +1 -0
  208. package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts +35 -0
  209. package/dist/components/treemap-chart/element/ui9000-treemap-chart.d.ts.map +1 -0
  210. package/dist/components/treemap-chart/element/ui9000-treemap-chart.js +177 -0
  211. package/dist/components/treemap-chart/element/ui9000-treemap-chart.js.map +1 -0
  212. package/dist/components/treemap-chart/index.d.ts +5 -0
  213. package/dist/components/treemap-chart/index.d.ts.map +1 -0
  214. package/dist/components/treemap-chart/index.js +22 -0
  215. package/dist/components/treemap-chart/index.js.map +1 -0
  216. package/dist/components/treemap-chart/lib/color.d.ts +25 -0
  217. package/dist/components/treemap-chart/lib/color.d.ts.map +1 -0
  218. package/dist/components/treemap-chart/lib/color.js +67 -0
  219. package/dist/components/treemap-chart/lib/color.js.map +1 -0
  220. package/dist/components/treemap-chart/lib/format.d.ts +7 -0
  221. package/dist/components/treemap-chart/lib/format.d.ts.map +1 -0
  222. package/dist/components/treemap-chart/lib/format.js +9 -0
  223. package/dist/components/treemap-chart/lib/format.js.map +1 -0
  224. package/dist/components/treemap-chart/lib/index.d.ts +6 -0
  225. package/dist/components/treemap-chart/lib/index.d.ts.map +1 -0
  226. package/dist/components/treemap-chart/lib/layout.d.ts +18 -0
  227. package/dist/components/treemap-chart/lib/layout.d.ts.map +1 -0
  228. package/dist/components/treemap-chart/lib/layout.js +31 -0
  229. package/dist/components/treemap-chart/lib/layout.js.map +1 -0
  230. package/dist/components/treemap-chart/lib/normalize.d.ts +4 -0
  231. package/dist/components/treemap-chart/lib/normalize.d.ts.map +1 -0
  232. package/dist/components/treemap-chart/lib/normalize.js +182 -0
  233. package/dist/components/treemap-chart/lib/normalize.js.map +1 -0
  234. package/dist/components/treemap-chart/lib/types.d.ts +63 -0
  235. package/dist/components/treemap-chart/lib/types.d.ts.map +1 -0
  236. package/dist/components/treemap-chart/metadata.json.d.ts +126 -0
  237. package/dist/components/treemap-chart/metadata.json.js +45 -0
  238. package/dist/components/treemap-chart/render/draw.d.ts +24 -0
  239. package/dist/components/treemap-chart/render/draw.d.ts.map +1 -0
  240. package/dist/components/treemap-chart/render/draw.js +124 -0
  241. package/dist/components/treemap-chart/render/draw.js.map +1 -0
  242. package/dist/components/treemap-chart/render/index.d.ts +2 -0
  243. package/dist/components/treemap-chart/render/index.d.ts.map +1 -0
  244. package/dist/element/chart-legend-render.d.ts +5 -0
  245. package/dist/element/chart-legend-render.d.ts.map +1 -1
  246. package/dist/element/chart-legend-render.js +19 -1
  247. package/dist/element/chart-legend-render.js.map +1 -1
  248. package/dist/element/chart-shell-styles.d.ts.map +1 -1
  249. package/dist/element/chart-shell-styles.js +35 -0
  250. package/dist/element/chart-shell-styles.js.map +1 -1
  251. package/dist/index.d.ts +8 -4
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +73 -39
  254. package/dist/index.js.map +1 -1
  255. package/dist/lazy/index.d.ts +4 -2
  256. package/dist/lazy/index.d.ts.map +1 -1
  257. package/dist/lazy/index.js +24 -8
  258. package/dist/lazy/index.js.map +1 -1
  259. package/dist/lazy/map-chart.d.ts +4 -0
  260. package/dist/lazy/map-chart.d.ts.map +1 -0
  261. package/dist/lazy/map-chart.js +5 -0
  262. package/dist/lazy/map-chart.js.map +1 -0
  263. package/dist/lazy/matrix-chart.d.ts +4 -0
  264. package/dist/lazy/matrix-chart.d.ts.map +1 -0
  265. package/dist/lazy/matrix-chart.js +5 -0
  266. package/dist/lazy/matrix-chart.js.map +1 -0
  267. package/dist/lazy/treemap-chart.d.ts +4 -0
  268. package/dist/lazy/treemap-chart.d.ts.map +1 -0
  269. package/dist/lazy/treemap-chart.js +5 -0
  270. package/dist/lazy/treemap-chart.js.map +1 -0
  271. package/dist/node_modules/lit-html/directive.js +28 -0
  272. package/dist/node_modules/lit-html/directive.js.map +1 -0
  273. package/dist/node_modules/lit-html/directives/style-map.js +37 -0
  274. package/dist/node_modules/lit-html/directives/style-map.js.map +1 -0
  275. package/dist/node_modules/lit-html/lit-html.js +231 -0
  276. package/dist/node_modules/lit-html/lit-html.js.map +1 -0
  277. package/dist/utils/axis-units.d.ts +15 -0
  278. package/dist/utils/axis-units.d.ts.map +1 -0
  279. package/dist/utils/axis-units.js +27 -0
  280. package/dist/utils/axis-units.js.map +1 -0
  281. package/dist/utils/chart-helpers.d.ts +4 -6
  282. package/dist/utils/chart-helpers.d.ts.map +1 -1
  283. package/dist/utils/chart-helpers.js +16 -15
  284. package/dist/utils/chart-helpers.js.map +1 -1
  285. package/dist/utils/format-text.d.ts +5 -0
  286. package/dist/utils/format-text.d.ts.map +1 -1
  287. package/dist/utils/format-text.js +7 -0
  288. package/dist/utils/format-text.js.map +1 -1
  289. package/dist/utils/fuse-palette.d.ts +12 -0
  290. package/dist/utils/fuse-palette.d.ts.map +1 -1
  291. package/dist/utils/fuse-palette.js +23 -1
  292. package/dist/utils/fuse-palette.js.map +1 -1
  293. package/dist/utils/fuse-widget.d.ts +13 -4
  294. package/dist/utils/fuse-widget.d.ts.map +1 -1
  295. package/dist/utils/fuse-widget.js.map +1 -1
  296. package/dist/utils/fusedash-visual.d.ts +65 -52
  297. package/dist/utils/fusedash-visual.d.ts.map +1 -1
  298. package/dist/utils/fusedash-visual.js +48 -29
  299. package/dist/utils/fusedash-visual.js.map +1 -1
  300. package/package.json +38 -11
  301. package/dist/components/donut-group-chart/element/styles.d.ts +0 -2
  302. package/dist/components/donut-group-chart/element/styles.d.ts.map +0 -1
  303. package/dist/components/donut-group-chart/element/styles.js.map +0 -1
  304. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts +0 -34
  305. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.d.ts.map +0 -1
  306. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.js +0 -169
  307. package/dist/components/donut-group-chart/element/ui9000-donut-group-chart.js.map +0 -1
  308. package/dist/components/donut-group-chart/index.d.ts +0 -5
  309. package/dist/components/donut-group-chart/index.d.ts.map +0 -1
  310. package/dist/components/donut-group-chart/index.js +0 -23
  311. package/dist/components/donut-group-chart/lib/domain.d.ts +0 -39
  312. package/dist/components/donut-group-chart/lib/domain.d.ts.map +0 -1
  313. package/dist/components/donut-group-chart/lib/domain.js +0 -51
  314. package/dist/components/donut-group-chart/lib/domain.js.map +0 -1
  315. package/dist/components/donut-group-chart/lib/format.d.ts +0 -7
  316. package/dist/components/donut-group-chart/lib/format.d.ts.map +0 -1
  317. package/dist/components/donut-group-chart/lib/format.js +0 -21
  318. package/dist/components/donut-group-chart/lib/format.js.map +0 -1
  319. package/dist/components/donut-group-chart/lib/index.d.ts +0 -5
  320. package/dist/components/donut-group-chart/lib/index.d.ts.map +0 -1
  321. package/dist/components/donut-group-chart/lib/normalize.d.ts +0 -14
  322. package/dist/components/donut-group-chart/lib/normalize.d.ts.map +0 -1
  323. package/dist/components/donut-group-chart/lib/normalize.js +0 -98
  324. package/dist/components/donut-group-chart/lib/normalize.js.map +0 -1
  325. package/dist/components/donut-group-chart/lib/types.d.ts +0 -49
  326. package/dist/components/donut-group-chart/lib/types.d.ts.map +0 -1
  327. package/dist/components/donut-group-chart/metadata.json.d.ts +0 -113
  328. package/dist/components/donut-group-chart/metadata.json.js +0 -45
  329. package/dist/components/donut-group-chart/render/draw.d.ts +0 -44
  330. package/dist/components/donut-group-chart/render/draw.d.ts.map +0 -1
  331. package/dist/components/donut-group-chart/render/draw.js +0 -194
  332. package/dist/components/donut-group-chart/render/draw.js.map +0 -1
  333. package/dist/components/donut-group-chart/render/index.d.ts +0 -2
  334. package/dist/components/donut-group-chart/render/index.d.ts.map +0 -1
  335. package/dist/components/donut-group-chart/tests/fixtures.d.ts +0 -33
  336. package/dist/components/donut-group-chart/tests/fixtures.d.ts.map +0 -1
  337. package/dist/lazy/donut-group-chart.d.ts +0 -4
  338. package/dist/lazy/donut-group-chart.d.ts.map +0 -1
  339. package/dist/lazy/donut-group-chart.js +0 -5
  340. package/dist/lazy/donut-group-chart.js.map +0 -1
  341. /package/dist/components/{donut-group-chart → matrix-chart}/index.js.map +0 -0
  342. /package/dist/components/{donut-group-chart → treemap-chart}/metadata.json.js.map +0 -0
@@ -30,30 +30,130 @@ const networkGraphStyles = css`
30
30
  font-size: 0.875rem;
31
31
  }
32
32
 
33
- /* Legend — value buckets as half bubbles, with a two-thumb size filter. */
33
+ /* Overlay — same layout as map-chart bubble legend. */
34
34
  .graph-legend {
35
- flex-shrink: 0;
36
- /* The largest bubble overhangs the bar by half its diameter (3xl → ~19px). */
37
- margin: 26px 0 8px;
35
+ position: absolute;
36
+ right: 5px;
37
+ bottom: 5px;
38
+ z-index: 10;
39
+ width: max-content;
40
+ min-width: 360px;
41
+ max-width: calc(100% - 20px);
42
+ max-height: 50%;
43
+ display: flex;
44
+ flex-direction: column;
45
+ padding: 8px 0;
46
+ overflow: hidden;
47
+ box-sizing: border-box;
48
+ background: var(--ui9000-color-surface, #ffffff);
49
+ border: 1px solid var(--ui9000-color-border, #e5e7eb);
50
+ border-radius: 8px;
51
+ box-shadow:
52
+ 0 2px 4px 0 #141c2c0f,
53
+ 0 4px 8px 2px #141c2c0f;
38
54
  user-select: none;
55
+ pointer-events: auto;
56
+ }
57
+ .legend-panel-header {
58
+ display: flex;
59
+ width: 100%;
60
+ align-items: center;
61
+ justify-content: space-between;
62
+ gap: 8px;
63
+ padding: 6px 12px;
64
+ box-sizing: border-box;
65
+ border-bottom: 1px solid var(--ui9000-color-border, #e5e7eb);
66
+ }
67
+ .graph-legend:not(:has(.legend-layers)) .legend-panel-header {
68
+ border-bottom: none;
69
+ }
70
+ .legend-kicker {
71
+ margin: 0;
72
+ flex: 1;
73
+ min-width: 0;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
76
+ white-space: nowrap;
77
+ font-size: 11px;
78
+ font-weight: 400;
79
+ line-height: 12px;
80
+ letter-spacing: 0.88px;
81
+ text-transform: uppercase;
82
+ color: var(--ui9000-color-text, #111827);
83
+ }
84
+ .legend-chevron {
85
+ flex-shrink: 0;
86
+ width: 16px;
87
+ height: 16px;
88
+ padding: 0;
89
+ border: 0;
90
+ background: transparent
91
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%238f95a0' stroke-width='1.25'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E")
92
+ center / 16px no-repeat;
93
+ cursor: pointer;
94
+ transition: transform 0.5s;
95
+ }
96
+ .legend-chevron[aria-expanded='false'] {
97
+ transform: rotate(180deg);
98
+ }
99
+ .legend-layers {
100
+ overflow-y: auto;
101
+ overflow-x: visible;
102
+ width: 100%;
103
+ }
104
+ .legend-layer {
105
+ padding: 8px 12px;
106
+ border-bottom: 1px solid var(--ui9000-color-border, #e5e7eb);
107
+ width: 100%;
108
+ box-sizing: border-box;
109
+ }
110
+ .legend-layer:last-child {
111
+ border-bottom: none;
112
+ }
113
+ .legend-details {
114
+ margin-top: 8px;
39
115
  }
40
116
  .legend-scale {
117
+ display: flex;
118
+ flex-direction: column;
119
+ align-items: stretch;
120
+ width: 100%;
121
+ padding-top: 8px;
122
+ }
123
+ .legend-scale[data-kind='bubbles'] {
124
+ padding-top: 30px;
125
+ }
126
+ .legend-colors {
127
+ display: flex;
128
+ position: relative;
129
+ width: 100%;
130
+ }
131
+ .legend-colors[data-qualitative]::after {
132
+ content: '';
133
+ position: absolute;
134
+ left: 8px;
135
+ right: 8px;
136
+ top: calc(50% + 1px);
137
+ height: 1px;
138
+ transform: translateY(-50%);
139
+ border-top: 1px dashed #8f95a0;
140
+ z-index: 10;
141
+ pointer-events: none;
142
+ }
143
+ .legend-buckets {
41
144
  position: relative;
42
- display: inline-flex;
145
+ display: flex;
146
+ width: 100%;
43
147
  }
44
148
  .legend-bucket {
45
149
  position: relative;
46
- width: 40px;
150
+ flex: 1;
151
+ min-width: 0;
47
152
  height: 12px;
48
- /* FuseDash tints the track with its label grey; the literal is the fallback
49
- for engines without color-mix. */
50
- background: #6c758429;
51
- background: color-mix(in srgb, var(--ui9000-color-text-muted, #6c7584) 16%, transparent);
52
- border-right: 1px solid var(--ui9000-color-border, #e5e7eb);
53
- opacity: 1;
153
+ background-color: var(--bucket-fill, #6c758429);
54
154
  }
55
- .legend-bucket[data-muted] {
56
- opacity: 0.3;
155
+ .legend-bucket[data-qualitative] {
156
+ border-right: 1px solid var(--ui9000-color-border, #e5e7eb);
57
157
  }
58
158
  .legend-bucket:first-child {
59
159
  border-top-left-radius: 8px;
@@ -64,32 +164,51 @@ const networkGraphStyles = css`
64
164
  border-top-right-radius: 8px;
65
165
  border-bottom-right-radius: 8px;
66
166
  }
67
- /* Top half of a circle sitting on the bar, sized like the node it stands for. */
68
- .legend-bucket::before {
167
+ .legend-bucket[data-muted] {
168
+ opacity: 0.3;
169
+ }
170
+ .legend-bucket[data-bubble]::before,
171
+ .legend-bucket[data-bubble]::after {
69
172
  content: '';
70
173
  position: absolute;
71
174
  top: -2px;
72
175
  left: 50%;
73
- width: var(--bubble-size);
74
- height: var(--bubble-size);
75
176
  transform: translate(-50%, -50%);
76
177
  border-radius: 100%;
77
- background: #6c758429;
78
- background: color-mix(in srgb, var(--ui9000-color-text-muted, #6c7584) 16%, transparent);
79
178
  -webkit-mask-image: linear-gradient(to bottom, #000 0 50%, transparent 50% 100%);
80
179
  mask-image: linear-gradient(to bottom, #000 0 50%, transparent 50% 100%);
180
+ z-index: 1;
181
+ }
182
+ .legend-bucket[data-bubble]::before {
183
+ width: var(--bubble-size, 12px);
184
+ height: var(--bubble-size, 12px);
185
+ background-color: #6c758429;
186
+ }
187
+ .legend-bucket[data-bubble]::after {
188
+ display: none;
189
+ width: var(--inner-size, 0px);
190
+ height: var(--inner-size, 0px);
191
+ border: 1px solid var(--ui9000-color-border, #8f95a0);
192
+ background: transparent;
193
+ }
194
+ .legend-bucket[data-bubble][data-inner]::after {
195
+ display: block;
81
196
  }
82
197
  .legend-values {
83
198
  display: flex;
199
+ width: 100%;
84
200
  padding-top: 6px;
85
201
  }
86
202
  .legend-value {
87
- width: 40px;
203
+ flex: 1;
204
+ min-width: 0;
88
205
  padding-right: 5px;
89
- font-size: 9px;
206
+ font-size: 8px;
207
+ font-weight: 400;
90
208
  line-height: 16px;
91
209
  text-align: center;
92
210
  color: var(--ui9000-color-text-muted, #6c7584);
211
+ user-select: none;
93
212
  }
94
213
  .legend-value:first-child {
95
214
  text-align: start;
@@ -97,53 +216,54 @@ const networkGraphStyles = css`
97
216
  .legend-value:last-child {
98
217
  text-align: end;
99
218
  }
100
-
101
219
  .legend-range {
102
220
  position: absolute;
103
- inset: 0;
221
+ left: 0;
222
+ right: 0;
223
+ bottom: 0;
224
+ height: 12px;
225
+ z-index: 100;
104
226
  pointer-events: none;
105
227
  }
106
- .legend-range input {
228
+ .legend-range-track {
107
229
  position: absolute;
108
- left: 0;
109
- bottom: -4px;
230
+ top: 0;
110
231
  width: 100%;
111
232
  height: 12px;
112
- margin: 0;
113
- padding: 0;
114
- background: none;
115
- appearance: none;
116
- -webkit-appearance: none;
233
+ cursor: pointer;
234
+ touch-action: none;
117
235
  pointer-events: none;
118
236
  }
119
- .legend-range input:focus-visible {
120
- outline: 2px solid var(--ui9000-color-primary, #473dd9);
121
- outline-offset: 2px;
122
- }
123
- .legend-range input::-webkit-slider-thumb {
124
- appearance: none;
125
- -webkit-appearance: none;
126
- width: 8px;
127
- height: 16px;
128
- border: 1px solid var(--ui9000-color-border, #e5e7eb);
129
- border-radius: 3px;
130
- background: var(--ui9000-color-surface, #fff);
131
- box-shadow: 0 1px 3px rgb(0 0 0 / 20%);
132
- cursor: ew-resize;
237
+ .legend-thumb {
238
+ position: absolute;
239
+ top: 1px;
240
+ z-index: 2;
241
+ box-sizing: border-box;
242
+ width: 10px;
243
+ height: 10px;
244
+ padding: 0;
245
+ border: 0;
246
+ border-radius: 50%;
247
+ background: var(--ui9000-color-text, #141c2c);
248
+ box-shadow: 0 0 0 1px inset var(--ui9000-color-surface, #ffffff);
249
+ transform: translateX(-50%);
250
+ cursor: pointer;
133
251
  pointer-events: auto;
252
+ touch-action: none;
134
253
  }
135
- .legend-range input::-moz-range-thumb {
136
- width: 8px;
137
- height: 16px;
138
- border: 1px solid var(--ui9000-color-border, #e5e7eb);
139
- border-radius: 3px;
140
- background: var(--ui9000-color-surface, #fff);
141
- box-shadow: 0 1px 3px rgb(0 0 0 / 20%);
142
- cursor: ew-resize;
143
- pointer-events: auto;
254
+ .legend-thumb::before {
255
+ content: '';
256
+ position: absolute;
257
+ inset: -4px;
258
+ }
259
+ .legend-thumb:hover,
260
+ .legend-thumb:active {
261
+ border: 2px solid var(--ui9000-color-border, #8f95a0);
262
+ background: var(--ui9000-color-surface, #ffffff);
144
263
  }
145
- .legend-range input::-moz-range-track {
146
- background: none;
264
+ .legend-thumb:focus-visible {
265
+ outline: 2px solid var(--ui9000-color-primary, #473dd9);
266
+ outline-offset: 2px;
147
267
  }
148
268
  `;
149
269
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../src/components/network-graph/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const networkGraphStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 320px;\n color: var(--ui9000-color-text, #111827);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n box-sizing: border-box;\n }\n .chart-root {\n flex: 1;\n min-height: 0;\n width: 100%;\n border-radius: 12px;\n background: var(--ui9000-color-surface-muted, #f9faff);\n overflow: hidden;\n touch-action: pan-y;\n }\n .empty {\n display: grid;\n place-items: center;\n flex: 1;\n min-height: inherit;\n padding: 8px;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n }\n\n /* Legend — value buckets as half bubbles, with a two-thumb size filter. */\n .graph-legend {\n flex-shrink: 0;\n /* The largest bubble overhangs the bar by half its diameter (3xl → ~19px). */\n margin: 26px 0 8px;\n user-select: none;\n }\n .legend-scale {\n position: relative;\n display: inline-flex;\n }\n .legend-bucket {\n position: relative;\n width: 40px;\n height: 12px;\n /* FuseDash tints the track with its label grey; the literal is the fallback\n for engines without color-mix. */\n background: #6c758429;\n background: color-mix(in srgb, var(--ui9000-color-text-muted, #6c7584) 16%, transparent);\n border-right: 1px solid var(--ui9000-color-border, #e5e7eb);\n opacity: 1;\n }\n .legend-bucket[data-muted] {\n opacity: 0.3;\n }\n .legend-bucket:first-child {\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n }\n .legend-bucket:last-child {\n border-right: none;\n border-top-right-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n /* Top half of a circle sitting on the bar, sized like the node it stands for. */\n .legend-bucket::before {\n content: '';\n position: absolute;\n top: -2px;\n left: 50%;\n width: var(--bubble-size);\n height: var(--bubble-size);\n transform: translate(-50%, -50%);\n border-radius: 100%;\n background: #6c758429;\n background: color-mix(in srgb, var(--ui9000-color-text-muted, #6c7584) 16%, transparent);\n -webkit-mask-image: linear-gradient(to bottom, #000 0 50%, transparent 50% 100%);\n mask-image: linear-gradient(to bottom, #000 0 50%, transparent 50% 100%);\n }\n .legend-values {\n display: flex;\n padding-top: 6px;\n }\n .legend-value {\n width: 40px;\n padding-right: 5px;\n font-size: 9px;\n line-height: 16px;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6c7584);\n }\n .legend-value:first-child {\n text-align: start;\n }\n .legend-value:last-child {\n text-align: end;\n }\n\n .legend-range {\n position: absolute;\n inset: 0;\n pointer-events: none;\n }\n .legend-range input {\n position: absolute;\n left: 0;\n bottom: -4px;\n width: 100%;\n height: 12px;\n margin: 0;\n padding: 0;\n background: none;\n appearance: none;\n -webkit-appearance: none;\n pointer-events: none;\n }\n .legend-range input:focus-visible {\n outline: 2px solid var(--ui9000-color-primary, #473dd9);\n outline-offset: 2px;\n }\n .legend-range input::-webkit-slider-thumb {\n appearance: none;\n -webkit-appearance: none;\n width: 8px;\n height: 16px;\n border: 1px solid var(--ui9000-color-border, #e5e7eb);\n border-radius: 3px;\n background: var(--ui9000-color-surface, #fff);\n box-shadow: 0 1px 3px rgb(0 0 0 / 20%);\n cursor: ew-resize;\n pointer-events: auto;\n }\n .legend-range input::-moz-range-thumb {\n width: 8px;\n height: 16px;\n border: 1px solid var(--ui9000-color-border, #e5e7eb);\n border-radius: 3px;\n background: var(--ui9000-color-surface, #fff);\n box-shadow: 0 1px 3px rgb(0 0 0 / 20%);\n cursor: ew-resize;\n pointer-events: auto;\n }\n .legend-range input::-moz-range-track {\n background: none;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
1
+ {"version":3,"file":"styles.js","sources":["../../../../src/components/network-graph/element/styles.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const networkGraphStyles = css`\n :host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 320px;\n color: var(--ui9000-color-text, #111827);\n font-family: var(--ui9000-font-family, system-ui, sans-serif);\n box-sizing: border-box;\n }\n .chart-root {\n flex: 1;\n min-height: 0;\n width: 100%;\n border-radius: 12px;\n background: var(--ui9000-color-surface-muted, #f9faff);\n overflow: hidden;\n touch-action: pan-y;\n }\n .empty {\n display: grid;\n place-items: center;\n flex: 1;\n min-height: inherit;\n padding: 8px;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6b7280);\n font-size: 0.875rem;\n }\n\n /* Overlay — same layout as map-chart bubble legend. */\n .graph-legend {\n position: absolute;\n right: 5px;\n bottom: 5px;\n z-index: 10;\n width: max-content;\n min-width: 360px;\n max-width: calc(100% - 20px);\n max-height: 50%;\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n overflow: hidden;\n box-sizing: border-box;\n background: var(--ui9000-color-surface, #ffffff);\n border: 1px solid var(--ui9000-color-border, #e5e7eb);\n border-radius: 8px;\n box-shadow:\n 0 2px 4px 0 #141c2c0f,\n 0 4px 8px 2px #141c2c0f;\n user-select: none;\n pointer-events: auto;\n }\n .legend-panel-header {\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 6px 12px;\n box-sizing: border-box;\n border-bottom: 1px solid var(--ui9000-color-border, #e5e7eb);\n }\n .graph-legend:not(:has(.legend-layers)) .legend-panel-header {\n border-bottom: none;\n }\n .legend-kicker {\n margin: 0;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 11px;\n font-weight: 400;\n line-height: 12px;\n letter-spacing: 0.88px;\n text-transform: uppercase;\n color: var(--ui9000-color-text, #111827);\n }\n .legend-chevron {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n padding: 0;\n border: 0;\n background: transparent\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%238f95a0' stroke-width='1.25'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E\")\n center / 16px no-repeat;\n cursor: pointer;\n transition: transform 0.5s;\n }\n .legend-chevron[aria-expanded='false'] {\n transform: rotate(180deg);\n }\n .legend-layers {\n overflow-y: auto;\n overflow-x: visible;\n width: 100%;\n }\n .legend-layer {\n padding: 8px 12px;\n border-bottom: 1px solid var(--ui9000-color-border, #e5e7eb);\n width: 100%;\n box-sizing: border-box;\n }\n .legend-layer:last-child {\n border-bottom: none;\n }\n .legend-details {\n margin-top: 8px;\n }\n .legend-scale {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n width: 100%;\n padding-top: 8px;\n }\n .legend-scale[data-kind='bubbles'] {\n padding-top: 30px;\n }\n .legend-colors {\n display: flex;\n position: relative;\n width: 100%;\n }\n .legend-colors[data-qualitative]::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n top: calc(50% + 1px);\n height: 1px;\n transform: translateY(-50%);\n border-top: 1px dashed #8f95a0;\n z-index: 10;\n pointer-events: none;\n }\n .legend-buckets {\n position: relative;\n display: flex;\n width: 100%;\n }\n .legend-bucket {\n position: relative;\n flex: 1;\n min-width: 0;\n height: 12px;\n background-color: var(--bucket-fill, #6c758429);\n }\n .legend-bucket[data-qualitative] {\n border-right: 1px solid var(--ui9000-color-border, #e5e7eb);\n }\n .legend-bucket:first-child {\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n }\n .legend-bucket:last-child {\n border-right: none;\n border-top-right-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n .legend-bucket[data-muted] {\n opacity: 0.3;\n }\n .legend-bucket[data-bubble]::before,\n .legend-bucket[data-bubble]::after {\n content: '';\n position: absolute;\n top: -2px;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 100%;\n -webkit-mask-image: linear-gradient(to bottom, #000 0 50%, transparent 50% 100%);\n mask-image: linear-gradient(to bottom, #000 0 50%, transparent 50% 100%);\n z-index: 1;\n }\n .legend-bucket[data-bubble]::before {\n width: var(--bubble-size, 12px);\n height: var(--bubble-size, 12px);\n background-color: #6c758429;\n }\n .legend-bucket[data-bubble]::after {\n display: none;\n width: var(--inner-size, 0px);\n height: var(--inner-size, 0px);\n border: 1px solid var(--ui9000-color-border, #8f95a0);\n background: transparent;\n }\n .legend-bucket[data-bubble][data-inner]::after {\n display: block;\n }\n .legend-values {\n display: flex;\n width: 100%;\n padding-top: 6px;\n }\n .legend-value {\n flex: 1;\n min-width: 0;\n padding-right: 5px;\n font-size: 8px;\n font-weight: 400;\n line-height: 16px;\n text-align: center;\n color: var(--ui9000-color-text-muted, #6c7584);\n user-select: none;\n }\n .legend-value:first-child {\n text-align: start;\n }\n .legend-value:last-child {\n text-align: end;\n }\n .legend-range {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 12px;\n z-index: 100;\n pointer-events: none;\n }\n .legend-range-track {\n position: absolute;\n top: 0;\n width: 100%;\n height: 12px;\n cursor: pointer;\n touch-action: none;\n pointer-events: none;\n }\n .legend-thumb {\n position: absolute;\n top: 1px;\n z-index: 2;\n box-sizing: border-box;\n width: 10px;\n height: 10px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: var(--ui9000-color-text, #141c2c);\n box-shadow: 0 0 0 1px inset var(--ui9000-color-surface, #ffffff);\n transform: translateX(-50%);\n cursor: pointer;\n pointer-events: auto;\n touch-action: none;\n }\n .legend-thumb::before {\n content: '';\n position: absolute;\n inset: -4px;\n }\n .legend-thumb:hover,\n .legend-thumb:active {\n border: 2px solid var(--ui9000-color-border, #8f95a0);\n background: var(--ui9000-color-surface, #ffffff);\n }\n .legend-thumb:focus-visible {\n outline: 2px solid var(--ui9000-color-primary, #473dd9);\n outline-offset: 2px;\n }\n`;\n"],"names":[],"mappings":";AAEO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -7,9 +7,11 @@ export declare class Ui9000NetworkGraph extends Ui9000ChartElement {
7
7
  private _empty;
8
8
  private _ranges;
9
9
  private _range;
10
+ private _legendOpen;
10
11
  /** Non-reactive: selection is owned by the draw layer, redrawing would reset it. */
11
12
  private _activeNodeId;
12
13
  private _model;
14
+ private _legendDrag?;
13
15
  private _resizeObserver?;
14
16
  private _raf;
15
17
  private _resizeRaf;
@@ -31,6 +33,8 @@ export declare class Ui9000NetworkGraph extends Ui9000ChartElement {
31
33
  private model;
32
34
  private draw;
33
35
  private setRange;
36
+ private startThumbDrag;
37
+ private stopLegendDrag;
34
38
  private renderLegend;
35
39
  render(): import('lit-html').TemplateResult<1>;
36
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ui9000-network-graph.d.ts","sourceRoot":"","sources":["../../../../src/components/network-graph/element/ui9000-network-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAyB7F,qBACa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAgB,MAAM,4BAA0C;IAGhE,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,OAAO,CAA4B;IAG3C,OAAO,CAAC,MAAM,CAAmC;IAEjD,oFAAoF;IACpF,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAK;IAEd,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAS5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAa/C;;;OAGG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAKpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,IAAI;IA2BZ,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,YAAY;IAwDX,MAAM;CAiBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
1
+ {"version":3,"file":"ui9000-network-graph.d.ts","sourceRoot":"","sources":["../../../../src/components/network-graph/element/ui9000-network-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIzD,OAAO,EAAoB,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AA8B7F,qBACa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAgB,MAAM,4BAA0C;IAGhE,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,OAAO,CAA4B;IAG3C,OAAO,CAAC,MAAM,CAAmC;IAGjD,OAAO,CAAC,WAAW,CAAQ;IAE3B,oFAAoF;IACpF,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,WAAW,CAAC,CAIlB;IACF,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAK;IAEd,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAU5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAa/C;;;OAGG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAKpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,IAAI;IA2BZ,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAyFX,MAAM;CAiBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
@@ -8,6 +8,7 @@ import { stopNetworkGraph, resizeNetworkGraph, renderNetworkGraph, updateNetwork
8
8
  import { networkGraphStyles } from "./styles.js";
9
9
  import { FULL_RANGE, legendRanges, visibleNodeIds } from "../lib/domain.js";
10
10
  import { normalizeNetworkGraphData } from "../lib/normalize.js";
11
+ import { slideThumb, rangeTrackOffset, thumbTrackPercent, sliderIndexFromPointer } from "../lib/legend.js";
11
12
  import { formatLegendValue } from "../lib/format.js";
12
13
  import { chartShellStyles } from "../../../element/chart-shell-styles.js";
13
14
  var __defProp = Object.defineProperty;
@@ -20,7 +21,8 @@ var __decorateClass = (decorators, target, key, kind) => {
20
21
  if (kind && result) __defProp(target, key, result);
21
22
  return result;
22
23
  };
23
- const LEGEND_BUBBLE_RATIO = 1.2;
24
+ const LEGEND_BUBBLE_SIZES = [10, 15, 20, 25, 30, 35, 40];
25
+ const MUTED_LEGEND_FILL = "#6C758429";
24
26
  let Ui9000NetworkGraph = class extends Ui9000ChartElement {
25
27
  constructor() {
26
28
  super(...arguments);
@@ -29,6 +31,7 @@ let Ui9000NetworkGraph = class extends Ui9000ChartElement {
29
31
  this._empty = false;
30
32
  this._ranges = [];
31
33
  this._range = { ...FULL_RANGE };
34
+ this._legendOpen = true;
32
35
  this._activeNodeId = null;
33
36
  this._model = null;
34
37
  this._raf = 0;
@@ -44,6 +47,7 @@ let Ui9000NetworkGraph = class extends Ui9000ChartElement {
44
47
  (_a = this._resizeObserver) == null ? void 0 : _a.disconnect();
45
48
  cancelAnimationFrame(this._raf);
46
49
  cancelAnimationFrame(this._resizeRaf);
50
+ this.stopLegendDrag();
47
51
  const root = this.chartRoot();
48
52
  if (root) stopNetworkGraph(root);
49
53
  super.disconnectedCallback();
@@ -124,14 +128,51 @@ let Ui9000NetworkGraph = class extends Ui9000ChartElement {
124
128
  });
125
129
  }
126
130
  setRange(edge, raw) {
127
- const next = { ...this._range, [edge]: raw };
128
- if (next.leftSlider >= next.rightSlider) return;
131
+ const next = slideThumb(this._range, edge, raw, this._ranges.length);
132
+ if (next.leftSlider === this._range.leftSlider && next.rightSlider === this._range.rightSlider) {
133
+ return;
134
+ }
129
135
  this._range = next;
130
136
  const root = this.chartRoot();
131
137
  if (!root) return;
132
138
  const visible = visibleNodeIds(this.model(), next);
133
139
  if (!updateNetworkGraphVisibility(root, visible)) this.scheduleDraw();
134
140
  }
141
+ startThumbDrag(edge, e) {
142
+ const thumb = e.currentTarget;
143
+ if (!(thumb instanceof HTMLElement)) return;
144
+ const track = thumb.parentElement;
145
+ if (!track) return;
146
+ e.preventDefault();
147
+ e.stopPropagation();
148
+ thumb.setPointerCapture(e.pointerId);
149
+ this.stopLegendDrag();
150
+ const move = (ev) => {
151
+ const index = sliderIndexFromPointer(
152
+ ev.clientX,
153
+ track.getBoundingClientRect(),
154
+ this._ranges.length
155
+ );
156
+ this.setRange(edge, index);
157
+ };
158
+ const up = (ev) => {
159
+ if (thumb.hasPointerCapture(ev.pointerId)) thumb.releasePointerCapture(ev.pointerId);
160
+ this.stopLegendDrag();
161
+ };
162
+ thumb.addEventListener("pointermove", move);
163
+ thumb.addEventListener("pointerup", up);
164
+ thumb.addEventListener("pointercancel", up);
165
+ this._legendDrag = { thumb, move, up };
166
+ move(e);
167
+ }
168
+ stopLegendDrag() {
169
+ const drag = this._legendDrag;
170
+ if (!drag) return;
171
+ drag.thumb.removeEventListener("pointermove", drag.move);
172
+ drag.thumb.removeEventListener("pointerup", drag.up);
173
+ drag.thumb.removeEventListener("pointercancel", drag.up);
174
+ this._legendDrag = void 0;
175
+ }
135
176
  renderLegend() {
136
177
  if (!this.showLegend || this._empty || this._ranges.length < 2) return nothing;
137
178
  const { leftSlider, rightSlider } = this._range;
@@ -139,46 +180,79 @@ let Ui9000NetworkGraph = class extends Ui9000ChartElement {
139
180
  const { onAxisLabelHover, onAxisLabelLeave } = this.axisLabelHandlers();
140
181
  return html`
141
182
  <div class="graph-legend" part="legend">
142
- <div class="legend-scale">
143
- ${this._ranges.map((range, index) => {
183
+ <div class="legend-panel-header">
184
+ <p class="legend-kicker">Legend</p>
185
+ <button
186
+ type="button"
187
+ class="legend-chevron"
188
+ aria-expanded=${this._legendOpen}
189
+ aria-label=${this._legendOpen ? "Collapse legend" : "Expand legend"}
190
+ @click=${() => {
191
+ this._legendOpen = !this._legendOpen;
192
+ }}
193
+ ></button>
194
+ </div>
195
+ ${this._legendOpen ? html`<div class="legend-layers">
196
+ <div class="legend-layer">
197
+ <div class="legend-details">
198
+ <div class="legend-scale" data-kind="bubbles">
199
+ <div class="legend-colors" data-qualitative>
200
+ <div class="legend-range">
201
+ <div
202
+ class="legend-range-track"
203
+ style="left:${rangeTrackOffset("left", leftSlider, last)}"
204
+ >
205
+ <button
206
+ type="button"
207
+ class="legend-thumb"
208
+ aria-label="Smallest node size shown"
209
+ style="left:${thumbTrackPercent(leftSlider, last)}"
210
+ @pointerdown=${(e) => this.startThumbDrag("leftSlider", e)}
211
+ ></button>
212
+ </div>
213
+ <div
214
+ class="legend-range-track"
215
+ style="right:${rangeTrackOffset("right", rightSlider, last)}"
216
+ >
217
+ <button
218
+ type="button"
219
+ class="legend-thumb"
220
+ aria-label="Largest node size shown"
221
+ style="left:${thumbTrackPercent(rightSlider, last)}"
222
+ @pointerdown=${(e) => this.startThumbDrag("rightSlider", e)}
223
+ ></button>
224
+ </div>
225
+ </div>
226
+ <div class="legend-buckets">
227
+ ${this._ranges.map((_range, index) => {
144
228
  const muted = !(leftSlider <= index && index < rightSlider);
229
+ const bubble = LEGEND_BUBBLE_SIZES[index] ?? 12;
230
+ const inner = bubble - 15 > 0 ? bubble - 15 : 0;
145
231
  return html`<span
146
- class="legend-bucket"
147
- ?data-muted=${muted}
148
- style="--bubble-size:${range.radius * LEGEND_BUBBLE_RATIO}px"
149
- ></span>`;
232
+ class="legend-bucket"
233
+ ?data-bubble=${true}
234
+ ?data-inner=${inner > 0}
235
+ ?data-qualitative=${true}
236
+ ?data-muted=${muted}
237
+ style="background:${MUTED_LEGEND_FILL};--bubble-size:${bubble}px;--inner-size:${inner}px"
238
+ ></span>`;
150
239
  })}
151
- <div class="legend-range">
152
- <input
153
- type="range"
154
- aria-label="Smallest node size shown"
155
- min="0"
156
- max=${last}
157
- step="1"
158
- .value=${String(leftSlider)}
159
- @input=${(e) => this.setRange("leftSlider", Number(e.target.value))}
160
- />
161
- <input
162
- type="range"
163
- aria-label="Largest node size shown"
164
- min="0"
165
- max=${last}
166
- step="1"
167
- .value=${String(rightSlider)}
168
- @input=${(e) => this.setRange("rightSlider", Number(e.target.value))}
169
- />
170
- </div>
171
- </div>
172
- <div class="legend-values">
173
- ${this._ranges.map(
240
+ </div>
241
+ </div>
242
+ <div class="legend-values">
243
+ ${this._ranges.map(
174
244
  (range) => html`<span
175
- class="legend-value"
176
- @mouseenter=${this.showTooltip ? (e) => onAxisLabelHover == null ? void 0 : onAxisLabelHover(String(range.start), e) : void 0}
177
- @mouseleave=${this.showTooltip ? onAxisLabelLeave : void 0}
178
- >${formatLegendValue(range.start, 2)}</span
179
- >`
245
+ class="legend-value"
246
+ @mouseenter=${this.showTooltip ? (e) => onAxisLabelHover == null ? void 0 : onAxisLabelHover(String(range.start), e) : void 0}
247
+ @mouseleave=${this.showTooltip ? onAxisLabelLeave : void 0}
248
+ >${formatLegendValue(range.start, 2)}</span
249
+ >`
180
250
  )}
181
- </div>
251
+ </div>
252
+ </div>
253
+ </div>
254
+ </div>
255
+ </div>` : nothing}
182
256
  </div>
183
257
  `;
184
258
  }
@@ -187,8 +261,8 @@ let Ui9000NetworkGraph = class extends Ui9000ChartElement {
187
261
  <div class="widget-shell" part="shell">
188
262
  ${this.renderShellHeader(this.headerTitle())}
189
263
  <div class="widget-body">
190
- ${this.renderLegend()}
191
264
  <div class="chart-root" part="chart" ?hidden=${this._empty}></div>
265
+ ${this.renderLegend()}
192
266
  ${this._empty ? html`<div class="empty" part="empty">
193
267
  Network graph requires a nodes and links payload.
194
268
  </div>` : nothing}
@@ -214,6 +288,9 @@ __decorateClass([
214
288
  __decorateClass([
215
289
  state()
216
290
  ], Ui9000NetworkGraph.prototype, "_range", 2);
291
+ __decorateClass([
292
+ state()
293
+ ], Ui9000NetworkGraph.prototype, "_legendOpen", 2);
217
294
  Ui9000NetworkGraph = __decorateClass([
218
295
  customElement("ui9000-network-graph")
219
296
  ], Ui9000NetworkGraph);
@@ -1 +1 @@
1
- {"version":3,"file":"ui9000-network-graph.js","sources":["../../../../src/components/network-graph/element/ui9000-network-graph.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n FULL_RANGE,\n formatLegendValue,\n legendRanges,\n normalizeNetworkGraphData,\n visibleNodeIds,\n type NetworkGraphInput,\n type NetworkGraphModel,\n type NetworkLegendRange,\n type NetworkRange,\n} from '../lib/index.js';\nimport {\n renderNetworkGraph,\n resizeNetworkGraph,\n stopNetworkGraph,\n updateNetworkGraphVisibility,\n} from '../render/draw.js';\nimport { networkGraphStyles } from './styles.js';\n\n/** Legend bubbles are drawn at 1.2x the node radius they stand for (client). */\nconst LEGEND_BUBBLE_RATIO = 1.2;\n\n@customElement('ui9000-network-graph')\nexport class Ui9000NetworkGraph extends Ui9000ChartElement {\n static override styles = [networkGraphStyles, chartShellStyles];\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @state()\n private _empty = false;\n\n @state()\n private _ranges: NetworkLegendRange[] = [];\n\n @state()\n private _range: NetworkRange = { ...FULL_RANGE };\n\n /** Non-reactive: selection is owned by the draw layer, redrawing would reset it. */\n private _activeNodeId: string | null = null;\n\n private _model: NetworkGraphModel | null = null;\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n private _resizeRaf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleResize());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n cancelAnimationFrame(this._resizeRaf);\n const root = this.chartRoot();\n if (root) stopNetworkGraph(root);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('dataJson')) {\n // New buckets: the old slider window and selection no longer mean anything.\n this._range = { ...FULL_RANGE };\n this._activeNodeId = null;\n this._model = null;\n }\n if (changed.has('showTooltip') && !this.showTooltip) {\n this._labelTooltip = null;\n }\n if (this.shouldRedraw(changed)) this.scheduleDraw();\n }\n\n /**\n * Legend / tooltip are Lit chrome. Toggling them must not re-settle the force\n * layout (same class of rule as filter/resize staying in place).\n */\n private shouldRedraw(changed: PropertyValues): boolean {\n if (!chartPropsChanged(changed)) return false;\n for (const key of changed.keys()) {\n if (typeof key !== 'string' || key.startsWith('_')) continue;\n if (key === 'showLegend' || key === 'showTooltip') continue;\n return true;\n }\n return false;\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n /**\n * A resize only re-frames the settled layout — re-running the force ticks\n * would reshuffle the graph every time the chat pane changes width.\n */\n private scheduleResize(): void {\n cancelAnimationFrame(this._resizeRaf);\n this._resizeRaf = requestAnimationFrame(() => {\n const root = this.chartRoot();\n if (!root) return;\n if (!resizeNetworkGraph(root, root.clientWidth, root.clientHeight)) this.draw();\n });\n }\n\n private chartRoot(): HTMLElement | null {\n return (this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null) ?? null;\n }\n\n private model(): NetworkGraphModel {\n if (!this._model) {\n this._model = normalizeNetworkGraphData(\n parseJsonAttr<NetworkGraphInput | null>(this.dataJson, null),\n );\n }\n return this._model;\n }\n\n private draw(): void {\n const root = this.chartRoot();\n if (!root) return;\n\n const model = this.model();\n this._empty = model.nodes.length === 0;\n this._ranges = legendRanges(model.breakpoints);\n\n if (this._empty) {\n stopNetworkGraph(root);\n root.replaceChildren();\n return;\n }\n\n renderNetworkGraph(root, {\n model,\n visibleIds: visibleNodeIds(model, this._range),\n width: root.clientWidth,\n height: root.clientHeight,\n theme: readThemeFromElement(this),\n activeNodeId: this._activeNodeId,\n onSelect: (id) => {\n this._activeNodeId = id;\n },\n });\n }\n\n private setRange(edge: 'leftSlider' | 'rightSlider', raw: number): void {\n const next = { ...this._range, [edge]: raw };\n if (next.leftSlider >= next.rightSlider) return;\n // `_range` is internal state, so `updated()` re-renders the legend without\n // scheduling a redraw — the filter is pushed into the live graph instead.\n this._range = next;\n const root = this.chartRoot();\n if (!root) return;\n const visible = visibleNodeIds(this.model(), next);\n if (!updateNetworkGraphVisibility(root, visible)) this.scheduleDraw();\n }\n\n private renderLegend() {\n if (!this.showLegend || this._empty || this._ranges.length < 2) return nothing;\n const { leftSlider, rightSlider } = this._range;\n const last = this._ranges.length;\n const { onAxisLabelHover, onAxisLabelLeave } = this.axisLabelHandlers();\n\n return html`\n <div class=\"graph-legend\" part=\"legend\">\n <div class=\"legend-scale\">\n ${this._ranges.map((range, index) => {\n const muted = !(leftSlider <= index && index < rightSlider);\n return html`<span\n class=\"legend-bucket\"\n ?data-muted=${muted}\n style=\"--bubble-size:${range.radius * LEGEND_BUBBLE_RATIO}px\"\n ></span>`;\n })}\n <div class=\"legend-range\">\n <input\n type=\"range\"\n aria-label=\"Smallest node size shown\"\n min=\"0\"\n max=${last}\n step=\"1\"\n .value=${String(leftSlider)}\n @input=${(e: Event) =>\n this.setRange('leftSlider', Number((e.target as HTMLInputElement).value))}\n />\n <input\n type=\"range\"\n aria-label=\"Largest node size shown\"\n min=\"0\"\n max=${last}\n step=\"1\"\n .value=${String(rightSlider)}\n @input=${(e: Event) =>\n this.setRange('rightSlider', Number((e.target as HTMLInputElement).value))}\n />\n </div>\n </div>\n <div class=\"legend-values\">\n ${this._ranges.map(\n (range) => html`<span\n class=\"legend-value\"\n @mouseenter=${this.showTooltip\n ? (e: MouseEvent) => onAxisLabelHover?.(String(range.start), e)\n : undefined}\n @mouseleave=${this.showTooltip ? onAxisLabelLeave : undefined}\n >${formatLegendValue(range.start, 2)}</span\n >`,\n )}\n </div>\n </div>\n `;\n }\n\n override render() {\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(this.headerTitle())}\n <div class=\"widget-body\">\n ${this.renderLegend()}\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n ${this._empty\n ? html`<div class=\"empty\" part=\"empty\">\n Network graph requires a nodes and links payload.\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-network-graph': Ui9000NetworkGraph;\n }\n}\n\nexport function registerNetworkGraph(): void {\n if (!customElements.get('ui9000-network-graph')) {\n customElements.define('ui9000-network-graph', Ui9000NetworkGraph);\n }\n}\n\nregisterNetworkGraph();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui9000-network-graph.js","sources":["../../../../src/components/network-graph/element/ui9000-network-graph.ts"],"sourcesContent":["import { html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { readThemeFromElement } from '../../../context/widget-context.js';\nimport { chartShellStyles, Ui9000ChartElement } from '../../../element/ui9000-chart-base.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { chartPropsChanged } from '../../../utils/lit-draw.js';\nimport {\n FULL_RANGE,\n formatLegendValue,\n legendRanges,\n normalizeNetworkGraphData,\n rangeTrackOffset,\n slideThumb,\n sliderIndexFromPointer,\n thumbTrackPercent,\n visibleNodeIds,\n type NetworkGraphInput,\n type NetworkGraphModel,\n type NetworkLegendRange,\n type NetworkRange,\n} from '../lib/index.js';\nimport {\n renderNetworkGraph,\n resizeNetworkGraph,\n stopNetworkGraph,\n updateNetworkGraphVisibility,\n} from '../render/draw.js';\nimport { networkGraphStyles } from './styles.js';\n\n/** Same diameters as map `DEFAULT_BUBBLES_RADIUS` (7 size steps). */\nconst LEGEND_BUBBLE_SIZES = [10, 15, 20, 25, 30, 35, 40];\nconst MUTED_LEGEND_FILL = '#6C758429';\n\n@customElement('ui9000-network-graph')\nexport class Ui9000NetworkGraph extends Ui9000ChartElement {\n static override styles = [networkGraphStyles, chartShellStyles];\n\n @property({ type: Boolean, attribute: 'show-legend' })\n showLegend = true;\n\n @property({ type: Boolean, attribute: 'show-tooltip' })\n showTooltip = true;\n\n @state()\n private _empty = false;\n\n @state()\n private _ranges: NetworkLegendRange[] = [];\n\n @state()\n private _range: NetworkRange = { ...FULL_RANGE };\n\n @state()\n private _legendOpen = true;\n\n /** Non-reactive: selection is owned by the draw layer, redrawing would reset it. */\n private _activeNodeId: string | null = null;\n\n private _model: NetworkGraphModel | null = null;\n private _legendDrag?: {\n thumb: HTMLElement;\n move: (e: PointerEvent) => void;\n up: (e: PointerEvent) => void;\n };\n private _resizeObserver?: ResizeObserver;\n private _raf = 0;\n private _resizeRaf = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this.scheduleResize());\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n this._resizeObserver?.disconnect();\n cancelAnimationFrame(this._raf);\n cancelAnimationFrame(this._resizeRaf);\n this.stopLegendDrag();\n const root = this.chartRoot();\n if (root) stopNetworkGraph(root);\n super.disconnectedCallback();\n }\n\n override updated(changed: PropertyValues): void {\n if (changed.has('dataJson')) {\n // New buckets: the old slider window and selection no longer mean anything.\n this._range = { ...FULL_RANGE };\n this._activeNodeId = null;\n this._model = null;\n }\n if (changed.has('showTooltip') && !this.showTooltip) {\n this._labelTooltip = null;\n }\n if (this.shouldRedraw(changed)) this.scheduleDraw();\n }\n\n /**\n * Legend / tooltip are Lit chrome. Toggling them must not re-settle the force\n * layout (same class of rule as filter/resize staying in place).\n */\n private shouldRedraw(changed: PropertyValues): boolean {\n if (!chartPropsChanged(changed)) return false;\n for (const key of changed.keys()) {\n if (typeof key !== 'string' || key.startsWith('_')) continue;\n if (key === 'showLegend' || key === 'showTooltip') continue;\n return true;\n }\n return false;\n }\n\n private scheduleDraw(): void {\n cancelAnimationFrame(this._raf);\n this._raf = requestAnimationFrame(() => this.draw());\n }\n\n /**\n * A resize only re-frames the settled layout — re-running the force ticks\n * would reshuffle the graph every time the chat pane changes width.\n */\n private scheduleResize(): void {\n cancelAnimationFrame(this._resizeRaf);\n this._resizeRaf = requestAnimationFrame(() => {\n const root = this.chartRoot();\n if (!root) return;\n if (!resizeNetworkGraph(root, root.clientWidth, root.clientHeight)) this.draw();\n });\n }\n\n private chartRoot(): HTMLElement | null {\n return (this.shadowRoot?.querySelector('.chart-root') as HTMLElement | null) ?? null;\n }\n\n private model(): NetworkGraphModel {\n if (!this._model) {\n this._model = normalizeNetworkGraphData(\n parseJsonAttr<NetworkGraphInput | null>(this.dataJson, null),\n );\n }\n return this._model;\n }\n\n private draw(): void {\n const root = this.chartRoot();\n if (!root) return;\n\n const model = this.model();\n this._empty = model.nodes.length === 0;\n this._ranges = legendRanges(model.breakpoints);\n\n if (this._empty) {\n stopNetworkGraph(root);\n root.replaceChildren();\n return;\n }\n\n renderNetworkGraph(root, {\n model,\n visibleIds: visibleNodeIds(model, this._range),\n width: root.clientWidth,\n height: root.clientHeight,\n theme: readThemeFromElement(this),\n activeNodeId: this._activeNodeId,\n onSelect: (id) => {\n this._activeNodeId = id;\n },\n });\n }\n\n private setRange(edge: 'leftSlider' | 'rightSlider', raw: number): void {\n const next = slideThumb(this._range, edge, raw, this._ranges.length);\n if (next.leftSlider === this._range.leftSlider && next.rightSlider === this._range.rightSlider) {\n return;\n }\n this._range = next;\n const root = this.chartRoot();\n if (!root) return;\n const visible = visibleNodeIds(this.model(), next);\n if (!updateNetworkGraphVisibility(root, visible)) this.scheduleDraw();\n }\n\n private startThumbDrag(edge: 'leftSlider' | 'rightSlider', e: PointerEvent): void {\n const thumb = e.currentTarget;\n if (!(thumb instanceof HTMLElement)) return;\n const track = thumb.parentElement;\n if (!track) return;\n e.preventDefault();\n e.stopPropagation();\n thumb.setPointerCapture(e.pointerId);\n this.stopLegendDrag();\n\n const move = (ev: PointerEvent) => {\n const index = sliderIndexFromPointer(\n ev.clientX,\n track.getBoundingClientRect(),\n this._ranges.length,\n );\n this.setRange(edge, index);\n };\n const up = (ev: PointerEvent) => {\n if (thumb.hasPointerCapture(ev.pointerId)) thumb.releasePointerCapture(ev.pointerId);\n this.stopLegendDrag();\n };\n thumb.addEventListener('pointermove', move);\n thumb.addEventListener('pointerup', up);\n thumb.addEventListener('pointercancel', up);\n this._legendDrag = { thumb, move, up };\n move(e);\n }\n\n private stopLegendDrag(): void {\n const drag = this._legendDrag;\n if (!drag) return;\n drag.thumb.removeEventListener('pointermove', drag.move);\n drag.thumb.removeEventListener('pointerup', drag.up);\n drag.thumb.removeEventListener('pointercancel', drag.up);\n this._legendDrag = undefined;\n }\n\n private renderLegend() {\n if (!this.showLegend || this._empty || this._ranges.length < 2) return nothing;\n const { leftSlider, rightSlider } = this._range;\n const last = this._ranges.length;\n const { onAxisLabelHover, onAxisLabelLeave } = this.axisLabelHandlers();\n\n return html`\n <div class=\"graph-legend\" part=\"legend\">\n <div class=\"legend-panel-header\">\n <p class=\"legend-kicker\">Legend</p>\n <button\n type=\"button\"\n class=\"legend-chevron\"\n aria-expanded=${this._legendOpen}\n aria-label=${this._legendOpen ? 'Collapse legend' : 'Expand legend'}\n @click=${() => {\n this._legendOpen = !this._legendOpen;\n }}\n ></button>\n </div>\n ${this._legendOpen\n ? html`<div class=\"legend-layers\">\n <div class=\"legend-layer\">\n <div class=\"legend-details\">\n <div class=\"legend-scale\" data-kind=\"bubbles\">\n <div class=\"legend-colors\" data-qualitative>\n <div class=\"legend-range\">\n <div\n class=\"legend-range-track\"\n style=\"left:${rangeTrackOffset('left', leftSlider, last)}\"\n >\n <button\n type=\"button\"\n class=\"legend-thumb\"\n aria-label=\"Smallest node size shown\"\n style=\"left:${thumbTrackPercent(leftSlider, last)}\"\n @pointerdown=${(e: PointerEvent) => this.startThumbDrag('leftSlider', e)}\n ></button>\n </div>\n <div\n class=\"legend-range-track\"\n style=\"right:${rangeTrackOffset('right', rightSlider, last)}\"\n >\n <button\n type=\"button\"\n class=\"legend-thumb\"\n aria-label=\"Largest node size shown\"\n style=\"left:${thumbTrackPercent(rightSlider, last)}\"\n @pointerdown=${(e: PointerEvent) => this.startThumbDrag('rightSlider', e)}\n ></button>\n </div>\n </div>\n <div class=\"legend-buckets\">\n ${this._ranges.map((_range, index) => {\n const muted = !(leftSlider <= index && index < rightSlider);\n const bubble = LEGEND_BUBBLE_SIZES[index] ?? 12;\n const inner = bubble - 15 > 0 ? bubble - 15 : 0;\n return html`<span\n class=\"legend-bucket\"\n ?data-bubble=${true}\n ?data-inner=${inner > 0}\n ?data-qualitative=${true}\n ?data-muted=${muted}\n style=\"background:${MUTED_LEGEND_FILL};--bubble-size:${bubble}px;--inner-size:${inner}px\"\n ></span>`;\n })}\n </div>\n </div>\n <div class=\"legend-values\">\n ${this._ranges.map(\n (range) => html`<span\n class=\"legend-value\"\n @mouseenter=${this.showTooltip\n ? (e: MouseEvent) => onAxisLabelHover?.(String(range.start), e)\n : undefined}\n @mouseleave=${this.showTooltip ? onAxisLabelLeave : undefined}\n >${formatLegendValue(range.start, 2)}</span\n >`,\n )}\n </div>\n </div>\n </div>\n </div>\n </div>`\n : nothing}\n </div>\n `;\n }\n\n override render() {\n return html`\n <div class=\"widget-shell\" part=\"shell\">\n ${this.renderShellHeader(this.headerTitle())}\n <div class=\"widget-body\">\n <div class=\"chart-root\" part=\"chart\" ?hidden=${this._empty}></div>\n ${this.renderLegend()}\n ${this._empty\n ? html`<div class=\"empty\" part=\"empty\">\n Network graph requires a nodes and links payload.\n </div>`\n : nothing}\n ${this.renderShellLabelTooltip()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-network-graph': Ui9000NetworkGraph;\n }\n}\n\nexport function registerNetworkGraph(): void {\n if (!customElements.get('ui9000-network-graph')) {\n customElements.define('ui9000-network-graph', Ui9000NetworkGraph);\n }\n}\n\nregisterNetworkGraph();\n"],"names":[],"mappings":"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"}