ngwr 11.2.0 → 12.0.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 (394) hide show
  1. package/README.md +7 -7
  2. package/burger/styles/_index.scss +1 -1
  3. package/button/styles/_index.scss +2 -2
  4. package/calendar/styles/_index.scss +32 -12
  5. package/calendar-heatmap/styles/_index.scss +20 -0
  6. package/carousel/styles/_index.scss +23 -1
  7. package/cascader/styles/_index.scss +15 -3
  8. package/checkbox/styles/_index.scss +2 -2
  9. package/collapse/styles/_index.scss +2 -2
  10. package/color-picker/styles/_index.scss +3 -3
  11. package/compare/styles/_index.scss +18 -2
  12. package/context-menu/styles/_index.scss +21 -2
  13. package/date-picker/styles/_index.scss +5 -5
  14. package/descriptions/styles/_index.scss +1 -1
  15. package/drag-drop/styles/_index.scss +28 -1
  16. package/drawer/styles/_index.scss +37 -0
  17. package/dropdown/styles/_index.scss +2 -2
  18. package/event-calendar/styles/_index.scss +67 -10
  19. package/fesm2022/ngwr-action-sheet.mjs +3 -3
  20. package/fesm2022/ngwr-affix.mjs +3 -3
  21. package/fesm2022/ngwr-alert.mjs +3 -3
  22. package/fesm2022/ngwr-anchor.mjs +3 -3
  23. package/fesm2022/ngwr-aurora.mjs +3 -3
  24. package/fesm2022/ngwr-avatar.mjs +3 -3
  25. package/fesm2022/ngwr-back-top.mjs +3 -3
  26. package/fesm2022/ngwr-badge.mjs +6 -6
  27. package/fesm2022/ngwr-bar-chart-testing.mjs +20 -2
  28. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
  29. package/fesm2022/ngwr-bar-chart.mjs +3 -3
  30. package/fesm2022/ngwr-blur-text.mjs +3 -3
  31. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  32. package/fesm2022/ngwr-border-glow.mjs +4 -4
  33. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  34. package/fesm2022/ngwr-breadcrumbs.mjs +29 -17
  35. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  36. package/fesm2022/ngwr-burger.mjs +3 -3
  37. package/fesm2022/ngwr-button.mjs +6 -6
  38. package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
  39. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  40. package/fesm2022/ngwr-calendar-testing.mjs +1 -1
  41. package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
  42. package/fesm2022/ngwr-calendar.mjs +187 -9
  43. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  44. package/fesm2022/ngwr-card.mjs +10 -10
  45. package/fesm2022/ngwr-card.mjs.map +1 -1
  46. package/fesm2022/ngwr-carousel.mjs +124 -24
  47. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  48. package/fesm2022/ngwr-cascader.mjs +48 -5
  49. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  50. package/fesm2022/ngwr-checkbox.mjs +6 -6
  51. package/fesm2022/ngwr-circular-text.mjs +4 -4
  52. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  53. package/fesm2022/ngwr-click-spark.mjs +27 -7
  54. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  55. package/fesm2022/ngwr-clipboard.mjs +3 -3
  56. package/fesm2022/ngwr-collapse.mjs +9 -9
  57. package/fesm2022/ngwr-color-picker-testing.mjs +26 -6
  58. package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
  59. package/fesm2022/ngwr-color-picker.mjs +98 -8
  60. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  61. package/fesm2022/ngwr-command-palette.mjs +14 -5
  62. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  63. package/fesm2022/ngwr-compare.mjs +3 -3
  64. package/fesm2022/ngwr-confetti.mjs +31 -6
  65. package/fesm2022/ngwr-confetti.mjs.map +1 -1
  66. package/fesm2022/ngwr-config.mjs +9 -0
  67. package/fesm2022/ngwr-config.mjs.map +1 -1
  68. package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
  69. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
  70. package/fesm2022/ngwr-context-menu.mjs +333 -43
  71. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  72. package/fesm2022/ngwr-cookie.mjs +3 -3
  73. package/fesm2022/ngwr-counter.mjs +25 -9
  74. package/fesm2022/ngwr-counter.mjs.map +1 -1
  75. package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
  76. package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
  77. package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
  78. package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
  79. package/fesm2022/ngwr-date-picker-testing.mjs +11 -6
  80. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
  81. package/fesm2022/ngwr-date-picker.mjs +119 -37
  82. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  83. package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
  84. package/fesm2022/ngwr-date.mjs.map +1 -0
  85. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  86. package/fesm2022/ngwr-density.mjs +6 -6
  87. package/fesm2022/ngwr-descriptions.mjs +6 -6
  88. package/fesm2022/ngwr-dialog.mjs +73 -18
  89. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  90. package/fesm2022/ngwr-directives.mjs +12 -12
  91. package/fesm2022/ngwr-divider.mjs +52 -5
  92. package/fesm2022/ngwr-divider.mjs.map +1 -1
  93. package/fesm2022/ngwr-donut-chart-testing.mjs +8 -4
  94. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
  95. package/fesm2022/ngwr-donut-chart.mjs +7 -7
  96. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  97. package/fesm2022/ngwr-drag-drop.mjs +160 -11
  98. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  99. package/fesm2022/ngwr-drawer.mjs +121 -58
  100. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  101. package/fesm2022/ngwr-dropdown.mjs +26 -10
  102. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  103. package/fesm2022/ngwr-empty.mjs +3 -3
  104. package/fesm2022/ngwr-event-calendar.mjs +28 -15
  105. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  106. package/fesm2022/ngwr-falling-text-testing.mjs +5 -3
  107. package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
  108. package/fesm2022/ngwr-falling-text.mjs +75 -46
  109. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  110. package/fesm2022/ngwr-file-upload.mjs +3 -3
  111. package/fesm2022/ngwr-form.mjs +32 -15
  112. package/fesm2022/ngwr-form.mjs.map +1 -1
  113. package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
  114. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  115. package/fesm2022/ngwr-gauge.mjs +3 -3
  116. package/fesm2022/ngwr-glitch-text-testing.mjs +51 -17
  117. package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
  118. package/fesm2022/ngwr-glitch-text.mjs +7 -7
  119. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  120. package/fesm2022/ngwr-gradient-text-testing.mjs +46 -11
  121. package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
  122. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  123. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  124. package/fesm2022/ngwr-hotkey.mjs +24 -9
  125. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  126. package/fesm2022/ngwr-i18n-en.mjs +73 -1
  127. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  128. package/fesm2022/ngwr-i18n-ru.mjs +55 -1
  129. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  130. package/fesm2022/ngwr-i18n.mjs +26 -15
  131. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  132. package/fesm2022/ngwr-icon.mjs +6 -6
  133. package/fesm2022/ngwr-image-cropper-testing.mjs +53 -9
  134. package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
  135. package/fesm2022/ngwr-image-cropper.mjs +150 -12
  136. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  137. package/fesm2022/ngwr-input-number-testing.mjs +15 -10
  138. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
  139. package/fesm2022/ngwr-input-number.mjs +17 -10
  140. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  141. package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
  142. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
  143. package/fesm2022/ngwr-input-otp.mjs +24 -5
  144. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  145. package/fesm2022/ngwr-input.mjs +15 -15
  146. package/fesm2022/ngwr-keyboard.mjs +3 -3
  147. package/fesm2022/ngwr-knob.mjs +3 -3
  148. package/fesm2022/ngwr-layout.mjs +15 -15
  149. package/fesm2022/ngwr-lightbox.mjs +4 -4
  150. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  151. package/fesm2022/ngwr-line-chart.mjs +73 -26
  152. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  153. package/fesm2022/ngwr-list.mjs +7 -7
  154. package/fesm2022/ngwr-list.mjs.map +1 -1
  155. package/fesm2022/ngwr-loading-bar.mjs +7 -7
  156. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  157. package/fesm2022/ngwr-markdown.mjs +66 -8
  158. package/fesm2022/ngwr-markdown.mjs.map +1 -1
  159. package/fesm2022/ngwr-marquee.mjs +4 -4
  160. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  161. package/fesm2022/ngwr-media.mjs +3 -3
  162. package/fesm2022/ngwr-mention.mjs +108 -13
  163. package/fesm2022/ngwr-mention.mjs.map +1 -1
  164. package/fesm2022/ngwr-meta.mjs +6 -6
  165. package/fesm2022/ngwr-meter-group-testing.mjs +26 -6
  166. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
  167. package/fesm2022/ngwr-meter-group.mjs +3 -3
  168. package/fesm2022/ngwr-overlay.mjs +6 -6
  169. package/fesm2022/ngwr-page-header.mjs +3 -3
  170. package/fesm2022/ngwr-pagination-testing.mjs +6 -6
  171. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
  172. package/fesm2022/ngwr-pagination.mjs +17 -13
  173. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  174. package/fesm2022/ngwr-pipes.mjs +39 -26
  175. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  176. package/fesm2022/ngwr-platform.mjs +9 -9
  177. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  178. package/fesm2022/ngwr-popover-testing.mjs +7 -2
  179. package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
  180. package/fesm2022/ngwr-popover.mjs +155 -33
  181. package/fesm2022/ngwr-popover.mjs.map +1 -1
  182. package/fesm2022/ngwr-progress.mjs +3 -3
  183. package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
  184. package/fesm2022/ngwr-qr.mjs +42 -5
  185. package/fesm2022/ngwr-qr.mjs.map +1 -1
  186. package/fesm2022/ngwr-radio.mjs +6 -6
  187. package/fesm2022/ngwr-rating.mjs +3 -3
  188. package/fesm2022/ngwr-result.mjs +21 -30
  189. package/fesm2022/ngwr-result.mjs.map +1 -1
  190. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  191. package/fesm2022/ngwr-scroll.mjs +3 -3
  192. package/fesm2022/ngwr-segmented-testing.mjs +14 -1
  193. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
  194. package/fesm2022/ngwr-segmented.mjs +29 -6
  195. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  196. package/fesm2022/ngwr-select.mjs +159 -34
  197. package/fesm2022/ngwr-select.mjs.map +1 -1
  198. package/fesm2022/ngwr-shiny-text.mjs +11 -9
  199. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  200. package/fesm2022/ngwr-sidebar.mjs +31 -16
  201. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  202. package/fesm2022/ngwr-skeleton.mjs +3 -3
  203. package/fesm2022/ngwr-slider.mjs +100 -9
  204. package/fesm2022/ngwr-slider.mjs.map +1 -1
  205. package/fesm2022/ngwr-sparkline.mjs +3 -3
  206. package/fesm2022/ngwr-speed-dial-testing.mjs +15 -13
  207. package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
  208. package/fesm2022/ngwr-speed-dial.mjs +27 -12
  209. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  210. package/fesm2022/ngwr-spinner.mjs +3 -3
  211. package/fesm2022/ngwr-splash-cursor.mjs +3 -3
  212. package/fesm2022/ngwr-split-text.mjs +17 -5
  213. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  214. package/fesm2022/ngwr-splitter.mjs +3 -3
  215. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  216. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  217. package/fesm2022/ngwr-squircle.mjs +6 -6
  218. package/fesm2022/ngwr-star-border.mjs +4 -4
  219. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  220. package/fesm2022/ngwr-statistic.mjs +9 -9
  221. package/fesm2022/ngwr-stepper-testing.mjs +8 -8
  222. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
  223. package/fesm2022/ngwr-stepper.mjs +33 -8
  224. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  225. package/fesm2022/ngwr-storage.mjs +17 -5
  226. package/fesm2022/ngwr-storage.mjs.map +1 -1
  227. package/fesm2022/ngwr-switch.mjs +3 -3
  228. package/fesm2022/ngwr-table.mjs +99 -39
  229. package/fesm2022/ngwr-table.mjs.map +1 -1
  230. package/fesm2022/ngwr-tabs-testing.mjs +11 -10
  231. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
  232. package/fesm2022/ngwr-tabs.mjs +36 -10
  233. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  234. package/fesm2022/ngwr-textarea.mjs +3 -3
  235. package/fesm2022/ngwr-theme.mjs +181 -4
  236. package/fesm2022/ngwr-theme.mjs.map +1 -1
  237. package/fesm2022/ngwr-tilt-card.mjs +7 -7
  238. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  239. package/fesm2022/ngwr-timeline.mjs +6 -6
  240. package/fesm2022/ngwr-toast.mjs +9 -9
  241. package/fesm2022/ngwr-toolbar.mjs +3 -3
  242. package/fesm2022/ngwr-tour.mjs +34 -10
  243. package/fesm2022/ngwr-tour.mjs.map +1 -1
  244. package/fesm2022/ngwr-transfer.mjs +3 -3
  245. package/fesm2022/ngwr-tree.mjs +28 -10
  246. package/fesm2022/ngwr-tree.mjs.map +1 -1
  247. package/fesm2022/ngwr-typewriter-testing.mjs +15 -1
  248. package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
  249. package/fesm2022/ngwr-typewriter.mjs +13 -5
  250. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  251. package/fesm2022/ngwr-typography.mjs +3 -3
  252. package/fesm2022/ngwr-utils.mjs +5 -2
  253. package/fesm2022/ngwr-utils.mjs.map +1 -1
  254. package/fesm2022/ngwr-version.mjs +1 -1
  255. package/fesm2022/ngwr-version.mjs.map +1 -1
  256. package/fesm2022/ngwr-virtual-scroll.mjs +4 -4
  257. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  258. package/fesm2022/ngwr-waves.mjs +4 -4
  259. package/fesm2022/ngwr-waves.mjs.map +1 -1
  260. package/fesm2022/ngwr-window.mjs +94 -24
  261. package/fesm2022/ngwr-window.mjs.map +1 -1
  262. package/file-upload/styles/_index.scss +2 -2
  263. package/glitch-text/styles/_index.scss +27 -12
  264. package/i18n/en.json +56 -6
  265. package/i18n/ru.json +56 -6
  266. package/image-cropper/styles/_index.scss +19 -0
  267. package/input/styles/_index.scss +2 -2
  268. package/input-number/styles/_index.scss +2 -2
  269. package/input-otp/styles/_index.scss +9 -2
  270. package/knob/styles/_index.scss +1 -1
  271. package/lightbox/styles/_index.scss +16 -2
  272. package/line-chart/styles/_index.scss +28 -14
  273. package/list/styles/_index.scss +1 -1
  274. package/llms-full.txt +18 -23
  275. package/llms.txt +22 -6
  276. package/markdown/styles/_index.scss +3 -3
  277. package/mcp/api.js +6 -4
  278. package/mcp/catalog.js +40 -3
  279. package/mcp/providers.js +16 -3
  280. package/mcp/tools.js +21 -1
  281. package/meter-group/styles/_index.scss +1 -1
  282. package/overlay/styles/_index.scss +33 -1
  283. package/package.json +17 -12
  284. package/pagination/styles/_index.scss +23 -1
  285. package/popover/styles/_index.scss +16 -7
  286. package/progress/styles/_index.scss +1 -1
  287. package/radio/styles/_index.scss +2 -2
  288. package/rating/styles/_index.scss +1 -1
  289. package/schematics/collection.json +1 -1
  290. package/schematics/migrations/v12/index.js +65 -0
  291. package/schematics/migrations/v7/index.js +12 -1
  292. package/schematics/migrations/v8/index.js +10 -1
  293. package/schematics/migrations.json +5 -0
  294. package/schematics/ng-add/index.js +8 -3
  295. package/schematics/provider/index.js +80 -13
  296. package/schematics/use/index.js +9 -129
  297. package/schematics/use/rule.js +206 -0
  298. package/schematics/use/symbol-map.json +4 -4
  299. package/segmented/styles/_index.scss +14 -3
  300. package/select/styles/_index.scss +14 -2
  301. package/sidebar/styles/_index.scss +12 -10
  302. package/skills/ngwr/SKILL.md +7 -5
  303. package/skills/ngwr/references/catalog.md +9 -9
  304. package/skills/ngwr/references/setup.md +10 -5
  305. package/slider/styles/_index.scss +1 -1
  306. package/speed-dial/styles/_index.scss +1 -1
  307. package/stepper/styles/_index.scss +12 -3
  308. package/switch/styles/_index.scss +2 -2
  309. package/table/styles/_index.scss +61 -12
  310. package/tabs/styles/_index.scss +1 -1
  311. package/textarea/styles/_index.scss +1 -1
  312. package/theme/styles/_colors.scss +142 -56
  313. package/theme/styles/_dark.scss +46 -3
  314. package/theme/styles/_focus.scss +28 -5
  315. package/theme/styles/_mixins.scss +1 -1
  316. package/theme/styles/_variables.scss +67 -0
  317. package/transfer/styles/_index.scss +26 -3
  318. package/tree/styles/_index.scss +29 -6
  319. package/types/ngwr-bar-chart-testing.d.ts +9 -1
  320. package/types/ngwr-blur-text.d.ts +8 -4
  321. package/types/ngwr-breadcrumbs.d.ts +17 -10
  322. package/types/ngwr-calendar-testing.d.ts +1 -1
  323. package/types/ngwr-calendar.d.ts +66 -0
  324. package/types/ngwr-carousel.d.ts +85 -6
  325. package/types/ngwr-cascader.d.ts +17 -0
  326. package/types/ngwr-click-spark.d.ts +4 -0
  327. package/types/ngwr-color-picker-testing.d.ts +8 -0
  328. package/types/ngwr-color-picker.d.ts +21 -1
  329. package/types/ngwr-confetti.d.ts +8 -0
  330. package/types/ngwr-config.d.ts +10 -1
  331. package/types/ngwr-context-menu-testing.d.ts +24 -11
  332. package/types/ngwr-context-menu.d.ts +56 -0
  333. package/types/ngwr-counter.d.ts +1 -0
  334. package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
  335. package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
  336. package/types/ngwr-date-picker-testing.d.ts +11 -6
  337. package/types/ngwr-date-picker.d.ts +8 -4
  338. package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
  339. package/types/ngwr-dialog.d.ts +38 -1
  340. package/types/ngwr-divider.d.ts +25 -0
  341. package/types/ngwr-donut-chart-testing.d.ts +7 -3
  342. package/types/ngwr-donut-chart.d.ts +3 -3
  343. package/types/ngwr-drag-drop.d.ts +56 -2
  344. package/types/ngwr-drawer.d.ts +56 -5
  345. package/types/ngwr-event-calendar.d.ts +8 -2
  346. package/types/ngwr-falling-text-testing.d.ts +5 -3
  347. package/types/ngwr-falling-text.d.ts +1 -1
  348. package/types/ngwr-form.d.ts +12 -2
  349. package/types/ngwr-glitch-text-testing.d.ts +37 -8
  350. package/types/ngwr-gradient-text-testing.d.ts +16 -3
  351. package/types/ngwr-i18n.d.ts +13 -4
  352. package/types/ngwr-image-cropper-testing.d.ts +49 -10
  353. package/types/ngwr-image-cropper.d.ts +70 -5
  354. package/types/ngwr-input-number-testing.d.ts +15 -10
  355. package/types/ngwr-input-number.d.ts +11 -4
  356. package/types/ngwr-input-otp-testing.d.ts +12 -6
  357. package/types/ngwr-input-otp.d.ts +15 -1
  358. package/types/ngwr-line-chart.d.ts +20 -3
  359. package/types/ngwr-markdown.d.ts +11 -0
  360. package/types/ngwr-mention.d.ts +32 -0
  361. package/types/ngwr-meter-group-testing.d.ts +12 -2
  362. package/types/ngwr-overlay.d.ts +1 -0
  363. package/types/ngwr-pagination-testing.d.ts +4 -4
  364. package/types/ngwr-pipes.d.ts +1 -1
  365. package/types/ngwr-popover-testing.d.ts +7 -2
  366. package/types/ngwr-popover.d.ts +1 -0
  367. package/types/ngwr-result.d.ts +6 -0
  368. package/types/ngwr-segmented-testing.d.ts +9 -0
  369. package/types/ngwr-segmented.d.ts +21 -1
  370. package/types/ngwr-select.d.ts +68 -6
  371. package/types/ngwr-shiny-text.d.ts +4 -2
  372. package/types/ngwr-sidebar.d.ts +14 -5
  373. package/types/ngwr-slider.d.ts +69 -1
  374. package/types/ngwr-speed-dial-testing.d.ts +15 -11
  375. package/types/ngwr-speed-dial.d.ts +22 -3
  376. package/types/ngwr-split-text.d.ts +9 -0
  377. package/types/ngwr-stepper-testing.d.ts +5 -5
  378. package/types/ngwr-stepper.d.ts +8 -0
  379. package/types/ngwr-storage.d.ts +1 -0
  380. package/types/ngwr-table.d.ts +104 -11
  381. package/types/ngwr-tabs-testing.d.ts +11 -10
  382. package/types/ngwr-tabs.d.ts +2 -0
  383. package/types/ngwr-theme.d.ts +82 -1
  384. package/types/ngwr-tour.d.ts +22 -4
  385. package/types/ngwr-tree.d.ts +5 -4
  386. package/types/ngwr-typewriter-testing.d.ts +10 -0
  387. package/types/ngwr-utils.d.ts +5 -2
  388. package/types/ngwr-version.d.ts +1 -1
  389. package/types/ngwr-window.d.ts +39 -11
  390. package/typography/styles/_index.scss +1 -1
  391. package/window/styles/_index.scss +72 -26
  392. package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
  393. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
  394. package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
