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,244 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Iridescence background — folded silk under a raking light, its hue turning
4
+ * with the slope of each fold from pale rose through lilac to sky, on a WebGL2
5
+ * canvas. The folds drift and swell on their own, and the pointer stirs them,
6
+ * bending the drape rather than sliding the picture. Fills its nearest positioned
7
+ * ancestor: put it first in a `position: relative` box and give the content after
8
+ * it a position of its own.
9
+ *
10
+ * The pointer is followed on the host's PARENT, with passive listeners, so the
11
+ * silk answers a pointer that is over the content in front of it rather than over
12
+ * the canvas — the host itself takes no pointer events and never steals a click.
13
+ * Placed directly in a shadow root, where it has no parent element, it follows
14
+ * the pointer on the shadow host; with neither it listens nowhere.
15
+ *
16
+ * Decorative only: the canvas is `aria-hidden`, the host has no role and nothing
17
+ * in it takes focus or a click.
18
+ *
19
+ * The frame loop runs only while the host is on screen with a box to draw on and
20
+ * something can move: not at `speed` 0 with no pointer to follow, where one still
21
+ * frame is drawn. At
22
+ * `speed` 0 with the pointer followed, the loop runs and draws only while the
23
+ * pointer is stirring something. Off screen it stops asking for frames and resumes
24
+ * where it left off.
25
+ *
26
+ * Under `prefers-reduced-motion`, read live, one still frame is drawn and nothing
27
+ * follows — no loop, no pointer listeners, the pointer back at rest. It is held at
28
+ * the phases the folds had reached, so switching the preference on does not jump
29
+ * them, and it is drawn again when the colour, the box or the page's colour scheme
30
+ * changes.
31
+ *
32
+ * `[color]` is multiplied over the picture, so white leaves it as it is, and it
33
+ * defaults to the `--wr-iridescence-color` hook: white on a light page, a deep
34
+ * slate blue on a dark one. Any CSS colour works, a `var()` token or a
35
+ * `light-dark()` pair included, resolved through the cascade before it reaches the
36
+ * shader, which reads neither. Pass an opaque colour: the canvas drops alpha and
37
+ * the stand-in keeps it.
38
+ *
39
+ * Measured over 240 phase combinations, with the pointer at rest and at the box's
40
+ * four corners at `amplitude` 1, `--wr-color-on-surface` holds 4.5:1 on the dark
41
+ * default (5.01:1 at the 99th-percentile pixel, 4.89:1 in the worst frame) and not
42
+ * on the light one (3.93:1 at the 1st-percentile pixel, 2.8:1 in the worst frame),
43
+ * so text there needs a scrim or a card.
44
+ *
45
+ * The host's own background is a stand-in: soft diagonal bands in the same palette,
46
+ * which an opaque colour tints the same way. The stand-in shows before hydration on a
47
+ * prerendered page, on a machine with no WebGL2 and after a lost context, so the box
48
+ * is never empty and text placed on it keeps its ground. The canvas fades in over it,
49
+ * because the stand-in is an approximation and not the same picture, so
50
+ * `.wr-iridescence--painted` hands over rather than swaps.
51
+ *
52
+ * Under forced colours the canvas is hidden and its loop stops with it, leaving the
53
+ * box on the palette's own ground, which is what forced text and marks are chosen
54
+ * against.
55
+ *
56
+ * With no WebGL2 context, or a shader the driver refuses, nothing is thrown and
57
+ * the stand-in stays. A context the browser takes away is rebuilt if it offers one
58
+ * back. A destroyed host hands its GPU resources back at once. Browsers keep a small
59
+ * number of live contexts and kill the oldest: Chromium frees the slot at that point,
60
+ * while WebKit frees it only when the context is collected and offers an evicted one
61
+ * no restore, so there a host that is not drawing can stay on the stand-in for good.
62
+ *
63
+ * @example
64
+ * ```html
65
+ * <section style="position: relative; min-height: 24rem; padding: 2rem; overflow: hidden">
66
+ * <wr-iridescence />
67
+ * <wr-card style="max-width: 26rem">
68
+ * <h1>Hero copy on a card above the silk</h1>
69
+ * </wr-card>
70
+ * </section>
71
+ * ```
72
+ *
73
+ * @see https://ngwr.dev/bits/iridescence
74
+ */
75
+ export declare class WrIridescence {
76
+ /**
77
+ * Tint multiplied over the picture, any CSS colour — a `var()` token or a
78
+ * `light-dark()` pair included. Pass an opaque colour: the canvas drops alpha and
79
+ * the stand-in keeps it. When unset, empty or blank, `--wr-iridescence-color`
80
+ * decides.
81
+ */
82
+ readonly color: import("@angular/core").InputSignal<string | null>;
83
+ /**
84
+ * Speed of the folds; `0` holds them and a negative value reverses them.
85
+ * Changing it never jumps the picture. @default 1
86
+ */
87
+ readonly speed: import("@angular/core").InputSignalWithTransform<number, unknown>;
88
+ /**
89
+ * How hard the pointer stirs the folds; `0` leaves the pointer out and a
90
+ * negative value stirs them the other way. @default 1
91
+ */
92
+ readonly amplitude: import("@angular/core").InputSignalWithTransform<number, unknown>;
93
+ /** Whether the pointer stirs the folds at all. @default true */
94
+ readonly followPointer: import("@angular/core").InputSignalWithTransform<boolean, any>;
95
+ /**
96
+ * A colour the author chose, published so the stand-in takes it too; `null` while
97
+ * the input is unset. On a variable of its own rather than on the hook, which an
98
+ * author sets from outside: a `null` binding wipes a value of its own name from the
99
+ * host's `style` attribute.
100
+ */
101
+ protected readonly standInColor: import("@angular/core").Signal<string | null>;
102
+ /** The colour the canvas resolves: an input that is unset, empty or blank leaves the hook in charge. */
103
+ private readonly expression;
104
+ /** Whether the pointer is listened for: never under `prefers-reduced-motion`, read live. */
105
+ private readonly listening;
106
+ /**
107
+ * Whether anything can change between two frames. While it is `false` there is
108
+ * no loop, only a still frame.
109
+ */
110
+ private readonly moving;
111
+ /**
112
+ * Flips once the canvas has drawn, which fades it in over the stand-in. Set
113
+ * inside the draw rather than at the end of the boot, so a canvas with nothing
114
+ * on it is never shown, and back to `false` with a lost context.
115
+ */
116
+ protected readonly painted: import("@angular/core").WritableSignal<boolean>;
117
+ private readonly canvasRef;
118
+ private readonly host;
119
+ private readonly zone;
120
+ private readonly destroyRef;
121
+ private readonly platform;
122
+ private readonly isBrowser;
123
+ private gl;
124
+ private gpu;
125
+ /** The size the canvas is backed at, in bitmap pixels. */
126
+ private bitmap;
127
+ private rafId;
128
+ /** The three phases, each in `[0, 2π)`. Kept across a parked loop, so the folds resume in place. */
129
+ private readonly phase;
130
+ /**
131
+ * `uPointer` as drawn (`x`, `y`), and where it is heading before `amplitude`
132
+ * (`aimX`, `aimY`). `amplitude` is applied per frame rather than kept in the aim,
133
+ * so changing it eases over like any other move instead of jumping.
134
+ */
135
+ private readonly pointer;
136
+ /** The last pointer position in viewport coordinates, while a frame still owes it a look at the host's rect. */
137
+ private lastMove;
138
+ /** The last colour string the cascade resolved to, and its channels: the parse is skipped while it holds. */
139
+ private resolved;
140
+ private channels;
141
+ /**
142
+ * Whether the picture changed since the loop last drew it — the colour, the
143
+ * scheme, a restart. The loop skips the frames that would only repeat the last
144
+ * one, and this is what makes it draw again.
145
+ */
146
+ private dirty;
147
+ /** Flips once a program is built, and back when the context goes — everything that draws waits for it. */
148
+ private readonly booted;
149
+ /** Whether the host is in the viewport; stays `true` without an observer. */
150
+ private readonly onScreen;
151
+ /**
152
+ * Whether the bitmap has an area. The intersection observer calls a zero-area
153
+ * canvas intersecting and sends no entry when it gains a size, so this reads the
154
+ * bitmap instead.
155
+ */
156
+ private readonly hasBox;
157
+ constructor();
158
+ private boot;
159
+ /**
160
+ * Compile, link and upload what one context needs, and make it current. Returns
161
+ * `null` when it cannot: on a lost context, where every call answers no and
162
+ * nothing is wrong with the shader, it says nothing.
163
+ */
164
+ private build;
165
+ private compile;
166
+ /**
167
+ * Give the GPU resources back at once rather than to the garbage collector:
168
+ * browsers keep a small number of live contexts and kill the oldest, so a
169
+ * navigating single-page app would lose the context of a page still on screen.
170
+ * Chromium frees the slot here too. WebKit holds it until the context is collected,
171
+ * and no API frees it sooner, so a still or parked host can still be evicted there.
172
+ */
173
+ private release;
174
+ /**
175
+ * Back the canvas for a `width` × `height` box, in CSS pixels. Returns whether
176
+ * anything changed: writing `canvas.width` clears the bitmap even to the value it
177
+ * already has, so an unchanged size is left alone. Rounded down, because rounding
178
+ * to nearest could carry a box back over the budget it was just scaled under.
179
+ */
180
+ private fit;
181
+ /** Start the folds, and the pointer listeners when asked; returns what stops both. */
182
+ private animate;
183
+ /**
184
+ * Step the phases by `step` ms, and return whether they moved. Stepped rather
185
+ * than computed from a clock: a clock times `speed` is a different angle the
186
+ * moment `speed` changes, so moving the input would jump the picture, and here
187
+ * it only changes how far the next step goes.
188
+ */
189
+ private turn;
190
+ /**
191
+ * Follow the pointer. On the parent, not the host: content in front of the canvas
192
+ * receives the pointer, and its events bubble to the parent, never to a sibling.
193
+ * Placed directly in a shadow root it has none, and the shadow host is where those
194
+ * composed events land. Never the host itself, which takes no pointer events and
195
+ * so could never hear one.
196
+ */
197
+ private listenToPointer;
198
+ private aimAtRest;
199
+ /**
200
+ * Bring the pointer towards its target by `step` ms, and return whether it moved.
201
+ *
202
+ * The rect is read here, at most once a frame, rather than on every event, and it
203
+ * is the box as drawn, after any transform on an ancestor, so a pointer lands where
204
+ * it is seen. The offset is relative to the box, so a transform needs nothing more.
205
+ */
206
+ private easePointer;
207
+ /** Bring the canvas up to date after the picture changed: a still frame now, or the loop's next one. */
208
+ private repaint;
209
+ /**
210
+ * One frame at the current phases and pointer. Leaves `dirty` set when it has
211
+ * nothing to draw on, a lost context or an empty box, so the next chance draws.
212
+ */
213
+ private draw;
214
+ /**
215
+ * The tint as shader channels. Resolved through the cascade on every draw, since
216
+ * a uniform reads neither a `var()` nor a `light-dark()` and a hook changed by a
217
+ * rule on the host should reach the next frame, and parsed only when that string
218
+ * changes.
219
+ */
220
+ private tint;
221
+ static ɵfac: i0.ɵɵFactoryDeclaration<WrIridescence, never>;
222
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrIridescence, "wr-iridescence", never, {
223
+ "color": {
224
+ "alias": "color";
225
+ "required": false;
226
+ "isSignal": true;
227
+ };
228
+ "speed": {
229
+ "alias": "speed";
230
+ "required": false;
231
+ "isSignal": true;
232
+ };
233
+ "amplitude": {
234
+ "alias": "amplitude";
235
+ "required": false;
236
+ "isSignal": true;
237
+ };
238
+ "followPointer": {
239
+ "alias": "followPointer";
240
+ "required": false;
241
+ "isSignal": true;
242
+ };
243
+ }, {}, never, never, true, never>;
244
+ }
@@ -0,0 +1,96 @@
1
+ import { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from "@angular/cdk/testing";
2
+ /** Narrows which `<wr-ripple-grid>` a harness query matches. */
3
+ interface WrRippleGridHarnessFilters extends BaseHarnessFilters {
4
+ /**
5
+ * Match only grids whose canvas has drawn (`true`) or only grids still showing the
6
+ * stand-in lines (`false`). A ripple grid has no name of its own, so this is the one
7
+ * state that tells two of them apart — see `WrRippleGridHarness.isPainted`, which
8
+ * explains why the answer is always `false` in a unit test.
9
+ */
10
+ readonly painted?: boolean;
11
+ }
12
+ /**
13
+ * Test harness for `<wr-ripple-grid>` — grid lines the pointer sends ripples through.
14
+ *
15
+ * **The lines and the ripples are unreadable and always will be.** They are strokes on
16
+ * a 2D canvas, laid out from the host's measured box and bent by rings that exist only
17
+ * while frames run; a unit test has no box and no drawing context, so there is nothing
18
+ * to count and nothing to compare. What the component publishes to the DOM is small
19
+ * and deliberate: the handover flag {@link isPainted}, the cell {@link getCellSizePx}
20
+ * and line width {@link getLineWidthPx} the CSS stand-in grid draws at before the
21
+ * canvas takes over, and the surface itself.
22
+ *
23
+ * Both numbers are read from the host's inline declaration, never computed: the
24
+ * stylesheet declares `--wr-ripple-grid-cell-size` and `--wr-ripple-grid-line-width`
25
+ * too, as the stand-in's own defaults, so a computed read would answer `40` and `1` on
26
+ * a component that had stopped publishing anything — the break the methods exist to
27
+ * catch.
28
+ *
29
+ * There is no `getLineCount()`, `getRipples()` or `getCanvasSize()`: the grid is laid
30
+ * out from the host's layout box, which is 0×0 here, and the rings live in a frame
31
+ * loop jsdom never runs. No `getLineColor()` or `getRippleColor()` — they are canvas
32
+ * strokes resolved from themed custom properties that only a stylesheet supplies. No
33
+ * `press()` or `moveTo()`: the pointer listeners go on only once a context exists, and
34
+ * what they move is canvas pixels. No `isIdle()`: the idle ring is a timer and a frame,
35
+ * and neither leaves a trace in the DOM. And no `isReducedMotion()`: the still grid is
36
+ * drawn through the same code and sets the same flag, so the DOM is identical either
37
+ * way and any answer would be a guess.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const grid = await loader.getHarness(WrRippleGridHarness);
42
+ *
43
+ * expect(await grid.hasCanvas()).toBe(true);
44
+ * expect(await grid.isDecorative()).toBe(true);
45
+ * expect(await grid.getCellSizePx()).toBe(40);
46
+ * ```
47
+ *
48
+ * @see https://ngwr.dev/guides/testing
49
+ */
50
+ export declare class WrRippleGridHarness extends ComponentHarness {
51
+ static hostSelector: string;
52
+ /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
53
+ static with(options?: WrRippleGridHarnessFilters): HarnessPredicate<WrRippleGridHarness>;
54
+ private readonly canvas;
55
+ /**
56
+ * Whether the canvas has drawn a frame and retired the CSS stand-in grid.
57
+ *
58
+ * **In a unit test this is always `false`, and asserting exactly that is the point.**
59
+ * jsdom hands back no 2D context, so the component must leave the stand-in up rather
60
+ * than declare itself painted over a blank box — the flag is set inside the draw for
61
+ * that reason, not at the end of the boot. A spec that waits for this to turn `true`
62
+ * waits forever.
63
+ */
64
+ isPainted(): Promise<boolean>;
65
+ /**
66
+ * The distance between grid lines, in pixels, as the component publishes it —
67
+ * `[cellSize]`, floored at the 12px the canvas lays the grid out at.
68
+ *
69
+ * The canvas half of `[cellSize]` is invisible here, but the stand-in half is not,
70
+ * and a stand-in drawing at one cell while the canvas arrives at another moves every
71
+ * line under the reader on hydration.
72
+ */
73
+ getCellSizePx(): Promise<number>;
74
+ /**
75
+ * The line width, in pixels, as the component publishes it for the stand-in —
76
+ * `[lineWidth]`, floored at the 0.25px the canvas strokes at.
77
+ */
78
+ getLineWidthPx(): Promise<number>;
79
+ /**
80
+ * Whether the grid is hidden from assistive tech.
81
+ *
82
+ * A background canvas has nothing to announce, so losing this leaves a screen reader
83
+ * stopping on a nameless graphic in front of the section's actual content.
84
+ */
85
+ isDecorative(): Promise<boolean>;
86
+ /**
87
+ * Whether the drawing surface is in the markup.
88
+ *
89
+ * It is there in every state, including the ones where nothing is ever drawn on it —
90
+ * prerendered, no 2D context, reduced motion — so the stand-in has something to sit
91
+ * behind and {@link isPainted} has something to answer about.
92
+ */
93
+ hasCanvas(): Promise<boolean>;
94
+ private publishedPx;
95
+ }
96
+ export type { WrRippleGridHarnessFilters };
@@ -0,0 +1,294 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Ripple-grid background — thin grid lines on a 2D canvas that the pointer
4
+ * sends ripples through. A press sends out a ring that travels outward, bends
5
+ * the lines it passes away from where it started and lights them in the ripple
6
+ * colour, and fades as it goes; with `rippleOnMove` a moving pointer leaves a
7
+ * trail of softer rings behind it. Fills its nearest positioned ancestor; put
8
+ * it behind hero copy or section content.
9
+ *
10
+ * With nothing pressed or moved the grid is still, and asks for no frames at
11
+ * all. `idleInterval` sends a softer ring out from the centre every so many
12
+ * milliseconds on its own; it is off by default, so a page that wants a grid
13
+ * which moves before anyone touches it asks for one. Each ring lives until it
14
+ * has faded or left the box, and never longer than six seconds.
15
+ *
16
+ * The pointer is followed on the host's PARENT, with passive listeners, so the
17
+ * grid answers a pointer that is over the content in front of it rather than
18
+ * over the canvas — the host itself takes no pointer events and never steals a
19
+ * click. Placed directly in a shadow root, where it has no parent element, it
20
+ * follows the pointer on the shadow host; with neither it listens nowhere, and
21
+ * only an idle ring ever moves it. Content placed after it needs
22
+ * `position: relative` (or any z-index) to paint above it, as with any
23
+ * absolutely positioned layer.
24
+ *
25
+ * The grid is laid out in the host's own box, before transforms, so one that
26
+ * boots inside a scaling-in panel (a dialog opening) is not stretched when the
27
+ * animation ends, and the pointer is mapped back through the transform.
28
+ *
29
+ * Decorative: the canvas is `aria-hidden`, the host has no role and nothing in
30
+ * it takes focus. The frame loop runs only while a ring is alive, and never
31
+ * while the host is off screen; an idle ring comes due only while frames run,
32
+ * so a hidden tab does not queue them up.
33
+ *
34
+ * Under `prefers-reduced-motion` one still grid is drawn, in the line colour,
35
+ * with no ripples, no idle rings and no pointer listeners; it is drawn again
36
+ * when an input, the box or the page's colour scheme changes. The preference
37
+ * is read live, and switching it on drops the rings already travelling.
38
+ *
39
+ * Colours are theme tokens by default — the lines `--wr-border-base`, the lit
40
+ * stretches `--wr-color-primary` — through the `--wr-ripple-grid-line-color`
41
+ * and `--wr-ripple-grid-ripple-color` hooks, and resolved before they reach
42
+ * the canvas, which reads neither a `var()` nor a `light-dark()`.
43
+ *
44
+ * Until the canvas has drawn — the seconds before hydration on a prerendered
45
+ * page — the stylesheet paints the same grid, at the same cell, width and
46
+ * colour, and `.wr-ripple-grid--painted` retires it.
47
+ *
48
+ * @example
49
+ * ```html
50
+ * <section style="position: relative; min-height: 24rem; overflow: hidden">
51
+ * <wr-ripple-grid />
52
+ * <h1 style="position: relative">Hero copy above the grid</h1>
53
+ * </section>
54
+ * ```
55
+ *
56
+ * @see https://ngwr.dev/bits/ripple-grid
57
+ */
58
+ export declare class WrRippleGrid {
59
+ /** Distance between grid lines in px, never under 12. @default 40 */
60
+ readonly cellSize: import("@angular/core").InputSignalWithTransform<number, unknown>;
61
+ /** Line colour, any CSS colour. When unset, `--wr-ripple-grid-line-color` decides. */
62
+ readonly lineColor: import("@angular/core").InputSignal<string | null>;
63
+ /** Colour a line takes where a ripple passes, any CSS colour. When unset, `--wr-ripple-grid-ripple-color` decides. */
64
+ readonly rippleColor: import("@angular/core").InputSignal<string | null>;
65
+ /** Line width in px, never under 0.25. @default 1 */
66
+ readonly lineWidth: import("@angular/core").InputSignalWithTransform<number, unknown>;
67
+ /**
68
+ * How far a fresh ripple from a press bends the lines at its crest, in px;
69
+ * a ripple the moving pointer leaves bends them 40% as far. `0` keeps the
70
+ * lines straight and only lights them, and a negative value bends them
71
+ * inward. A bend steep enough to fold a line back over itself is never
72
+ * drawn: one ring, or several where they overlap, bends a line at most about
73
+ * 0.3 of a cell for cells from 22 to 80px — 11.7px at the default 40 — and
74
+ * rings that overlap share that bound rather than adding past it. @default 10
75
+ */
76
+ readonly strength: import("@angular/core").InputSignalWithTransform<number, unknown>;
77
+ /** How fast a ripple travels outward, in px per second; `0` keeps it where it started. @default 320 */
78
+ readonly speed: import("@angular/core").InputSignalWithTransform<number, unknown>;
79
+ /**
80
+ * How fast a ripple fades, per second: its strength is multiplied by
81
+ * `e^-decay` every second, so `1.4` halves it in half a second. `0` keeps it
82
+ * at full strength until it leaves the box. @default 1.4
83
+ */
84
+ readonly decay: import("@angular/core").InputSignalWithTransform<number, unknown>;
85
+ /** Whether a moving pointer leaves ripples behind it, and not only a press. @default true */
86
+ readonly rippleOnMove: import("@angular/core").InputSignalWithTransform<boolean, any>;
87
+ /**
88
+ * Milliseconds between the softer ripples sent out from the centre on their
89
+ * own, never under 500; `0` sends none, and the grid then stays still until
90
+ * the pointer moves it. @default 0
91
+ */
92
+ readonly idleInterval: import("@angular/core").InputSignalWithTransform<number, unknown>;
93
+ /** The cell the grid is laid out at: `cellSize`, floored. */
94
+ protected readonly cell: import("@angular/core").Signal<number>;
95
+ /** The line width drawn: `lineWidth`, floored. */
96
+ protected readonly stroke: import("@angular/core").Signal<number>;
97
+ /**
98
+ * A line colour the author chose, published so the stand-in draws in it too;
99
+ * `null` while the input is unset. On a variable of its own rather than on the
100
+ * hook, which an author sets from outside: a `null` binding wipes a value of its
101
+ * own name from the host's `style` attribute.
102
+ */
103
+ protected readonly standInColor: import("@angular/core").Signal<string | null>;
104
+ /** The colours the canvas resolves: an input that is unset, empty or blank leaves the hook in charge. */
105
+ private readonly lineExpression;
106
+ private readonly rippleExpression;
107
+ /** The idle interval in force, in ms; 0 when there is none. */
108
+ private readonly idle;
109
+ /** A ring's half-width, in px: a share of the cell, within bounds. */
110
+ private readonly ringWidth;
111
+ /**
112
+ * Flips once the canvas has drawn, which retires the CSS stand-in grid.
113
+ *
114
+ * A canvas cannot be prerendered, so on an SSR'd page it is blank until the
115
+ * bundle has loaded and hydrated. The stylesheet paints the same lines at the
116
+ * same cell from the prerendered HTML in the meantime, and this hands over.
117
+ */
118
+ protected readonly painted: import("@angular/core").WritableSignal<boolean>;
119
+ private readonly canvasRef;
120
+ private readonly host;
121
+ private readonly zone;
122
+ private readonly destroyRef;
123
+ private readonly platform;
124
+ private readonly isBrowser;
125
+ private ctx;
126
+ /** The host's layout box, in CSS pixels before any transform: what the grid is laid out in. */
127
+ private box;
128
+ /** Bitmap pixels per CSS pixel the canvas is backed at; 0 until the first fit. */
129
+ private ratio;
130
+ private readonly ripples;
131
+ private readonly pending;
132
+ /** The live rings as this frame draws them, reused frame to frame. */
133
+ private readonly rings;
134
+ private ringCount;
135
+ /** The rings that reach the line being traced, reused line to line. */
136
+ private readonly near;
137
+ /** Lit stretches by alpha step, reused frame to frame. */
138
+ private readonly lit;
139
+ private anyLit;
140
+ /** Where the last trail ripple was left, in viewport coordinates, while the pointer is over the parent. */
141
+ private readonly anchor;
142
+ /** The ring half-width and sample step this frame draws with, read once rather than per sample. */
143
+ private frameRing;
144
+ private frameStep;
145
+ /** One sample, displaced: written by `displace()`, read straight after. */
146
+ private sx;
147
+ private sy;
148
+ private sg;
149
+ private rafId;
150
+ private lastTime;
151
+ /** The frame callback, made once rather than a closure per frame. */
152
+ private readonly frame;
153
+ /** Whether the idle timer has fired and the next frame owes the centre a ring. */
154
+ private idleDue;
155
+ /** Schedules a frame while motion is allowed; `null` under reduced motion. */
156
+ private wake;
157
+ /** Arms the next idle ring while motion is allowed; `null` under reduced motion. */
158
+ private armIdle;
159
+ /** Flips once `boot()` has a context and a box — everything after waits for it. */
160
+ private readonly booted;
161
+ constructor();
162
+ private boot;
163
+ /** Follow the pointer, keep the idle timer and draw on demand; returns what stops all three. */
164
+ private interact;
165
+ /** Queue a ring at a viewport point for the next frame, and mark the point for the trail. */
166
+ private emit;
167
+ /** Draw the grid as it should look now: a frame while motion is allowed, at once under reduced motion. */
168
+ private requestDraw;
169
+ /** Fit the canvas to a new box or pixel ratio and, when that cleared it, repaint at once. */
170
+ private resize;
171
+ /**
172
+ * Back the canvas for a `width` × `height` box, in CSS pixels, at the screen's
173
+ * pixel ratio. Returns whether anything changed: writing `canvas.width` clears
174
+ * the bitmap even to the value it already has, so an unchanged box is left alone.
175
+ */
176
+ private fit;
177
+ /**
178
+ * Bitmap pixels per CSS pixel for a box of `area` CSS px². The screen's own
179
+ * ratio when it fits under 2 and the pixel budget, so a bitmap pixel is a
180
+ * device pixel and a snapped line lands on whole device pixels; otherwise the
181
+ * largest whole fraction of it that fits — a half, a third — so each bitmap
182
+ * pixel still covers a whole number of device pixels and every line keeps one
183
+ * weight. A ratio between (1.31 on a 2x screen) is resampled onto the screen
184
+ * by a fraction, which no snapping survives. Never below 1 on a 1x screen or
185
+ * better: a 1.5x screen past the budget takes 1 and accepts the resampling,
186
+ * rather than a bitmap coarser than the CSS box.
187
+ */
188
+ private pixelRatio;
189
+ /** No ring alive, none queued, none owed. */
190
+ private rest;
191
+ private tick;
192
+ /** Age every ring by `step` ms, place the queued ones, and retire the ones with nothing left to show. */
193
+ private advance;
194
+ /**
195
+ * Start a ring at a box point. Past `MAX_RIPPLES` it replaces the faintest live
196
+ * ring — the oldest of the faintest on a tie — so a press in the middle of a
197
+ * fast drag is not the one that vanishes; when every live ring is still
198
+ * stronger than this one starts out, this one is the faintest, and it is dropped.
199
+ */
200
+ private place;
201
+ /** How strong a ring still is, 0..1: its share, faded by `decay` and by the end of its life. */
202
+ private energy;
203
+ /**
204
+ * How far past each edge the lines run, so a bend never pulls a line's end into
205
+ * view: a cell, plus the most the rings at one point can bend it — the overlap
206
+ * budget, or every ring at full strength when that is less.
207
+ */
208
+ private margin;
209
+ private draw;
210
+ /**
211
+ * Work out where every live ring stands at its current age, for this frame's
212
+ * samples, and hold the rings that overlap to the bend budget together.
213
+ *
214
+ * Each ring's bend is scaled by its share of the budget against every ring
215
+ * whose band meets its own: wherever two rings both reach a point their bands
216
+ * meet, so the rings acting on any point add up to the budget at most (see
217
+ * `PUSH_PER_WIDTH`), while a ring that meets no other keeps its full bend. A
218
+ * pair counts in full once its bands meet and fades out over one half-width of
219
+ * gap before that, so two rings drifting into each other give way smoothly
220
+ * rather than both shrinking in one frame.
221
+ */
222
+ private prepareRings;
223
+ /**
224
+ * Add one grid line to the path — vertical at `x = fixed` or horizontal at
225
+ * `y = fixed`, from `from` to `to` along it — and file its lit stretches by
226
+ * alpha step. A line no ring reaches is two points; one a ring reaches is
227
+ * sampled only across the stretch the rings can bend, and straight either
228
+ * side of it. Where that stretch runs to an end of the line, the end is the
229
+ * displaced sample itself: drawing the undisplaced end before it would step
230
+ * the line back along itself.
231
+ */
232
+ private trace;
233
+ /**
234
+ * Where the grid point `(x, y)` is drawn and how lit it is, with the first
235
+ * `count` rings in `near` acting on it; written to `sx`, `sy` and `sg`.
236
+ *
237
+ * Each ring pushes the point along the line from its origin. The push is a
238
+ * bell around the crest, shaped by a cosine so the crest bends outward and a
239
+ * shallow trough either side bends back in — what reads as a ripple rather
240
+ * than a bulge — and eased in over the first half-width, so the lines through
241
+ * the origin itself do not tear. The glow is the bell alone. Overlapping rings
242
+ * add up; `prepareRings()` has already held them to a budget that cannot fold
243
+ * the grid, so nothing is clamped here.
244
+ */
245
+ private displace;
246
+ static ɵfac: i0.ɵɵFactoryDeclaration<WrRippleGrid, never>;
247
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrRippleGrid, "wr-ripple-grid", never, {
248
+ "cellSize": {
249
+ "alias": "cellSize";
250
+ "required": false;
251
+ "isSignal": true;
252
+ };
253
+ "lineColor": {
254
+ "alias": "lineColor";
255
+ "required": false;
256
+ "isSignal": true;
257
+ };
258
+ "rippleColor": {
259
+ "alias": "rippleColor";
260
+ "required": false;
261
+ "isSignal": true;
262
+ };
263
+ "lineWidth": {
264
+ "alias": "lineWidth";
265
+ "required": false;
266
+ "isSignal": true;
267
+ };
268
+ "strength": {
269
+ "alias": "strength";
270
+ "required": false;
271
+ "isSignal": true;
272
+ };
273
+ "speed": {
274
+ "alias": "speed";
275
+ "required": false;
276
+ "isSignal": true;
277
+ };
278
+ "decay": {
279
+ "alias": "decay";
280
+ "required": false;
281
+ "isSignal": true;
282
+ };
283
+ "rippleOnMove": {
284
+ "alias": "rippleOnMove";
285
+ "required": false;
286
+ "isSignal": true;
287
+ };
288
+ "idleInterval": {
289
+ "alias": "idleInterval";
290
+ "required": false;
291
+ "isSignal": true;
292
+ };
293
+ }, {}, never, never, true, never>;
294
+ }
@@ -158,5 +158,4 @@ interface WrFluidConfig {
158
158
  /** Fixed splat colour (hex) when `rainbow` is off. */
159
159
  readonly color: string;
160
160
  }
161
- declare function createFluidSimulation(canvas: HTMLCanvasElement, config: WrFluidConfig): (() => void) | null;
162
161
  export type { WrFluidConfig };
@@ -102,7 +102,9 @@ export declare class WrSpotlightCardHarness extends ComponentHarness {
102
102
  */
103
103
  getRadiusPercent(): Promise<number>;
104
104
  /**
105
- * The highlight colour the author asked for, or `null` when they left it to the theme.
105
+ * The colour `[spotlightColor]` published on the host, or `null` when the input is unset.
106
+ * The `--wr-spotlight-color` hook then decides, which is the theme's value unless the
107
+ * author set it; this method does not read the hook.
106
108
  *
107
109
  * `null` IS the contract for an unset `[spotlightColor]`, not a gap in it. The
108
110
  * stylesheet's own default is a `light-dark()` over `--wr-color-on-surface`, and that