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
@@ -0,0 +1,237 @@
1
+ @use '../../../theme/styles' as theme;
2
+ @use '../../../popover/styles' as popover-styles; // the `.wr-tooltip` chip the hover tooltip renders into
3
+
4
+ // Styles for the entry points this component's own markup renders. With `dataTable`, the
5
+ // figures render as a `<wr-chart-table>` beside the stages, which its own sheet clips out
6
+ // of sight.
7
+ @use '../../core/styles' as core-styles; // WrChartTable
8
+
9
+ .wr-funnel-chart {
10
+ --wr-funnel-chart-font-family: var(--wr-font-family-base);
11
+ --wr-funnel-chart-color: var(--wr-color-on-surface);
12
+ // Three columns: the labels at inline start, the bars centred in the track, the figures
13
+ // at inline end. The label column is at most this wide and gives way first, ellipsised;
14
+ // the track never takes less than its share, so a phone keeps a funnel to look at.
15
+ --wr-funnel-chart-column-gap: var(--wr-space-md);
16
+ --wr-funnel-chart-label-max-width: 12rem;
17
+ --wr-funnel-chart-track-min-width: 40%;
18
+ --wr-funnel-chart-label-font-size: var(--wr-text-sm);
19
+ --wr-funnel-chart-label-line-height: var(--wr-text-sm-leading);
20
+ --wr-funnel-chart-label-color: var(--wr-color-on-surface);
21
+ --wr-funnel-chart-value-font-size: var(--wr-text-sm);
22
+ --wr-funnel-chart-value-line-height: var(--wr-text-sm-leading);
23
+ --wr-funnel-chart-value-font-weight: var(--wr-font-weight-medium);
24
+ --wr-funnel-chart-value-color: var(--wr-color-on-surface);
25
+ // The conversions: under each value, and between the bars.
26
+ --wr-funnel-chart-conversion-font-size: var(--wr-text-xs);
27
+ --wr-funnel-chart-conversion-line-height: var(--wr-text-xs-leading);
28
+ --wr-funnel-chart-conversion-color: var(--wr-color-on-surface-muted);
29
+ // A bar is as tall as a value with its conversion under it, so every bar is the same
30
+ // height whether its stage prints one line beside it or two; and as tall as its row if
31
+ // that is taller, so the band above and below always meets its edge.
32
+ --wr-funnel-chart-bar-height: calc(
33
+ var(--wr-funnel-chart-value-line-height) + var(--wr-funnel-chart-conversion-line-height)
34
+ );
35
+ --wr-funnel-chart-bar-radius: var(--wr-border-radius-sm);
36
+ // The gap between two bars, which the band fills and the share of the stage above sits on.
37
+ --wr-funnel-chart-gap-height: 1.5rem;
38
+ // The band is a faint wash of the two stages' colours: it carries no value of its own,
39
+ // only the narrowing the two bars' widths already state.
40
+ --wr-funnel-chart-band-opacity: 0.2;
41
+ // The share between the bars, on a wash of the surface: the band runs under it.
42
+ --wr-funnel-chart-gap-label-bg: color-mix(in srgb, var(--wr-color-surface) 85%, transparent);
43
+ --wr-funnel-chart-gap-label-padding-x: var(--wr-space-xs);
44
+ --wr-funnel-chart-gap-label-radius: var(--wr-border-radius-sm);
45
+ // The row the open tooltip is about, washed from edge to edge with the label and the
46
+ // figures inset from the wash.
47
+ --wr-funnel-chart-active-bg: var(--wr-color-hover);
48
+ --wr-funnel-chart-stage-radius: var(--wr-border-radius-sm);
49
+ --wr-funnel-chart-stage-padding-x: var(--wr-space-xs);
50
+
51
+ display: block;
52
+ // The containing block of the out-of-flow `dataTable` copy, as on every chart that
53
+ // renders it: a static host lets that 1px box resolve against an ancestor outside the
54
+ // chart and keep its place in an unpositioned scroller's content. No z-index, so no
55
+ // stacking context.
56
+ position: relative;
57
+ font-family: var(--wr-funnel-chart-font-family);
58
+ color: var(--wr-funnel-chart-color);
59
+
60
+ // One grid for every row, so a label, a bar and a figure line up down the funnel
61
+ // whatever their own widths: each stage and each gap between two stages is a subgrid
62
+ // of it.
63
+ //
64
+ // The figures column is `max-content`, so the labels give way first and a figure is
65
+ // never cut. `minmax(0, max-content)` was measured and refused: grid shares the room two
66
+ // intrinsic columns compete for out equally, so at 320px, with short labels, it cut a
67
+ // figure on every stage of a 1,234,567,890 funnel and every value of a $12,345,678.90
68
+ // one. The cost is a figure wider than the room left beside the track's floor, such as
69
+ // an 18-digit value on a phone, which overflows instead.
70
+ &__plot {
71
+ display: grid;
72
+ grid-template-columns:
73
+ fit-content(var(--wr-funnel-chart-label-max-width))
74
+ minmax(var(--wr-funnel-chart-track-min-width), 1fr)
75
+ max-content;
76
+ column-gap: var(--wr-funnel-chart-column-gap);
77
+ }
78
+
79
+ &__stage,
80
+ &__gap {
81
+ display: grid;
82
+ grid-column: 1 / -1;
83
+ grid-template-columns: subgrid;
84
+ }
85
+
86
+ // The inline padding sits outside the first and last tracks, which the subgrid adds to
87
+ // their size; the track in the middle, where the bars and the bands are, does not move.
88
+ &__stage {
89
+ align-items: center;
90
+ min-height: var(--wr-funnel-chart-bar-height);
91
+ padding-inline: var(--wr-funnel-chart-stage-padding-x);
92
+ border-radius: var(--wr-funnel-chart-stage-radius);
93
+ }
94
+
95
+ &__stage--active {
96
+ background: var(--wr-funnel-chart-active-bg);
97
+ }
98
+
99
+ // `min-width: 0` and the clip are what let the column give way: an item that hides its
100
+ // overflow has no automatic minimum, so the label is ellipsised rather than pushing the
101
+ // track narrower than its share. Every stage's name, the tooltip and the data table carry
102
+ // the whole label. It takes its direction from its own text (`dir="auto"`), so a Latin
103
+ // label on an RTL page is cut at its end, not its start; it keeps its grid cell either
104
+ // way, and lines up on its own text's start, as the treemap's names do.
105
+ &__label {
106
+ min-width: 0;
107
+ overflow: hidden;
108
+ text-overflow: ellipsis;
109
+ white-space: nowrap;
110
+ font-size: var(--wr-funnel-chart-label-font-size);
111
+ line-height: var(--wr-funnel-chart-label-line-height);
112
+ color: var(--wr-funnel-chart-label-color);
113
+ }
114
+
115
+ // The bar's column: the bar is centred in it, and as tall as the row.
116
+ &__track {
117
+ display: flex;
118
+ justify-content: center;
119
+ align-self: stretch;
120
+ min-width: 0;
121
+ }
122
+
123
+ // The component writes the width, a percentage of the track: the largest stage, or
124
+ // `max`, is the full track. Zero and below are written as `0%`, and the floor keeps a
125
+ // hairline there, so a stage of zero still shows where it is and has an anchor for the
126
+ // tooltip; a missing stage renders no bar at all.
127
+ &__bar {
128
+ min-width: 1px;
129
+ border-radius: var(--wr-funnel-chart-bar-radius);
130
+ transition: width var(--wr-duration-slow) var(--wr-ease-out);
131
+ // The bar is an inline `background`, which forced colors resets to `Canvas`: every bar
132
+ // would vanish into the page and leave its figures floating. The SVG charts keep their
133
+ // fills there, so the HTML marks do too.
134
+ forced-color-adjust: none;
135
+ }
136
+
137
+ // Each figure shrunk to its text against the bar's side of the column, so its own
138
+ // direction can follow its text (`plaintext`) and it still sits by the bar: a negative
139
+ // value, printed as given, is a `-` in front of digits, neither of which has a direction,
140
+ // and under RTL the sign would land on the far side — `20-` — while "30% of first" would
141
+ // read "of first 30%". Stretched, a plaintext figure would align to its own text's
142
+ // start, at the column's far edge under RTL.
143
+ &__figures {
144
+ display: flex;
145
+ flex-direction: column;
146
+ justify-content: center;
147
+ align-items: flex-start;
148
+ font-variant-numeric: tabular-nums;
149
+ white-space: nowrap;
150
+ }
151
+
152
+ &__value,
153
+ &__overall {
154
+ unicode-bidi: plaintext;
155
+ }
156
+
157
+ &__value {
158
+ font-size: var(--wr-funnel-chart-value-font-size);
159
+ line-height: var(--wr-funnel-chart-value-line-height);
160
+ font-weight: var(--wr-funnel-chart-value-font-weight);
161
+ color: var(--wr-funnel-chart-value-color);
162
+ }
163
+
164
+ &__overall {
165
+ font-size: var(--wr-funnel-chart-conversion-font-size);
166
+ line-height: var(--wr-funnel-chart-conversion-line-height);
167
+ color: var(--wr-funnel-chart-conversion-color);
168
+ }
169
+
170
+ &__gap {
171
+ height: var(--wr-funnel-chart-gap-height);
172
+ }
173
+
174
+ // The band and the share sit in the same cell: the track's column, the gap's height.
175
+ &__band,
176
+ &__gap-label {
177
+ grid-column: 2;
178
+ grid-row: 1;
179
+ }
180
+
181
+ // A polygon on the track's width, written by the component, from the upper bar's width
182
+ // at its top edge to the lower bar's at its bottom — both centred, so the shape is the
183
+ // same in either direction. The two stages' paints arrive as the custom properties
184
+ // below, so a stage with a colour of its own carries it into its band.
185
+ &__band {
186
+ align-self: stretch;
187
+ background: linear-gradient(
188
+ var(--wr-funnel-chart-band-from, currentColor),
189
+ var(--wr-funnel-chart-band-to, currentColor)
190
+ );
191
+ opacity: var(--wr-funnel-chart-band-opacity);
192
+ transition: clip-path var(--wr-duration-slow) var(--wr-ease-out);
193
+ // Painted in the stages' colours, which forced colors would reset with the bars'.
194
+ forced-color-adjust: none;
195
+ }
196
+
197
+ // Positioned, so it paints above the band: the band's `opacity` makes it a stacking
198
+ // context, which paints over in-flow content beside it whatever the order in the DOM,
199
+ // and would lay the wash over the text.
200
+ //
201
+ // Bounded by the track and ellipsised, as a label is: at its 40% floor the track is
202
+ // about 115px on a 320px phone, and a long share — a custom `percentFormat`, or two
203
+ // significant digits of a tiny ratio — hung out of it over the label column. The
204
+ // tooltip, the stage's name and the data table carry the whole share.
205
+ &__gap-label {
206
+ position: relative;
207
+ place-self: center;
208
+ max-width: 100%;
209
+ overflow: hidden;
210
+ text-overflow: ellipsis;
211
+ padding: 0 var(--wr-funnel-chart-gap-label-padding-x);
212
+ border-radius: var(--wr-funnel-chart-gap-label-radius);
213
+ background: var(--wr-funnel-chart-gap-label-bg);
214
+ font-size: var(--wr-funnel-chart-conversion-font-size);
215
+ line-height: var(--wr-funnel-chart-conversion-line-height);
216
+ color: var(--wr-funnel-chart-conversion-color);
217
+ font-variant-numeric: tabular-nums;
218
+ white-space: nowrap;
219
+ }
220
+ }
221
+
222
+ // A bar that grows or shrinks to its new value is motion nothing asked for twice: the new
223
+ // width is what matters, and it is drawn at once.
224
+ @media (prefers-reduced-motion: reduce) {
225
+ .wr-funnel-chart__bar,
226
+ .wr-funnel-chart__band {
227
+ transition: none;
228
+ }
229
+ }
230
+
231
+ // Forced colors paints the active row's wash as the page, so the row the tooltip is about
232
+ // needs an edge instead.
233
+ @media (forced-colors: active) {
234
+ .wr-funnel-chart__stage--active {
235
+ outline: 1px solid Highlight;
236
+ }
237
+ }
@@ -3,16 +3,18 @@
3
3
 