@@ -46,7 +46,7 @@
46
46
 
47
47
  &--disabled {
48
48
  cursor: not-allowed;
49
- opacity: 0.55;
49
+ opacity: var(--wr-disabled-opacity);
50
50
  }
51
51
 
52
52
  // Active-descendant cursor when virtualized — focus lives on the list
@@ -101,6 +101,20 @@
101
101
  transform: rotate(90deg);
102
102
  }
103
103
 
104
+ // The indent is logical and mirrors on its own, but the triangle is drawn
105
+ // pointing physically right — so under `dir="rtl"` a collapsed node aims back
106
+ // at its parent instead of at the children it would reveal. `tree.ts` already
107
+ // swaps ArrowLeft / ArrowRight for the same reason; this is the picture of that
108
+ // axis. Turn it around the way the cascader's branch arrow does.
109
+ //
110
+ // Scoped to the COLLAPSED state deliberately, and both halves matter: an
111
+ // unscoped rule sets the same property as the `aria-expanded='true'` rule
112
+ // above, and mirroring the inner `<svg>` instead would compose `rotate(90deg)`
113
+ // over `scaleX(-1)` and point an expanded node UP rather than down.
114
+ [dir='rtl'] &__row[aria-expanded='false'] &__toggle {
115
+ transform: scaleX(-1);
116
+ }
117
+
104
118
  &__label {
105
119
  flex: 1 1 auto;
106
120
  overflow: hidden;
@@ -109,7 +123,7 @@
109
123
  }
