ngwr 15.0.1 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/anchor/styles/_index.scss +13 -2
  2. package/bits/aurora/styles/_rules.scss +11 -0
  3. package/bits/dot-grid/dot-grid.scss +1 -0
  4. package/bits/dot-grid/styles/_index.scss +8 -0
  5. package/bits/dot-grid/styles/_rules.scss +54 -0
  6. package/bits/iridescence/iridescence.scss +1 -0
  7. package/bits/iridescence/styles/_index.scss +8 -0
  8. package/bits/iridescence/styles/_rules.scss +72 -0
  9. package/bits/marquee/styles/_rules.scss +7 -3
  10. package/bits/ripple-grid/ripple-grid.scss +1 -0
  11. package/bits/ripple-grid/styles/_index.scss +8 -0
  12. package/bits/ripple-grid/styles/_rules.scss +63 -0
  13. package/bits/spotlight-card/styles/_rules.scss +7 -4
  14. package/bits/star-border/styles/_rules.scss +5 -2
  15. package/bits/threads/styles/_index.scss +8 -0
  16. package/bits/threads/styles/_rules.scss +76 -0
  17. package/bits/threads/threads.scss +1 -0
  18. package/bits/waves/styles/_rules.scss +8 -1
  19. package/charts/bar-chart/styles/_index.scss +607 -7
  20. package/charts/boxplot-chart/styles/_index.scss +297 -0
  21. package/charts/bullet-chart/styles/_index.scss +268 -0
  22. package/charts/calendar-heatmap/styles/_index.scss +25 -3
  23. package/charts/candlestick-chart/styles/_index.scss +307 -0
  24. package/charts/chart-legend/styles/_index.scss +143 -0
  25. package/charts/core/styles/_index.scss +30 -0
  26. package/charts/donut-chart/styles/_index.scss +39 -3
  27. package/charts/funnel-chart/styles/_index.scss +237 -0
  28. package/charts/gauge/styles/_index.scss +4 -2
  29. package/charts/heatmap-chart/styles/_index.scss +329 -0
  30. package/charts/line-chart/styles/_index.scss +141 -8
  31. package/charts/meter-group/styles/_index.scss +44 -13
  32. package/charts/radar-chart/styles/_index.scss +206 -0
  33. package/charts/scatter-chart/styles/_index.scss +245 -0
  34. package/charts/sparkline/styles/_index.scss +10 -1
  35. package/charts/treemap-chart/styles/_index.scss +215 -0
  36. package/charts/waterfall-chart/styles/_index.scss +321 -0
  37. package/collapse/styles/_index.scss +6 -1
  38. package/fesm2022/ngwr-affix.mjs +3 -3
  39. package/fesm2022/ngwr-alert.mjs +3 -3
  40. package/fesm2022/ngwr-anchor.mjs +3 -3
  41. package/fesm2022/ngwr-avatar.mjs +3 -3
  42. package/fesm2022/ngwr-back-top.mjs +3 -3
  43. package/fesm2022/ngwr-badge.mjs +6 -6
  44. package/fesm2022/ngwr-bits-aurora.mjs +30 -38
  45. package/fesm2022/ngwr-bits-aurora.mjs.map +1 -1
  46. package/fesm2022/ngwr-bits-blur-text.mjs +3 -3
  47. package/fesm2022/ngwr-bits-border-glow-testing.mjs.map +1 -1
  48. package/fesm2022/ngwr-bits-border-glow.mjs +11 -5
  49. package/fesm2022/ngwr-bits-border-glow.mjs.map +1 -1
  50. package/fesm2022/ngwr-bits-circular-text.mjs +3 -3
  51. package/fesm2022/ngwr-bits-click-spark.mjs +3 -3
  52. package/fesm2022/ngwr-bits-confetti.mjs +3 -3
  53. package/fesm2022/ngwr-bits-decrypt-text.mjs +3 -3
  54. package/fesm2022/ngwr-bits-dot-grid-testing.mjs +40 -0
  55. package/fesm2022/ngwr-bits-dot-grid-testing.mjs.map +1 -0
  56. package/fesm2022/ngwr-bits-dot-grid.mjs +482 -0
  57. package/fesm2022/ngwr-bits-dot-grid.mjs.map +1 -0
  58. package/fesm2022/ngwr-bits-falling-text.mjs +3 -3
  59. package/fesm2022/ngwr-bits-fuzzy-text.mjs +3 -3
  60. package/fesm2022/ngwr-bits-glitch-text.mjs +3 -3
  61. package/fesm2022/ngwr-bits-gradient-text.mjs +3 -3
  62. package/fesm2022/ngwr-bits-iridescence-testing.mjs +31 -0
  63. package/fesm2022/ngwr-bits-iridescence-testing.mjs.map +1 -0
  64. package/fesm2022/ngwr-bits-iridescence.mjs +591 -0
  65. package/fesm2022/ngwr-bits-iridescence.mjs.map +1 -0
  66. package/fesm2022/ngwr-bits-marquee-testing.mjs +1 -1
  67. package/fesm2022/ngwr-bits-marquee-testing.mjs.map +1 -1
  68. package/fesm2022/ngwr-bits-marquee.mjs +7 -7
  69. package/fesm2022/ngwr-bits-marquee.mjs.map +1 -1
  70. package/fesm2022/ngwr-bits-ripple-grid-testing.mjs +40 -0
  71. package/fesm2022/ngwr-bits-ripple-grid-testing.mjs.map +1 -0
  72. package/fesm2022/ngwr-bits-ripple-grid.mjs +805 -0
  73. package/fesm2022/ngwr-bits-ripple-grid.mjs.map +1 -0
  74. package/fesm2022/ngwr-bits-rotating-text.mjs +3 -3
  75. package/fesm2022/ngwr-bits-shiny-text.mjs +6 -6
  76. package/fesm2022/ngwr-bits-splash-cursor.mjs +3 -3
  77. package/fesm2022/ngwr-bits-split-text.mjs +3 -3
  78. package/fesm2022/ngwr-bits-spotlight-card-testing.mjs +1 -1
  79. package/fesm2022/ngwr-bits-spotlight-card-testing.mjs.map +1 -1
  80. package/fesm2022/ngwr-bits-spotlight-card.mjs +10 -10
  81. package/fesm2022/ngwr-bits-spotlight-card.mjs.map +1 -1
  82. package/fesm2022/ngwr-bits-star-border-testing.mjs +1 -1
  83. package/fesm2022/ngwr-bits-star-border-testing.mjs.map +1 -1
  84. package/fesm2022/ngwr-bits-star-border.mjs +7 -7
  85. package/fesm2022/ngwr-bits-star-border.mjs.map +1 -1
  86. package/fesm2022/ngwr-bits-threads-testing.mjs +41 -0
  87. package/fesm2022/ngwr-bits-threads-testing.mjs.map +1 -0
  88. package/fesm2022/ngwr-bits-threads.mjs +482 -0
  89. package/fesm2022/ngwr-bits-threads.mjs.map +1 -0
  90. package/fesm2022/ngwr-bits-tilt-card.mjs +6 -6
  91. package/fesm2022/ngwr-bits-typewriter.mjs +3 -3
  92. package/fesm2022/ngwr-bits-waves-testing.mjs.map +1 -1
  93. package/fesm2022/ngwr-bits-waves.mjs +60 -41
  94. package/fesm2022/ngwr-bits-waves.mjs.map +1 -1
  95. package/fesm2022/ngwr-breadcrumbs.mjs +8 -8
  96. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  97. package/fesm2022/ngwr-burger.mjs +3 -3
  98. package/fesm2022/ngwr-button.mjs +6 -6
  99. package/fesm2022/ngwr-calendar.mjs +3 -3
  100. package/fesm2022/ngwr-card.mjs +9 -9
  101. package/fesm2022/ngwr-carousel.mjs +6 -6
  102. package/fesm2022/ngwr-cascader.mjs +5 -5
  103. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  104. package/fesm2022/ngwr-charts-bar-chart-testing.mjs +127 -3
  105. package/fesm2022/ngwr-charts-bar-chart-testing.mjs.map +1 -1
  106. package/fesm2022/ngwr-charts-bar-chart.mjs +683 -49
  107. package/fesm2022/ngwr-charts-bar-chart.mjs.map +1 -1
  108. package/fesm2022/ngwr-charts-boxplot-chart-testing.mjs +161 -0
  109. package/fesm2022/ngwr-charts-boxplot-chart-testing.mjs.map +1 -0
  110. package/fesm2022/ngwr-charts-boxplot-chart.mjs +517 -0
  111. package/fesm2022/ngwr-charts-boxplot-chart.mjs.map +1 -0
  112. package/fesm2022/ngwr-charts-bullet-chart-testing.mjs +68 -0
  113. package/fesm2022/ngwr-charts-bullet-chart-testing.mjs.map +1 -0
  114. package/fesm2022/ngwr-charts-bullet-chart.mjs +459 -0
  115. package/fesm2022/ngwr-charts-bullet-chart.mjs.map +1 -0
  116. package/fesm2022/ngwr-charts-calendar-heatmap-testing.mjs +27 -0
  117. package/fesm2022/ngwr-charts-calendar-heatmap-testing.mjs.map +1 -1
  118. package/fesm2022/ngwr-charts-calendar-heatmap.mjs +96 -17
  119. package/fesm2022/ngwr-charts-calendar-heatmap.mjs.map +1 -1
  120. package/fesm2022/ngwr-charts-candlestick-chart-testing.mjs +107 -0
  121. package/fesm2022/ngwr-charts-candlestick-chart-testing.mjs.map +1 -0
  122. package/fesm2022/ngwr-charts-candlestick-chart.mjs +508 -0
  123. package/fesm2022/ngwr-charts-candlestick-chart.mjs.map +1 -0
  124. package/fesm2022/ngwr-charts-chart-legend-testing.mjs +126 -0
  125. package/fesm2022/ngwr-charts-chart-legend-testing.mjs.map +1 -0
  126. package/fesm2022/ngwr-charts-chart-legend.mjs +251 -0
  127. package/fesm2022/ngwr-charts-chart-legend.mjs.map +1 -0
  128. package/fesm2022/ngwr-charts-core.mjs +383 -0
  129. package/fesm2022/ngwr-charts-core.mjs.map +1 -0
  130. package/fesm2022/ngwr-charts-donut-chart-testing.mjs +10 -1
  131. package/fesm2022/ngwr-charts-donut-chart-testing.mjs.map +1 -1
  132. package/fesm2022/ngwr-charts-donut-chart.mjs +187 -31
  133. package/fesm2022/ngwr-charts-donut-chart.mjs.map +1 -1
  134. package/fesm2022/ngwr-charts-funnel-chart-testing.mjs +100 -0
  135. package/fesm2022/ngwr-charts-funnel-chart-testing.mjs.map +1 -0
  136. package/fesm2022/ngwr-charts-funnel-chart.mjs +415 -0
  137. package/fesm2022/ngwr-charts-funnel-chart.mjs.map +1 -0
  138. package/fesm2022/ngwr-charts-gauge-testing.mjs +9 -3
  139. package/fesm2022/ngwr-charts-gauge-testing.mjs.map +1 -1
  140. package/fesm2022/ngwr-charts-gauge.mjs +9 -15
  141. package/fesm2022/ngwr-charts-gauge.mjs.map +1 -1
  142. package/fesm2022/ngwr-charts-heatmap-chart-testing.mjs +120 -0
  143. package/fesm2022/ngwr-charts-heatmap-chart-testing.mjs.map +1 -0
  144. package/fesm2022/ngwr-charts-heatmap-chart.mjs +519 -0
  145. package/fesm2022/ngwr-charts-heatmap-chart.mjs.map +1 -0
  146. package/fesm2022/ngwr-charts-line-chart-testing.mjs +43 -1
  147. package/fesm2022/ngwr-charts-line-chart-testing.mjs.map +1 -1
  148. package/fesm2022/ngwr-charts-line-chart.mjs +436 -122
  149. package/fesm2022/ngwr-charts-line-chart.mjs.map +1 -1
  150. package/fesm2022/ngwr-charts-meter-group-testing.mjs +14 -2
  151. package/fesm2022/ngwr-charts-meter-group-testing.mjs.map +1 -1
  152. package/fesm2022/ngwr-charts-meter-group.mjs +101 -32
  153. package/fesm2022/ngwr-charts-meter-group.mjs.map +1 -1
  154. package/fesm2022/ngwr-charts-radar-chart-testing.mjs +98 -0
  155. package/fesm2022/ngwr-charts-radar-chart-testing.mjs.map +1 -0
  156. package/fesm2022/ngwr-charts-radar-chart.mjs +720 -0
  157. package/fesm2022/ngwr-charts-radar-chart.mjs.map +1 -0
  158. package/fesm2022/ngwr-charts-scatter-chart-testing.mjs +132 -0
  159. package/fesm2022/ngwr-charts-scatter-chart-testing.mjs.map +1 -0
  160. package/fesm2022/ngwr-charts-scatter-chart.mjs +545 -0
  161. package/fesm2022/ngwr-charts-scatter-chart.mjs.map +1 -0
  162. package/fesm2022/ngwr-charts-sparkline-testing.mjs.map +1 -1
  163. package/fesm2022/ngwr-charts-sparkline.mjs +14 -16
  164. package/fesm2022/ngwr-charts-sparkline.mjs.map +1 -1
  165. package/fesm2022/ngwr-charts-treemap-chart-testing.mjs +103 -0
  166. package/fesm2022/ngwr-charts-treemap-chart-testing.mjs.map +1 -0
  167. package/fesm2022/ngwr-charts-treemap-chart.mjs +535 -0
  168. package/fesm2022/ngwr-charts-treemap-chart.mjs.map +1 -0
  169. package/fesm2022/ngwr-charts-waterfall-chart-testing.mjs +131 -0
  170. package/fesm2022/ngwr-charts-waterfall-chart-testing.mjs.map +1 -0
  171. package/fesm2022/ngwr-charts-waterfall-chart.mjs +462 -0
  172. package/fesm2022/ngwr-charts-waterfall-chart.mjs.map +1 -0
  173. package/fesm2022/ngwr-checkbox.mjs +6 -6
  174. package/fesm2022/ngwr-clipboard.mjs +3 -3
  175. package/fesm2022/ngwr-collapse.mjs +9 -9
  176. package/fesm2022/ngwr-color-picker.mjs +6 -6
  177. package/fesm2022/ngwr-command-palette.mjs +3 -3
  178. package/fesm2022/ngwr-compare.mjs +3 -3
  179. package/fesm2022/ngwr-context-menu.mjs +12 -12
  180. package/fesm2022/ngwr-cookie.mjs +3 -3
  181. package/fesm2022/ngwr-counter.mjs +6 -6
  182. package/fesm2022/ngwr-date-picker.mjs +21 -21
  183. package/fesm2022/ngwr-date.mjs +6 -6
  184. package/fesm2022/ngwr-density.mjs +6 -6
  185. package/fesm2022/ngwr-descriptions.mjs +6 -6
  186. package/fesm2022/ngwr-dialog.mjs +15 -15
  187. package/fesm2022/ngwr-directives.mjs +12 -12
  188. package/fesm2022/ngwr-divider.mjs +3 -3
  189. package/fesm2022/ngwr-drawer.mjs +18 -18
  190. package/fesm2022/ngwr-dropdown.mjs +9 -9
  191. package/fesm2022/ngwr-editor.mjs +3 -3
  192. package/fesm2022/ngwr-empty.mjs +3 -3
  193. package/fesm2022/ngwr-event-calendar.mjs +6 -6
  194. package/fesm2022/ngwr-file-upload.mjs +3 -3
  195. package/fesm2022/ngwr-form.mjs +9 -9
  196. package/fesm2022/ngwr-graph.mjs +6 -6
  197. package/fesm2022/ngwr-hotkey.mjs +6 -6
  198. package/fesm2022/ngwr-i18n-ar.mjs +90 -4
  199. package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
  200. package/fesm2022/ngwr-i18n-cs.mjs +90 -4
  201. package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
  202. package/fesm2022/ngwr-i18n-de.mjs +90 -4
  203. package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
  204. package/fesm2022/ngwr-i18n-en.mjs +90 -4
  205. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  206. package/fesm2022/ngwr-i18n-es.mjs +90 -4
  207. package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
  208. package/fesm2022/ngwr-i18n-fr.mjs +90 -4
  209. package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
  210. package/fesm2022/ngwr-i18n-he.mjs +90 -4
  211. package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
  212. package/fesm2022/ngwr-i18n-hi.mjs +90 -4
  213. package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
  214. package/fesm2022/ngwr-i18n-id.mjs +90 -4
  215. package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
  216. package/fesm2022/ngwr-i18n-it.mjs +90 -4
  217. package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
  218. package/fesm2022/ngwr-i18n-ja.mjs +90 -4
  219. package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
  220. package/fesm2022/ngwr-i18n-ko.mjs +90 -4
  221. package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
  222. package/fesm2022/ngwr-i18n-nl.mjs +90 -4
  223. package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
  224. package/fesm2022/ngwr-i18n-pl.mjs +90 -4
  225. package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
  226. package/fesm2022/ngwr-i18n-pt.mjs +90 -4
  227. package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
  228. package/fesm2022/ngwr-i18n-ru.mjs +90 -4
  229. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  230. package/fesm2022/ngwr-i18n-sv.mjs +90 -4
  231. package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
  232. package/fesm2022/ngwr-i18n-tr.mjs +90 -4
  233. package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
  234. package/fesm2022/ngwr-i18n-uk.mjs +90 -4
  235. package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
  236. package/fesm2022/ngwr-i18n-vi.mjs +90 -4
  237. package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
  238. package/fesm2022/ngwr-i18n-zh-tw.mjs +90 -4
  239. package/fesm2022/ngwr-i18n-zh-tw.mjs.map +1 -1
  240. package/fesm2022/ngwr-i18n-zh.mjs +90 -4
  241. package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
  242. package/fesm2022/ngwr-i18n.mjs +9 -9
  243. package/fesm2022/ngwr-icon.mjs +6 -6
  244. package/fesm2022/ngwr-image-cropper.mjs +3 -3
  245. package/fesm2022/ngwr-input-number.mjs +3 -3
  246. package/fesm2022/ngwr-input-otp.mjs +3 -3
  247. package/fesm2022/ngwr-input.mjs +15 -15
  248. package/fesm2022/ngwr-keyboard.mjs +3 -3
  249. package/fesm2022/ngwr-knob.mjs +3 -3
  250. package/fesm2022/ngwr-layout.mjs +15 -15
  251. package/fesm2022/ngwr-lightbox.mjs +5 -5
  252. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  253. package/fesm2022/ngwr-list.mjs +8 -8
  254. package/fesm2022/ngwr-list.mjs.map +1 -1
  255. package/fesm2022/ngwr-loading-bar.mjs +6 -6
  256. package/fesm2022/ngwr-mention.mjs +6 -6
  257. package/fesm2022/ngwr-meta.mjs +6 -6
  258. package/fesm2022/ngwr-overlay.mjs +6 -6
  259. package/fesm2022/ngwr-page-header.mjs +3 -3
  260. package/fesm2022/ngwr-pagination.mjs +3 -3
  261. package/fesm2022/ngwr-pipes.mjs +21 -21
  262. package/fesm2022/ngwr-platform.mjs +6 -6
  263. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  264. package/fesm2022/ngwr-popover.mjs +43 -20
  265. package/fesm2022/ngwr-popover.mjs.map +1 -1
  266. package/fesm2022/ngwr-progress.mjs +3 -3
  267. package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
  268. package/fesm2022/ngwr-qr.mjs +4 -3
  269. package/fesm2022/ngwr-qr.mjs.map +1 -1
  270. package/fesm2022/ngwr-radio.mjs +6 -6
  271. package/fesm2022/ngwr-rating.mjs +3 -3
  272. package/fesm2022/ngwr-result.mjs +12 -12
  273. package/fesm2022/ngwr-schema-form.mjs +3 -3
  274. package/fesm2022/ngwr-scroll.mjs +3 -3
  275. package/fesm2022/ngwr-segmented.mjs +3 -3
  276. package/fesm2022/ngwr-select.mjs +12 -12
  277. package/fesm2022/ngwr-sidebar.mjs +3 -3
  278. package/fesm2022/ngwr-skeleton.mjs +3 -3
  279. package/fesm2022/ngwr-slider.mjs +3 -3
  280. package/fesm2022/ngwr-sortable-list.mjs +11 -11
  281. package/fesm2022/ngwr-sortable-list.mjs.map +1 -1
  282. package/fesm2022/ngwr-speed-dial.mjs +3 -3
  283. package/fesm2022/ngwr-spinner.mjs +3 -3
  284. package/fesm2022/ngwr-splitter.mjs +3 -3
  285. package/fesm2022/ngwr-statistic.mjs +9 -9
  286. package/fesm2022/ngwr-stepper.mjs +6 -6
  287. package/fesm2022/ngwr-storage.mjs +3 -3
  288. package/fesm2022/ngwr-switch.mjs +3 -3
  289. package/fesm2022/ngwr-table.mjs +18 -18
  290. package/fesm2022/ngwr-tabs-router.mjs +3 -3
  291. package/fesm2022/ngwr-tabs.mjs +6 -6
  292. package/fesm2022/ngwr-textarea.mjs +3 -3
  293. package/fesm2022/ngwr-theme.mjs +3 -3
  294. package/fesm2022/ngwr-timeline.mjs +6 -6
  295. package/fesm2022/ngwr-toast-testing.mjs +2 -1
  296. package/fesm2022/ngwr-toast-testing.mjs.map +1 -1
  297. package/fesm2022/ngwr-toast.mjs +34 -15
  298. package/fesm2022/ngwr-toast.mjs.map +1 -1
  299. package/fesm2022/ngwr-toolbar.mjs +3 -3
  300. package/fesm2022/ngwr-tour.mjs +6 -6
  301. package/fesm2022/ngwr-transfer.mjs +3 -3
  302. package/fesm2022/ngwr-tree.mjs +3 -3
  303. package/fesm2022/ngwr-typography.mjs +3 -3
  304. package/fesm2022/ngwr-utils.mjs +31 -1
  305. package/fesm2022/ngwr-utils.mjs.map +1 -1
  306. package/fesm2022/ngwr-version.mjs +1 -1
  307. package/fesm2022/ngwr-version.mjs.map +1 -1
  308. package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
  309. package/fesm2022/ngwr-window-testing.mjs +61 -5
  310. package/fesm2022/ngwr-window-testing.mjs.map +1 -1
  311. package/fesm2022/ngwr-window.mjs +1538 -895
  312. package/fesm2022/ngwr-window.mjs.map +1 -1
  313. package/fesm2022/ngwr.mjs.map +1 -1
  314. package/i18n/ar.json +84 -4
  315. package/i18n/cs.json +84 -4
  316. package/i18n/de.json +84 -4
  317. package/i18n/en.json +84 -4
  318. package/i18n/es.json +84 -4
  319. package/i18n/fr.json +84 -4
  320. package/i18n/he.json +84 -4
  321. package/i18n/hi.json +84 -4
  322. package/i18n/id.json +84 -4
  323. package/i18n/it.json +84 -4
  324. package/i18n/ja.json +84 -4
  325. package/i18n/ko.json +84 -4
  326. package/i18n/nl.json +84 -4
  327. package/i18n/pl.json +84 -4
  328. package/i18n/pt.json +84 -4
  329. package/i18n/ru.json +84 -4
  330. package/i18n/sv.json +84 -4
  331. package/i18n/tr.json +84 -4
  332. package/i18n/uk.json +84 -4
  333. package/i18n/vi.json +84 -4
  334. package/i18n/zh-TW.json +84 -4
  335. package/i18n/zh.json +84 -4
  336. package/llms-full.txt +266 -9
  337. package/llms.txt +30 -7
  338. package/mcp/api.js +69 -1
  339. package/mcp/catalog.js +10 -1
  340. package/mcp/server.js +15 -1
  341. package/mcp/tools.js +122 -26
  342. package/package.json +132 -1
  343. package/popover/styles/_index.scss +75 -7
  344. package/schematics/component-style/index.js +3 -0
  345. package/schematics/migrations/v15/index.js +3 -26
  346. package/schematics/ng-add/index.js +2 -2
  347. package/schematics/use/symbol-map.json +14 -0
  348. package/schematics/utility/global-styles.js +19 -4
  349. package/schematics/utility/v15-moves.js +55 -0
  350. package/skills/ngwr/SKILL.md +8 -2
  351. package/skills/ngwr/references/catalog.md +28 -0
  352. package/skills/ngwr/references/setup.md +5 -4
  353. package/theme/styles/_focus.scss +8 -0
  354. package/toast/styles/_index.scss +103 -12
  355. package/types/ngwr-bits-aurora.d.ts +11 -0
  356. package/types/ngwr-bits-border-glow-testing.d.ts +5 -6
  357. package/types/ngwr-bits-border-glow.d.ts +5 -1
  358. package/types/ngwr-bits-dot-grid-testing.d.ts +92 -0
  359. package/types/ngwr-bits-dot-grid.d.ts +158 -0
  360. package/types/ngwr-bits-iridescence-testing.d.ts +85 -0
  361. package/types/ngwr-bits-iridescence.d.ts +244 -0
  362. package/types/ngwr-bits-ripple-grid-testing.d.ts +96 -0
  363. package/types/ngwr-bits-ripple-grid.d.ts +294 -0
  364. package/types/ngwr-bits-splash-cursor.d.ts +0 -1
  365. package/types/ngwr-bits-spotlight-card-testing.d.ts +3 -1
  366. package/types/ngwr-bits-star-border-testing.d.ts +7 -7
  367. package/types/ngwr-bits-threads-testing.d.ts +97 -0
  368. package/types/ngwr-bits-threads.d.ts +216 -0
  369. package/types/ngwr-bits-waves-testing.d.ts +1 -1
  370. package/types/ngwr-bits-waves.d.ts +20 -3
  371. package/types/ngwr-charts-bar-chart-testing.d.ts +193 -14
  372. package/types/ngwr-charts-bar-chart.d.ts +546 -38
  373. package/types/ngwr-charts-boxplot-chart-testing.d.ts +165 -0
  374. package/types/ngwr-charts-boxplot-chart.d.ts +308 -0
  375. package/types/ngwr-charts-bullet-chart-testing.d.ts +99 -0
  376. package/types/ngwr-charts-bullet-chart.d.ts +262 -0
  377. package/types/ngwr-charts-calendar-heatmap-testing.d.ts +32 -1
  378. package/types/ngwr-charts-calendar-heatmap.d.ts +55 -6
  379. package/types/ngwr-charts-candlestick-chart-testing.d.ts +135 -0
  380. package/types/ngwr-charts-candlestick-chart.d.ts +361 -0
  381. package/types/ngwr-charts-chart-legend-testing.d.ts +84 -0
  382. package/types/ngwr-charts-chart-legend.d.ts +178 -0
  383. package/types/ngwr-charts-core.d.ts +391 -0
  384. package/types/ngwr-charts-donut-chart-testing.d.ts +28 -5
  385. package/types/ngwr-charts-donut-chart.d.ts +124 -12
  386. package/types/ngwr-charts-funnel-chart-testing.d.ts +130 -0
  387. package/types/ngwr-charts-funnel-chart.d.ts +296 -0
  388. package/types/ngwr-charts-gauge-testing.d.ts +5 -0
  389. package/types/ngwr-charts-gauge.d.ts +6 -4
  390. package/types/ngwr-charts-heatmap-chart-testing.d.ts +148 -0
  391. package/types/ngwr-charts-heatmap-chart.d.ts +359 -0
  392. package/types/ngwr-charts-line-chart-testing.d.ts +72 -11
  393. package/types/ngwr-charts-line-chart.d.ts +291 -67
  394. package/types/ngwr-charts-meter-group-testing.d.ts +16 -2
  395. package/types/ngwr-charts-meter-group.d.ts +71 -11
  396. package/types/ngwr-charts-radar-chart-testing.d.ts +162 -0
  397. package/types/ngwr-charts-radar-chart.d.ts +461 -0
  398. package/types/ngwr-charts-scatter-chart-testing.d.ts +147 -0
  399. package/types/ngwr-charts-scatter-chart.d.ts +396 -0
  400. package/types/ngwr-charts-sparkline-testing.d.ts +4 -1
  401. package/types/ngwr-charts-sparkline.d.ts +8 -6
  402. package/types/ngwr-charts-treemap-chart-testing.d.ts +131 -0
  403. package/types/ngwr-charts-treemap-chart.d.ts +295 -0
  404. package/types/ngwr-charts-waterfall-chart-testing.d.ts +149 -0
  405. package/types/ngwr-charts-waterfall-chart.d.ts +338 -0
  406. package/types/ngwr-color-picker.d.ts +0 -21
  407. package/types/ngwr-dropdown.d.ts +0 -52
  408. package/types/ngwr-editor.d.ts +2 -84
  409. package/types/ngwr-i18n.d.ts +0 -15
  410. package/types/ngwr-mention.d.ts +0 -13
  411. package/types/ngwr-popconfirm.d.ts +0 -33
  412. package/types/ngwr-popover.d.ts +29 -53
  413. package/types/ngwr-toast-testing.d.ts +6 -1
  414. package/types/ngwr-tour.d.ts +0 -2
  415. package/types/ngwr-utils.d.ts +49 -7
  416. package/types/ngwr-version.d.ts +1 -1
  417. package/types/ngwr-window-testing.d.ts +65 -7
  418. package/types/ngwr-window.d.ts +831 -207
  419. package/types/ngwr.d.ts +1 -0
  420. package/window/styles/_index.scss +528 -82
