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,20 +1,85 @@
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. With `series` the
5
+ // legend is a `ul[wr-chart-legend]`, so `@use 'ngwr/charts/bar-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 plot, which
8
+ // its own sheet clips out of sight.
9
+ @use '../../core/styles' as core-styles; // WrChartTable
10
+
11
+ // The gap between two categories standing up: the plot's gap, but never more than a
12
+ // quarter of the track shared out among the gaps. A fixed gap took the whole track once
13
+ // there were enough categories — measured in Chromium, forty on a phone left every bar
14
+ // 0.77px wide and a hundred left none at all, with nothing to say so. The component writes
15
+ // how many categories there are; below about one per 32px of track the hook's own gap is
16
+ // the smaller and nothing moves. Standing up only: lying down the rows keep a floor of
17
+ // their own and grow the plot instead, and a percentage gap down a column has no height to
18
+ // resolve against. The label row under the bars is held the same way, so each name stays
19
+ // under its bar.
20
+ $plot-gap: min(var(--wr-bar-chart-plot-gap), calc(25% / var(--wr-bar-chart-categories, 1)));
21
+
22
+ // How far one of `lines`' boxes sits in from each end of the track: half a category. The
23
+ // categories are equal shares of the track with the plot's gap between them, so their
24
+ // middles are evenly spaced from the first to the last, and a box between those two puts
25
+ // category `c` of `n` at `c / (n - 1)` of its length — the percentage the component
26
+ // writes. With one category the box is the whole track, and its point sits in the middle.
27
+ // A Sass value rather than a hook: the component's percentages depend on it, so it is
28
+ // geometry rather than a look. It takes the gap the track itself lays the categories out
29
+ // with — `$plot-gap` standing up, which resolves against the same width, and the hook's
30
+ // own lying down.
31
+ @function line-inset($gap) {
32
+ @return calc(
33
+ (100% - (var(--wr-bar-chart-count, 1) - 1) * #{$gap}) / (2 * var(--wr-bar-chart-count, 1)) *
34
+ clamp(0, var(--wr-bar-chart-count, 1) - 1, 1)
35
+ );
36
+ }
37
+
38
+ $line-inset: line-inset($plot-gap);
39
+ $line-inset-across: line-inset(var(--wr-bar-chart-plot-gap));
40
+
41
+ // The ring round each of `lines`' points: its stroke is twice this, half of it under the fill.
42
+ $point-ring: 2px;
43
+
44
+ // How far past each end of the track one of `lines`' markers may reach: the component writes
45
+ // the largest marker's reach along the value axis, by shape, and the ring adds half its
46
+ // stroke. The track keeps that much room at each end, so a point on the axis' maximum or
47
+ // minimum stays inside the chart's box rather than past it, where an `overflow: hidden`
48
+ // card would cut it. Geometry, like the inset above, so a Sass value rather than a hook.
49
+ $line-reach: calc(var(--wr-bar-chart-reach, 0) * 1px + #{$point-ring} / 2);
50
+
4
51
  .wr-bar-chart {
5
52
  --wr-bar-chart-font-family: var(--wr-font-family-base);
53
+ --wr-bar-chart-text-color: var(--wr-color-on-surface);
54
+ // The gap between two categories, which the label row under the bars keeps too, so each
55
+ // name stays under its bar. Declared here rather than on the plot, so one override on
56
+ // the chart moves both rows.
57
+ --wr-bar-chart-plot-gap: var(--wr-space-sm);
58
+ // Beside `lines`: the ring round each point and the halo behind each printed value, so a
59
+ // point reads on the bar under it and a number stays readable where a line crosses it.
60
+ // The surface the chart sits on, by default.
61
+ --wr-bar-chart-halo: var(--wr-color-surface);
6
62
 
7
63
  display: block;
64
+ // The containing block of the out-of-flow `dataTable` copy, as on the line chart: a
65
+ // static host lets that 1px box resolve against an ancestor outside the chart and keep
66
+ // its place in an unpositioned scroller's content. No z-index, so no stacking context.
67
+ position: relative;
8
68
  font-family: var(--wr-bar-chart-font-family);
9
- color: var(--wr-color-on-surface);
69
+ color: var(--wr-bar-chart-text-color);
10
70
 
11
71
  &__plot {
12
- --wr-bar-chart-plot-gap: var(--wr-space-sm);
13
72
  --wr-bar-chart-plot-border: var(--wr-border-base);
73
+ // Lying down, the least each bar's row takes — a category's, or a series' lane in it:
74
+ // one line of the small text the values and the names are set in. The rows share the
75
+ // plot's `height`, so without a floor a long list thinned every bar to a hairline, or
76
+ // to nothing at 26 rows, and stacked the names on each other; with it, rows that need
77
+ // more grow the plot past `height`.
78
+ --wr-bar-chart-row-min-size: var(--wr-text-xs-leading);
14
79
 
15
80
  display: flex;
16
81
  align-items: flex-end;
17
- gap: var(--wr-bar-chart-plot-gap);
82
+ gap: $plot-gap;
18
83
  border-bottom: 1px solid var(--wr-bar-chart-plot-border);
19
84
  }
20
85
 
@@ -34,6 +99,10 @@
34
99
  &__value {
35
100
  --wr-bar-chart-value-font-size: var(--wr-text-xs);
36
101
  --wr-bar-chart-value-line-height: var(--wr-leading-none);
102
+ // How far a value sits past the end of its bar where it is placed there rather than
103
+ // stacked on the bar: with `series`, and in the horizontal layout.
104
+ --wr-bar-chart-value-offset: var(--wr-space-xs);
105
+ --wr-bar-chart-value-color: var(--wr-color-on-surface-muted);
37
106
 
38
107
  flex: none;
39
108
  // Bounded by its column and ellipsised, as the label under it is. With no bound,
@@ -45,9 +114,13 @@
45
114
  text-overflow: ellipsis;
46
115
  white-space: nowrap;
47
116
  font-size: var(--wr-bar-chart-value-font-size);
48
- color: var(--wr-color-on-surface-muted);
117
+ color: var(--wr-bar-chart-value-color);
49
118
  font-variant-numeric: tabular-nums;
50
119
  line-height: var(--wr-bar-chart-value-line-height);
120
+ // A value has no strong character of its own, so on an RTL page the minus of `-3`
121
+ // landed after the digits, `3-`; plaintext takes the direction from the text. Every
122
+ // value box is as wide as its text or centred, so its alignment does not move.
123
+ unicode-bidi: plaintext;
51
124
  }
52
125
 
53
126
  // The component writes the bar's share of the plot as its `flex-grow`, from 0
@@ -73,23 +146,550 @@
73
146
  }
74
147
 
75
148
  &__labels {
76
- --wr-bar-chart-labels-gap: var(--wr-space-sm);
149
+ --wr-bar-chart-labels-gap: var(--wr-bar-chart-plot-gap);
77
150
  --wr-bar-chart-labels-margin-top: var(--wr-space-sm);
78
151
 
79
152
  display: flex;
80
- gap: var(--wr-bar-chart-labels-gap);
153
+ // Held as the plot's gap is (`$plot-gap`), against the same width, so each name stays
154
+ // under its bar however many there are.
155
+ gap: min(var(--wr-bar-chart-labels-gap), calc(25% / var(--wr-bar-chart-categories, 1)));
81
156
  margin-top: var(--wr-bar-chart-labels-margin-top);
82
157
  }
83
158
 
84
159
  &__label {
85
160
  --wr-bar-chart-label-font-size: var(--wr-text-xs);
161
+ // The widest a category name runs in the horizontal layout's gutter before it is
162
+ // ellipsised; the gutter is as wide as the longest name up to this.
163
+ --wr-bar-chart-label-max-width: 10rem;
164
+ --wr-bar-chart-label-color: var(--wr-color-on-surface-muted);
86
165
 
87
166
  flex: 1 1 0;
88
167
  text-align: center;
89
168
  font-size: var(--wr-bar-chart-label-font-size);
90
- color: var(--wr-color-on-surface-muted);
169
+ color: var(--wr-bar-chart-label-color);
91
170
  overflow: hidden;
92
171
  text-overflow: ellipsis;
93
172
  white-space: nowrap;
173
+ // A name is the host's own text, in whatever language: it takes its direction from
174
+ // that text, so a Latin name on an RTL page keeps a trailing `$` or `%` at its end.
175
+ unicode-bidi: plaintext;
176
+ }
177
+
178
+ &__legend {
179
+ --wr-bar-chart-legend-margin-bottom: var(--wr-space-md);
180
+
181
+ margin: 0 0 var(--wr-bar-chart-legend-margin-bottom);
182
+ }
183
+
184
+ // ── The layout `series` and the horizontal orientation share ──────────────────────
185
+ //
186
+ // The plot is a grid: the TRACK the bars run along, and past each end of the value
187
+ // axis a ROOM for the values printed there. Every position on the track is a share of
188
+ // the value axis from its minimum, which the component writes inline — zero for the
189
+ // baseline, where a bar starts and how much it covers, where a value goes — so the
190
+ // stylesheet places each part from one number at any size.
191
+
192
+ // A hidden copy of every value printed past one end of the axis, all in one grid cell:
193
+ // the cell is as large as the largest, in the value's own font and with its own offset,
194
+ // so the value past the longest bar has exactly the room it needs and no guess is made
195
+ // about how wide a number is. Hidden by `visibility`, which takes it out of the
196
+ // accessibility tree too.
197
+ &__room {
198
+ display: grid;
199
+ visibility: hidden;
200
+ pointer-events: none;
201
+
202
+ > .wr-bar-chart__value {
203
+ grid-area: 1 / 1;
204
+ max-width: none;
205
+ }
206
+ }
207
+
208
+ &__track {
209
+ position: relative;
210
+ display: flex;
211
+ gap: $plot-gap;
212
+ min-width: 0;
213
+ min-height: 0;
214
+ }
215
+
216
+ // Zero, wherever it falls: the bottom of the plot until a value goes below it. Drawn as
217
+ // a border rather than a background, which forced colors would reset to the page's own
218
+ // colour, and just past zero, so a bar standing on it is not overlapped. The colour is
219
+ // the plot's own hook.
220
+ &__baseline {
221
+ position: absolute;
222
+ inset-inline: 0;
223
+ bottom: calc(var(--wr-bar-chart-zero, 0) * 100%);
224
+ height: 0;
225
+ margin-bottom: -1px;
226
+ border-bottom: 1px solid var(--wr-bar-chart-plot-border);
227
+ pointer-events: none;
228
+ }
229
+
230
+ // One category of `series`: a lane per series shown, or one lane under `stacked`.
231
+ &__category {
232
+ --wr-bar-chart-category-gap: calc(var(--wr-space-xs) / 2);
233
+
234
+ display: flex;
235
+ flex: 1 1 0;
236
+ // Standing up, never more than a tenth of the category, for the reason `$plot-gap`
237
+ // gives: grouped bars on a phone are a few pixels wide, and fixed gaps took them all.
238
+ gap: min(var(--wr-bar-chart-category-gap), 10%);
239
+ min-width: 0;
240
+ min-height: 0;
241
+ }
242
+
243
+ // The strip one bar runs along, the containing block of its bars and its values.
244
+ &__lane {
245
+ position: relative;
246
+ flex: 1 1 0;
247
+ min-width: 0;
248
+ min-height: 0;
249
+ }
250
+
251
+ // A series' bar: a tint of the series' colour, outlined in the colour itself and the
252
+ // series' dash. The tint is what lets the outline read against the body; the outline is
253
+ // what tells two series apart without hue. The body takes the colour from the inline
254
+ // `--wr-bar-chart-color` and the outline as an SVG stroke; both are kept under forced
255
+ // colors, as every chart mark here is.
256
+ &__series-bar {
257
+ // How much of its series' colour a bar's body takes.
258
+ --wr-bar-chart-series-tint: 35%;
259
+ // The outline's width, in pixels, whatever the bar's size.
260
+ --wr-bar-chart-series-edge-width: 2px;
261
+
262
+ position: absolute;
263
+ inset-inline: 0;
264
+ bottom: calc(var(--wr-bar-chart-start, 0) * 100%);
265
+ height: calc(var(--wr-bar-chart-size, 0) * 100%);
266
+ // A zero keeps a 1px floor on the baseline, as a `data` bar does.
267
+ min-height: 1px;
268
+ background: color-mix(
269
+ in srgb,
270
+ var(--wr-bar-chart-color, currentColor) var(--wr-bar-chart-series-tint),
271
+ transparent
272
+ );
273
+ forced-color-adjust: none;
274
+ transition:
275
+ bottom var(--wr-duration-slow) var(--wr-ease-out),
276
+ height var(--wr-duration-slow) var(--wr-ease-out);
277
+ }
278
+
279
+ // The outline covers the bar and draws its stroke centred on the bar's edge at twice the
280
+ // width, so the half inside is the outline and the half outside is clipped: every dash
281
+ // lies within the bar, and two bars that meet in a pile keep their own.
282
+ &__edge {
283
+ position: absolute;
284
+ inset: 0;
285
+ width: 100%;
286
+ height: 100%;
287
+ overflow: hidden;
288
+ pointer-events: none;
289
+ stroke-width: calc(var(--wr-bar-chart-series-edge-width) * 2);
290
+ }
291
+
292
+ // A value past the end of its bar: above it, or below one that grows below zero. As
293
+ // wide as its lane and centred; standing up, left out where it does not fit (below).
294
+ &__lane > &__value {
295
+ position: absolute;
296
+ inset-inline: 0;
297
+ bottom: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
298
+ text-align: center;
299
+ }
300
+
301
+ &__lane > &__value--below {
302
+ top: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
303
+ bottom: auto;
304
+ }
305
+
306
+ // One of `lines`, over the bars: an SVG box from the middle of the first category to the
307
+ // middle of the last, every position in it a percentage the component writes, so nothing
308
+ // stretches and a dash or a marker keeps its size at any width. Out of the pointer's
309
+ // way, so a point over a category still opens that category's tooltip. Its strokes and
310
+ // fills are kept under forced colors, as every chart mark here is.
311
+ &__line {
312
+ // How wide the line is drawn, in pixels whatever the plot's size.
313
+ --wr-bar-chart-line-width: 2px;
314
+
315
+ position: absolute;
316
+ inset-block-start: 0;
317
+ inset-inline-start: $line-inset;
318
+ inline-size: calc(100% - 2 * #{$line-inset});
319
+ block-size: 100%;
320
+ overflow: visible;
321
+ pointer-events: none;
322
+ forced-color-adjust: none;
323
+
324
+ // Every position along the track is a logical inset, so the bars mirror under RTL; an
325
+ // SVG's own coordinates do not, so the box mirrors to follow them. Every marker shape
326
+ // is symmetric about its vertical, so none reads differently for it.
327
+ &:dir(rtl) {
328
+ transform: scaleX(-1);
329
+ }
330
+ }
331
+
332
+ &__line-segment {
333
+ stroke-width: var(--wr-bar-chart-line-width);
334
+ stroke-linecap: round;
335
+ }
336
+
337
+ // A point's marker, ringed: the stroke is painted first and half covered by the fill, so
338
+ // the marker keeps the area every shape shares and the ring sits outside it.
339
+ &__point > path {
340
+ stroke: var(--wr-bar-chart-halo);
341
+ stroke-width: $point-ring;
342
+ paint-order: stroke;
343
+ }
344
+ }
345
+
346
+ // Beside `lines`, room at each end of the value axis for the largest marker: a margin rather
347
+ // than a padding, so the track's own box — which every bar, the baseline and each line's box
348
+ // are placed in — stays the axis. Kept while every line is hidden, as the layout is.
349
+ .wr-bar-chart--combo:not(.wr-bar-chart--horizontal) .wr-bar-chart__track {
350
+ margin-block: $line-reach;
351
+ }
352
+
353
+ .wr-bar-chart--combo.wr-bar-chart--horizontal .wr-bar-chart__track {
354
+ margin-inline: $line-reach;
355
+ }
356
+
357
+ // The SVG keeps its fills and strokes under forced colors, so the lines and their points keep
358
+ // their colours and the legend still keys them. The ring round each point and the halo behind
359
+ // each printed value are drawn in the surface, which means nothing on a forced palette: they
360
+ // take the page's own colour, which keeps a point apart from the bar under it on any background.
361
+ @media (forced-colors: active) {
362
+ .wr-bar-chart {
363
+ --wr-bar-chart-halo: Canvas;
364
+ }
365
+ }
366
+
367
+ // `series`, vertical — or `data` beside `lines`: three rows — the room for the values
368
+ // printed above the bars, the track, the room for those printed below the ones under
369
+ // zero. A room with nothing to hold is no height at all.
370
+ :is(.wr-bar-chart--series, .wr-bar-chart--combo):not(.wr-bar-chart--horizontal) {
371
+ .wr-bar-chart__plot {
372
+ display: grid;
373
+ grid-template-rows: auto minmax(0, 1fr) auto;
374
+ grid-template-columns: minmax(0, 1fr);
375
+ // The track fills its row: the plot's own `flex-end` would shrink it to its content,
376
+ // and every bar in it is out of flow.
377
+ align-items: stretch;
378
+ gap: 0;
379
+ border-bottom: 0;
380
+ }
381
+
382
+ .wr-bar-chart__room--max {
383
+ grid-row: 1;
384
+
385
+ > .wr-bar-chart__value {
386
+ padding-block-end: var(--wr-bar-chart-value-offset);
387
+ }
388
+ }
389
+
390
+ .wr-bar-chart__track {
391
+ grid-row: 2;
392
+ }
393
+
394
+ .wr-bar-chart__room--min {
395
+ grid-row: 3;
396
+
397
+ > .wr-bar-chart__value {
398
+ padding-block-start: var(--wr-bar-chart-value-offset);
399
+ }
400
+ }
401
+
402
+ // A value whole or not at all. Grouped bars on a phone leave a lane a few pixels wide,
403
+ // and an ellipsis needs a glyph and itself: below that Chromium draws the first digit
404
+ // and nothing else, so 1.2K read as `1`. The value wraps instead, beside an empty
405
+ // first item one line tall, onto a second line its own height clips away — so a value
406
+ // that does not fit its lane is left out, and the tooltip and the bar's name carry it.
407
+ .wr-bar-chart__lane > .wr-bar-chart__value {
408
+ display: flex;
409
+ flex-wrap: wrap;
410
+ align-content: flex-start;
411
+ justify-content: center;
412
+ block-size: 1lh;
413
+ text-overflow: clip;
414
+
415
+ &::before {
416
+ content: '';
417
+ flex: none;
418
+ block-size: 1lh;
419
+ }
420
+ }
421
+ }
422
+
423
+ // Beside `lines`, a printed value is drawn over them, haloed in the surface: where a line
424
+ // or a point crosses a number, the number stays readable and the line passes behind it.
425
+ // Every value in the track is positioned, so the `z-index` takes.
426
+ .wr-bar-chart--combo .wr-bar-chart__track .wr-bar-chart__value {
427
+ z-index: 1;
428
+ text-shadow:
429
+ 0 0 2px var(--wr-bar-chart-halo),
430
+ 0 0 2px var(--wr-bar-chart-halo),
431
+ 0 0 1px var(--wr-bar-chart-halo);
432
+ }
433
+
434
+ // `data` beside `lines`, standing up: its columns stand in the track above, the one the
435
+ // lines are drawn over, so the bars and the lines share one value axis. The value is taken
436
+ // out of flow and placed past the bar from the same share, as it is lying down: in flow it
437
+ // took its own height out of the column and scaled every bar against a shorter one. The
438
+ // bar stands on zero, which is the axis minimum until a line goes below it, on a spacer
439
+ // that takes zero's share of the column.
440
+ .wr-bar-chart--combo:not(.wr-bar-chart--series, .wr-bar-chart--horizontal) {
441
+ .wr-bar-chart__column {
442
+ position: relative;
443
+ gap: 0;
444
+
445
+ &::after {
446
+ content: '';
447
+ flex: 0 0 0;
448
+ flex-grow: var(--wr-bar-chart-start, var(--wr-bar-chart-zero, 0));
449
+ transition: flex-grow var(--wr-duration-slow) var(--wr-ease-out);
450
+
451
+ // Here rather than in the block at the end, which these selectors outrank.
452
+ @media (prefers-reduced-motion: reduce) {
453
+ transition: none;
454
+ }
455
+ }
456
+ }
457
+
458
+ .wr-bar-chart__column > .wr-bar-chart__value {
459
+ position: absolute;
460
+ inset-inline: 0;
461
+ bottom: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
462
+ text-align: center;
463
+ transition:
464
+ bottom var(--wr-duration-slow) var(--wr-ease-out),
465
+ top var(--wr-duration-slow) var(--wr-ease-out);
466
+
467
+ @media (prefers-reduced-motion: reduce) {
468
+ transition: none;
469
+ }
470
+ }
471
+
472
+ // A bar below zero hangs from it, on a spacer that takes its own end's share, so its
473
+ // rounded corners are at the bottom and its value is printed under it.
474
+ .wr-bar-chart__column > .wr-bar-chart__value--below {
475
+ top: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
476
+ bottom: auto;
477
+ }
478
+
479
+ .wr-bar-chart__bar--below {
480
+ border-radius: 0 0 var(--wr-bar-chart-bar-radius) var(--wr-bar-chart-bar-radius);
481
+ }
482
+ }
483
+
484
+ // Horizontal, with `data` or `series`: four columns — the category names, the room for
485
+ // the values printed before the bars that grow below zero, the track, and the room for
486
+ // those printed past the rest. A grid follows `direction`, and every position along the
487
+ // track is a logical inset, so under RTL the names are on the right and the bars grow
488
+ // leftwards with no rule of their own.
489
+ .wr-bar-chart--horizontal {
490
+ .wr-bar-chart__plot {
491
+ display: grid;
492
+ grid-template-columns: auto auto minmax(0, 1fr) auto;
493
+ grid-template-rows: minmax(0, 1fr);
494
+ align-items: stretch;
495
+ gap: 0;
496
+ border-bottom: 0;
497
+ }
498
+
499
+ // One row per category, on the same rows as the track's: equal shares of the plot's
500
+ // height with the plot's own gap between them, so each name sits level with its bars
501
+ // at any height — and never less than the row floor, which the track's categories
502
+ // keep too, so a plot their floors grow past `height` still lines the two up. As wide
503
+ // as the longest name, up to its bound.
504
+ .wr-bar-chart__labels {
505
+ grid-column: 1;
506
+ grid-row: 1;
507
+ display: grid;
508
+ grid-auto-rows: minmax(var(--wr-bar-chart-row-min-size), 1fr);
509
+ gap: var(--wr-bar-chart-plot-gap);
510
+ margin: 0;
511
+ padding-inline-end: var(--wr-bar-chart-labels-gap);
512
+ }
513
+
514
+ // Shrunk to the name against the bars' side of the gutter, so its own direction can
515
+ // follow its text (`plaintext`) without moving it off the bars.
516
+ .wr-bar-chart__label {
517
+ align-self: center;
518
+ justify-self: end;
519
+ max-width: var(--wr-bar-chart-label-max-width);
520
+ text-align: end;
521
+ }
522
+
523
+ .wr-bar-chart__room--min {
524
+ grid-column: 2;
525
+ grid-row: 1;
526
+
527
+ > .wr-bar-chart__value {
528
+ padding-inline-end: var(--wr-bar-chart-value-offset);
529
+ }
530
+ }
531
+
532
+ .wr-bar-chart__track {
533
+ grid-column: 3;
534
+ grid-row: 1;
535
+ flex-direction: column;
536
+ gap: var(--wr-bar-chart-plot-gap);
537
+ }
538
+
539
+ .wr-bar-chart__room--max {
540
+ grid-column: 4;
541
+ grid-row: 1;
542
+
543
+ > .wr-bar-chart__value {
544
+ padding-inline-start: var(--wr-bar-chart-value-offset);
545
+ }
546
+ }
547
+
548
+ .wr-bar-chart__baseline {
549
+ inset-block: 0;
550
+ inset-inline-start: calc(var(--wr-bar-chart-zero, 0) * 100%);
551
+ inset-inline-end: auto;
552
+ width: 0;
553
+ height: auto;
554
+ margin: 0;
555
+ margin-inline-start: -1px;
556
+ border-bottom: 0;
557
+ border-inline-start: 1px solid var(--wr-bar-chart-plot-border);
558
+ }
559
+
560
+ // A category is as tall as its lanes need at the least: its automatic minimum, which
561
+ // the lanes' floors make up.
562
+ .wr-bar-chart__category {
563
+ flex-direction: column;
564
+ min-height: auto;
565
+ gap: var(--wr-bar-chart-category-gap);
566
+ }
567
+
568
+ .wr-bar-chart__lane {
569
+ min-height: var(--wr-bar-chart-row-min-size);
570
+ }
571
+
572
+ .wr-bar-chart__series-bar {
573
+ inset-block: 0;
574
+ inset-inline-start: calc(var(--wr-bar-chart-start, 0) * 100%);
575
+ inset-inline-end: auto;
576
+ height: auto;
577
+ min-height: 0;
578
+ inline-size: calc(var(--wr-bar-chart-size, 0) * 100%);
579
+ min-inline-size: 1px;
580
+ transition:
581
+ inset-inline-start var(--wr-duration-slow) var(--wr-ease-out),
582
+ inline-size var(--wr-duration-slow) var(--wr-ease-out);
583
+ }
584
+
585
+ .wr-bar-chart__lane > .wr-bar-chart__value {
586
+ top: 50%;
587
+ bottom: auto;
588
+ inset-inline-start: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
589
+ inset-inline-end: auto;
590
+ max-width: none;
591
+ transform: translateY(-50%);
592
+ text-align: start;
593
+ }
594
+
595
+ .wr-bar-chart__lane > .wr-bar-chart__value--below {
596
+ inset-inline-start: auto;
597
+ inset-inline-end: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
598
+ }
599
+
600
+ // `data`, sideways: each datum's column is a row, and its bar still grows by the share
601
+ // written as its `flex-grow` — the only thing in flow, so the share is of the whole
602
+ // row. The value is taken out of flow and placed past the bar's end from the same
603
+ // share, since in flow beside the bar it would take its own width out of the row and
604
+ // scale every bar against a different length.
605
+ .wr-bar-chart__column {
606
+ position: relative;
607
+ flex-direction: row;
608
+ align-items: stretch;
609
+ justify-content: flex-start;
610
+ height: auto;
611
+ min-height: var(--wr-bar-chart-row-min-size);
612
+ gap: 0;
613
+ }
614
+
615
+ .wr-bar-chart__bar {
616
+ width: auto;
617
+ min-width: 1px;
618
+ min-height: 0;
619
+ border-radius: 0;
620
+ border-start-end-radius: var(--wr-bar-chart-bar-radius);
621
+ border-end-end-radius: var(--wr-bar-chart-bar-radius);
622
+ }
623
+
624
+ .wr-bar-chart__column > .wr-bar-chart__value {
625
+ position: absolute;
626
+ top: 50%;
627
+ inset-inline-start: calc(var(--wr-bar-chart-at, 0) * 100% + var(--wr-bar-chart-value-offset));
628
+ max-width: none;
629
+ transform: translateY(-50%);
630
+ transition: inset-inline-start var(--wr-duration-slow) var(--wr-ease-out);
631
+ }
632
+
633
+ // Lying down, a line's box runs down the rows, from the middle of the first to the
634
+ // middle of the last, and across the whole track.
635
+ .wr-bar-chart__line {
636
+ inset-block-start: $line-inset-across;
637
+ inset-inline-start: 0;
638
+ inline-size: 100%;
639
+ block-size: calc(100% - 2 * #{$line-inset-across});
640
+ }
641
+ }
642
+
643
+ // `data` beside `lines`, lying down: the bar starts at zero, on a spacer at inline start
644
+ // that takes zero's share of the row — nothing until a value goes below zero. A bar below
645
+ // zero starts at its own end and runs to zero, its value printed before it and its rounded
646
+ // corners at inline start.
647
+ .wr-bar-chart--combo.wr-bar-chart--horizontal:not(.wr-bar-chart--series) {
648
+ .wr-bar-chart__column::before {
649
+ content: '';
650
+ flex: 0 0 0;
651
+ flex-grow: var(--wr-bar-chart-start, var(--wr-bar-chart-zero, 0));
652
+ transition: flex-grow var(--wr-duration-slow) var(--wr-ease-out);
653
+
654
+ @media (prefers-reduced-motion: reduce) {
655
+ transition: none;
656
+ }
657
+ }
658
+
659
+ .wr-bar-chart__column > .wr-bar-chart__value {
660
+ transition:
661
+ inset-inline-start var(--wr-duration-slow) var(--wr-ease-out),
662
+ inset-inline-end var(--wr-duration-slow) var(--wr-ease-out);
663
+
664
+ @media (prefers-reduced-motion: reduce) {
665
+ transition: none;
666
+ }
667
+ }
668
+
669
+ .wr-bar-chart__column > .wr-bar-chart__value--below {
670
+ inset-inline-start: auto;
671
+ inset-inline-end: calc((1 - var(--wr-bar-chart-at, 0)) * 100% + var(--wr-bar-chart-value-offset));
672
+ }
673
+
674
+ .wr-bar-chart__bar--below {
675
+ border-radius: 0;
676
+ border-start-start-radius: var(--wr-bar-chart-bar-radius);
677
+ border-end-start-radius: var(--wr-bar-chart-bar-radius);
678
+ }
679
+ }
680
+
681
+ // Every layout's movement is a bar growing to its value; with reduced motion it lands there
682
+ // at once. A `data` bar lying down — or standing beside `lines` — lands with the value
683
+ // placed past its end, which would otherwise jump ahead and leave the bar sliding up to
684
+ // it; beside `lines` the value and the spacer the bar stands on stop where they are
685
+ // declared. The lines move at once regardless.
686
+ @media (prefers-reduced-motion: reduce) {
687
+ .wr-bar-chart__bar,
688
+ .wr-bar-chart__series-bar,
689
+ .wr-bar-chart--horizontal .wr-bar-chart__series-bar,
690
+ .wr-bar-chart--horizontal .wr-bar-chart__bar,
691
+ .wr-bar-chart--horizontal .wr-bar-chart__column > .wr-bar-chart__value,
692
+ .wr-bar-chart--combo .wr-bar-chart__bar {
693
+ transition: none;
94
694
  }
95
695
  }