110
124
 
111
125
  &--disabled {
112
- opacity: 0.7;
126
+ opacity: var(--wr-disabled-opacity);
113
127
  pointer-events: none;
114
128
  }
115
129
 
@@ -137,7 +151,7 @@
137
151
 
138
152
  &.wr-tree--disabled {
139
153
  --wr-tree-trigger-color: var(--wr-color-on-surface-muted);
140
- --wr-tree-trigger-bg: rgba(var(--wr-color-outline-rgb), 0.35);
154
+ --wr-tree-trigger-bg: var(--wr-color-fill);
141
155
  }
142
156
  }
143
157
 
@@ -152,7 +166,12 @@
152
166
  color: var(--wr-tree-trigger-color);
153
167
  border: 1px solid var(--wr-tree-trigger-border);
154
168
  border-radius: var(--wr-tree-trigger-radius);
155
- padding: var(--wr-tree-trigger-padding-y) var(--wr-tree-trigger-padding-x);
169
+ // Density-multiplied like select / input / textarea / button. The comment
170
+ // above promises this trigger "lines up with select / input / button", and
171
+ // that only holds at `md` without the multiplier: at `touch` the others
172
+ // measured 35.59px and this one stayed at 30.
173
+ padding: calc(var(--wr-tree-trigger-padding-y) * var(--wr-density-y, 1))
174
+ calc(var(--wr-tree-trigger-padding-x) * var(--wr-density-x, 1));
156
175
  font-family: var(--wr-font-family-base);