@@ -1,13 +1,29 @@
1
1
  @use '../../../theme/styles' as theme;
2
2
 
3
+ // Styles for the entry points this component's own markup renders. The legend is a
4
+ // `ul[wr-chart-legend]`, so `@use 'ngwr/charts/line-chart'` alone draws it styled.
5
+ @use '../../chart-legend/styles' as chart-legend-styles; // WrChartLegend
6
+ // With `dataTable`, the figures render as a `<wr-chart-table>` beside the plot, which
7
+ // its own sheet clips out of sight.
8
+ @use '../../core/styles' as core-styles; // WrChartTable
9
+
3
10
  .wr-line-chart {
4
11
  --wr-line-chart-font-family: var(--wr-font-family-base);
12
+ --wr-line-chart-color: var(--wr-color-on-surface);
13
+ // The horizontal gridlines, as faint as every chart's; the hover crosshair, and the
14
+ // centre of the ring round each marker it reads.
15
+ --wr-line-chart-grid-color: color-mix(in srgb, var(--wr-border-base) 70%, transparent);
16
+ --wr-line-chart-crosshair-color: var(--wr-color-on-surface-muted);
17
+ --wr-line-chart-hover-center: var(--wr-color-surface);
5
18
  // The room round the drawing inside the plot, which the dots and the hover ring
6
19
  // overhang into: the drawing runs edge to edge, so a point at either end is drawn
7
20
  // half outside it. The y labels read the block one to meet the gridlines, the x labels
8
21
  // and the tooltip the inline one to meet the points.
9
22
  --wr-line-chart-plot-inset-x: var(--wr-space-md);
10
23
  --wr-line-chart-plot-inset-y: var(--wr-space-sm);
24
+ // How much of its series' colour a `showArea` fill takes: faint enough that the
25
+ // gridlines and every other series' line read through where fills overlap.
26
+ --wr-line-chart-area-opacity: 0.15;
11
27
 
12
28
  // Where a point is, for the x labels and the tooltip. Both sit in a box as wide as the
13
29
  // plot — the drawing plus its inline padding — and are handed the point's x as a
@@ -20,10 +36,27 @@
20
36
  $point: calc($inset + (100% - 2 * $inset) * $x / 100);
21
37
  $room-start: calc($inset + (100cqw - 2 * $inset) * $x / 100);
22
38
  $room-end: calc($inset + (100cqw - 2 * $inset) * (100 - $x) / 100);
39
+ // How far a readout beside the crosshair keeps from it: the hover marker's 6px radius
40
+ // and as much again. The component's `BESIDE`, which it places the readout by.
41
+ $beside: 12px;
23
42
 
24
43
  display: block;
44
+ // The containing block of the `dataTable` copy, which is out of flow and sits beside
45
+ // the plot rather than inside it. With a static host that box resolved against the
46
+ // nearest positioned ancestor outside the chart, often the page, and inside an
47
+ // unpositioned scroller the 1px box kept its place in the scrolled content: measured
48
+ // in Chromium, a chart 2000px down a 300px scroller grew the page from 600px to
49
+ // 2241px of blank scroll. No z-index, so no stacking context; the tooltip already
50
+ // resolves against the plot.
51
+ position: relative;
25
52
  font-family: var(--wr-line-chart-font-family);
26
- color: var(--wr-color-on-surface);
53
+ color: var(--wr-line-chart-color);
54
+
55
+ // A stacked chart's bands meet without overlapping, so each fill can carry twice the
56
+ // colour and still hide nothing.
57
+ &--stacked {
58
+ --wr-line-chart-area-opacity: 0.3;
59
+ }
27
60
 
28
61
  &__legend {
29
62
  --wr-line-chart-legend-margin-bottom: var(--wr-space-md);
@@ -41,11 +74,17 @@
41
74
  &__legend-item {
42
75
  --wr-line-chart-legend-item-gap: var(--wr-space-sm);
43
76
  --wr-line-chart-legend-item-font-size: var(--wr-text-xs);
77
+ // A toggleable row's button lays out the key and the name itself, from the shared
78
+ // legend's own hook, so that hook follows this one.
79
+ --wr-chart-legend-item-gap: var(--wr-line-chart-legend-item-gap);
44
80
 
45
81
  display: inline-flex;
46
82
  align-items: center;
47
83
  gap: var(--wr-line-chart-legend-item-gap);
48
84
  font-size: var(--wr-line-chart-legend-item-font-size);
85
+ // The chart's own colour, as before the shared legend, which paints its rows
86
+ // `--wr-chart-legend-color`.
87
+ color: inherit;
49
88
  }
50
89
 
51
90
  // A short line rather than a dot, because it now carries the series' dash
@@ -62,7 +101,8 @@
62
101
 
63
102
  // The y labels at inline start, the plot beside them, and the x labels under the plot
64
103
  // alone. A grid follows `direction`, so the gutter is on the right under RTL with no
65
- // rule of its own; the drawing itself does not mirror, as it never has.
104
+ // rule of its own; the drawing itself keeps time running left to right, as every SVG
105
+ // chart here does — the HTML layouts (bar, bullet, treemap) are the ones that mirror.
66
106
  &__body {
67
107
  display: grid;
68
108
  grid-template-columns: auto minmax(0, 1fr);
@@ -98,12 +138,17 @@
98
138
 
99
139
  // `top` in percent is the grid area's height — the cell is the containing block — and
100
140
  // relative positioning leaves the label's place in flow, so the column keeps its width.
141
+ // Shrunk to its text against the plot's side of the column, so its own direction can
142
+ // follow its text (`plaintext`): a negative tick is a `-` in front of digits, neither of
143
+ // which has a direction, and under RTL the sign would land on the far side — `350-`.
101
144
  &__tick {
102
145
  $inset: var(--wr-line-chart-plot-inset-y);
103
146
 
104
147
  grid-area: 1 / 1;
105
148
  align-self: start;
149
+ justify-self: end;
106
150
  position: relative;
151
+ unicode-bidi: plaintext;
107
152
  top: calc($inset + (100% - 2 * $inset) * var(--wr-line-chart-y, 0) / 100);
108
153
  transform: translateY(-50%);
109
154
  }
@@ -115,6 +160,25 @@
115
160
  padding: var(--wr-line-chart-plot-inset-y) var(--wr-line-chart-plot-inset-x);
116
161
  }
117
162
 
163
+ // The colour is the series', an attribute of the path; only its share is the hook's.
164
+ // A fill keeps it under forced colors, as the lines keep their strokes, and it stays
165
+ // under every line, so a reader who cannot tell the fills apart still has the dashes.
166
+ &__area {
167
+ fill-opacity: var(--wr-line-chart-area-opacity);
168
+ }
169
+
170
+ &__grid-line {
171
+ stroke: var(--wr-line-chart-grid-color);
172
+ }
173
+
174
+ &__crosshair {
175
+ stroke: var(--wr-line-chart-crosshair-color);
176
+ }
177
+
178
+ &__hover-dot-center {
179
+ stroke: var(--wr-line-chart-hover-center);
180
+ }
181
+
118
182
  // The plot's drawing by its class, never a bare `svg`: the legend swatch is an
119
183
  // `<svg>` too, and `.wr-line-chart svg` (0,1,1) outranks `&__swatch` (0,1,0), so
120
184
  // the 1rem × 0.125rem dash stretched to the legend row — measured in Chromium at
@@ -148,6 +212,8 @@
148
212
  --wr-line-chart-tooltip-padding-y: var(--wr-space-sm);
149
213
  --wr-line-chart-tooltip-padding-x: var(--wr-space-md);
150
214
  --wr-line-chart-tooltip-font-size: var(--wr-text-xs);
215
+ --wr-line-chart-tooltip-bg: var(--wr-color-surface);
216
+ --wr-line-chart-tooltip-shadow: var(--wr-shadow-sm);
151
217
 
152
218
  position: absolute;
153
219
  // rtl-ok: the SVG's own x, and SVG coordinates do not flip with `direction`
@@ -162,10 +228,10 @@
162
228
  // any that does not.
163
229
  // rtl-ok: the SVG's own x, and SVG coordinates do not flip with `direction`
164
230
  transform: translate(clamp(calc(-1 * $room-start), -50%, calc($room-end - 100%)), 0.5rem);
165
- background: var(--wr-color-surface);
231
+ background: var(--wr-line-chart-tooltip-bg);
166
232
  border: 1px solid var(--wr-line-chart-tooltip-border);
167
233
  border-radius: var(--wr-line-chart-tooltip-radius);
168
- box-shadow: var(--wr-shadow-sm);
234
+ box-shadow: var(--wr-line-chart-tooltip-shadow);
169
235
  padding: var(--wr-line-chart-tooltip-padding-y) var(--wr-line-chart-tooltip-padding-x);
170
236
  font-size: var(--wr-line-chart-tooltip-font-size);
171
237
  pointer-events: none;
@@ -173,6 +239,29 @@
173
239
  min-width: 6rem;
174
240
  }
175
241
 
242
+ // Where the top would cover a marker the readout reads, which the component works out
243
+ // from its size: at the bottom of the plot, as far inside it as the top one sits, or —
244
+ // where the bottom would too — at the top beside the crosshair, every marker being on
245
+ // it, `$beside` off it on the side with more room and still never past either end. At
246
+ // the top always, it hid every reading in the plot's upper band under the chip that gave
247
+ // its value — a third of the rings on the docs' own demos.
248
+ &__tooltip--below {
249
+ top: auto;
250
+ bottom: var(--wr-line-chart-plot-inset-y);
251
+ // rtl-ok: the SVG's own x, and SVG coordinates do not flip with `direction`
252
+ transform: translate(clamp(calc(-1 * $room-start), -50%, calc($room-end - 100%)), -0.5rem);
253
+ }
254
+
255
+ &__tooltip--left {
256
+ // rtl-ok: the SVG's own x, and SVG coordinates do not flip with `direction`
257
+ transform: translate(clamp(calc(-1 * $room-start), calc(-100% - $beside), calc($room-end - 100%)), 0.5rem);
258
+ }
259
+
260
+ &__tooltip--right {
261
+ // rtl-ok: the SVG's own x, and SVG coordinates do not flip with `direction`
262
+ transform: translate(clamp(calc(-1 * $room-start), $beside, calc($room-end - 100%)), 0.5rem);
263
+ }
264
+
176
265
  &__tooltip-label {
177
266
  --wr-line-chart-tooltip-label-font-weight: var(--wr-font-weight-semibold);
178
267
  --wr-line-chart-tooltip-label-margin-bottom: var(--wr-space-xs);
@@ -191,29 +280,38 @@
191
280
  }
192
281
 
193
282
  &__tooltip-name {
283
+ --wr-line-chart-tooltip-name-color: var(--wr-color-on-surface-muted);
284
+
194
285
  flex: 1 1 auto;
195
- color: var(--wr-color-on-surface-muted);
286
+ color: var(--wr-line-chart-tooltip-name-color);
196
287
  }
197
288
 
198
289
  &__tooltip-value {
199
290
  --wr-line-chart-tooltip-value-font-weight: var(--wr-font-weight-semibold);
200
291
 
201
292
  font-weight: var(--wr-line-chart-tooltip-value-font-weight);
293
+ // As a tick: the sign of `-350` stays before the digits on an RTL page.
294
+ unicode-bidi: plaintext;
202
295
  }
203
296
 
204
297
  &__x-labels {
205
298
  --wr-line-chart-x-labels-margin-top: var(--wr-space-xs);
206
299
  --wr-line-chart-x-labels-font-size: var(--wr-text-xs);
300
+ --wr-line-chart-x-labels-line-height: var(--wr-text-xs-leading);
301
+ --wr-line-chart-x-labels-color: var(--wr-color-on-surface-muted);
207
302
 
208
303
  grid-column: 2;
209
304
  grid-row: 2;
210
305
  position: relative;
211
306
  margin-top: var(--wr-line-chart-x-labels-margin-top);
212
307
  font-size: var(--wr-line-chart-x-labels-font-size);
308
+ line-height: var(--wr-line-chart-x-labels-line-height);
213
309
  // The labels are absolutely positioned onto their points, so the strip has no
214
310
  // content of its own to give it a height. Without this it collapses and the
215
- // labels overlap whatever the page puts under the chart.
216
- height: 1.25em;
311
+ // labels overlap whatever the page puts under the chart. One line of the labels' own
312
+ // leading: `1.25em` with the page's line-height left each label's box hanging 6px
313
+ // below the chart's, over whatever came next.
314
+ height: 1lh;
217
315
  // A `translateX` percentage means the LABEL's own width, so the room left beside it
218
316
  // has to arrive in another unit — `cqw` is this strip's. Every label is out of flow,
219
317
  // so the strip contributes no intrinsic width either way and the containment this
@@ -245,7 +343,42 @@
245
343
  overflow: hidden;
246
344
  text-overflow: ellipsis;
247
345
  font-size: inherit;
248
- color: var(--wr-color-on-surface-muted);
346
+ color: var(--wr-line-chart-x-labels-color);
249
347
  white-space: nowrap;
348
+ // A label is the host's own text, in whatever language: it takes its direction from
349
+ // that text. Its box is as wide as its text, so where it sits does not move.
350
+ unicode-bidi: plaintext;
351
+ }
352
+
353
+ // Every label once, a line each, laid out and never seen: the component measures the
354
+ // widest off it to decide how many labels print. Never wider than the strip, which is
355
+ // the most room a label could have, and clipped there, so a long one adds no overflow.
356
+ &__x-probe {
357
+ position: absolute;
358
+ inset-block-start: 0;
359
+ inset-inline-start: 0;
360
+ width: max-content;
361
+ max-width: 100%;
362
+ overflow: hidden;
363
+ visibility: hidden;
364
+ white-space: pre;
365
+ pointer-events: none;
366
+ }
367
+ }
368
+
369
+ // Forced colors keeps the SVG strokes as written, so the strokes written in theme colours
370
+ // would keep colours the forced palette no longer has: the gridlines would all but vanish
371
+ // on a dark canvas, and the hovered marker's centre would be a disc of the old page.
372
+ @media (forced-colors: active) {
373
+ .wr-line-chart__grid-line {
374
+ stroke: GrayText;
375
+ }
376
+
377
+ .wr-line-chart__crosshair {
378
+ stroke: CanvasText;
379
+ }
380
+
381
+ .wr-line-chart__hover-dot-center {
382
+ stroke: Canvas;
250
383
  }
251
384
  }