4
4
  .wr-gauge {
5
5
  --wr-gauge-font-family: var(--wr-font-family-base);
6
+ --wr-gauge-color: var(--wr-color-on-surface);
6
7
  --wr-gauge-text-padding-bottom: var(--wr-space-sm);
7
8
  --wr-gauge-text-font-size: var(--wr-text-xl);
8
9
  --wr-gauge-text-font-weight: var(--wr-font-weight-semibold);
9
10
  --wr-gauge-suffix-margin-inline-start: var(--wr-space-xs);
10
11
  --wr-gauge-suffix-font-size: var(--wr-text-sm);
11
12
  --wr-gauge-suffix-font-weight: var(--wr-font-weight-medium);
13
+ --wr-gauge-suffix-color: var(--wr-color-on-surface-muted);
12
14
 
13
15
  display: inline-block;
14
16
  font-family: var(--wr-gauge-font-family);
15
- color: var(--wr-color-on-surface);
17
+ color: var(--wr-gauge-color);
16
18
 
17
19
  &__surface {
18
20
  position: relative;
@@ -40,7 +42,7 @@
40
42
  &__suffix {
41
43
  margin-inline-start: var(--wr-gauge-suffix-margin-inline-start);
42
44
  font-size: var(--wr-gauge-suffix-font-size);
43
- color: var(--wr-color-on-surface-muted);
45
+ color: var(--wr-gauge-suffix-color);
44
46
  font-weight: var(--wr-gauge-suffix-font-weight);
45
47
  }
46
48
  }
@@ -0,0 +1,329 @@
1
+ @use '../../../theme/styles' as theme;
2
+ @use '../../../popover/styles' as popover-styles; // the `.wr-tooltip` chip the hover tooltip renders into
3
+
4
+ // Styles for the entry points this component's own markup renders. With `dataTable`, the
5
+ // figures render as a `<wr-chart-table>` beside the matrix, which its own sheet clips out
6
+ // of sight.
7
+ @use '../../core/styles' as core-styles; // WrChartTable
8
+
9
+ // A level's paint: the scale's colour (`--wr-heatmap-chart-scale-color`, which the component
10
+ // writes from its `color` input) mixed toward the surface, by the level's place on the scale
11
+ // (`--wr-heatmap-chart-level`, 0 to 1, which the component writes on every cell and every
12
+ // legend swatch). The lowest level keeps `--wr-heatmap-chart-min-share` of the colour, so it
13
+ // is a faint tint rather than the surface itself — the surface is what an EMPTY cell shows
14
+ // — and the highest is the colour.
15
+ //
16
+ // Mixed in OKLab rather than sRGB, because OKLab's lightness is the one that moves evenly:
17
+ // the levels are told apart by lightness alone, so evenly spaced shares have to look evenly
18
+ // spaced, in the light scheme and the dark one.
19
+ $fill: color-mix(
20
+ in oklab,
21
+ var(--wr-heatmap-chart-scale-color, var(--wr-color-primary))
22
+ calc(
23
+ var(--wr-heatmap-chart-min-share) + (100% - var(--wr-heatmap-chart-min-share)) * var(--wr-heatmap-chart-level, 1)
24
+ ),
25
+ var(--wr-heatmap-chart-surface)
26
+ );
27
+
28
+ // The share of white a printed value takes, 1 or 0, from its cell's luminance `y` (see
29
+ // `__value`). A string, so Sass passes the relative-colour channel name through untouched.
30
+ $white: 'clamp(0, (0.17913 - y) * infinity, 1)';
31
+
32
+ .wr-heatmap-chart {
33
+ --wr-heatmap-chart-font-family: var(--wr-font-family-base);
34
+ --wr-heatmap-chart-color: var(--wr-color-on-surface);
35
+ // What every level is mixed toward, and how much of the colour the lowest level keeps.
36
+ --wr-heatmap-chart-surface: var(--wr-color-surface);
37
+ --wr-heatmap-chart-min-share: 15%;
38
+ // The cells. A row is a fixed height and the columns share the width, so the matrix
39
+ // fills its container and never scrolls: a scroller would need a tab stop.
40
+ --wr-heatmap-chart-cell-height: 2rem;
41
+ --wr-heatmap-chart-gap: 2px;
42
+ // 2px — a micro radius for cells that may be only a few pixels wide; the border-radius
43
+ // tokens (6px+) would round a narrow column into a capsule.
44
+ --wr-heatmap-chart-cell-radius: 2px;
45
+ --wr-heatmap-chart-cell-padding-x: var(--wr-space-xs);
46
+ // The values `showValues` prints. Their colour is picked per cell (see `__value`).
47
+ --wr-heatmap-chart-value-font-size: var(--wr-text-xs);
48
+ --wr-heatmap-chart-value-font-weight: var(--wr-font-weight-medium);
49
+ // An empty cell: the surface, hatched, inside a dashed outline. The outline is what
50
+ // separates it from the page, so it is drawn in the muted text colour, which clears the
51
+ // 3:1 WCAG 1.4.11 asks of a mark a reader needs; the hatching is texture.
52
+ --wr-heatmap-chart-empty-border: var(--wr-color-on-surface-muted);
53
+ --wr-heatmap-chart-empty-hatch: var(--wr-border-strong);
54
+ // The cell the tooltip is reading, ringed.
55
+ --wr-heatmap-chart-active-ring: var(--wr-color-on-surface);
56
+ --wr-heatmap-chart-active-ring-width: 2px;
57
+ // The row and column names, muted as an axis' labels are on every chart.
58
+ --wr-heatmap-chart-label-font-size: var(--wr-text-xs);
59
+ --wr-heatmap-chart-label-line-height: var(--wr-text-xs-leading);
60
+ --wr-heatmap-chart-label-color: var(--wr-color-on-surface-muted);
61
+ --wr-heatmap-chart-label-gap: var(--wr-space-sm);
62
+ --wr-heatmap-chart-row-label-max-width: 10rem;
63
+ // The colour-scale legend under the matrix.
64
+ --wr-heatmap-chart-legend-margin-top: var(--wr-space-md);
65
+ --wr-heatmap-chart-legend-gap: var(--wr-space-sm);
66
+ --wr-heatmap-chart-legend-font-size: var(--wr-text-xs);
67
+ --wr-heatmap-chart-legend-color: var(--wr-color-on-surface-muted);
68
+ --wr-heatmap-chart-swatch-width: 1.25rem;
69
+ --wr-heatmap-chart-swatch-height: 0.75rem;
70
+
71
+ display: block;
72
+ // The containing block of the out-of-flow `dataTable` copy, as on the line chart: a
73
+ // static host lets that 1px box resolve against an ancestor outside the chart and keep
74
+ // its place in an unpositioned scroller's content. No z-index, so no stacking context.
75
+ position: relative;
76
+ max-width: 100%;
77
+ font-family: var(--wr-heatmap-chart-font-family);
78
+ color: var(--wr-heatmap-chart-color);
79
+
80
+ // The names and the cells share one grid's tracks: an `auto` column for the row names,
81
+ // one equal column per column of the data, an `auto` row for the column names and one
82
+ // fixed row per row of the data. A grid follows `direction`, so under RTL the row names
83
+ // move to the right with no rule of their own.
84
+ &__matrix {
85
+ display: grid;
86
+ grid-template-columns: auto repeat(var(--wr-heatmap-chart-columns, 1), minmax(0, 1fr));
87
+ grid-template-rows: auto repeat(var(--wr-heatmap-chart-rows, 1), var(--wr-heatmap-chart-cell-height));
88
+ gap: var(--wr-heatmap-chart-gap);
89
+ }
90
+
91
+ &__column-labels,
92
+ &__row-labels,
93
+ &__cells {
94
+ display: grid;
95
+ }
96
+
97
+ // Tabular figures, so names that differ only in their digits — `00:00` and `11:00` — are
98
+ // one width, and either all fit their columns or none do.
99
+ &__column-labels,
100
+ &__row-labels {
101
+ font-size: var(--wr-heatmap-chart-label-font-size);
102
+ font-variant-numeric: tabular-nums;
103
+ line-height: var(--wr-heatmap-chart-label-line-height);
104
+ color: var(--wr-heatmap-chart-label-color);
105
+ }
106
+
107
+ &__column-labels {
108
+ grid-row: 1;
109
+ grid-column: 2 / -1;
110
+ grid-template-columns: subgrid;
111
+ padding-block-end: calc(var(--wr-heatmap-chart-label-gap) - var(--wr-heatmap-chart-gap));
112
+ }
113
+
114
+ // Centred on its column and shrunk to its text, which is what lets the component read a
115
+ // name's whole width off its `scrollWidth`; cut with an ellipsis past its column rather
116
+ // than running into the next name, while the names all fit or there is one column.
117
+ &__column-label {
118
+ justify-self: center;
119
+ min-width: 0;
120
+ max-inline-size: 100%;
121
+ overflow: hidden;
122
+ text-overflow: ellipsis;
123
+ white-space: nowrap;
124
+ text-align: center;
125
+ }
126
+
127
+ // Too wide for their columns: the component draws every n-th name
128
+ // (`--wr-heatmap-chart-label-every`), each starting at its own column — as a calendar's
129
+ // month names start at their week — and running across the columns up to the next.
130
+ &__column-labels--thinned > &__column-label {
131
+ justify-self: start;
132
+ max-inline-size: calc(
133
+ var(--wr-heatmap-chart-label-every, 1) * 100% + (var(--wr-heatmap-chart-label-every, 1) - 1) *
134
+ var(--wr-heatmap-chart-gap)
135
+ );
136
+ text-align: start;
137
+ }
138
+
139
+ // A name left out of sight: still in the accessibility tree, so a screen reader reads
140
+ // every column's name, and still in its own track, so the grid does not move. Not
141
+ // `visibility: hidden` or `display: none`, which would take it from the reader too.
142
+ &__column-label--hidden {
143
+ clip-path: inset(50%);
144
+ }
145
+
146
+ // Held to its own column, as before thinning: `clip-path` paints nothing but keeps the
147
+ // box, and the last column's name running on past the chart would scroll the page.
148
+ &__column-labels--thinned > &__column-label--hidden {
149
+ max-inline-size: 100%;
150
+ }
151
+
152
+ &__row-labels {
153
+ grid-row: 2 / -1;
154
+ grid-column: 1;
155
+ grid-template-rows: subgrid;
156
+ padding-inline-end: calc(var(--wr-heatmap-chart-label-gap) - var(--wr-heatmap-chart-gap));
157
+ }
158
+
159
+ &__row-label {
160
+ align-self: center;
161
+ max-width: var(--wr-heatmap-chart-row-label-max-width);
162
+ overflow: hidden;
163
+ text-overflow: ellipsis;
164
+ white-space: nowrap;
165
+ text-align: end;
166
+ }
167
+
168
+ &__cells {
169
+ grid-row: 2 / -1;
170
+ grid-column: 2 / -1;
171
+ grid-template-columns: subgrid;
172
+ grid-template-rows: subgrid;
173
+ }
174
+
175
+ // A value is printed whole or not at all, with no measuring: the cell is a wrapping flex
176
+ // line led by a zero-width item as tall as the cell. A value that fits shares that first
177
+ // line and is centred on it; one that does not fit cannot join it, so it wraps onto a
178
+ // second line, below the cell, where `overflow` hides it. A value cut to its first digits
179
+ // would print a different number.
180
+ &__cell {
181
+ display: flex;
182
+ flex-wrap: wrap;
183
+ justify-content: center;
184
+ align-items: center;
185
+ min-width: 0;
186
+ box-sizing: border-box;
187
+ block-size: var(--wr-heatmap-chart-cell-height);
188
+ padding-inline: var(--wr-heatmap-chart-cell-padding-x);
189
+ overflow: hidden;
190
+ border-radius: var(--wr-heatmap-chart-cell-radius);
191
+ background: $fill;
192
+ // The levels are the chart, so they keep their colours under forced colors, as the SVG
193
+ // charts' fills do; forced colors would otherwise paint every cell as the page.
194
+ forced-color-adjust: none;
195
+ // Positioned for good, so the reading cell's ring (`--active`) only raises its
196
+ // `z-index`. Switching a grid item to `position: relative` on hover made Chromium lay
197
+ // the whole grid out again on every move, which the tooltip's measuring then forced at
198
+ // once: 5.6ms a move and 52ms of layout over thirty moves on a 100×100 matrix, against
199
+ // 1.8ms and 1.4ms with every cell already positioned. No cell holds a positioned child.
200
+ position: relative;
201
+ z-index: 0;
202
+
203
+ &::before {
204
+ content: '';
205
+ flex: 0 0 0;
206
+ block-size: 100%;
207
+ }
208
+ }
209
+
210
+ // Black or white, whichever reads better on this cell's own paint: the pick the theme's
211
+ // `-contrast` tokens make, made per cell because the paint is a mix of a colour the
212
+ // consumer chose. The paint's `y` in XYZ (D65) IS the relative luminance WCAG measures,
213
+ // and the two candidates score the same, about 4.58:1, against a luminance of 0.17913 —
214
+ // √(1.05 × 0.05) − 0.05. Below it white wins, above it black: the difference is scaled
215
+ // to ±infinity and clamped to 0 or 1, so nothing between the two is ever drawn, and the
216
+ // result is that share of D65 white. An engine without relative colour syntax drops the
217
+ // declaration, and the value keeps the chart's text colour.
218
+ &__value {
219
+ flex: none;
220
+ white-space: nowrap;
221
+ // A figure has no strong character of its own, so on an RTL page the minus of `-50`
222
+ // landed after the digits. Plaintext takes the direction from the text, as the
223
+ // tooltip's value does: the sign stays first, and an Arabic `valueFormat` still reads
224
+ // right to left. The value is centred in its cell either way.
225
+ unicode-bidi: plaintext;
226
+ font-size: var(--wr-heatmap-chart-value-font-size);
227
+ font-weight: var(--wr-heatmap-chart-value-font-weight);
228
+ line-height: 1;
229
+ font-variant-numeric: tabular-nums;
230
+ color: color(from #{$fill} xyz-d65 calc(0.9505 * #{$white}) #{$white} calc(1.0891 * #{$white}));
231
+ }
232
+
233
+ // Where relative colour syntax is missing — Firefox before 128, inside the documented
234
+ // floor — the pick above is dropped, and the chart's text colour on the darker levels
235
+ // measures about 3.6:1 in light and 3.9:1 in dark, under AA. There the value sits on a
236
+ // small chip of the surface instead, in the chart's text colour, which reads on any level
237
+ // and in either scheme. The condition is the declaration itself, so an engine that has
238
+ // the syntax but not channel keywords inside `calc()` takes the chip too.
239
+ @supports not (color: color(from red xyz-d65 calc(0.9505 * #{$white}) #{$white} calc(1.0891 * #{$white}))) {
240
+ &__value {
241
+ padding: calc(var(--wr-heatmap-chart-cell-padding-x) / 4) calc(var(--wr-heatmap-chart-cell-padding-x) / 2);
242
+ border-radius: var(--wr-heatmap-chart-cell-radius);
243
+ background: var(--wr-heatmap-chart-surface);
244
+ color: var(--wr-heatmap-chart-color);
245
+ }
246
+ }
247
+
248
+ &__legend {
249
+ display: flex;
250
+ flex-wrap: wrap;
251
+ align-items: center;
252
+ justify-content: center;
253
+ gap: var(--wr-heatmap-chart-legend-gap);
254
+ margin-block-start: var(--wr-heatmap-chart-legend-margin-top);
255
+ font-size: var(--wr-heatmap-chart-legend-font-size);
256
+ color: var(--wr-heatmap-chart-legend-color);
257
+ }
258
+
259
+ &__legend-label {
260
+ font-variant-numeric: tabular-nums;
261
+ white-space: nowrap;
262
+ // The scale's ends, `-50` among them: see `__value`. Shrunk to their text, so the
263
+ // direction moves nothing but the sign.
264
+ unicode-bidi: plaintext;
265
+ }
266
+
267
+ // The levels side by side, as one bar from the lowest to the highest.
268
+ &__scale {
269
+ display: inline-flex;
270
+ border-radius: var(--wr-heatmap-chart-cell-radius);
271
+ overflow: hidden;
272
+ }
273
+
274
+ &__swatch {
275
+ flex: none;
276
+ inline-size: var(--wr-heatmap-chart-swatch-width);
277
+ block-size: var(--wr-heatmap-chart-swatch-height);
278
+ background: $fill;
279
+ forced-color-adjust: none;
280
+ }
281
+
282
+ // No data, which is not zero: no level's paint at all, but the surface hatched, inside a
283
+ // dashed outline — a pattern and an edge, two channels that are not colour. After every
284
+ // level's paint, which it replaces.
285
+ &__cell--empty,
286
+ &__swatch--empty {
287
+ background: repeating-linear-gradient(
288
+ 45deg,
289
+ var(--wr-heatmap-chart-empty-hatch) 0 1px,
290
+ var(--wr-heatmap-chart-surface) 1px 5px
291
+ );
292
+ outline: 1px dashed var(--wr-heatmap-chart-empty-border);
293
+ outline-offset: -1px;
294
+ }
295
+
296
+ &__swatch--empty {
297
+ border-radius: var(--wr-heatmap-chart-cell-radius);
298
+ }
299
+
300
+ // Above its neighbours, so the ring is not painted over by the next cell, and after the
301
+ // empty cell's outline, which it replaces. Every cell is positioned already (`__cell`).
302
+ &__cell--active {
303
+ z-index: 1;
304
+ outline: var(--wr-heatmap-chart-active-ring-width) solid var(--wr-heatmap-chart-active-ring);
305
+ outline-offset: 1px;
306
+ }
307
+
308
+ &__legend-empty {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ gap: var(--wr-heatmap-chart-legend-gap);
312
+ }
313
+ }
314
+
315
+ // The cells keep their colours under forced colors, so the marks drawn in theme colours
316
+ // would keep colours the forced palette no longer has: the empty cell's outline and
317
+ // hatching, and the reading cell's ring.
318
+ @media (forced-colors: active) {
319
+ .wr-heatmap-chart__cell--empty,
320
+ .wr-heatmap-chart__swatch--empty {
321
+ --wr-heatmap-chart-empty-border: CanvasText;
322
+ --wr-heatmap-chart-empty-hatch: GrayText;
323
+ --wr-heatmap-chart-surface: Canvas;
324
+ }
325
+
326
+ .wr-heatmap-chart__cell--active {
327
+ outline-color: Highlight;
328
+ }
329
+ }