@vielzeug/prism 3.0.0 → 26.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +2 -2
  2. package/dist/_dev.cjs +1 -1
  3. package/dist/_dev.cjs.map +1 -1
  4. package/dist/_dev.js +1 -5
  5. package/dist/_dev.js.map +1 -1
  6. package/dist/animation/easing.cjs +1 -1
  7. package/dist/animation/easing.cjs.map +1 -1
  8. package/dist/animation/easing.js +1 -13
  9. package/dist/animation/easing.js.map +1 -1
  10. package/dist/animation/motion.cjs +1 -1
  11. package/dist/animation/motion.cjs.map +1 -1
  12. package/dist/animation/motion.js +1 -12
  13. package/dist/animation/motion.js.map +1 -1
  14. package/dist/animation/transition.cjs +1 -1
  15. package/dist/animation/transition.cjs.map +1 -1
  16. package/dist/animation/transition.js +1 -28
  17. package/dist/animation/transition.js.map +1 -1
  18. package/dist/animation/tween.cjs +1 -1
  19. package/dist/animation/tween.cjs.map +1 -1
  20. package/dist/animation/tween.js +1 -7
  21. package/dist/animation/tween.js.map +1 -1
  22. package/dist/axes/axis.cjs +1 -1
  23. package/dist/axes/axis.cjs.map +1 -1
  24. package/dist/axes/axis.d.ts +2 -2
  25. package/dist/axes/axis.d.ts.map +1 -1
  26. package/dist/axes/axis.js +1 -63
  27. package/dist/axes/axis.js.map +1 -1
  28. package/dist/axes/grid.cjs +1 -1
  29. package/dist/axes/grid.cjs.map +1 -1
  30. package/dist/axes/grid.js +1 -29
  31. package/dist/axes/grid.js.map +1 -1
  32. package/dist/axes/scale-utils.cjs +1 -1
  33. package/dist/axes/scale-utils.cjs.map +1 -1
  34. package/dist/axes/scale-utils.d.ts +1 -1
  35. package/dist/axes/scale-utils.js +1 -10
  36. package/dist/axes/scale-utils.js.map +1 -1
  37. package/dist/charts/area/area-chart.cjs +1 -1
  38. package/dist/charts/area/area-chart.cjs.map +1 -1
  39. package/dist/charts/area/area-chart.d.ts.map +1 -1
  40. package/dist/charts/area/area-chart.js +1 -57
  41. package/dist/charts/area/area-chart.js.map +1 -1
  42. package/dist/charts/area/area-renderer.cjs +1 -1
  43. package/dist/charts/area/area-renderer.cjs.map +1 -1
  44. package/dist/charts/area/area-renderer.d.ts +4 -2
  45. package/dist/charts/area/area-renderer.d.ts.map +1 -1
  46. package/dist/charts/area/area-renderer.js +1 -73
  47. package/dist/charts/area/area-renderer.js.map +1 -1
  48. package/dist/charts/bar/bar-chart.cjs +1 -1
  49. package/dist/charts/bar/bar-chart.cjs.map +1 -1
  50. package/dist/charts/bar/bar-chart.d.ts.map +1 -1
  51. package/dist/charts/bar/bar-chart.js +1 -169
  52. package/dist/charts/bar/bar-chart.js.map +1 -1
  53. package/dist/charts/bar/bar-hit-test.cjs +1 -1
  54. package/dist/charts/bar/bar-hit-test.cjs.map +1 -1
  55. package/dist/charts/bar/bar-hit-test.d.ts +0 -5
  56. package/dist/charts/bar/bar-hit-test.d.ts.map +1 -1
  57. package/dist/charts/bar/bar-hit-test.js +1 -29
  58. package/dist/charts/bar/bar-hit-test.js.map +1 -1
  59. package/dist/charts/bar/bar-renderer.cjs +1 -1
  60. package/dist/charts/bar/bar-renderer.cjs.map +1 -1
  61. package/dist/charts/bar/bar-renderer.d.ts +1 -1
  62. package/dist/charts/bar/bar-renderer.d.ts.map +1 -1
  63. package/dist/charts/bar/bar-renderer.js +1 -106
  64. package/dist/charts/bar/bar-renderer.js.map +1 -1
  65. package/dist/charts/line/line-chart.cjs +1 -1
  66. package/dist/charts/line/line-chart.cjs.map +1 -1
  67. package/dist/charts/line/line-chart.d.ts.map +1 -1
  68. package/dist/charts/line/line-chart.js +1 -58
  69. package/dist/charts/line/line-chart.js.map +1 -1
  70. package/dist/charts/line/line-renderer.cjs +1 -1
  71. package/dist/charts/line/line-renderer.cjs.map +1 -1
  72. package/dist/charts/line/line-renderer.d.ts +3 -2
  73. package/dist/charts/line/line-renderer.d.ts.map +1 -1
  74. package/dist/charts/line/line-renderer.js +1 -100
  75. package/dist/charts/line/line-renderer.js.map +1 -1
  76. package/dist/charts/pie/pie-chart.cjs +1 -1
  77. package/dist/charts/pie/pie-chart.cjs.map +1 -1
  78. package/dist/charts/pie/pie-chart.d.ts.map +1 -1
  79. package/dist/charts/pie/pie-chart.js +1 -165
  80. package/dist/charts/pie/pie-chart.js.map +1 -1
  81. package/dist/charts/pie/pie-renderer.cjs +1 -1
  82. package/dist/charts/pie/pie-renderer.cjs.map +1 -1
  83. package/dist/charts/pie/pie-renderer.d.ts.map +1 -1
  84. package/dist/charts/pie/pie-renderer.js +1 -76
  85. package/dist/charts/pie/pie-renderer.js.map +1 -1
  86. package/dist/charts/radar/index.d.ts +2 -0
  87. package/dist/charts/radar/index.d.ts.map +1 -0
  88. package/dist/charts/radar/radar-chart.cjs +2 -0
  89. package/dist/charts/radar/radar-chart.cjs.map +1 -0
  90. package/dist/charts/radar/radar-chart.d.ts +3 -0
  91. package/dist/charts/radar/radar-chart.d.ts.map +1 -0
  92. package/dist/charts/radar/radar-chart.js +2 -0
  93. package/dist/charts/radar/radar-chart.js.map +1 -0
  94. package/dist/charts/radar/radar-geometry.cjs +2 -0
  95. package/dist/charts/radar/radar-geometry.cjs.map +1 -0
  96. package/dist/charts/radar/radar-geometry.d.ts +22 -0
  97. package/dist/charts/radar/radar-geometry.d.ts.map +1 -0
  98. package/dist/charts/radar/radar-geometry.js +2 -0
  99. package/dist/charts/radar/radar-geometry.js.map +1 -0
  100. package/dist/charts/sparkline/sparkline.cjs +1 -1
  101. package/dist/charts/sparkline/sparkline.cjs.map +1 -1
  102. package/dist/charts/sparkline/sparkline.d.ts.map +1 -1
  103. package/dist/charts/sparkline/sparkline.js +1 -191
  104. package/dist/charts/sparkline/sparkline.js.map +1 -1
  105. package/dist/core/cartesian-model.cjs +1 -1
  106. package/dist/core/cartesian-model.cjs.map +1 -1
  107. package/dist/core/cartesian-model.js +1 -30
  108. package/dist/core/cartesian-model.js.map +1 -1
  109. package/dist/core/cartesian-scales.cjs +1 -1
  110. package/dist/core/cartesian-scales.cjs.map +1 -1
  111. package/dist/core/cartesian-scales.js +1 -37
  112. package/dist/core/cartesian-scales.js.map +1 -1
  113. package/dist/core/chart-base.cjs +1 -1
  114. package/dist/core/chart-base.cjs.map +1 -1
  115. package/dist/core/chart-base.d.ts +9 -0
  116. package/dist/core/chart-base.d.ts.map +1 -1
  117. package/dist/core/chart-base.js +1 -53
  118. package/dist/core/chart-base.js.map +1 -1
  119. package/dist/core/chart-scaffold.cjs +1 -1
  120. package/dist/core/chart-scaffold.cjs.map +1 -1
  121. package/dist/core/chart-scaffold.d.ts +7 -3
  122. package/dist/core/chart-scaffold.d.ts.map +1 -1
  123. package/dist/core/chart-scaffold.js +1 -89
  124. package/dist/core/chart-scaffold.js.map +1 -1
  125. package/dist/core/ids.cjs +2 -0
  126. package/dist/core/ids.cjs.map +1 -0
  127. package/dist/core/ids.d.ts +3 -0
  128. package/dist/core/ids.d.ts.map +1 -0
  129. package/dist/core/ids.js +2 -0
  130. package/dist/core/ids.js.map +1 -0
  131. package/dist/core/layout.cjs +1 -1
  132. package/dist/core/layout.cjs.map +1 -1
  133. package/dist/core/layout.js +1 -22
  134. package/dist/core/layout.js.map +1 -1
  135. package/dist/core/polar.cjs +2 -0
  136. package/dist/core/polar.cjs.map +1 -0
  137. package/dist/core/polar.d.ts +5 -0
  138. package/dist/core/polar.d.ts.map +1 -0
  139. package/dist/core/polar.js +2 -0
  140. package/dist/core/polar.js.map +1 -0
  141. package/dist/core/responsive.cjs +1 -1
  142. package/dist/core/responsive.cjs.map +1 -1
  143. package/dist/core/responsive.js +1 -19
  144. package/dist/core/responsive.js.map +1 -1
  145. package/dist/devtools/index.d.ts +1 -1
  146. package/dist/devtools.cjs +1 -1
  147. package/dist/devtools.cjs.map +1 -1
  148. package/dist/devtools.js +1 -18
  149. package/dist/devtools.js.map +1 -1
  150. package/dist/errors.cjs +1 -1
  151. package/dist/errors.cjs.map +1 -1
  152. package/dist/errors.d.ts +1 -1
  153. package/dist/errors.d.ts.map +1 -1
  154. package/dist/errors.js +1 -9
  155. package/dist/errors.js.map +1 -1
  156. package/dist/index.cjs +1 -1
  157. package/dist/index.d.ts +2 -1
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +1 -11
  160. package/dist/interaction/announcer.cjs +2 -0
  161. package/dist/interaction/announcer.cjs.map +1 -0
  162. package/dist/interaction/announcer.d.ts +13 -0
  163. package/dist/interaction/announcer.d.ts.map +1 -0
  164. package/dist/interaction/announcer.js +2 -0
  165. package/dist/interaction/announcer.js.map +1 -0
  166. package/dist/interaction/crosshair.cjs +1 -1
  167. package/dist/interaction/crosshair.cjs.map +1 -1
  168. package/dist/interaction/crosshair.d.ts +1 -5
  169. package/dist/interaction/crosshair.d.ts.map +1 -1
  170. package/dist/interaction/crosshair.js +1 -45
  171. package/dist/interaction/crosshair.js.map +1 -1
  172. package/dist/interaction/events.cjs +1 -1
  173. package/dist/interaction/events.cjs.map +1 -1
  174. package/dist/interaction/events.js +1 -11
  175. package/dist/interaction/events.js.map +1 -1
  176. package/dist/interaction/legend.cjs +1 -1
  177. package/dist/interaction/legend.cjs.map +1 -1
  178. package/dist/interaction/legend.js +1 -30
  179. package/dist/interaction/legend.js.map +1 -1
  180. package/dist/interaction/series-interaction.cjs +1 -1
  181. package/dist/interaction/series-interaction.cjs.map +1 -1
  182. package/dist/interaction/series-interaction.d.ts +11 -1
  183. package/dist/interaction/series-interaction.d.ts.map +1 -1
  184. package/dist/interaction/series-interaction.js +1 -97
  185. package/dist/interaction/series-interaction.js.map +1 -1
  186. package/dist/interaction/tooltip.cjs +1 -1
  187. package/dist/interaction/tooltip.cjs.map +1 -1
  188. package/dist/interaction/tooltip.d.ts +12 -1
  189. package/dist/interaction/tooltip.d.ts.map +1 -1
  190. package/dist/interaction/tooltip.js +1 -63
  191. package/dist/interaction/tooltip.js.map +1 -1
  192. package/dist/prism.cjs +1 -1
  193. package/dist/prism.cjs.map +1 -1
  194. package/dist/prism.iife.js +1 -1
  195. package/dist/prism.iife.js.map +1 -1
  196. package/dist/prism.js +1 -1
  197. package/dist/prism.js.map +1 -1
  198. package/dist/scales/band.cjs +1 -1
  199. package/dist/scales/band.cjs.map +1 -1
  200. package/dist/scales/band.js +1 -39
  201. package/dist/scales/band.js.map +1 -1
  202. package/dist/scales/linear.cjs +1 -1
  203. package/dist/scales/linear.cjs.map +1 -1
  204. package/dist/scales/linear.js +1 -43
  205. package/dist/scales/linear.js.map +1 -1
  206. package/dist/scales/time.cjs +1 -1
  207. package/dist/scales/time.cjs.map +1 -1
  208. package/dist/scales/time.js +1 -61
  209. package/dist/scales/time.js.map +1 -1
  210. package/dist/svg/element.cjs +1 -1
  211. package/dist/svg/element.cjs.map +1 -1
  212. package/dist/svg/element.js +1 -22
  213. package/dist/svg/element.js.map +1 -1
  214. package/dist/svg/path.cjs +1 -1
  215. package/dist/svg/path.cjs.map +1 -1
  216. package/dist/svg/path.js +1 -48
  217. package/dist/svg/path.js.map +1 -1
  218. package/dist/svg/text.cjs +1 -1
  219. package/dist/svg/text.cjs.map +1 -1
  220. package/dist/svg/text.d.ts +1 -0
  221. package/dist/svg/text.d.ts.map +1 -1
  222. package/dist/svg/text.js +1 -9
  223. package/dist/svg/text.js.map +1 -1
  224. package/dist/theme/index.cjs +1 -1
  225. package/dist/theme/index.cjs.map +1 -1
  226. package/dist/theme/index.js +1 -19
  227. package/dist/theme/index.js.map +1 -1
  228. package/dist/theme/prism.css +214 -7
  229. package/dist/types.d.ts +65 -5
  230. package/dist/types.d.ts.map +1 -1
  231. package/package.json +6 -5