@@ -1,20 +1,34 @@
1
1
  @use '../../../theme/styles' as theme;
2
2
  @use '../../../popover/styles'; // the `.wr-tooltip` chip the hover tooltip renders into
3
3
 
4
+ // Styles for the entry points this component's own markup renders. The legend is a
5
+ // `ul[wr-chart-legend]`, so `@use 'ngwr/charts/meter-group'` alone draws it styled.
6
+ @use '../../chart-legend/styles' as chart-legend-styles; // WrChartLegend
7
+
4
8
  .wr-meter-group {
9
+ --wr-meter-group-gap: var(--wr-space-sm);
10
+ --wr-meter-group-font-family: var(--wr-font-family-base);
11
+ --wr-meter-group-color: var(--wr-color-on-surface);
12
+ --wr-meter-group-bar-height: 0.625rem;
13
+ --wr-meter-group-bar-radius: var(--wr-border-radius-pill);
14
+ // The part of the scale nothing fills, and the gap laid between two slices in it.
15
+ --wr-meter-group-track-bg: var(--wr-color-fill-strong);
16
+ --wr-meter-group-slice-gap: calc(var(--wr-space-xs) / 2);
17
+ --wr-meter-group-legend-value-color: var(--wr-color-on-surface-muted);
18
+
5
19
  display: flex;
6
20
  flex-direction: column;
7
- gap: var(--wr-space-sm);
8
- font-family: var(--wr-font-family-base);
9
- color: var(--wr-color-on-surface);
21
+ gap: var(--wr-meter-group-gap);
22
+ font-family: var(--wr-meter-group-font-family);
23
+ color: var(--wr-meter-group-color);
10
24
 
11
25
  &__bar {
12
26
  display: flex;
13
27
  width: 100%;
14
- height: 0.625rem;
15
- border-radius: var(--wr-border-radius-pill);
28
+ height: var(--wr-meter-group-bar-height);
29
+ border-radius: var(--wr-meter-group-bar-radius);
16
30
  overflow: hidden;
17
- background: var(--wr-color-fill-strong);
31
+ background: var(--wr-meter-group-track-bg);
18
32
 
19
33
  // Forced colors paints the track `Canvas`, the page itself, so the part of
20
34
  // the scale nothing fills needs an edge to be read against.
@@ -37,24 +51,39 @@
37
51
  // so every boundary sits at its exact share; it is painted after every slice, so it
38
52
  // covers the next one rather than hiding under it, as a spread shadow would; and a
39
53
  // zero slice's outline is the one gap where its two neighbours meet.
40
- outline: calc(var(--wr-space-xs) / 2) solid var(--wr-color-fill-strong);
54
+ outline: var(--wr-meter-group-slice-gap) solid var(--wr-meter-group-track-bg);
55
+
56
+ // The width follows a toggled legend row as well as new data, so every press would
57
+ // tween the whole bar. Under reduced motion it lands at once.
58
+ @media (prefers-reduced-motion: reduce) {
59
+ transition: none;
60
+ }
41
61
  }
42
62
 
43
63
  &__legend {
64
+ --wr-meter-group-legend-gap-y: var(--wr-space-sm);
65
+ --wr-meter-group-legend-gap-x: var(--wr-space-lg);
66
+
44
67
  list-style: none;
45
68
  margin: 0;
46
69
  padding: 0;
47
70
  display: flex;
48
71
  flex-wrap: wrap;
49
- gap: var(--wr-space-sm) var(--wr-space-lg);
72
+ gap: var(--wr-meter-group-legend-gap-y) var(--wr-meter-group-legend-gap-x);
50
73
  }
51
74
 
52
75
  &__legend-item {
76
+ --wr-meter-group-legend-item-gap: var(--wr-space-sm);
77
+ --wr-meter-group-legend-item-font-size: var(--wr-text-xs);
78
+ // A toggleable row's button lays out the key, the name and the value itself, from the
79
+ // shared legend's own hook, so that hook follows this one.
80
+ --wr-chart-legend-item-gap: var(--wr-meter-group-legend-item-gap);
81
+
53
82
  display: inline-flex;
54
83
  align-items: center;
55
- gap: var(--wr-space-sm);
56
- font-size: var(--wr-text-xs);
57
- color: var(--wr-color-on-surface);
84
+ gap: var(--wr-meter-group-legend-item-gap);
85
+ font-size: var(--wr-meter-group-legend-item-font-size);
86
+ color: var(--wr-meter-group-color);
58
87
  }
59
88
 
60
89
  &__swatch {
@@ -67,11 +96,13 @@
67
96
  }
68
97
 
69
98
  &__legend-label {
70
- font-weight: var(--wr-font-weight-medium);
99
+ --wr-meter-group-legend-label-font-weight: var(--wr-font-weight-medium);
100
+
101
+ font-weight: var(--wr-meter-group-legend-label-font-weight);
71
102
  }
72
103
 
73
104
  &__legend-value {
74
- color: var(--wr-color-on-surface-muted);
105
+ color: var(--wr-meter-group-legend-value-color);
75
106
  font-variant-numeric: tabular-nums;
76
107
  }
77
108
  }