157
176
  font-size: var(--wr-tree-trigger-font-size);
158
177
  line-height: var(--wr-tree-trigger-line-height);
@@ -226,8 +245,12 @@
226
245
  flex-wrap: wrap;
227
246
  align-items: center;
228
247
  padding: 0.25rem 0.5rem;
229
- // Empty / one-row floor = single-mode height (+2px for the border).
230
- min-height: calc(var(--wr-tree-trigger-line-height) + var(--wr-tree-trigger-padding-y) * 2 + 2px);
248
+ // Empty / one-row floor = single-mode height (+2px for the border), so it
249
+ // has to carry the same density multiplier the single-mode padding does —
250
+ // otherwise the two modes stop agreeing the moment density leaves `md`.
251
+ min-height: calc(
252
+ var(--wr-tree-trigger-line-height) + var(--wr-tree-trigger-padding-y) * var(--wr-density-y, 1) * 2 + 2px
253
+ );
231
254
  }
232
255
 
233
256
  &__chips {
@@ -37,7 +37,13 @@ interface WrBarChartBar {
37
37
  * **The bars are read as PERCENTAGES, not as pixels.** Each column's height is
38
38
  * written inline as a share of the chart's maximum, which is the one number that
39
39
  * survives a test with no layout — and it is also the component's whole job, since
40
- * the maximum is either given or derived from the data.
40
+ * the maximum is either given or derived from the data. That share is read off the
41
+ * `style` ATTRIBUTE rather than through `getCssValue()`, and the difference is not
42
+ * cosmetic: `getCssValue()` is `getComputedStyle()`, which hands the declared `60%`
43
+ * straight back in jsdom and resolves it to used pixels in a real browser — so the
44
+ * same harness answered `100` here and `200` under Selenium or a browser runner,
45
+ * with no error to say which one you got. The stylesheet's own `min-height: 1px`
46
+ * is a second way that read lies, turning an empty bar into `1`.
41
47
  *
42
48
  * **The visible label row is decoration.** Every column carries `role="img"` with
43
49
  * the label AND the value in its name, and the printed labels underneath are
@@ -61,6 +67,8 @@ declare class WrBarChartHarness extends ComponentHarness {
61
67
  static with(options?: WrBarChartHarnessFilters): HarnessPredicate<WrBarChartHarness>;
62
68
  /** Every column, in data order. */
63
69
  getBars(): Promise<WrBarChartBar[]>;
70
+ /** Parse one bar's declared share. See the class note on why this is not `getCssValue()`. */
71
+ private static heightPercentOf;
64
72
  /** The labels printed under the columns, in order. */
65
73
  getLabels(): Promise<string[]>;
66
74
  /** What each column announces — the label and the value together. */
@@ -1,7 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
 
3
- type Unit = 'chars' | 'words';
4
- type Direction = 'top' | 'bottom';
3
+ /** Granularity of the split. */
4
+ type WrBlurTextUnit = 'chars' | 'words';
5
+ /** Entry direction. `'top'` slides down into place; `'bottom'` slides up. */
6
+ type WrBlurTextDirection = 'top' | 'bottom';
7
+
5
8
  type Piece = {
6
9
  readonly kind: 'piece';
7
10
  readonly text: string;
@@ -31,9 +34,9 @@ declare class WrBlurText {
31
34
  /** Text to animate. Required. */
32
35
  readonly text: _angular_core.InputSignal<string>;
33
36
  /** Split granularity. @default 'words' */
34
- readonly animateBy: _angular_core.InputSignal<Unit>;
37
+ readonly animateBy: _angular_core.InputSignal<WrBlurTextUnit>;
35
38
  /** Entry direction. `'top'` slides down into place; `'bottom'` slides up. @default 'top' */
36
- readonly direction: _angular_core.InputSignal<Direction>;
39
+ readonly direction: _angular_core.InputSignal<WrBlurTextDirection>;
37
40
  /** Per-piece stagger in ms. @default 200 */
38
41
  readonly delay: _angular_core.InputSignalWithTransform<number, unknown>;
39
42
  /** Duration of each keyframe step in seconds (total = 2 × stepDuration). @default 0.35 */
@@ -72,3 +75,4 @@ declare class WrBlurText {
72
75
  }
73
76
 
74
77
  export { WrBlurText };
78
+ export type { WrBlurTextDirection, WrBlurTextUnit };
@@ -1,10 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
 
3
3
  /**
4
- * Breadcrumb navigation. Project `<wr-breadcrumbs-item>` children — they
5
- * render as `<li>` rows inside an `<ol>`, separated by the configured
6
- * glyph (default `/`). The container exposes the `nav[aria-label]`
7
- * landmark required by WCAG.
4
+ * Breadcrumb navigation. Project `<wr-breadcrumbs-item>` children — each keeps
5
+ * its own element and takes `role="listitem"` inside the `<ol>` rather than
6
+ * rendering an `<li>`, separated by the configured glyph (default `/`). The
7
+ * container exposes the `nav[aria-label]` landmark required by WCAG.
8
8
  *
9
9
  * @example
10
10
  * ```html
@@ -23,17 +23,24 @@ import * as _angular_core from '@angular/core';
23
23
  declare class WrBreadcrumbs {
24
24
  /** Separator glyph between items. Any short string. @default '/' */
25
25
  readonly separator: _angular_core.InputSignal<string>;
26
- /** Accessible label for the `nav` landmark. @default 'Breadcrumbs' */
27
- readonly ariaLabel: _angular_core.InputSignal<string>;
26
+ /**
27
+ * Accessible label for the `nav` landmark. Falls back to `breadcrumbs.label`,
28
+ * then `'Breadcrumbs'`.
29
+ */
30
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
31
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
28
32
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrBreadcrumbs, never>;
29
33
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrBreadcrumbs, "wr-breadcrumbs", never, { "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
30
34
  }
31
35
 
32
36
  /**
33
- * One row inside `<wr-breadcrumbs>`. Renders as a `<li>` containing
34
- * either an `<a>` (when `[href]` or `[routerLink]` is set) or a plain
35
- * `<span aria-current="page">` (when neither is set — typically the last
36
- * crumb).
37
+ * One row inside `<wr-breadcrumbs>`. The host itself is the row — a
38
+ * `<wr-breadcrumbs-item role="listitem" class="wr-breadcrumbs__item">`
39
+ * inside the parent's `<ol>` — and it contains either a real
40
+ * `<a class="wr-breadcrumbs__link">` (when `[href]` or `[routerLink]` is
41
+ * set) or, for the current crumb, a non-interactive
42
+ * `<a class="wr-breadcrumbs__current" role="text" tabindex="-1"
43
+ * aria-current="page">` (when neither is set — typically the last crumb).
37
44
  *
38
45
  * @example
39
46
  * ```html
@@ -139,7 +139,7 @@ type Arrow = 'left' | 'right' | 'up' | 'down';
139
139
  * picked. And it does NOT follow {@link next} / {@link previous} — a grid paged
140
140
  * away from the roving month has no active cell at all, and so no tab stop, until
141
141
  * a key or a click puts one back. That is the component's behaviour, and
142
- * {@link getActiveDay} is how a spec sees it.
142
+ * {@link getActiveDayNumber} is how a spec sees it.
143
143
  *
144
144
  * **Keys go to the host, not to a cell.** The component listens on its own element,
145
145
  * so {@link pressArrow} works whether or not jsdom managed to put real focus
@@ -79,6 +79,16 @@ declare class WrCalendar {
79
79
  protected readonly hoverDate: _angular_core.WritableSignal<Date | null>;
80
80
  /** Which sub-view is currently shown. Cycles `day → month → year` on header click. */
81
81
  protected readonly viewMode: _angular_core.WritableSignal<"day" | "month" | "year">;
82
+ /**
83
+ * Chip the month / year listbox has moved its ring to, as an index into
84
+ * `monthsView()` / `yearsView()`. `null` means "nobody has pressed an arrow
85
+ * yet", which resolves to the month or year on screen — see {@link activeChip}.
86
+ *
87
+ * Reset on every view change rather than remembered: coming back to the month
88
+ * list should ring the month you are looking at, not the one an earlier visit
89
+ * happened to leave the ring on.
90
+ */
91
+ private readonly rovedChip;
82
92
  private readonly prevMonthLabel;
83
93
  private readonly nextMonthLabel;
84
94
  private readonly prevYearLabel;
@@ -97,6 +107,22 @@ declare class WrCalendar {
97
107
  protected readonly headerLabel: _angular_core.Signal<string>;
98
108
  /** 6×7 day grid covering the current month plus spillover. */
99
109
  protected readonly weeks: _angular_core.Signal<readonly (readonly Date[])[]>;
110
+ /**
111
+ * The chip carrying the listbox's only `tabindex="0"` — where the ring is, and
112
+ * where Tab lands.
113
+ *
114
+ * A listbox owns its arrows, and these two did not: twelve months were twelve
115
+ * tab stops, so the role promised an interaction model the component never
116
+ * implemented. One tab stop plus arrow keys is the roving-tabindex half of the
117
+ * pattern the day grid already uses.
118
+ *
119
+ * Routed through {@link nearestEnabledChip} on BOTH paths — the seed and every
120
+ * arrow — for the reason the grid learned first: `.focus()` on a
121
+ * `<button disabled>` is a no-op, so parking the sole tab stop on a month a
122
+ * `[min]` has closed off leaves the whole view unreachable by keyboard.
123
+ * `-1` on the day view, where there are no chips at all.
124
+ */
125
+ protected readonly activeChip: _angular_core.Signal<number>;
100
126
  protected readonly classes: _angular_core.Signal<string>;
101
127
  constructor();
102
128
  /** Header `‹` button — steps by month / year / decade based on the active view. */
@@ -107,6 +133,14 @@ declare class WrCalendar {
107
133
  protected onLabelClick(): void;
108
134
  protected onMonthSelect(monthIdx: number): void;
109
135
  protected onYearSelect(year: number): void;
136
+ /**
137
+ * Switch views and drop the chip ring with them.
138
+ *
139
+ * Every view change is the only thing that changes what the chips MEAN, so it
140
+ * is the one place the ring has to forget where it was — otherwise a year
141
+ * picked at index 7 rings the eighth MONTH on the way back down.
142
+ */
143
+ private setViewMode;
110
144
  private stepViewDate;
111
145
  protected isToday(date: Date): boolean;
112
146
  protected isOutOfMonth(date: Date): boolean;
@@ -126,6 +160,38 @@ declare class WrCalendar {
126
160
  protected onCellLeave(): void;
127
161
  private applyRangeClick;
128
162
  protected onKeyDown(event: KeyboardEvent): void;
163
+ /**
164
+ * Arrow / Home / End inside the month or year listbox — the roving half of the
165
+ * pattern their `role` has always claimed.
166
+ *
167
+ * Steps by one along the row and by a full row vertically, and the inline pair
168
+ * mirrors under `dir="rtl"` for the same reason the grid's does: those two keys
169
+ * name a side of the screen. The page does NOT wrap or spill into the next
170
+ * one — a month list is twelve fixed cells, and the header's `‹` / `›` are what
171
+ * change which twelve. Anything else (Enter, Space, Tab, Escape) is left to the
172
+ * button and to whatever owns the calendar.
173
+ */
174
+ private onChipKeyDown;
175
+ /** How many chips the current view renders — twelve either way, read rather than assumed. */
176
+ private chipCount;
177
+ /** Whether the chip at `index` refuses selection in the current view. */
178
+ private isChipDisabled;
179
+ /** The chip the view itself points at: the month or year currently on screen. */
180
+ private currentChip;
181
+ /**
182
+ * The first selectable chip at or after `from`, else the first before it, else
183
+ * `from` unchanged when the whole page is closed off — the chip version of
184
+ * {@link nearestEnabled}, and it exists for the same reason: the ring carries
185
+ * the only `tabindex="0"`, and a disabled button cannot hold it.
186
+ */
187
+ private nearestEnabledChip;
188
+ /**
189
+ * The first selectable chip at `from` or beyond it in `step`'s direction, else
190
+ * null when that whole direction is closed off — which is the answer for an
191
+ * ArrowLeft on the first chip: stay put.
192
+ */
193
+ private enabledChipToward;
194
+ private focusActiveChip;
129
195
  /**
130
196
  * The first selectable day at or after `candidate`, else the first before it,
131
197
  * else `candidate` unchanged when everything nearby is closed off. Bounded at
@@ -1,14 +1,74 @@
1
1
  import * as ngwr_i18n from 'ngwr/i18n';
2
2
  import * as _angular_core from '@angular/core';
3
+ import { InjectionToken, Signal } from '@angular/core';
3
4
 
4
5
  /**
5
6
  * One slide in a {@link WrCarousel}. Holds whatever content you
6
7
  * project — image, card, video, anything.
8
+ *
9
+ * **An off-screen slide is `inert`.** Only one slide is visible, but the track
10
+ * merely translates the others out of view: without this they stay in the tab
11
+ * order and in the accessibility tree, so a keyboard user tabs into a link they
12
+ * cannot see and a screen reader announces every slide as if they were all on
13
+ * screen. `inert` takes the whole subtree out of both at once, which is why it
14
+ * is preferred here over `tabindex="-1"` (which reaches only the host) — the
15
+ * same answer `wr-collapse` and `wr-marquee` use.
16
+ *
17
+ * `aria-hidden` rides along for the same reason it does on the marquee's
18
+ * duplicate copies: it states the intent for anything reading the attribute
19
+ * rather than honouring `inert`.
7
20
  */
8
21
  declare class WrCarouselSlide {
22
+ private readonly carousel;
23
+ /**
24
+ * Word a screen reader speaks IN PLACE OF the `group` role. Falls back to
25
+ * `carousel.slideRoledescription`, then `'slide'`.
26
+ */
27
+ readonly roledescription: _angular_core.InputSignal<string | null>;
28
+ protected readonly resolvedRoledescription: _angular_core.Signal<string>;
29
+ /**
30
+ * Whether this slide is one of the ones translated out of view.
31
+ *
32
+ * `false` while the index is `-1`: content children resolve after the first
33
+ * render, and a slide that hid itself in that window would make the carousel
34
+ * open with everything inert. `false` too when there is no parent — the
35
+ * component is exported, so it can be used on its own.
36
+ */
37
+ protected readonly offScreen: _angular_core.Signal<boolean>;
9
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCarouselSlide, never>;
10
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarouselSlide, "wr-carousel-slide", never, {}, {}, never, ["*"], true, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarouselSlide, "wr-carousel-slide", never, { "roledescription": { "alias": "roledescription"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
40
+ }
41
+
42
+ /**
43
+ * @license
44
+ *
45
+ * Use of this source code is governed by an MIT-style license that can be
46
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
47
+ */
48
+
49
+ /**
50
+ * Contract a `<wr-carousel-slide>` uses to ask its parent whether it is the one
51
+ * on screen.
52
+ *
53
+ * A token rather than an input, because slides arrive through `<ng-content />`:
54
+ * nothing in `carousel.html` can bind to them, so the child has to reach up.
55
+ * Same shape as {@link WR_TABS}.
56
+ *
57
+ * @internal
58
+ */
59
+ interface WrCarouselContext {
60
+ /** Index of the slide currently on screen. */
61
+ readonly active: Signal<number>;
62
+ /**
63
+ * Position of a slide in projection order, or `-1` before it has registered.
64
+ *
65
+ * Reads the content-children signal, so a `computed()` calling this tracks
66
+ * both the active index and slides being added or removed.
67
+ */
68
+ indexOf(slide: object): number;
11
69
  }
70
+ /** Token a `<wr-carousel-slide>` injects to find its parent `<wr-carousel>`. */
71
+ declare const WR_CAROUSEL: InjectionToken<WrCarouselContext>;
12
72
 
13
73
  /**
14
74
  * Slide carousel. Project `<wr-carousel-slide>` children — the carousel
@@ -25,7 +85,7 @@ declare class WrCarouselSlide {
25
85
  *
26
86
  * @see https://ngwr.dev/reference/components/carousel
27
87
  */
28
- declare class WrCarousel {
88
+ declare class WrCarousel implements WrCarouselContext {
29
89
  /** Accessible name of the previous-slide button. Falls back to `carousel.prev`. */
30
90
  readonly prevLabel: _angular_core.InputSignal<string | null>;
31
91
  /** Accessible name of the next-slide button. Falls back to `carousel.next`. */
@@ -38,6 +98,12 @@ declare class WrCarousel {
38
98
  /** Accessible name of the carousel itself. Falls back to `carousel.label`. */
39
99
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
40
100
  protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
101
+ /**
102
+ * Word a screen reader speaks IN PLACE OF the `group` role. Falls back to
103
+ * `carousel.roledescription`, then `'carousel'`.
104
+ */
105
+ readonly roledescription: _angular_core.InputSignal<string | null>;
106
+ protected readonly resolvedRoledescription: _angular_core.Signal<string>;
41
107
  protected readonly slideLabel: (params?: ngwr_i18n.WrI18nParams) => string;
42
108
  /** Active slide index. Two-way bindable. @default 0 */
43
109
  readonly active: _angular_core.ModelSignal<number>;
@@ -53,6 +119,14 @@ declare class WrCarousel {
53
119
  readonly loop: _angular_core.InputSignalWithTransform<boolean, any>;
54
120
  protected readonly slides: _angular_core.Signal<readonly WrCarouselSlide[]>;
55
121
  protected readonly count: _angular_core.Signal<number>;
122
+ /**
123
+ * Where a slide sits in projection order — {@link WrCarouselContext}.
124
+ *
125
+ * Public only because the child injects the parent through `WR_CAROUSEL`;
126
+ * reading `slides()` here is what makes the child's `computed()` re-run when a
127
+ * slide is added or removed.
128
+ */
129
+ indexOf(slide: object): number;
56
130
  /** Live horizontal drag offset (px) during a touch swipe. */
57
131
  protected readonly dragX: _angular_core.WritableSignal<number>;
58
132
  protected readonly dragging: _angular_core.WritableSignal<boolean>;
@@ -69,12 +143,16 @@ declare class WrCarousel {
69
143
  /** CSS transform for the track — the per-slide offset plus any live drag. */
70
144
  protected readonly trackStyle: _angular_core.Signal<string>;
71
145
  private timer;
146
+ private readonly hovered;
147
+ private readonly focusWithin;
72
148
  private readonly paused;
73
149
  private readonly destroyRef;
74
150
  private readonly isBrowser;
75
151
  constructor();
76
- protected onPauseIn(): void;
77
- protected onPauseOut(): void;
152
+ protected onHoverIn(): void;
153
+ protected onHoverOut(): void;
154
+ protected onFocusIn(): void;
155
+ protected onFocusOut(): void;
78
156
  goTo(index: number): void;
79
157
  next(): void;
80
158
  prev(): void;
@@ -83,7 +161,8 @@ declare class WrCarousel {
83
161
  protected onSwipeMove(event: TouchEvent): void;
84
162
  protected onSwipeEnd(event: TouchEvent, viewport: HTMLElement): void;
85
163
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCarousel, never>;
86
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarousel, "wr-carousel", never, { "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "paginationLabel": { "alias": "paginationLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "intervalMs": { "alias": "intervalMs"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["slides"], ["*"], true, never>;
164
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarousel, "wr-carousel", never, { "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "paginationLabel": { "alias": "paginationLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "roledescription": { "alias": "roledescription"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "intervalMs": { "alias": "intervalMs"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["slides"], ["*"], true, never>;
87
165
  }
88
166
 
89
- export { WrCarousel, WrCarouselSlide };
167
+ export { WR_CAROUSEL, WrCarousel, WrCarouselSlide };
168
+ export type { WrCarouselContext };
@@ -116,14 +116,31 @@ declare class WrCascader<T = string> implements FormValueControl<unknown> {
116
116
  private readonly vcr;
117
117
  private readonly scrollStrategies;
118
118
  private readonly destroyRef;
119
+ private readonly injector;
119
120
  private overlayRef;
120
121
  constructor();
121
122
  protected onTriggerClick(): void;
123
+ /**
124
+ * ArrowDown / ArrowUp open the panel, Alt+ArrowDown included — the combobox way in,
125
+ * and the shape `wr-dropdown`'s trigger uses. Enter and Space need no branch: the
126
+ * trigger is a real `<button>`, so the browser turns them into the click above.
127
+ *
128
+ * Only while closed. Once the panel is up the caret is inside it, and its options
129
+ * own their own keys.
130
+ */
131
+ protected onTriggerKeydown(event: KeyboardEvent): void;
122
132
  protected onOptionClick(colIndex: number, opt: WrCascaderOption<T>, event: Event): void;
123
133
  protected clearSelection(event: Event): void;
124
134
  protected isActiveAt(colIndex: number, value: T): boolean;
125
135
  private pathsEqual;
126
136
  private openOverlay;
137
+ /**
138
+ * The option the panel opens on: the selected one in the first column when there is
139
+ * a selection, otherwise the first enabled root. A disabled option is skipped — it
140
+ * still carries `tabindex="-1"`, so `focus()` would land on it and answer for a
141
+ * choice nobody can make.
142
+ */
143
+ private focusPanelOption;
127
144
  private closeOverlay;
128
145
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCascader<any>, never>;
129
146
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCascader<any>, "wr-cascader", never, { "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "changeOnSelect": { "alias": "changeOnSelect"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
@@ -44,6 +44,10 @@ declare class WrClickSpark {
44
44
  private readonly isBrowser;
45
45
  private readonly platform;
46
46
  private sparks;
47
+ /** Pending frame id, or `0` while the loop is parked. `cancelAnimationFrame(0)` is a no-op. */
48
+ private raf;
49
+ /** The frame callback, once a context was obtained. `null` means there is no loop to wake. */
50
+ private drawFrame;
47
51
  constructor();
48
52
  protected onClick(event: MouseEvent): void;
49
53
  /**
@@ -197,6 +197,14 @@ declare class WrColorPickerHarness extends ComponentHarness {
197
197
  * readable with no layout at all — which makes them the only evidence a spec has
198
198
  * that the surfaces followed a colour set through the fields. A measured position
199
199
  * would be zero for all three.
200
+ *
201
+ * Read off the `style` ATTRIBUTE rather than through `getCssValue()`, and the
202
+ * difference is not cosmetic: `getCssValue()` is `getComputedStyle()`, and `left` /
203
+ * `top` on a positioned element resolve to the USED value — so the declared `40%`
204
+ * comes straight back in jsdom and arrives as pixels in a real browser, and the same
205
+ * harness answered 40 here and 96 under a browser runner with nothing to say which
206
+ * one you got. The stylesheet's own `top: 0; left: 0` is a second way that read lies,
207
+ * turning a thumb whose binding is gone into one parked at the origin.
200
208
  */
201
209
  getThumbs(): Promise<WrColorPickerThumbs>;
202
210
  /** The HEX field's value without the tab check — for filters, which must not throw. */
@@ -232,8 +232,15 @@ declare class WrColorPicker implements FormValueControl<string> {
232
232
  protected readonly activeTab: _angular_core.WritableSignal<Tab>;
233
233
  /** HSL view of the current colour, computed lazily. */
234
234
  protected readonly hslView: _angular_core.Signal<WrHsl>;
235
- /** Alpha as integer percent for display in numeric tabs. */
235
+ /** Alpha as integer percent — the numeric tabs and the alpha slider's `aria-valuenow`. */
236
236
  protected readonly alphaPercent: _angular_core.Signal<number>;
237
+ /** Hue in whole degrees, for the hue slider's `aria-valuenow`. */
238
+ protected readonly hueValue: _angular_core.Signal<number>;
239
+ private readonly areaLabel;
240
+ /** Name of the SV surface, carrying the two values a `role="group"` cannot. */
241
+ protected readonly resolvedAreaLabel: _angular_core.Signal<string>;
242
+ protected readonly resolvedHueLabel: _angular_core.Signal<string>;
243
+ protected readonly resolvedAlphaLabel: _angular_core.Signal<string>;
237
244
  protected readonly tabOptions: readonly WrSegmentedOption<Tab>[];
238
245
  protected readonly classes: _angular_core.Signal<string>;
239
246
  /**
@@ -250,6 +257,19 @@ declare class WrColorPicker implements FormValueControl<string> {
250
257
  private lastEmitted;
251
258
  constructor();
252
259
  protected onPointerDown(event: PointerEvent, surface: Edges): void;
260
+ /**
261
+ * Hue and alpha are real one-value sliders, so they take the APG slider keys —
262
+ * the same set `wr-knob` and `wr-slider` implement, including Home / End.
263
+ */
264
+ protected onSliderKeydown(event: KeyboardEvent, surface: 'hue' | 'alpha'): void;
265
+ /**
266
+ * The SV canvas is two axes at once, so the keys follow the picture: left and
267
+ * right run along saturation, up and down along brightness — the directions
268
+ * the thumb visibly moves. Shift takes ten percent at a time.
269
+ */
270
+ protected onAreaKeydown(event: KeyboardEvent): void;
271
+ /** Leaving a surface is what "touched" means, the same as leaving the hex field. */
272
+ protected onSurfaceBlur(): void;
253
273
  private updateFromEvent;
254
274
  protected onHexInput(event: Event): void;
255
275
  protected onHexBlur(): void;
@@ -56,9 +56,17 @@ declare class WrConfetti {
56
56
  private ctx;
57
57
  private particles;
58
58
  private rafId;
59
+ private readonly onResize;
60
+ constructor();
59
61
  /** Spawn a confetti burst with the given (or default) options. */
60
62
  fire(options?: WrConfettiOptions): void;
61
63
  private ensureCanvas;
64
+ /**
65
+ * Give back the canvas and the listener `ensureCanvas()` took from the page,
66
+ * stop the frame loop, and reset the state both of them guard on so a `fire()`
67
+ * from a fresh injector rebuilds cleanly.
68
+ */
69
+ private teardown;
62
70
  private resize;
63
71
  private spawn;
64
72
  private tick;
@@ -151,8 +151,17 @@ declare function provideWrConfig(config: WrConfig): EnvironmentProviders;
151
151
  * size scale is narrower than {@link WrControlSize} stops compiling here rather
152
152
  * than accepting a value it cannot render — the type checker doing the work a
153
153
  * parity script would otherwise have to.
154
+ *
155
+ * `NoInfer` is what makes that true. Drop it and the guard is a comment again on
156
+ * every call site that does not pin the generic by hand, which was all but two —
157
+ * `wr-btn` the only size one among them. Without it `T` has three inference sites;
158
+ * TypeScript collects all three candidates and keeps the SUPERTYPE, so `pick`'s
159
+ * `WrControlSize` won and `T` widened to the config's type. `Signal<T>` is
160
+ * covariant, so the narrower binding stayed assignable and the call compiled clean.
161
+ * Widening `WrControlSize` by one member used to raise exactly one error, in
162
+ * `wr-btn`; it now raises nine.
154
163
  */
155
- declare function useConfigValue<T>(binding: Signal<T | null | undefined>, pick: (config: WrConfig) => T | undefined, fallback: T): Signal<T>;
164
+ declare function useConfigValue<T>(binding: Signal<T | null | undefined>, pick: (config: WrConfig) => NoInfer<T> | undefined, fallback: NoInfer<T>): Signal<T>;
156
165
 
157
166
  /**
158
167
  * @license
@@ -101,13 +101,12 @@ declare class WrContextMenuItemHarness extends ComponentHarness {
101
101
  /** The leading icon's registered name, or `null` when the item has no icon. */
102
102
  getIconName(): Promise<string | null>;
103
103
  /**
104
- * Whether the item holds focus.
104
+ * Whether the item holds the menu's roving focus.
105
105
  *
106
- * Worth asking, because nothing in this component ever puts it there: unlike
107
- * `<wr-dropdown-menu>`, a context menu does not focus its first item on open
108
- * and has no arrow-key cursor between items. Focus lands on an item when
109
- * something sends it a key — which every keyboard method here does, since the
110
- * CDK focuses an element before typing into it.
106
+ * The menu moves focus onto its first enabled row as the pane renders and the
107
+ * arrows walk it from there, so this is where the keyboard is. Opening a
108
+ * submenu hands the cursor to the submenu's own first row, which leaves the
109
+ * item that owns it unfocused while its pane is up.
111
110
  */
112
111
  isFocused(): Promise<boolean>;
113
112
  /**
@@ -143,8 +142,10 @@ declare class WrContextMenuItemHarness extends ComponentHarness {
143
142
  *
144
143
  * The keyboard, not the pointer: it opens with no delay (hover waits out
145
144
  * 120ms — `openSubmenuByHover()` covers that path) and needs no coordinates,
146
- * which jsdom could not supply anyway. Sending the key focuses the item first,
147
- * exactly as a roving cursor would have.
145
+ * which jsdom could not supply anyway. A keyboard open walks INTO the submenu,
146
+ * so afterwards the cursor is on the submenu's first row and `isFocused()` on
147
+ * this item is `false` — `openSubmenuByHover()` only shows the pane and leaves
148
+ * the cursor where it was.
148
149
  */
149
150
  openSubmenu(timeout?: number): Promise<void>;
150
151
  /**
@@ -223,9 +224,10 @@ declare class WrContextMenuItemHarness extends ComponentHarness {
223
224
  * `clickItem()` leaves it closed.
224
225
  * - Submenus are a first-class input here rather than a nested trigger, so they
225
226
  * are driven from {@link WrContextMenuItemHarness}.
226
- * - The menu never takes focus: nothing focuses the first item and there is no
227
- * arrow-key cursor between items, so there is no `getFocusedItemText()` to ask
228
- * — see `WrContextMenuItemHarness.isFocused()`.
227
+ * - Focus moves in on EVERY open, where a dropdown's does so only when a
228
+ * keyboard opened it. There is no hover trigger here — a right-click, Shift+F10
229
+ * or a long-press is always a deliberate request for the menu — so
230
+ * `getFocusedItemText()` answers straight after `open()`.
229
231
  *
230
232
  * **Timing.** The waits are real: a 500ms `setTimeout` for the long-press hold and
231
233
  * another 220ms one for the exit animation the pane is held alive through, plus the
@@ -359,6 +361,17 @@ declare class WrContextMenuHarness extends ContentContainerComponentHarness {
359
361
  getItems(filters?: WrContextMenuItemHarnessFilters): Promise<WrContextMenuItemHarness[]>;
360
362
  /** The labels of this menu's items, in DOM order. */
361
363
  getItemTexts(): Promise<string[]>;
364
+ /**
365
+ * The label of the item that currently holds focus, or `null` when the
366
+ * keyboard is elsewhere.
367
+ *
368
+ * The menu roves focus rather than drawing a cursor — it lands on the first
369
+ * ENABLED item as the pane renders, and the arrows walk it over the enabled
370
+ * items only — so this is the only way to ask where the keyboard is. It answers
371
+ * `null` once a submenu has taken the cursor: that pane is a separate overlay,
372
+ * and its own rows are reached through `WrContextMenuItemHarness`.
373
+ */
374
+ getFocusedItemText(): Promise<string | null>;
362
375
  /**
363
376
  * How many separators this menu shows.
364
377
  *