@@ -0,0 +1,2 @@
1
+ var e=0;function uniqueId(t){return e+=1,`${t}-${e}`}export{uniqueId};
2
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","names":[],"sources":["../../src/core/ids.ts"],"sourcesContent":["let next = 0;\n\n/** Document-unique id for SVG references such as gradients. */\nexport function uniqueId(prefix: string): string {\n next += 1;\n\n return `${prefix}-${next}`;\n}\n"],"mappings":"AAAA,IAAI,EAAO,EAGX,SAAgB,SAAS,EAAwB,CAG/C,MAFA,IAAQ,EAED,GAAG,EAAO,GAAG,GACtB"}
@@ -1,2 +1,2 @@
1
- var e={bottom:48,left:50,right:20,top:20};function t(t){return{...e,...t}}function n(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}exports.chartArea=n,exports.resolveMargin=t;
1
+ var e={bottom:48,left:50,right:20,top:20};function resolveMargin(t){return{...e,...t}}function chartArea(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}exports.chartArea=chartArea,exports.resolveMargin=resolveMargin;
2
2
  //# sourceMappingURL=layout.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.cjs","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom: 48, left: 50, right: 20, top: 20 };\n\nexport function resolveMargin(margin?: Partial<ChartMargin>): ChartMargin {\n return { ...DEFAULT_MARGIN, ...margin };\n}\n\nexport function chartArea(width: number, height: number, margin: ChartMargin): { height: number; width: number } {\n return {\n height: Math.max(0, height - margin.top - margin.bottom),\n width: Math.max(0, width - margin.left - margin.right),\n };\n}\n"],"mappings":"AAEA,IAAM,EAA8B,CAAE,OAAQ,GAAI,KAAM,GAAI,MAAO,GAAI,IAAK,EAAG,EAE/E,SAAgB,EAAc,EAA4C,CACxE,MAAO,CAAE,GAAG,EAAgB,GAAG,CAAO,CACxC,CAEA,SAAgB,EAAU,EAAe,EAAgB,EAAwD,CAC/G,MAAO,CACL,OAAQ,KAAK,IAAI,EAAG,EAAS,EAAO,IAAM,EAAO,MAAM,EACvD,MAAO,KAAK,IAAI,EAAG,EAAQ,EAAO,KAAO,EAAO,KAAK,CACvD,CACF"}
1
+ {"version":3,"file":"layout.cjs","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom: 48, left: 50, right: 20, top: 20 };\n\nexport function resolveMargin(margin?: Partial<ChartMargin>): ChartMargin {\n return { ...DEFAULT_MARGIN, ...margin };\n}\n\nexport function chartArea(width: number, height: number, margin: ChartMargin): { height: number; width: number } {\n return {\n height: Math.max(0, height - margin.top - margin.bottom),\n width: Math.max(0, width - margin.left - margin.right),\n };\n}\n"],"mappings":"AAEA,IAAM,EAA8B,CAAE,OAAQ,GAAI,KAAM,GAAI,MAAO,GAAI,IAAK,EAAG,EAE/E,SAAgB,cAAc,EAA4C,CACxE,MAAO,CAAE,GAAG,EAAgB,GAAG,CAAO,CACxC,CAEA,SAAgB,UAAU,EAAe,EAAgB,EAAwD,CAC/G,MAAO,CACL,OAAQ,KAAK,IAAI,EAAG,EAAS,EAAO,IAAM,EAAO,MAAM,EACvD,MAAO,KAAK,IAAI,EAAG,EAAQ,EAAO,KAAO,EAAO,KAAK,CACvD,CACF"}
@@ -1,23 +1,2 @@
1
- //#region src/core/layout.ts
2
- var e = {
3
- bottom: 48,
4
- left: 50,
5
- right: 20,
6
- top: 20
7
- };
8
- function t(t) {
9
- return {
10
- ...e,
11
- ...t
12
- };
13
- }
14
- function n(e, t, n) {
15
- return {
16
- height: Math.max(0, t - n.top - n.bottom),
17
- width: Math.max(0, e - n.left - n.right)
18
- };
19
- }
20
- //#endregion
21
- export { n as chartArea, t as resolveMargin };
22
-
1
+ var e={bottom:48,left:50,right:20,top:20};function resolveMargin(t){return{...e,...t}}function chartArea(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}export{chartArea,resolveMargin};
23
2
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom: 48, left: 50, right: 20, top: 20 };\n\nexport function resolveMargin(margin?: Partial<ChartMargin>): ChartMargin {\n return { ...DEFAULT_MARGIN, ...margin };\n}\n\nexport function chartArea(width: number, height: number, margin: ChartMargin): { height: number; width: number } {\n return {\n height: Math.max(0, height - margin.top - margin.bottom),\n width: Math.max(0, width - margin.left - margin.right),\n };\n}\n"],"mappings":";AAEA,IAAM,IAA8B;CAAE,QAAQ;CAAI,MAAM;CAAI,OAAO;CAAI,KAAK;AAAG;AAE/E,SAAgB,EAAc,GAA4C;CACxE,OAAO;EAAE,GAAG;EAAgB,GAAG;CAAO;AACxC;AAEA,SAAgB,EAAU,GAAe,GAAgB,GAAwD;CAC/G,OAAO;EACL,QAAQ,KAAK,IAAI,GAAG,IAAS,EAAO,MAAM,EAAO,MAAM;EACvD,OAAO,KAAK,IAAI,GAAG,IAAQ,EAAO,OAAO,EAAO,KAAK;CACvD;AACF"}
1
+ {"version":3,"file":"layout.js","names":[],"sources":["../../src/core/layout.ts"],"sourcesContent":["import type { ChartMargin } from '../types';\n\nconst DEFAULT_MARGIN: ChartMargin = { bottom: 48, left: 50, right: 20, top: 20 };\n\nexport function resolveMargin(margin?: Partial<ChartMargin>): ChartMargin {\n return { ...DEFAULT_MARGIN, ...margin };\n}\n\nexport function chartArea(width: number, height: number, margin: ChartMargin): { height: number; width: number } {\n return {\n height: Math.max(0, height - margin.top - margin.bottom),\n width: Math.max(0, width - margin.left - margin.right),\n };\n}\n"],"mappings":"AAEA,IAAM,EAA8B,CAAE,OAAQ,GAAI,KAAM,GAAI,MAAO,GAAI,IAAK,EAAG,EAE/E,SAAgB,cAAc,EAA4C,CACxE,MAAO,CAAE,GAAG,EAAgB,GAAG,CAAO,CACxC,CAEA,SAAgB,UAAU,EAAe,EAAgB,EAAwD,CAC/G,MAAO,CACL,OAAQ,KAAK,IAAI,EAAG,EAAS,EAAO,IAAM,EAAO,MAAM,EACvD,MAAO,KAAK,IAAI,EAAG,EAAQ,EAAO,KAAO,EAAO,KAAK,CACvD,CACF"}
@@ -0,0 +1,2 @@
1
+ function polarX(e,t,n){return e+t*Math.sin(n)}function polarY(e,t,n){return e-t*Math.cos(n)}function polarPoint(e,t,n,r){return`${polarX(e,n,r)},${polarY(t,n,r)}`}exports.polarPoint=polarPoint,exports.polarX=polarX,exports.polarY=polarY;
2
+ //# sourceMappingURL=polar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polar.cjs","names":[],"sources":["../../src/core/polar.ts"],"sourcesContent":["// Angles are radians measured clockwise from 12 o'clock.\n\nexport function polarX(cx: number, r: number, angle: number): number {\n return cx + r * Math.sin(angle);\n}\n\nexport function polarY(cy: number, r: number, angle: number): number {\n return cy - r * Math.cos(angle);\n}\n\n/** SVG path coordinate pair (`x,y`) for a polar position. */\nexport function polarPoint(cx: number, cy: number, r: number, angle: number): string {\n return `${polarX(cx, r, angle)},${polarY(cy, r, angle)}`;\n}\n"],"mappings":"AAEA,SAAgB,OAAO,EAAY,EAAW,EAAuB,CACnE,OAAO,EAAK,EAAI,KAAK,IAAI,CAAK,CAChC,CAEA,SAAgB,OAAO,EAAY,EAAW,EAAuB,CACnE,OAAO,EAAK,EAAI,KAAK,IAAI,CAAK,CAChC,CAGA,SAAgB,WAAW,EAAY,EAAY,EAAW,EAAuB,CACnF,MAAO,GAAG,OAAO,EAAI,EAAG,CAAK,EAAE,GAAG,OAAO,EAAI,EAAG,CAAK,GACvD"}
@@ -0,0 +1,5 @@
1
+ export declare function polarX(cx: number, r: number, angle: number): number;
2
+ export declare function polarY(cy: number, r: number, angle: number): number;
3
+ /** SVG path coordinate pair (`x,y`) for a polar position. */
4
+ export declare function polarPoint(cx: number, cy: number, r: number, angle: number): string;
5
+ //# sourceMappingURL=polar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polar.d.ts","sourceRoot":"","sources":["../../src/core/polar.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnF"}
@@ -0,0 +1,2 @@
1
+ function polarX(e,t,n){return e+t*Math.sin(n)}function polarY(e,t,n){return e-t*Math.cos(n)}function polarPoint(e,t,n,r){return`${polarX(e,n,r)},${polarY(t,n,r)}`}export{polarPoint,polarX,polarY};
2
+ //# sourceMappingURL=polar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polar.js","names":[],"sources":["../../src/core/polar.ts"],"sourcesContent":["// Angles are radians measured clockwise from 12 o'clock.\n\nexport function polarX(cx: number, r: number, angle: number): number {\n return cx + r * Math.sin(angle);\n}\n\nexport function polarY(cy: number, r: number, angle: number): number {\n return cy - r * Math.cos(angle);\n}\n\n/** SVG path coordinate pair (`x,y`) for a polar position. */\nexport function polarPoint(cx: number, cy: number, r: number, angle: number): string {\n return `${polarX(cx, r, angle)},${polarY(cy, r, angle)}`;\n}\n"],"mappings":"AAEA,SAAgB,OAAO,EAAY,EAAW,EAAuB,CACnE,OAAO,EAAK,EAAI,KAAK,IAAI,CAAK,CAChC,CAEA,SAAgB,OAAO,EAAY,EAAW,EAAuB,CACnE,OAAO,EAAK,EAAI,KAAK,IAAI,CAAK,CAChC,CAGA,SAAgB,WAAW,EAAY,EAAY,EAAW,EAAuB,CACnF,MAAO,GAAG,OAAO,EAAI,EAAG,CAAK,EAAE,GAAG,OAAO,EAAI,EAAG,CAAK,GACvD"}
@@ -1,2 +1,2 @@
1
- function e(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}exports.observeResize=e;
1
+ function observeResize(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}exports.observeResize=observeResize;
2
2
  //# sourceMappingURL=responsive.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"responsive.cjs","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"AAAA,SAAgB,EAAc,EAAiB,EAA+D,CAC5G,IAAI,EAAuB,KAErB,EAAW,IAAI,eAAgB,GAAY,CAC3C,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAQ,0BAA4B,CAClC,EAAQ,KAER,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,EAAS,EAAO,CAAM,CACxB,CACF,CAAC,CACH,CAAC,EAID,OAFA,EAAS,QAAQ,CAAE,MAEN,CACP,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAS,WAAW,CACtB,CACF"}