@@ -0,0 +1,206 @@
1
+ @use '../../../theme/styles' as theme;
2
+ @use '../../../popover/styles'; // the `.wr-tooltip` chip the hover tooltip renders into
3
+
4
+ // Styles for the entry points this component's own markup renders. The legend is a
5
+ // `ul[wr-chart-legend]`, so `@use 'ngwr/charts/radar-chart'` alone draws it styled.
6
+ @use '../../chart-legend/styles' as chart-legend-styles; // WrChartLegend
7
+ // With `dataTable`, the figures render as a `<wr-chart-table>` beside the drawing, which
8
+ // its own sheet clips out of sight.
9
+ @use '../../core/styles' as core-styles; // WrChartTable
10
+
11
+ .wr-radar-chart {
12
+ --wr-radar-chart-font-family: var(--wr-font-family-base);
13
+ --wr-radar-chart-color: var(--wr-color-on-surface);
14
+ --wr-radar-chart-gap: var(--wr-space-lg);
15
+ // The axis names. They sit outside the outer ring, so the drawing has a gutter round it
16
+ // as wide as a name may run beside it and as tall as one line above and below it; a
17
+ // name longer than its room is ellipsised, and the tooltip and the data table carry it
18
+ // whole.
19
+ --wr-radar-chart-label-font-size: var(--wr-text-xs);
20
+ --wr-radar-chart-label-line-height: var(--wr-text-xs-leading);
21
+ --wr-radar-chart-label-color: var(--wr-color-on-surface);
22
+ // Far enough out that the name at twelve o'clock clears the outer ring's value, which
23
+ // sits half a line above that ring beside the same spoke.
24
+ --wr-radar-chart-label-gap: var(--wr-space-sm);
25
+ --wr-radar-chart-label-max-width: 10rem;
26
+ --wr-radar-chart-gutter-x: 5rem;
27
+ --wr-radar-chart-gutter-y: calc(var(--wr-radar-chart-label-line-height) + var(--wr-radar-chart-label-gap));
28
+ // The ring values beside the first axis, muted as every axis' ticks are, with a halo of
29
+ // the surface round each glyph: the first axis carries every series' first value, so an
30
+ // outline leaving it crosses the values more often than not, and the halo keeps a number
31
+ // readable where a line runs behind it while the line still shows round it. A chip with
32
+ // a wash of the surface veiled the outlines under it instead, and on a phone took a
33
+ // large part of a quadrant.
34
+ --wr-radar-chart-ring-label-color: var(--wr-color-on-surface-muted);
35
+ --wr-radar-chart-ring-label-halo: var(--wr-color-surface);
36
+ --wr-radar-chart-ring-label-offset: var(--wr-space-sm);
37
+ // The web, as faint as the line chart's gridlines.
38
+ --wr-radar-chart-grid-color: color-mix(in srgb, var(--wr-border-base) 70%, transparent);
39
+ --wr-radar-chart-grid-width: 1px;
40
+ // The series: an outline, a faint fill under it, and a dot at every value. In pixels,
41
+ // whatever the drawing's size, since every stroke here does not scale.
42
+ --wr-radar-chart-line-width: 2px;
43
+ --wr-radar-chart-area-opacity: 0.15;
44
+ --wr-radar-chart-dot-size: 6px;
45
+ // What the open tooltip marks: its axis' spoke, and a ring round each value on it.
46
+ --wr-radar-chart-crosshair-color: var(--wr-color-on-surface-muted);
47
+ --wr-radar-chart-hover-center: var(--wr-color-surface);
48
+
49
+ display: inline-flex;
50
+ // The containing block of the out-of-flow `dataTable` copy, as on the line chart: a
51
+ // static host lets that 1px box resolve against an ancestor outside the chart and keep
52
+ // its place in an unpositioned scroller's content. No z-index, so no stacking context.
53
+ position: relative;
54
+ flex-direction: column;
55
+ align-items: center;
56
+ gap: var(--wr-radar-chart-gap);
57
+ max-width: 100%;
58
+ font-family: var(--wr-radar-chart-font-family);
59
+ color: var(--wr-radar-chart-color);
60
+
61
+ // As wide as the drawing — the inline width is `size` — with the gutter as its padding,
62
+ // and never wider than the chart leaves it, so on a phone the drawing shrinks rather
63
+ // than the page scrolling sideways.
64
+ &__surface {
65
+ position: relative;
66
+ box-sizing: content-box;
67
+ max-width: calc(100% - 2 * var(--wr-radar-chart-gutter-x));
68
+ padding: var(--wr-radar-chart-gutter-y) var(--wr-radar-chart-gutter-x);
69
+ }
70
+
71
+ // The drawing by its class, never a bare `svg`: the legend's keys are `<svg>`s too.
72
+ // Overflow is visible because the outer ring is the drawing's edge, so a dot on it is
73
+ // drawn half outside.
74
+ &__svg {
75
+ display: block;
76
+ width: 100%;
77
+ height: auto;
78
+ overflow: visible;
79
+ }
80
+
81
+ &__ring,
82
+ &__spoke {
83
+ stroke: var(--wr-radar-chart-grid-color);
84
+ stroke-width: var(--wr-radar-chart-grid-width);
85
+ }
86
+
87
+ &__area {
88
+ fill-opacity: var(--wr-radar-chart-area-opacity);
89
+ }
90
+
91
+ &__line {
92
+ stroke-width: var(--wr-radar-chart-line-width);
93
+ }
94
+
95
+ &__dot {
96
+ stroke-width: var(--wr-radar-chart-dot-size);
97
+ }
98
+
99
+ &__crosshair {
100
+ stroke: var(--wr-radar-chart-crosshair-color);
101
+ stroke-width: 1px;
102
+ stroke-dasharray: 3 3;
103
+ }
104
+
105
+ &__hover-dot {
106
+ stroke-width: calc(var(--wr-radar-chart-dot-size) * 2);
107
+ }
108
+
109
+ &__hover-dot-center {
110
+ stroke: var(--wr-radar-chart-hover-center);
111
+ stroke-width: calc(var(--wr-radar-chart-dot-size) * 4 / 3);
112
+ }
113
+
114
+ // Both layers cover the drawing exactly, so a label's percentages are the drawing's.
115
+ // Never hittable: the drawing under them hears the pointer.
116
+ &__ring-labels,
117
+ &__axis-labels {
118
+ position: absolute;
119
+ inset: var(--wr-radar-chart-gutter-y) var(--wr-radar-chart-gutter-x);
120
+ pointer-events: none;
121
+ font-size: var(--wr-radar-chart-label-font-size);
122
+ line-height: var(--wr-radar-chart-label-line-height);
123
+ }
124
+
125
+ // Beside the first axis, just past its spoke and level with its ring, so a value reads
126
+ // against the line it names. Past the spoke rather than on it, because the first
127
+ // axis' dots are on the spoke and a value laid over one would hide it. `top` in
128
+ // percent is the layer's height, which is the drawing's. A fitted scale can run below
129
+ // zero, and a value has no strong character of its own, so `plaintext` keeps the sign
130
+ // of `-20` before its digits on an RTL page.
131
+ &__ring-label {
132
+ position: absolute;
133
+ // rtl-ok: beside the first axis' spoke, which the drawing does not mirror
134
+ left: 50%;
135
+ top: calc(var(--wr-radar-chart-y, 0) * 1%);
136
+ transform: translate(var(--wr-radar-chart-ring-label-offset), -50%);
137
+ color: var(--wr-radar-chart-ring-label-color);
138
+ text-shadow:
139
+ 0 0 2px var(--wr-radar-chart-ring-label-halo),
140
+ 0 0 2px var(--wr-radar-chart-ring-label-halo),
141
+ 0 0 1px var(--wr-radar-chart-ring-label-halo);
142
+ white-space: nowrap;
143
+ font-variant-numeric: tabular-nums;
144
+ unicode-bidi: plaintext;
145
+ }
146
+
147
+ // Each name starts a gap out from the end of its spoke, along the spoke, and is aligned
148
+ // AWAY from the centre by how far its spoke leans: the shift is `(cos - 1) / 2` of its
149
+ // own width and `(sin - 1) / 2` of its height, so a name at three o'clock starts at its
150
+ // point, one at nine ends there, and one at twelve or six is centred on it — and every
151
+ // spoke between leans the same way the name does.
152
+ //
153
+ // Its width is bounded by the room on the side it grows towards: the drawing's share
154
+ // beyond its point plus the gutter, divided by the share of its width that lies on that
155
+ // side. One `max-width` for every quadrant, where per-quadrant rules would have to agree
156
+ // at their borders. jsdom has no layout, so no spec holds the arithmetic — the spec pins
157
+ // the four numbers the template hands this rule instead.
158
+ &__axis-label {
159
+ $x: var(--wr-radar-chart-x, 50);
160
+ $y: var(--wr-radar-chart-y, 50);
161
+ $cos: var(--wr-radar-chart-cos, 0);
162
+ $sin: var(--wr-radar-chart-sin, 0);
163
+ $gap: var(--wr-radar-chart-label-gap);
164
+ $gutter: var(--wr-radar-chart-gutter-x);
165
+
166
+ position: absolute;
167
+ // rtl-ok: the end of the axis' spoke, which does not mirror with `direction`
168
+ left: calc($x * 1% + $cos * $gap);
169
+ top: calc($y * 1% + $sin * $gap);
170
+ transform: translate(calc(($cos - 1) * 50%), calc(($sin - 1) * 50%));
171
+ max-width: min(
172
+ var(--wr-radar-chart-label-max-width),
173
+ calc(($x * 1% + $gutter + $cos * $gap) / max(0.001, (1 - $cos) / 2)),
174
+ calc(((100 - $x) * 1% + $gutter - $cos * $gap) / max(0.001, (1 + $cos) / 2))
175
+ );
176
+ overflow: hidden;
177
+ text-overflow: ellipsis;
178
+ white-space: nowrap;
179
+ color: var(--wr-radar-chart-label-color);
180
+ // A name is the host's own text, in whatever language: it takes its direction from
181
+ // that text. Its box is as wide as its text, so where it sits does not move.
182
+ unicode-bidi: plaintext;
183
+ }
184
+
185
+ &__legend {
186
+ justify-content: center;
187
+ }
188
+ }
189
+
190
+ // Forced colors keeps the SVG strokes as written, so the strokes written in theme colours
191
+ // would keep colours the forced palette no longer has: the web would vanish on a dark
192
+ // canvas, and the hovered dot's surface-coloured centre would be a disc of the old page.
193
+ @media (forced-colors: active) {
194
+ .wr-radar-chart__ring,
195
+ .wr-radar-chart__spoke {
196
+ stroke: GrayText;
197
+ }
198
+
199
+ .wr-radar-chart__crosshair {
200
+ stroke: CanvasText;
201
+ }
202
+
203
+ .wr-radar-chart__hover-dot-center {
204
+ stroke: Canvas;
205
+ }
206
+ }