1
+ {"version":3,"file":"responsive.cjs","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"AAAA,SAAgB,cAAc,EAAiB,EAA+D,CAC5G,IAAI,EAAuB,KAErB,EAAW,IAAI,eAAgB,GAAY,CAC3C,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAQ,0BAA4B,CAClC,EAAQ,KAER,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,EAAS,EAAO,CAAM,CACxB,CACF,CAAC,CACH,CAAC,EAID,OAFA,EAAS,QAAQ,CAAE,MAEN,CACP,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAS,WAAW,CACtB,CACF"}
@@ -1,20 +1,2 @@
1
- //#region src/core/responsive.ts
2
- function e(e, t) {
3
- let n = null, r = new ResizeObserver((e) => {
4
- n !== null && cancelAnimationFrame(n), n = requestAnimationFrame(() => {
5
- n = null;
6
- let r = e[0];
7
- if (r) {
8
- let { height: e, width: n } = r.contentRect;
9
- t(n, e);
10
- }
11
- });
12
- });
13
- return r.observe(e), () => {
14
- n !== null && cancelAnimationFrame(n), r.disconnect();
15
- };
16
- }
17
- //#endregion
18
- export { e as observeResize };
19
-
1
+ function observeResize(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}export{observeResize};
20
2
  //# sourceMappingURL=responsive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"responsive.js","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":";AAAA,SAAgB,EAAc,GAAiB,GAA+D;CAC5G,IAAI,IAAuB,MAErB,IAAW,IAAI,gBAAgB,MAAY;EAG/C,AAFI,MAAU,QAAM,qBAAqB,CAAK,GAE9C,IAAQ,4BAA4B;GAClC,IAAQ;GAER,IAAM,IAAQ,EAAQ;GAEtB,IAAI,GAAO;IACT,IAAM,EAAE,WAAQ,aAAU,EAAM;IAEhC,EAAS,GAAO,CAAM;GACxB;EACF,CAAC;CACH,CAAC;CAID,OAFA,EAAS,QAAQ,CAAE,SAEN;EAGX,AAFI,MAAU,QAAM,qBAAqB,CAAK,GAE9C,EAAS,WAAW;CACtB;AACF"}
1
+ {"version":3,"file":"responsive.js","names":[],"sources":["../../src/core/responsive.ts"],"sourcesContent":["export function observeResize(el: HTMLElement, callback: (width: number, height: number) => void): () => void {\n let rafId: number | null = null;\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = null;\n\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n callback(width, height);\n }\n });\n });\n\n observer.observe(el);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n observer.disconnect();\n };\n}\n"],"mappings":"AAAA,SAAgB,cAAc,EAAiB,EAA+D,CAC5G,IAAI,EAAuB,KAErB,EAAW,IAAI,eAAgB,GAAY,CAC3C,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAQ,0BAA4B,CAClC,EAAQ,KAER,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,EAAS,EAAO,CAAM,CACxB,CACF,CAAC,CACH,CAAC,EAID,OAFA,EAAS,QAAQ,CAAE,MAEN,CACP,IAAU,MAAM,qBAAqB,CAAK,EAE9C,EAAS,WAAW,CACtB,CACF"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vielzeug/prism — debug utilities for chart visualisation.
2
+ * @vielzeug/prism: debug utilities for chart visualisation.
3
3
  *
4
4
  * Import from the dedicated sub-path so debug code is tree-shaken from
5
5
  * production bundles:
package/dist/devtools.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,t){let n=`[prism:${t?.label??`chart`}]`;console.debug(`${n} mounted`);let r=new ResizeObserver(e=>{let t=e[0];if(t){let{height:e,width:r}=t.contentRect;console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`)}});return r.observe(e.el),e.disposalSignal.addEventListener(`abort`,()=>{r.disconnect(),console.debug(`${n} disposed`)},{once:!0}),e}exports.debugChart=e;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function debugChart(e,t){let n=`[prism:${t?.label??`chart`}]`;console.debug(`${n} mounted`);let r=new ResizeObserver(e=>{let t=e[0];if(t){let{height:e,width:r}=t.contentRect;console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`)}});return r.observe(e.el),e.disposalSignal.addEventListener(`abort`,()=>{r.disconnect(),console.debug(`${n} disposed`)},{once:!0}),e}exports.debugChart=debugChart;
2
2
  //# sourceMappingURL=devtools.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.cjs","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism — debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"mEAqDA,SAAgB,EAAkC,EAAW,EAAgC,CAC3F,IAAM,EAAS,UAAU,GAAS,OAAS,QAAQ,GAEnD,QAAQ,MAAM,GAAG,EAAO,SAAS,EAEjC,IAAM,EAAiB,IAAI,eAAgB,GAAY,CACrD,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,QAAQ,MAAM,GAAG,EAAO,YAAY,KAAK,MAAM,CAAK,EAAE,GAAG,KAAK,MAAM,CAAM,GAAG,CAC/E,CACF,CAAC,EAaD,OAXA,EAAe,QAAQ,EAAO,EAAE,EAEhC,EAAO,eAAe,iBACpB,YACM,CACJ,EAAe,WAAW,EAC1B,QAAQ,MAAM,GAAG,EAAO,UAAU,CACpC,EACA,CAAE,KAAM,EAAK,CACf,EAEO,CACT"}
1
+ {"version":3,"file":"devtools.cjs","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism: debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"mEAqDA,SAAgB,WAAkC,EAAW,EAAgC,CAC3F,IAAM,EAAS,UAAU,GAAS,OAAS,QAAQ,GAEnD,QAAQ,MAAM,GAAG,EAAO,SAAS,EAEjC,IAAM,EAAiB,IAAI,eAAgB,GAAY,CACrD,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,QAAQ,MAAM,GAAG,EAAO,YAAY,KAAK,MAAM,CAAK,EAAE,GAAG,KAAK,MAAM,CAAM,GAAG,CAC/E,CACF,CAAC,EAaD,OAXA,EAAe,QAAQ,EAAO,EAAE,EAEhC,EAAO,eAAe,iBACpB,YACM,CACJ,EAAe,WAAW,EAC1B,QAAQ,MAAM,GAAG,EAAO,UAAU,CACpC,EACA,CAAE,KAAM,EAAK,CACf,EAEO,CACT"}
package/dist/devtools.js CHANGED
@@ -1,19 +1,2 @@
1
- //#region src/devtools/index.ts
2
- function e(e, t) {
3
- let n = `[prism:${t?.label ?? "chart"}]`;
4
- console.debug(`${n} mounted`);
5
- let r = new ResizeObserver((e) => {
6
- let t = e[0];
7
- if (t) {
8
- let { height: e, width: r } = t.contentRect;
9
- console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`);
10
- }
11
- });
12
- return r.observe(e.el), e.disposalSignal.addEventListener("abort", () => {
13
- r.disconnect(), console.debug(`${n} disposed`);
14
- }, { once: !0 }), e;
15
- }
16
- //#endregion
17
- export { e as debugChart };
18
-
1
+ function debugChart(e,t){let n=`[prism:${t?.label??`chart`}]`;console.debug(`${n} mounted`);let r=new ResizeObserver(e=>{let t=e[0];if(t){let{height:e,width:r}=t.contentRect;console.debug(`${n} resized ${Math.round(r)}×${Math.round(e)}`)}});return r.observe(e.el),e.disposalSignal.addEventListener(`abort`,()=>{r.disconnect(),console.debug(`${n} disposed`)},{once:!0}),e}export{debugChart};
19
2
  //# sourceMappingURL=devtools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.js","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism — debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":";AAqDA,SAAgB,EAAkC,GAAW,GAAgC;CAC3F,IAAM,IAAS,UAAU,GAAS,SAAS,QAAQ;CAEnD,QAAQ,MAAM,GAAG,EAAO,SAAS;CAEjC,IAAM,IAAiB,IAAI,gBAAgB,MAAY;EACrD,IAAM,IAAQ,EAAQ;EAEtB,IAAI,GAAO;GACT,IAAM,EAAE,WAAQ,aAAU,EAAM;GAEhC,QAAQ,MAAM,GAAG,EAAO,YAAY,KAAK,MAAM,CAAK,EAAE,GAAG,KAAK,MAAM,CAAM,GAAG;EAC/E;CACF,CAAC;CAaD,OAXA,EAAe,QAAQ,EAAO,EAAE,GAEhC,EAAO,eAAe,iBACpB,eACM;EAEJ,AADA,EAAe,WAAW,GAC1B,QAAQ,MAAM,GAAG,EAAO,UAAU;CACpC,GACA,EAAE,MAAM,GAAK,CACf,GAEO;AACT"}
1
+ {"version":3,"file":"devtools.js","names":[],"sources":["../src/devtools/index.ts"],"sourcesContent":["/**\n * @vielzeug/prism: debug utilities for chart visualisation.\n *\n * Import from the dedicated sub-path so debug code is tree-shaken from\n * production bundles:\n * ```ts\n * import { debugChart } from '@vielzeug/prism/devtools';\n * ```\n *\n * Internal validation warnings (misuse of the public API) are emitted\n * automatically in development builds and live in the private `src/_dev.ts`\n * module. They are not part of this sub-path.\n */\n\nimport type { ChartHandle } from '../types';\n\n/** Options for {@link debugChart}. */\nexport interface DebugChartOptions {\n /**\n * Label used in log prefixes. Defaults to `'chart'`, producing `[prism:chart]`.\n * Useful when debugging multiple charts on the same page so their log output\n * can be distinguished:\n * ```ts\n * debugChart(createLineChart(el, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * ```\n */\n label?: string;\n}\n\n/**\n * Wraps an already-created {@link ChartHandle} with lifecycle logging pre-wired to\n * `console.debug`, imported from a dedicated sub-path so `console.debug` references\n * and the `ResizeObserver` it uses are tree-shaken from production bundles when this\n * sub-path is not imported.\n *\n * Logs the chart's mount, every resize (via its own `ResizeObserver` on `handle.el`,\n * independent of the chart's internal one), and disposal, each with `[prism:<label>]`\n * prefixes. Returns the same handle unchanged so it can wrap any `create*Chart()` call\n * in place.\n *\n * @example\n * ```ts\n * import { createLineChart } from '@vielzeug/prism';\n * import { debugChart } from '@vielzeug/prism/devtools';\n *\n * const chart = debugChart(createLineChart(container, config), { label: 'revenue' });\n * // [prism:revenue] mounted\n * // [prism:revenue] resized 600×300\n * chart.dispose();\n * // [prism:revenue] disposed\n * ```\n */\nexport function debugChart<T extends ChartHandle>(handle: T, options?: DebugChartOptions): T {\n const prefix = `[prism:${options?.label ?? 'chart'}]`;\n\n console.debug(`${prefix} mounted`);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n const { height, width } = entry.contentRect;\n\n console.debug(`${prefix} resized ${Math.round(width)}×${Math.round(height)}`);\n }\n });\n\n resizeObserver.observe(handle.el);\n\n handle.disposalSignal.addEventListener(\n 'abort',\n () => {\n resizeObserver.disconnect();\n console.debug(`${prefix} disposed`);\n },\n { once: true },\n );\n\n return handle;\n}\n"],"mappings":"AAqDA,SAAgB,WAAkC,EAAW,EAAgC,CAC3F,IAAM,EAAS,UAAU,GAAS,OAAS,QAAQ,GAEnD,QAAQ,MAAM,GAAG,EAAO,SAAS,EAEjC,IAAM,EAAiB,IAAI,eAAgB,GAAY,CACrD,IAAM,EAAQ,EAAQ,GAEtB,GAAI,EAAO,CACT,GAAM,CAAE,SAAQ,SAAU,EAAM,YAEhC,QAAQ,MAAM,GAAG,EAAO,YAAY,KAAK,MAAM,CAAK,EAAE,GAAG,KAAK,MAAM,CAAM,GAAG,CAC/E,CACF,CAAC,EAaD,OAXA,EAAe,QAAQ,EAAO,EAAE,EAEhC,EAAO,eAAe,iBACpB,YACM,CACJ,EAAe,WAAW,EAC1B,QAAQ,MAAM,GAAG,EAAO,UAAU,CACpC,EACA,CAAE,KAAM,EAAK,CACf,EAEO,CACT"}
package/dist/errors.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},t=class extends e{};exports.PrismError=e,exports.PrismRenderError=t;
1
+ var PrismError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},PrismRenderError=class extends PrismError{};exports.PrismError=PrismError,exports.PrismRenderError=PrismRenderError;
2
2
  //# sourceMappingURL=errors.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,EAAb,cAAgC,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAGa,EAAb,cAAsC,CAAW,CAAC"}
1
+ {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead: see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,WAAb,cAAgC,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAGa,iBAAb,cAAsC,UAAW,CAAC"}
package/dist/errors.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  export declare class PrismError extends Error {
3
3
  constructor(message: string, opts?: ErrorOptions);
4
4
  }
5
- /** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */
5
+ /** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead: see the package docs for details. */
6
6
  export declare class PrismRenderError extends PrismError {
7
7
  }
8
8
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY;CAKjD;AAED,sPAAsP;AACtP,qBAAa,gBAAiB,SAAQ,UAAU;CAAG"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY;CAKjD;AAED,qPAAqP;AACrP,qBAAa,gBAAiB,SAAQ,UAAU;CAAG"}
package/dist/errors.js CHANGED
@@ -1,10 +1,2 @@
1
- //#region src/errors.ts
2
- var e = class extends Error {
3
- constructor(e, t) {
4
- super(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);
5
- }
6
- }, t = class extends e {};
7
- //#endregion
8
- export { e as PrismError, t as PrismRenderError };
9
-
1
+ var PrismError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},PrismRenderError=class extends PrismError{};export{PrismError,PrismRenderError};
10
2
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":";AACA,IAAa,IAAb,cAAgC,MAAM;CACpC,YAAY,GAAiB,GAAqB;EAGhD,AAFA,MAAM,GAAS,CAAI,GACnB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;AACF,GAGa,IAAb,cAAsC,EAAW,CAAC"}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead: see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,WAAb,cAAgC,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,EAGa,iBAAb,cAAsC,UAAW,CAAC"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./scales/linear.cjs"),t=require("./scales/time.cjs"),n=require("./errors.cjs"),r=require("./theme/index.cjs"),i=require("./charts/area/area-chart.cjs"),a=require("./scales/band.cjs"),o=require("./charts/bar/bar-chart.cjs"),s=require("./charts/line/line-chart.cjs"),c=require("./charts/pie/pie-chart.cjs"),l=require("./charts/sparkline/sparkline.cjs");exports.PrismError=n.PrismError,exports.PrismRenderError=n.PrismRenderError,exports.bandScale=a.bandScale,exports.createAreaChart=i.createAreaChart,exports.createBarChart=o.createBarChart,exports.createLineChart=s.createLineChart,exports.createPieChart=c.createPieChart,exports.createSparkline=l.createSparkline,exports.linearScale=e.linearScale,exports.resetTheme=r.resetTheme,exports.seriesColor=r.seriesColor,exports.setTheme=r.setTheme,exports.timeScale=t.timeScale;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./scales/linear.cjs"),t=require("./scales/time.cjs"),n=require("./errors.cjs"),r=require("./theme/index.cjs"),i=require("./charts/area/area-chart.cjs"),a=require("./scales/band.cjs"),o=require("./charts/bar/bar-chart.cjs"),s=require("./charts/line/line-chart.cjs"),c=require("./charts/pie/pie-chart.cjs"),l=require("./charts/radar/radar-chart.cjs"),u=require("./charts/sparkline/sparkline.cjs");exports.PrismError=n.PrismError,exports.PrismRenderError=n.PrismRenderError,exports.bandScale=a.bandScale,exports.createAreaChart=i.createAreaChart,exports.createBarChart=o.createBarChart,exports.createLineChart=s.createLineChart,exports.createPieChart=c.createPieChart,exports.createRadarChart=l.createRadarChart,exports.createSparkline=u.createSparkline,exports.linearScale=e.linearScale,exports.resetTheme=r.resetTheme,exports.seriesColor=r.seriesColor,exports.setTheme=r.setTheme,exports.timeScale=t.timeScale;
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export { createAreaChart } from './charts/area';
3
3
  export { createBarChart } from './charts/bar';
4
4
  export { createLineChart } from './charts/line';
5
5
  export { createPieChart } from './charts/pie';
6
+ export { createRadarChart } from './charts/radar';
6
7
  export { createSparkline } from './charts/sparkline';
7
8
  export { PrismError, PrismRenderError } from './errors';
8
9
  export { bandScale } from './scales/band';
@@ -10,5 +11,5 @@ export { linearScale } from './scales/linear';
10
11
  export { timeScale } from './scales/time';
11
12
  export type { BandScaleConfig, LinearScaleConfig, TimeScaleConfig } from './scales/types';
12
13
  export { resetTheme, seriesColor, setTheme } from './theme';
13
- export type { AreaChartConfig, AreaSeriesConfig, AxisConfig, AxisPosition, BandScale, BarChartConfig, BarSeriesConfig, BarVariant, BaseChartConfig, ChartA11y, ChartDimensions, ChartEvent, ChartHandle, ChartMargin, ContinuousDatum, CrosshairConfig, Datum, GridConfig, HorizontalAxisPosition, LegendConfig, LegendPosition, LineChartConfig, LineSeriesConfig, PieChartConfig, PieSliceConfig, PieVariant, PrismTheme, Scale, Series, SparklineConfig, SparklineVariant, StackSegment, TooltipConfig, TransitionConfig, VerticalAxisPosition, XAxisConfig, YAxisConfig, } from './types';
14
+ export type { AreaChartConfig, AreaSeriesConfig, AxisConfig, AxisPosition, BandScale, BarChartConfig, BarSeriesConfig, BarVariant, BaseChartConfig, ChartA11y, ChartDimensions, ChartEvent, ChartHandle, ChartMargin, ContinuousDatum, CrosshairConfig, Datum, GridConfig, HorizontalAxisPosition, LegendConfig, LegendPosition, LineChartConfig, LineSeriesConfig, PieChartConfig, PieSliceConfig, PieVariant, PrismTheme, RadarAxisConfig, RadarAxisValue, RadarChartConfig, RadarEvent, RadarGridConfig, RadarSeriesConfig, Scale, Series, SeriesValue, SparklineConfig, SparklineVariant, StackSegment, TooltipConfig, TransitionConfig, VerticalAxisPosition, XAxisConfig, YAxisConfig, } from './types';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,SAAS,EACT,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,EACf,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,KAAK,EACL,MAAM,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,SAAS,EACT,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,EACf,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1 @@
1
- import { linearScale as e } from "./scales/linear.js";
2
- import { timeScale as t } from "./scales/time.js";
3
- import { PrismError as n, PrismRenderError as r } from "./errors.js";
4
- import { resetTheme as i, seriesColor as a, setTheme as o } from "./theme/index.js";
5
- import { createAreaChart as s } from "./charts/area/area-chart.js";
6
- import { bandScale as c } from "./scales/band.js";
7
- import { createBarChart as l } from "./charts/bar/bar-chart.js";
8
- import { createLineChart as u } from "./charts/line/line-chart.js";
9
- import { createPieChart as d } from "./charts/pie/pie-chart.js";
10
- import { createSparkline as f } from "./charts/sparkline/sparkline.js";
11
- export { n as PrismError, r as PrismRenderError, c as bandScale, s as createAreaChart, l as createBarChart, u as createLineChart, d as createPieChart, f as createSparkline, e as linearScale, i as resetTheme, a as seriesColor, o as setTheme, t as timeScale };
1
+ import{linearScale as e}from"./scales/linear.js";import{timeScale as t}from"./scales/time.js";import{PrismError as n,PrismRenderError as r}from"./errors.js";import{resetTheme as i,seriesColor as a,setTheme as o}from"./theme/index.js";import{createAreaChart as s}from"./charts/area/area-chart.js";import{bandScale as c}from"./scales/band.js";import{createBarChart as l}from"./charts/bar/bar-chart.js";import{createLineChart as u}from"./charts/line/line-chart.js";import{createPieChart as d}from"./charts/pie/pie-chart.js";import{createRadarChart as f}from"./charts/radar/radar-chart.js";import{createSparkline as p}from"./charts/sparkline/sparkline.js";export{n as PrismError,r as PrismRenderError,c as bandScale,s as createAreaChart,l as createBarChart,u as createLineChart,d as createPieChart,f as createRadarChart,p as createSparkline,e as linearScale,i as resetTheme,a as seriesColor,o as setTheme,t as timeScale};
@@ -0,0 +1,2 @@
1
+ const e=require("../svg/element.cjs");function describeValues(e,t,n=String){return`${e}: ${t.map(({datum:e,series:t})=>`${t.name} ${e?n(e.value):`n/a`}`).join(`, `)}`}function createAnnouncer(t,n){let r=e.createSvgElement(`text`,{"aria-live":`polite`,class:n,role:`status`,x:-9999,y:-9999});return t.appendChild(r),{announce(e){r.textContent=e},clear(){r.textContent=``}}}exports.createAnnouncer=createAnnouncer,exports.describeValues=describeValues;
2
+ //# sourceMappingURL=announcer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announcer.cjs","names":[],"sources":["../../src/interaction/announcer.ts"],"sourcesContent":["import { createSvgElement } from '../svg/element';\nimport type { Datum, Series } from '../types';\n\nexport interface Announcer {\n announce(text: string): void;\n clear(): void;\n}\n\n/** \"Label: A 6, B 9\": the comparison text shared by tooltips and announcements. */\nexport function describeValues(\n label: string,\n values: readonly { datum: Datum | undefined; series: Series }[],\n format: (value: number) => string = String,\n): string {\n return `${label}: ${values.map(({ datum, series }) => `${series.name} ${datum ? format(datum.value) : 'n/a'}`).join(', ')}`;\n}\n\n/** Polite status region for charts whose visuals are aria-hidden. */\nexport function createAnnouncer(parent: SVGElement, className: string): Announcer {\n // Off-canvas rather than CSS-hidden so announcements work without prism's stylesheet.\n const region = createSvgElement('text', {\n 'aria-live': 'polite',\n class: className,\n role: 'status',\n x: -9999,\n y: -9999,\n });\n\n parent.appendChild(region);\n\n return {\n announce(text) {\n region.textContent = text;\n },\n clear() {\n region.textContent = '';\n },\n };\n}\n"],"mappings":"sCASA,SAAgB,eACd,EACA,EACA,EAAoC,OAC5B,CACR,MAAO,GAAG,EAAM,IAAI,EAAO,KAAK,CAAE,QAAO,YAAa,GAAG,EAAO,KAAK,GAAG,EAAQ,EAAO,EAAM,KAAK,EAAI,OAAO,CAAC,CAAC,KAAK,IAAI,GAC1H,CAGA,SAAgB,gBAAgB,EAAoB,EAA8B,CAEhF,IAAM,EAAS,EAAA,iBAAiB,OAAQ,CACtC,YAAa,SACb,MAAO,EACP,KAAM,SACN,EAAG,MACH,EAAG,KACL,CAAC,EAID,OAFA,EAAO,YAAY,CAAM,EAElB,CACL,SAAS,EAAM,CACb,EAAO,YAAc,CACvB,EACA,OAAQ,CACN,EAAO,YAAc,EACvB,CACF,CACF"}
@@ -0,0 +1,13 @@
1
+ import type { Datum, Series } from '../types';
2
+ export interface Announcer {
3
+ announce(text: string): void;
4
+ clear(): void;
5
+ }
6
+ /** "Label: A 6, B 9": the comparison text shared by tooltips and announcements. */
7
+ export declare function describeValues(label: string, values: readonly {
8
+ datum: Datum | undefined;
9
+ series: Series;
10
+ }[], format?: (value: number) => string): string;
11
+ /** Polite status region for charts whose visuals are aria-hidden. */
12
+ export declare function createAnnouncer(parent: SVGElement, className: string): Announcer;
13
+ //# sourceMappingURL=announcer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announcer.d.ts","sourceRoot":"","sources":["../../src/interaction/announcer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS;IAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/D,MAAM,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAe,GACzC,MAAM,CAER;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAoBhF"}
@@ -0,0 +1,2 @@
1
+ import{createSvgElement as e}from"../svg/element.js";function describeValues(e,t,n=String){return`${e}: ${t.map(({datum:e,series:t})=>`${t.name} ${e?n(e.value):`n/a`}`).join(`, `)}`}function createAnnouncer(t,n){let r=e(`text`,{"aria-live":`polite`,class:n,role:`status`,x:-9999,y:-9999});return t.appendChild(r),{announce(e){r.textContent=e},clear(){r.textContent=``}}}export{createAnnouncer,describeValues};
2
+ //# sourceMappingURL=announcer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announcer.js","names":[],"sources":["../../src/interaction/announcer.ts"],"sourcesContent":["import { createSvgElement } from '../svg/element';\nimport type { Datum, Series } from '../types';\n\nexport interface Announcer {\n announce(text: string): void;\n clear(): void;\n}\n\n/** \"Label: A 6, B 9\": the comparison text shared by tooltips and announcements. */\nexport function describeValues(\n label: string,\n values: readonly { datum: Datum | undefined; series: Series }[],\n format: (value: number) => string = String,\n): string {\n return `${label}: ${values.map(({ datum, series }) => `${series.name} ${datum ? format(datum.value) : 'n/a'}`).join(', ')}`;\n}\n\n/** Polite status region for charts whose visuals are aria-hidden. */\nexport function createAnnouncer(parent: SVGElement, className: string): Announcer {\n // Off-canvas rather than CSS-hidden so announcements work without prism's stylesheet.\n const region = createSvgElement('text', {\n 'aria-live': 'polite',\n class: className,\n role: 'status',\n x: -9999,\n y: -9999,\n });\n\n parent.appendChild(region);\n\n return {\n announce(text) {\n region.textContent = text;\n },\n clear() {\n region.textContent = '';\n },\n };\n}\n"],"mappings":"qDASA,SAAgB,eACd,EACA,EACA,EAAoC,OAC5B,CACR,MAAO,GAAG,EAAM,IAAI,EAAO,KAAK,CAAE,QAAO,YAAa,GAAG,EAAO,KAAK,GAAG,EAAQ,EAAO,EAAM,KAAK,EAAI,OAAO,CAAC,CAAC,KAAK,IAAI,GAC1H,CAGA,SAAgB,gBAAgB,EAAoB,EAA8B,CAEhF,IAAM,EAAS,EAAiB,OAAQ,CACtC,YAAa,SACb,MAAO,EACP,KAAM,SACN,EAAG,MACH,EAAG,KACL,CAAC,EAID,OAFA,EAAO,YAAY,CAAM,EAElB,CACL,SAAS,EAAM,CACb,EAAO,YAAc,CACvB,EACA,OAAQ,CACN,EAAO,YAAc,EACvB,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- const e=require("../svg/element.cjs");function t(t,n){let r=n===!0||n?.vertical!==!1,i=n!==!0&&n?.horizontal===!0,a=n===!0||n?.snap!==!1,o=e.createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),s=r?e.createSvgElement(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,c=i?e.createSvgElement(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;s&&o.appendChild(s),c&&o.appendChild(c),t.appendChild(o);let l=e.createSvgElement(`text`,{"aria-live":`polite`,class:`prism-crosshair-live`,role:`status`,x:-9999,y:-9999});return t.appendChild(l),{hide(){o.style.display=`none`,l.textContent=``},show(t,n,r,i,a){o.style.display=``,s&&e.setAttributes(s,{x1:t,x2:t,y1:0,y2:i}),c&&e.setAttributes(c,{x1:0,x2:r,y1:n,y2:n}),a!==void 0&&(l.textContent=a)},snap:a}}exports.createCrosshair=t;
1
+ const e=require("../svg/element.cjs");function createCrosshair(t,n){let r=n===!0||n?.vertical!==!1,i=n!==!0&&n?.horizontal===!0,a=n===!0||n?.snap!==!1,o=e.createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),s=r?e.createSvgElement(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,c=i?e.createSvgElement(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;return s&&o.appendChild(s),c&&o.appendChild(c),t.appendChild(o),{hide(){o.style.display=`none`},show(t,n,r,i){o.style.display=``,s&&e.setAttributes(s,{x1:t,x2:t,y1:0,y2:i}),c&&e.setAttributes(c,{x1:0,x2:r,y1:n,y2:n})},snap:a}}exports.createCrosshair=createCrosshair;
2
2
  //# sourceMappingURL=crosshair.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"crosshair.cjs","names":[],"sources":["../../src/interaction/crosshair.ts"],"sourcesContent":["import { createSvgElement, setAttributes } from '../svg/element';\nimport type { CrosshairConfig } from '../types';\n\nexport interface CrosshairState {\n hide(): void;\n /**\n * @param announceText Optional text describing the value at the crosshair position,\n * announced via the crosshair's ARIA live region — used when no tooltip is also shown.\n */\n show(x: number, y: number, width: number, height: number, announceText?: string): void;\n /** When `false`, the crosshair follows the raw mouse position instead of snapping to the nearest datum. */\n readonly snap: boolean;\n}\n\nexport function createCrosshair(parent: SVGGElement, config?: CrosshairConfig | true): CrosshairState {\n const showVertical = config === true || config?.vertical !== false;\n const showHorizontal = config !== true && config?.horizontal === true;\n const snap = config === true || config?.snap !== false;\n\n const group = createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-crosshair', style: 'display:none' });\n\n const vLine = showVertical\n ? createSvgElement('line', { class: 'prism-crosshair-v', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n const hLine = showHorizontal\n ? createSvgElement('line', { class: 'prism-crosshair-h', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n\n if (vLine) group.appendChild(vLine);\n\n if (hLine) group.appendChild(hLine);\n\n parent.appendChild(group);\n\n // Non-modal status region for screen readers — the visual crosshair lines above are\n // aria-hidden (purely decorative), so the current value is announced here instead.\n // Positioned off-canvas rather than visually hidden via CSS so it works without prism's stylesheet.\n const liveRegion = createSvgElement('text', {\n 'aria-live': 'polite',\n class: 'prism-crosshair-live',\n role: 'status',\n x: -9999,\n y: -9999,\n });\n\n parent.appendChild(liveRegion);\n\n return {\n hide() {\n group.style.display = 'none';\n liveRegion.textContent = '';\n },\n show(x: number, y: number, width: number, height: number, announceText?: string) {\n group.style.display = '';\n\n if (vLine) setAttributes(vLine, { x1: x, x2: x, y1: 0, y2: height });\n\n if (hLine) setAttributes(hLine, { x1: 0, x2: width, y1: y, y2: y });\n\n if (announceText !== undefined) liveRegion.textContent = announceText;\n },\n snap,\n };\n}\n"],"mappings":"sCAcA,SAAgB,EAAgB,EAAqB,EAAiD,CACpG,IAAM,EAAe,IAAW,IAAQ,GAAQ,WAAa,GACvD,EAAiB,IAAW,IAAQ,GAAQ,aAAe,GAC3D,EAAO,IAAW,IAAQ,GAAQ,OAAS,GAE3C,EAAQ,EAAA,iBAAiB,IAAK,CAAE,cAAe,OAAQ,MAAO,kBAAmB,MAAO,cAAe,CAAC,EAExG,EAAQ,EACV,EAAA,iBAAiB,OAAQ,CAAE,MAAO,oBAAqB,mBAAoB,kCAAmC,CAAC,EAC/G,KACE,EAAQ,EACV,EAAA,iBAAiB,OAAQ,CAAE,MAAO,oBAAqB,mBAAoB,kCAAmC,CAAC,EAC/G,KAEA,GAAO,EAAM,YAAY,CAAK,EAE9B,GAAO,EAAM,YAAY,CAAK,EAElC,EAAO,YAAY,CAAK,EAKxB,IAAM,EAAa,EAAA,iBAAiB,OAAQ,CAC1C,YAAa,SACb,MAAO,uBACP,KAAM,SACN,EAAG,MACH,EAAG,KACL,CAAC,EAID,OAFA,EAAO,YAAY,CAAU,EAEtB,CACL,MAAO,CACL,EAAM,MAAM,QAAU,OACtB,EAAW,YAAc,EAC3B,EACA,KAAK,EAAW,EAAW,EAAe,EAAgB,EAAuB,CAC/E,EAAM,MAAM,QAAU,GAElB,GAAO,EAAA,cAAc,EAAO,CAAE,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAO,CAAC,EAE/D,GAAO,EAAA,cAAc,EAAO,CAAE,GAAI,EAAG,GAAI,EAAO,GAAI,EAAG,GAAI,CAAE,CAAC,EAE9D,IAAiB,IAAA,KAAW,EAAW,YAAc,EAC3D,EACA,MACF,CACF"}
1
+ {"version":3,"file":"crosshair.cjs","names":[],"sources":["../../src/interaction/crosshair.ts"],"sourcesContent":["import { createSvgElement, setAttributes } from '../svg/element';\nimport type { CrosshairConfig } from '../types';\n\nexport interface CrosshairState {\n hide(): void;\n show(x: number, y: number, width: number, height: number): void;\n /** When `false`, the crosshair follows the raw mouse position instead of snapping to the nearest datum. */\n readonly snap: boolean;\n}\n\nexport function createCrosshair(parent: SVGGElement, config?: CrosshairConfig | true): CrosshairState {\n const showVertical = config === true || config?.vertical !== false;\n const showHorizontal = config !== true && config?.horizontal === true;\n const snap = config === true || config?.snap !== false;\n\n const group = createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-crosshair', style: 'display:none' });\n\n const vLine = showVertical\n ? createSvgElement('line', { class: 'prism-crosshair-v', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n const hLine = showHorizontal\n ? createSvgElement('line', { class: 'prism-crosshair-h', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n\n if (vLine) group.appendChild(vLine);\n\n if (hLine) group.appendChild(hLine);\n\n parent.appendChild(group);\n\n return {\n hide() {\n group.style.display = 'none';\n },\n show(x: number, y: number, width: number, height: number) {\n group.style.display = '';\n\n if (vLine) setAttributes(vLine, { x1: x, x2: x, y1: 0, y2: height });\n\n if (hLine) setAttributes(hLine, { x1: 0, x2: width, y1: y, y2: y });\n },\n snap,\n };\n}\n"],"mappings":"sCAUA,SAAgB,gBAAgB,EAAqB,EAAiD,CACpG,IAAM,EAAe,IAAW,IAAQ,GAAQ,WAAa,GACvD,EAAiB,IAAW,IAAQ,GAAQ,aAAe,GAC3D,EAAO,IAAW,IAAQ,GAAQ,OAAS,GAE3C,EAAQ,EAAA,iBAAiB,IAAK,CAAE,cAAe,OAAQ,MAAO,kBAAmB,MAAO,cAAe,CAAC,EAExG,EAAQ,EACV,EAAA,iBAAiB,OAAQ,CAAE,MAAO,oBAAqB,mBAAoB,kCAAmC,CAAC,EAC/G,KACE,EAAQ,EACV,EAAA,iBAAiB,OAAQ,CAAE,MAAO,oBAAqB,mBAAoB,kCAAmC,CAAC,EAC/G,KAQJ,OANI,GAAO,EAAM,YAAY,CAAK,EAE9B,GAAO,EAAM,YAAY,CAAK,EAElC,EAAO,YAAY,CAAK,EAEjB,CACL,MAAO,CACL,EAAM,MAAM,QAAU,MACxB,EACA,KAAK,EAAW,EAAW,EAAe,EAAgB,CACxD,EAAM,MAAM,QAAU,GAElB,GAAO,EAAA,cAAc,EAAO,CAAE,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAO,CAAC,EAE/D,GAAO,EAAA,cAAc,EAAO,CAAE,GAAI,EAAG,GAAI,EAAO,GAAI,EAAG,GAAI,CAAE,CAAC,CACpE,EACA,MACF,CACF"}
@@ -1,11 +1,7 @@
1
1
  import type { CrosshairConfig } from '../types';
2
2
  export interface CrosshairState {
3
3
  hide(): void;
4
- /**
5
- * @param announceText Optional text describing the value at the crosshair position,
6
- * announced via the crosshair's ARIA live region — used when no tooltip is also shown.
7
- */
8
- show(x: number, y: number, width: number, height: number, announceText?: string): void;
4
+ show(x: number, y: number, width: number, height: number): void;
9
5
  /** When `false`, the crosshair follows the raw mouse position instead of snapping to the nearest datum. */
10
6
  readonly snap: boolean;
11
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"crosshair.d.ts","sourceRoot":"","sources":["../../src/interaction/crosshair.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,IAAI,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvF,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,cAAc,CAiDpG"}
1
+ {"version":3,"file":"crosshair.d.ts","sourceRoot":"","sources":["../../src/interaction/crosshair.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,cAAc,CAiCpG"}
@@ -1,46 +1,2 @@
1
- import { createSvgElement as e, setAttributes as t } from "../svg/element.js";
2
- //#region src/interaction/crosshair.ts
3
- function n(n, r) {
4
- let i = r === !0 || r?.vertical !== !1, a = r !== !0 && r?.horizontal === !0, o = r === !0 || r?.snap !== !1, s = e("g", {
5
- "aria-hidden": "true",
6
- class: "prism-crosshair",
7
- style: "display:none"
8
- }), c = i ? e("line", {
9
- class: "prism-crosshair-v",
10
- "stroke-dasharray": "var(--prism-crosshair-dash, 4 2)"
11
- }) : null, l = a ? e("line", {
12
- class: "prism-crosshair-h",
13
- "stroke-dasharray": "var(--prism-crosshair-dash, 4 2)"
14
- }) : null;
15
- c && s.appendChild(c), l && s.appendChild(l), n.appendChild(s);
16
- let u = e("text", {
17
- "aria-live": "polite",
18
- class: "prism-crosshair-live",
19
- role: "status",
20
- x: -9999,
21
- y: -9999
22
- });
23
- return n.appendChild(u), {
24
- hide() {
25
- s.style.display = "none", u.textContent = "";
26
- },
27
- show(e, n, r, i, a) {
28
- s.style.display = "", c && t(c, {
29
- x1: e,
30
- x2: e,
31
- y1: 0,
32
- y2: i
33
- }), l && t(l, {
34
- x1: 0,
35
- x2: r,
36
- y1: n,
37
- y2: n
38
- }), a !== void 0 && (u.textContent = a);
39
- },
40
- snap: o
41
- };
42
- }
43
- //#endregion
44
- export { n as createCrosshair };
45
-
1
+ import{createSvgElement as e,setAttributes as t}from"../svg/element.js";function createCrosshair(n,r){let i=r===!0||r?.vertical!==!1,a=r!==!0&&r?.horizontal===!0,o=r===!0||r?.snap!==!1,s=e(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),c=i?e(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,l=a?e(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;return c&&s.appendChild(c),l&&s.appendChild(l),n.appendChild(s),{hide(){s.style.display=`none`},show(e,n,r,i){s.style.display=``,c&&t(c,{x1:e,x2:e,y1:0,y2:i}),l&&t(l,{x1:0,x2:r,y1:n,y2:n})},snap:o}}export{createCrosshair};
46
2
  //# sourceMappingURL=crosshair.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crosshair.js","names":[],"sources":["../../src/interaction/crosshair.ts"],"sourcesContent":["import { createSvgElement, setAttributes } from '../svg/element';\nimport type { CrosshairConfig } from '../types';\n\nexport interface CrosshairState {\n hide(): void;\n /**\n * @param announceText Optional text describing the value at the crosshair position,\n * announced via the crosshair's ARIA live region — used when no tooltip is also shown.\n */\n show(x: number, y: number, width: number, height: number, announceText?: string): void;\n /** When `false`, the crosshair follows the raw mouse position instead of snapping to the nearest datum. */\n readonly snap: boolean;\n}\n\nexport function createCrosshair(parent: SVGGElement, config?: CrosshairConfig | true): CrosshairState {\n const showVertical = config === true || config?.vertical !== false;\n const showHorizontal = config !== true && config?.horizontal === true;\n const snap = config === true || config?.snap !== false;\n\n const group = createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-crosshair', style: 'display:none' });\n\n const vLine = showVertical\n ? createSvgElement('line', { class: 'prism-crosshair-v', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n const hLine = showHorizontal\n ? createSvgElement('line', { class: 'prism-crosshair-h', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n\n if (vLine) group.appendChild(vLine);\n\n if (hLine) group.appendChild(hLine);\n\n parent.appendChild(group);\n\n // Non-modal status region for screen readers — the visual crosshair lines above are\n // aria-hidden (purely decorative), so the current value is announced here instead.\n // Positioned off-canvas rather than visually hidden via CSS so it works without prism's stylesheet.\n const liveRegion = createSvgElement('text', {\n 'aria-live': 'polite',\n class: 'prism-crosshair-live',\n role: 'status',\n x: -9999,\n y: -9999,\n });\n\n parent.appendChild(liveRegion);\n\n return {\n hide() {\n group.style.display = 'none';\n liveRegion.textContent = '';\n },\n show(x: number, y: number, width: number, height: number, announceText?: string) {\n group.style.display = '';\n\n if (vLine) setAttributes(vLine, { x1: x, x2: x, y1: 0, y2: height });\n\n if (hLine) setAttributes(hLine, { x1: 0, x2: width, y1: y, y2: y });\n\n if (announceText !== undefined) liveRegion.textContent = announceText;\n },\n snap,\n };\n}\n"],"mappings":";;AAcA,SAAgB,EAAgB,GAAqB,GAAiD;CACpG,IAAM,IAAe,MAAW,MAAQ,GAAQ,aAAa,IACvD,IAAiB,MAAW,MAAQ,GAAQ,eAAe,IAC3D,IAAO,MAAW,MAAQ,GAAQ,SAAS,IAE3C,IAAQ,EAAiB,KAAK;EAAE,eAAe;EAAQ,OAAO;EAAmB,OAAO;CAAe,CAAC,GAExG,IAAQ,IACV,EAAiB,QAAQ;EAAE,OAAO;EAAqB,oBAAoB;CAAmC,CAAC,IAC/G,MACE,IAAQ,IACV,EAAiB,QAAQ;EAAE,OAAO;EAAqB,oBAAoB;CAAmC,CAAC,IAC/G;CAMJ,AAJI,KAAO,EAAM,YAAY,CAAK,GAE9B,KAAO,EAAM,YAAY,CAAK,GAElC,EAAO,YAAY,CAAK;CAKxB,IAAM,IAAa,EAAiB,QAAQ;EAC1C,aAAa;EACb,OAAO;EACP,MAAM;EACN,GAAG;EACH,GAAG;CACL,CAAC;CAID,OAFA,EAAO,YAAY,CAAU,GAEtB;EACL,OAAO;GAEL,AADA,EAAM,MAAM,UAAU,QACtB,EAAW,cAAc;EAC3B;EACA,KAAK,GAAW,GAAW,GAAe,GAAgB,GAAuB;GAO/E,AANA,EAAM,MAAM,UAAU,IAElB,KAAO,EAAc,GAAO;IAAE,IAAI;IAAG,IAAI;IAAG,IAAI;IAAG,IAAI;GAAO,CAAC,GAE/D,KAAO,EAAc,GAAO;IAAE,IAAI;IAAG,IAAI;IAAO,IAAI;IAAG,IAAI;GAAE,CAAC,GAE9D,MAAiB,KAAA,MAAW,EAAW,cAAc;EAC3D;EACA;CACF;AACF"}
1
+ {"version":3,"file":"crosshair.js","names":[],"sources":["../../src/interaction/crosshair.ts"],"sourcesContent":["import { createSvgElement, setAttributes } from '../svg/element';\nimport type { CrosshairConfig } from '../types';\n\nexport interface CrosshairState {\n hide(): void;\n show(x: number, y: number, width: number, height: number): void;\n /** When `false`, the crosshair follows the raw mouse position instead of snapping to the nearest datum. */\n readonly snap: boolean;\n}\n\nexport function createCrosshair(parent: SVGGElement, config?: CrosshairConfig | true): CrosshairState {\n const showVertical = config === true || config?.vertical !== false;\n const showHorizontal = config !== true && config?.horizontal === true;\n const snap = config === true || config?.snap !== false;\n\n const group = createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-crosshair', style: 'display:none' });\n\n const vLine = showVertical\n ? createSvgElement('line', { class: 'prism-crosshair-v', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n const hLine = showHorizontal\n ? createSvgElement('line', { class: 'prism-crosshair-h', 'stroke-dasharray': 'var(--prism-crosshair-dash, 4 2)' })\n : null;\n\n if (vLine) group.appendChild(vLine);\n\n if (hLine) group.appendChild(hLine);\n\n parent.appendChild(group);\n\n return {\n hide() {\n group.style.display = 'none';\n },\n show(x: number, y: number, width: number, height: number) {\n group.style.display = '';\n\n if (vLine) setAttributes(vLine, { x1: x, x2: x, y1: 0, y2: height });\n\n if (hLine) setAttributes(hLine, { x1: 0, x2: width, y1: y, y2: y });\n },\n snap,\n };\n}\n"],"mappings":"wEAUA,SAAgB,gBAAgB,EAAqB,EAAiD,CACpG,IAAM,EAAe,IAAW,IAAQ,GAAQ,WAAa,GACvD,EAAiB,IAAW,IAAQ,GAAQ,aAAe,GAC3D,EAAO,IAAW,IAAQ,GAAQ,OAAS,GAE3C,EAAQ,EAAiB,IAAK,CAAE,cAAe,OAAQ,MAAO,kBAAmB,MAAO,cAAe,CAAC,EAExG,EAAQ,EACV,EAAiB,OAAQ,CAAE,MAAO,oBAAqB,mBAAoB,kCAAmC,CAAC,EAC/G,KACE,EAAQ,EACV,EAAiB,OAAQ,CAAE,MAAO,oBAAqB,mBAAoB,kCAAmC,CAAC,EAC/G,KAQJ,OANI,GAAO,EAAM,YAAY,CAAK,EAE9B,GAAO,EAAM,YAAY,CAAK,EAElC,EAAO,YAAY,CAAK,EAEjB,CACL,MAAO,CACL,EAAM,MAAM,QAAU,MACxB,EACA,KAAK,EAAW,EAAW,EAAe,EAAgB,CACxD,EAAM,MAAM,QAAU,GAElB,GAAO,EAAc,EAAO,CAAE,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAO,CAAC,EAE/D,GAAO,EAAc,EAAO,CAAE,GAAI,EAAG,GAAI,EAAO,GAAI,EAAG,GAAI,CAAE,CAAC,CACpE,EACA,MACF,CACF"}
@@ -1,2 +1,2 @@
1
- function e(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}exports.getMousePosition=e;
1
+ function getMousePosition(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}exports.getMousePosition=getMousePosition;
2
2
  //# sourceMappingURL=events.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.cjs","names":[],"sources":["../../src/interaction/events.ts"],"sourcesContent":["import type { Point } from '../svg/path';\n\nexport function getMousePosition(svg: SVGSVGElement, event: MouseEvent, offsetX: number, offsetY: number): Point {\n const rect = svg.getBoundingClientRect();\n\n return {\n x: event.clientX - rect.left - offsetX,\n y: event.clientY - rect.top - offsetY,\n };\n}\n"],"mappings":"AAEA,SAAgB,EAAiB,EAAoB,EAAmB,EAAiB,EAAwB,CAC/G,IAAM,EAAO,EAAI,sBAAsB,EAEvC,MAAO,CACL,EAAG,EAAM,QAAU,EAAK,KAAO,EAC/B,EAAG,EAAM,QAAU,EAAK,IAAM,CAChC,CACF"}
1
+ {"version":3,"file":"events.cjs","names":[],"sources":["../../src/interaction/events.ts"],"sourcesContent":["import type { Point } from '../svg/path';\n\nexport function getMousePosition(svg: SVGSVGElement, event: MouseEvent, offsetX: number, offsetY: number): Point {\n const rect = svg.getBoundingClientRect();\n\n return {\n x: event.clientX - rect.left - offsetX,\n y: event.clientY - rect.top - offsetY,\n };\n}\n"],"mappings":"AAEA,SAAgB,iBAAiB,EAAoB,EAAmB,EAAiB,EAAwB,CAC/G,IAAM,EAAO,EAAI,sBAAsB,EAEvC,MAAO,CACL,EAAG,EAAM,QAAU,EAAK,KAAO,EAC/B,EAAG,EAAM,QAAU,EAAK,IAAM,CAChC,CACF"}
@@ -1,12 +1,2 @@
1
- //#region src/interaction/events.ts
2
- function e(e, t, n, r) {
3
- let i = e.getBoundingClientRect();
4
- return {
5
- x: t.clientX - i.left - n,
6
- y: t.clientY - i.top - r
7
- };
8
- }
9
- //#endregion
10
- export { e as getMousePosition };
11
-
1
+ function getMousePosition(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}export{getMousePosition};
12
2
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","names":[],"sources":["../../src/interaction/events.ts"],"sourcesContent":["import type { Point } from '../svg/path';\n\nexport function getMousePosition(svg: SVGSVGElement, event: MouseEvent, offsetX: number, offsetY: number): Point {\n const rect = svg.getBoundingClientRect();\n\n return {\n x: event.clientX - rect.left - offsetX,\n y: event.clientY - rect.top - offsetY,\n };\n}\n"],"mappings":";AAEA,SAAgB,EAAiB,GAAoB,GAAmB,GAAiB,GAAwB;CAC/G,IAAM,IAAO,EAAI,sBAAsB;CAEvC,OAAO;EACL,GAAG,EAAM,UAAU,EAAK,OAAO;EAC/B,GAAG,EAAM,UAAU,EAAK,MAAM;CAChC;AACF"}
1
+ {"version":3,"file":"events.js","names":[],"sources":["../../src/interaction/events.ts"],"sourcesContent":["import type { Point } from '../svg/path';\n\nexport function getMousePosition(svg: SVGSVGElement, event: MouseEvent, offsetX: number, offsetY: number): Point {\n const rect = svg.getBoundingClientRect();\n\n return {\n x: event.clientX - rect.left - offsetX,\n y: event.clientY - rect.top - offsetY,\n };\n}\n"],"mappings":"AAEA,SAAgB,iBAAiB,EAAoB,EAAmB,EAAiB,EAAwB,CAC/G,IAAM,EAAO,EAAI,sBAAsB,EAEvC,MAAO,CACL,EAAG,EAAM,QAAU,EAAK,KAAO,EAC/B,EAAG,EAAM,QAAU,EAAK,IAAM,CAChC,CACF"}
@@ -1,2 +1,2 @@
1
- function e(e){return e===!0?`bottom`:e.position??`bottom`}function t(t,n){let r=e(n),i=document.createElement(`div`);i.className=`prism-legend prism-legend-${r}`,r===`top`?t.insertBefore(i,t.firstChild):t.appendChild(i);let a=()=>{i.remove()};return{dispose:a,el:i,[Symbol.dispose]:a,update(e){i.replaceChildren();for(let t of e){let e=document.createElement(`div`);e.className=`prism-legend-item`;let n=document.createElement(`span`);n.className=`prism-legend-dot`,n.style.backgroundColor=t.color;let r=document.createElement(`span`);r.className=`prism-legend-label`,r.textContent=t.name,e.appendChild(n),e.appendChild(r),i.appendChild(e)}}}}exports.createLegend=t;
1
+ function resolvePosition(e){return e===!0?`bottom`:e.position??`bottom`}function createLegend(e,t){let n=resolvePosition(t),r=document.createElement(`div`);r.className=`prism-legend prism-legend-${n}`,n===`top`?e.insertBefore(r,e.firstChild):e.appendChild(r);let disposeHandle=()=>{r.remove()};return{dispose:disposeHandle,el:r,[Symbol.dispose]:disposeHandle,update(e){r.replaceChildren();for(let t of e){let e=document.createElement(`div`);e.className=`prism-legend-item`;let n=document.createElement(`span`);n.className=`prism-legend-dot`,n.style.backgroundColor=t.color;let i=document.createElement(`span`);i.className=`prism-legend-label`,i.textContent=t.name,e.appendChild(n),e.appendChild(i),r.appendChild(e)}}}}exports.createLegend=createLegend;
2
2
  //# sourceMappingURL=legend.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"legend.cjs","names":[],"sources":["../../src/interaction/legend.ts"],"sourcesContent":["import type { LegendConfig, LegendPosition } from '../types';\n\nexport interface LegendState {\n dispose(): void;\n el: HTMLDivElement | null;\n update(series: { color: string; name: string }[]): void;\n [Symbol.dispose](): void;\n}\n\nfunction resolvePosition(config: LegendConfig | true): LegendPosition {\n if (config === true) return 'bottom';\n\n return config.position ?? 'bottom';\n}\n\nexport function createLegend(container: HTMLElement, config: LegendConfig | true): LegendState {\n const position = resolvePosition(config);\n const el = document.createElement('div');\n\n el.className = `prism-legend prism-legend-${position}`;\n\n if (position === 'top') {\n container.insertBefore(el, container.firstChild);\n } else {\n container.appendChild(el);\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n [Symbol.dispose]: disposeHandle,\n update(series) {\n el.replaceChildren();\n for (const s of series) {\n const item = document.createElement('div');\n\n item.className = 'prism-legend-item';\n\n const dot = document.createElement('span');\n\n dot.className = 'prism-legend-dot';\n dot.style.backgroundColor = s.color;\n\n const label = document.createElement('span');\n\n label.className = 'prism-legend-label';\n label.textContent = s.name;\n\n item.appendChild(dot);\n item.appendChild(label);\n el.appendChild(item);\n }\n },\n };\n}\n"],"mappings":"AASA,SAAS,EAAgB,EAA6C,CAGpE,OAFI,IAAW,GAAa,SAErB,EAAO,UAAY,QAC5B,CAEA,SAAgB,EAAa,EAAwB,EAA0C,CAC7F,IAAM,EAAW,EAAgB,CAAM,EACjC,EAAK,SAAS,cAAc,KAAK,EAEvC,EAAG,UAAY,6BAA6B,IAExC,IAAa,MACf,EAAU,aAAa,EAAI,EAAU,UAAU,EAE/C,EAAU,YAAY,CAAE,EAG1B,IAAM,MAA4B,CAChC,EAAG,OAAO,CACZ,EAEA,MAAO,CACL,QAAS,EACT,MACC,OAAO,SAAU,EAClB,OAAO,EAAQ,CACb,EAAG,gBAAgB,EACnB,IAAK,IAAM,KAAK,EAAQ,CACtB,IAAM,EAAO,SAAS,cAAc,KAAK,EAEzC,EAAK,UAAY,oBAEjB,IAAM,EAAM,SAAS,cAAc,MAAM,EAEzC,EAAI,UAAY,mBAChB,EAAI,MAAM,gBAAkB,EAAE,MAE9B,IAAM,EAAQ,SAAS,cAAc,MAAM,EAE3C,EAAM,UAAY,qBAClB,EAAM,YAAc,EAAE,KAEtB,EAAK,YAAY,CAAG,EACpB,EAAK,YAAY,CAAK,EACtB,EAAG,YAAY,CAAI,CACrB,CACF,CACF,CACF"}
1
+ {"version":3,"file":"legend.cjs","names":[],"sources":["../../src/interaction/legend.ts"],"sourcesContent":["import type { LegendConfig, LegendPosition } from '../types';\n\nexport interface LegendState {\n dispose(): void;\n el: HTMLDivElement | null;\n update(series: { color: string; name: string }[]): void;\n [Symbol.dispose](): void;\n}\n\nfunction resolvePosition(config: LegendConfig | true): LegendPosition {\n if (config === true) return 'bottom';\n\n return config.position ?? 'bottom';\n}\n\nexport function createLegend(container: HTMLElement, config: LegendConfig | true): LegendState {\n const position = resolvePosition(config);\n const el = document.createElement('div');\n\n el.className = `prism-legend prism-legend-${position}`;\n\n if (position === 'top') {\n container.insertBefore(el, container.firstChild);\n } else {\n container.appendChild(el);\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n [Symbol.dispose]: disposeHandle,\n update(series) {\n el.replaceChildren();\n for (const s of series) {\n const item = document.createElement('div');\n\n item.className = 'prism-legend-item';\n\n const dot = document.createElement('span');\n\n dot.className = 'prism-legend-dot';\n dot.style.backgroundColor = s.color;\n\n const label = document.createElement('span');\n\n label.className = 'prism-legend-label';\n label.textContent = s.name;\n\n item.appendChild(dot);\n item.appendChild(label);\n el.appendChild(item);\n }\n },\n };\n}\n"],"mappings":"AASA,SAAS,gBAAgB,EAA6C,CAGpE,OAFI,IAAW,GAAa,SAErB,EAAO,UAAY,QAC5B,CAEA,SAAgB,aAAa,EAAwB,EAA0C,CAC7F,IAAM,EAAW,gBAAgB,CAAM,EACjC,EAAK,SAAS,cAAc,KAAK,EAEvC,EAAG,UAAY,6BAA6B,IAExC,IAAa,MACf,EAAU,aAAa,EAAI,EAAU,UAAU,EAE/C,EAAU,YAAY,CAAE,EAG1B,IAAM,kBAA4B,CAChC,EAAG,OAAO,CACZ,EAEA,MAAO,CACL,QAAS,cACT,MACC,OAAO,SAAU,cAClB,OAAO,EAAQ,CACb,EAAG,gBAAgB,EACnB,IAAK,IAAM,KAAK,EAAQ,CACtB,IAAM,EAAO,SAAS,cAAc,KAAK,EAEzC,EAAK,UAAY,oBAEjB,IAAM,EAAM,SAAS,cAAc,MAAM,EAEzC,EAAI,UAAY,mBAChB,EAAI,MAAM,gBAAkB,EAAE,MAE9B,IAAM,EAAQ,SAAS,cAAc,MAAM,EAE3C,EAAM,UAAY,qBAClB,EAAM,YAAc,EAAE,KAEtB,EAAK,YAAY,CAAG,EACpB,EAAK,YAAY,CAAK,EACtB,EAAG,YAAY,CAAI,CACrB,CACF,CACF,CACF"}
@@ -1,31 +1,2 @@
1
- //#region src/interaction/legend.ts
2
- function e(e) {
3
- return e === !0 ? "bottom" : e.position ?? "bottom";
4
- }
5
- function t(t, n) {
6
- let r = e(n), i = document.createElement("div");
7
- i.className = `prism-legend prism-legend-${r}`, r === "top" ? t.insertBefore(i, t.firstChild) : t.appendChild(i);
8
- let a = () => {
9
- i.remove();
10
- };
11
- return {
12
- dispose: a,
13
- el: i,
14
- [Symbol.dispose]: a,
15
- update(e) {
16
- i.replaceChildren();
17
- for (let t of e) {
18
- let e = document.createElement("div");
19
- e.className = "prism-legend-item";
20
- let n = document.createElement("span");
21
- n.className = "prism-legend-dot", n.style.backgroundColor = t.color;
22
- let r = document.createElement("span");
23
- r.className = "prism-legend-label", r.textContent = t.name, e.appendChild(n), e.appendChild(r), i.appendChild(e);
24
- }
25
- }
26
- };
27
- }
28
- //#endregion
29
- export { t as createLegend };
30
-
1
+ function resolvePosition(e){return e===!0?`bottom`:e.position??`bottom`}function createLegend(e,t){let n=resolvePosition(t),r=document.createElement(`div`);r.className=`prism-legend prism-legend-${n}`,n===`top`?e.insertBefore(r,e.firstChild):e.appendChild(r);let disposeHandle=()=>{r.remove()};return{dispose:disposeHandle,el:r,[Symbol.dispose]:disposeHandle,update(e){r.replaceChildren();for(let t of e){let e=document.createElement(`div`);e.className=`prism-legend-item`;let n=document.createElement(`span`);n.className=`prism-legend-dot`,n.style.backgroundColor=t.color;let i=document.createElement(`span`);i.className=`prism-legend-label`,i.textContent=t.name,e.appendChild(n),e.appendChild(i),r.appendChild(e)}}}}export{createLegend};
31
2
  //# sourceMappingURL=legend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"legend.js","names":[],"sources":["../../src/interaction/legend.ts"],"sourcesContent":["import type { LegendConfig, LegendPosition } from '../types';\n\nexport interface LegendState {\n dispose(): void;\n el: HTMLDivElement | null;\n update(series: { color: string; name: string }[]): void;\n [Symbol.dispose](): void;\n}\n\nfunction resolvePosition(config: LegendConfig | true): LegendPosition {\n if (config === true) return 'bottom';\n\n return config.position ?? 'bottom';\n}\n\nexport function createLegend(container: HTMLElement, config: LegendConfig | true): LegendState {\n const position = resolvePosition(config);\n const el = document.createElement('div');\n\n el.className = `prism-legend prism-legend-${position}`;\n\n if (position === 'top') {\n container.insertBefore(el, container.firstChild);\n } else {\n container.appendChild(el);\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n [Symbol.dispose]: disposeHandle,\n update(series) {\n el.replaceChildren();\n for (const s of series) {\n const item = document.createElement('div');\n\n item.className = 'prism-legend-item';\n\n const dot = document.createElement('span');\n\n dot.className = 'prism-legend-dot';\n dot.style.backgroundColor = s.color;\n\n const label = document.createElement('span');\n\n label.className = 'prism-legend-label';\n label.textContent = s.name;\n\n item.appendChild(dot);\n item.appendChild(label);\n el.appendChild(item);\n }\n },\n };\n}\n"],"mappings":";AASA,SAAS,EAAgB,GAA6C;CAGpE,OAFI,MAAW,KAAa,WAErB,EAAO,YAAY;AAC5B;AAEA,SAAgB,EAAa,GAAwB,GAA0C;CAC7F,IAAM,IAAW,EAAgB,CAAM,GACjC,IAAK,SAAS,cAAc,KAAK;CAIvC,AAFA,EAAG,YAAY,6BAA6B,KAExC,MAAa,QACf,EAAU,aAAa,GAAI,EAAU,UAAU,IAE/C,EAAU,YAAY,CAAE;CAG1B,IAAM,UAA4B;EAChC,EAAG,OAAO;CACZ;CAEA,OAAO;EACL,SAAS;EACT;GACC,OAAO,UAAU;EAClB,OAAO,GAAQ;GACb,EAAG,gBAAgB;GACnB,KAAK,IAAM,KAAK,GAAQ;IACtB,IAAM,IAAO,SAAS,cAAc,KAAK;IAEzC,EAAK,YAAY;IAEjB,IAAM,IAAM,SAAS,cAAc,MAAM;IAGzC,AADA,EAAI,YAAY,oBAChB,EAAI,MAAM,kBAAkB,EAAE;IAE9B,IAAM,IAAQ,SAAS,cAAc,MAAM;IAO3C,AALA,EAAM,YAAY,sBAClB,EAAM,cAAc,EAAE,MAEtB,EAAK,YAAY,CAAG,GACpB,EAAK,YAAY,CAAK,GACtB,EAAG,YAAY,CAAI;GACrB;EACF;CACF;AACF"}
1
+ {"version":3,"file":"legend.js","names":[],"sources":["../../src/interaction/legend.ts"],"sourcesContent":["import type { LegendConfig, LegendPosition } from '../types';\n\nexport interface LegendState {\n dispose(): void;\n el: HTMLDivElement | null;\n update(series: { color: string; name: string }[]): void;\n [Symbol.dispose](): void;\n}\n\nfunction resolvePosition(config: LegendConfig | true): LegendPosition {\n if (config === true) return 'bottom';\n\n return config.position ?? 'bottom';\n}\n\nexport function createLegend(container: HTMLElement, config: LegendConfig | true): LegendState {\n const position = resolvePosition(config);\n const el = document.createElement('div');\n\n el.className = `prism-legend prism-legend-${position}`;\n\n if (position === 'top') {\n container.insertBefore(el, container.firstChild);\n } else {\n container.appendChild(el);\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n [Symbol.dispose]: disposeHandle,\n update(series) {\n el.replaceChildren();\n for (const s of series) {\n const item = document.createElement('div');\n\n item.className = 'prism-legend-item';\n\n const dot = document.createElement('span');\n\n dot.className = 'prism-legend-dot';\n dot.style.backgroundColor = s.color;\n\n const label = document.createElement('span');\n\n label.className = 'prism-legend-label';\n label.textContent = s.name;\n\n item.appendChild(dot);\n item.appendChild(label);\n el.appendChild(item);\n }\n },\n };\n}\n"],"mappings":"AASA,SAAS,gBAAgB,EAA6C,CAGpE,OAFI,IAAW,GAAa,SAErB,EAAO,UAAY,QAC5B,CAEA,SAAgB,aAAa,EAAwB,EAA0C,CAC7F,IAAM,EAAW,gBAAgB,CAAM,EACjC,EAAK,SAAS,cAAc,KAAK,EAEvC,EAAG,UAAY,6BAA6B,IAExC,IAAa,MACf,EAAU,aAAa,EAAI,EAAU,UAAU,EAE/C,EAAU,YAAY,CAAE,EAG1B,IAAM,kBAA4B,CAChC,EAAG,OAAO,CACZ,EAEA,MAAO,CACL,QAAS,cACT,MACC,OAAO,SAAU,cAClB,OAAO,EAAQ,CACb,EAAG,gBAAgB,EACnB,IAAK,IAAM,KAAK,EAAQ,CACtB,IAAM,EAAO,SAAS,cAAc,KAAK,EAEzC,EAAK,UAAY,oBAEjB,IAAM,EAAM,SAAS,cAAc,MAAM,EAEzC,EAAI,UAAY,mBAChB,EAAI,MAAM,gBAAkB,EAAE,MAE9B,IAAM,EAAQ,SAAS,cAAc,MAAM,EAE3C,EAAM,UAAY,qBAClB,EAAM,YAAc,EAAE,KAEtB,EAAK,YAAY,CAAG,EACpB,EAAK,YAAY,CAAK,EACtB,EAAG,YAAY,CAAI,CACrB,CACF,CACF,CACF"}