ngwr 14.3.1 → 14.4.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 (329) hide show
  1. package/README.md +1 -1
  2. package/avatar/styles/_index.scss +4 -2
  3. package/badge/styles/_index.scss +4 -1
  4. package/badge/styles/_tag.scss +3 -0
  5. package/cascader/styles/_rules.scss +3 -0
  6. package/command-palette/styles/_index.scss +23 -0
  7. package/context-menu/styles/_index.scss +13 -1
  8. package/fesm2022/ngwr-action-sheet.mjs +3 -3
  9. package/fesm2022/ngwr-affix.mjs +17 -4
  10. package/fesm2022/ngwr-affix.mjs.map +1 -1
  11. package/fesm2022/ngwr-alert.mjs +4 -4
  12. package/fesm2022/ngwr-alert.mjs.map +1 -1
  13. package/fesm2022/ngwr-anchor.mjs +3 -3
  14. package/fesm2022/ngwr-aurora.mjs +3 -3
  15. package/fesm2022/ngwr-avatar.mjs +3 -3
  16. package/fesm2022/ngwr-back-top.mjs +3 -3
  17. package/fesm2022/ngwr-badge.mjs +6 -6
  18. package/fesm2022/ngwr-bar-chart-testing.mjs +18 -2
  19. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
  20. package/fesm2022/ngwr-bar-chart.mjs +3 -3
  21. package/fesm2022/ngwr-blur-text.mjs +3 -3
  22. package/fesm2022/ngwr-border-glow.mjs +3 -3
  23. package/fesm2022/ngwr-breadcrumbs.mjs +6 -6
  24. package/fesm2022/ngwr-burger.mjs +3 -3
  25. package/fesm2022/ngwr-button.mjs +6 -6
  26. package/fesm2022/ngwr-calendar-heatmap-testing.mjs +12 -9
  27. package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -1
  28. package/fesm2022/ngwr-calendar-heatmap.mjs +35 -7
  29. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  30. package/fesm2022/ngwr-calendar.mjs +32 -4
  31. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  32. package/fesm2022/ngwr-card.mjs +9 -9
  33. package/fesm2022/ngwr-carousel.mjs +6 -6
  34. package/fesm2022/ngwr-cascader-testing.mjs +87 -17
  35. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
  36. package/fesm2022/ngwr-cascader.mjs +63 -4
  37. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  38. package/fesm2022/ngwr-checkbox-testing.mjs +13 -2
  39. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -1
  40. package/fesm2022/ngwr-checkbox.mjs +42 -7
  41. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  42. package/fesm2022/ngwr-circular-text.mjs +3 -3
  43. package/fesm2022/ngwr-click-spark.mjs +3 -3
  44. package/fesm2022/ngwr-clipboard.mjs +3 -3
  45. package/fesm2022/ngwr-collapse.mjs +9 -9
  46. package/fesm2022/ngwr-color-picker.mjs +6 -6
  47. package/fesm2022/ngwr-command-palette.mjs +16 -3
  48. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  49. package/fesm2022/ngwr-compare.mjs +3 -3
  50. package/fesm2022/ngwr-confetti.mjs +3 -3
  51. package/fesm2022/ngwr-context-menu.mjs +12 -12
  52. package/fesm2022/ngwr-cookie.mjs +3 -3
  53. package/fesm2022/ngwr-counter.mjs +6 -6
  54. package/fesm2022/ngwr-date-adapters-fns.mjs +3 -3
  55. package/fesm2022/ngwr-date-adapters-luxon.mjs +3 -3
  56. package/fesm2022/ngwr-date-picker.mjs +81 -26
  57. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  58. package/fesm2022/ngwr-date.mjs +3 -3
  59. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  60. package/fesm2022/ngwr-density.mjs +6 -6
  61. package/fesm2022/ngwr-descriptions.mjs +6 -6
  62. package/fesm2022/ngwr-dialog.mjs +15 -15
  63. package/fesm2022/ngwr-directives.mjs +12 -12
  64. package/fesm2022/ngwr-divider.mjs +3 -3
  65. package/fesm2022/ngwr-donut-chart-testing.mjs +18 -2
  66. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
  67. package/fesm2022/ngwr-donut-chart.mjs +4 -4
  68. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  69. package/fesm2022/ngwr-drag-drop.mjs +6 -6
  70. package/fesm2022/ngwr-drawer.mjs +18 -18
  71. package/fesm2022/ngwr-dropdown.mjs +32 -14
  72. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  73. package/fesm2022/ngwr-empty.mjs +3 -3
  74. package/fesm2022/ngwr-event-calendar.mjs +6 -6
  75. package/fesm2022/ngwr-falling-text.mjs +3 -3
  76. package/fesm2022/ngwr-file-upload.mjs +18 -5
  77. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  78. package/fesm2022/ngwr-form.mjs +66 -14
  79. package/fesm2022/ngwr-form.mjs.map +1 -1
  80. package/fesm2022/ngwr-fuzzy-text.mjs +3 -3
  81. package/fesm2022/ngwr-gauge-testing.mjs +16 -2
  82. package/fesm2022/ngwr-gauge-testing.mjs.map +1 -1
  83. package/fesm2022/ngwr-gauge.mjs +3 -3
  84. package/fesm2022/ngwr-glitch-text.mjs +3 -3
  85. package/fesm2022/ngwr-gradient-text.mjs +3 -3
  86. package/fesm2022/ngwr-hotkey.mjs +6 -6
  87. package/fesm2022/ngwr-i18n-ar.mjs +2 -0
  88. package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
  89. package/fesm2022/ngwr-i18n-cs.mjs +2 -0
  90. package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
  91. package/fesm2022/ngwr-i18n-de.mjs +2 -0
  92. package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
  93. package/fesm2022/ngwr-i18n-en.mjs +14 -2
  94. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  95. package/fesm2022/ngwr-i18n-es.mjs +2 -0
  96. package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
  97. package/fesm2022/ngwr-i18n-fr.mjs +2 -0
  98. package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
  99. package/fesm2022/ngwr-i18n-he.mjs +2 -0
  100. package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
  101. package/fesm2022/ngwr-i18n-hi.mjs +2 -0
  102. package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
  103. package/fesm2022/ngwr-i18n-id.mjs +2 -0
  104. package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
  105. package/fesm2022/ngwr-i18n-it.mjs +2 -0
  106. package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
  107. package/fesm2022/ngwr-i18n-ja.mjs +2 -0
  108. package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
  109. package/fesm2022/ngwr-i18n-ko.mjs +2 -0
  110. package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
  111. package/fesm2022/ngwr-i18n-nl.mjs +2 -0
  112. package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
  113. package/fesm2022/ngwr-i18n-pl.mjs +2 -0
  114. package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
  115. package/fesm2022/ngwr-i18n-pt.mjs +2 -0
  116. package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
  117. package/fesm2022/ngwr-i18n-ru.mjs +2 -0
  118. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  119. package/fesm2022/ngwr-i18n-sv.mjs +2 -0
  120. package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
  121. package/fesm2022/ngwr-i18n-tr.mjs +2 -0
  122. package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
  123. package/fesm2022/ngwr-i18n-uk.mjs +2 -0
  124. package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
  125. package/fesm2022/ngwr-i18n-vi.mjs +2 -0
  126. package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
  127. package/fesm2022/ngwr-i18n-zh-TW.mjs +2 -0
  128. package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
  129. package/fesm2022/ngwr-i18n-zh.mjs +2 -0
  130. package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
  131. package/fesm2022/ngwr-i18n.mjs +9 -9
  132. package/fesm2022/ngwr-icon.mjs +6 -6
  133. package/fesm2022/ngwr-image-cropper.mjs +3 -3
  134. package/fesm2022/ngwr-input-number.mjs +15 -6
  135. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  136. package/fesm2022/ngwr-input-otp.mjs +38 -6
  137. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  138. package/fesm2022/ngwr-input.mjs +15 -15
  139. package/fesm2022/ngwr-keyboard.mjs +3 -3
  140. package/fesm2022/ngwr-knob-testing.mjs +11 -3
  141. package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
  142. package/fesm2022/ngwr-knob.mjs +19 -4
  143. package/fesm2022/ngwr-knob.mjs.map +1 -1
  144. package/fesm2022/ngwr-layout.mjs +15 -15
  145. package/fesm2022/ngwr-lightbox.mjs +3 -3
  146. package/fesm2022/ngwr-line-chart-testing.mjs +18 -2
  147. package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -1
  148. package/fesm2022/ngwr-line-chart.mjs +22 -4
  149. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  150. package/fesm2022/ngwr-list.mjs +6 -6
  151. package/fesm2022/ngwr-loading-bar.mjs +6 -6
  152. package/fesm2022/ngwr-markdown.mjs +6 -6
  153. package/fesm2022/ngwr-marquee.mjs +3 -3
  154. package/fesm2022/ngwr-media.mjs +3 -3
  155. package/fesm2022/ngwr-mention.mjs +6 -6
  156. package/fesm2022/ngwr-meta.mjs +6 -6
  157. package/fesm2022/ngwr-meter-group.mjs +3 -3
  158. package/fesm2022/ngwr-overlay.mjs +6 -6
  159. package/fesm2022/ngwr-page-header.mjs +3 -3
  160. package/fesm2022/ngwr-pagination.mjs +33 -6
  161. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  162. package/fesm2022/ngwr-pipes.mjs +21 -21
  163. package/fesm2022/ngwr-platform.mjs +9 -9
  164. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  165. package/fesm2022/ngwr-popover.mjs +29 -11
  166. package/fesm2022/ngwr-popover.mjs.map +1 -1
  167. package/fesm2022/ngwr-progress.mjs +3 -3
  168. package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
  169. package/fesm2022/ngwr-qr.mjs +3 -3
  170. package/fesm2022/ngwr-radio.mjs +6 -6
  171. package/fesm2022/ngwr-rating-testing.mjs +12 -3
  172. package/fesm2022/ngwr-rating-testing.mjs.map +1 -1
  173. package/fesm2022/ngwr-rating.mjs +19 -4
  174. package/fesm2022/ngwr-rating.mjs.map +1 -1
  175. package/fesm2022/ngwr-result.mjs +13 -13
  176. package/fesm2022/ngwr-result.mjs.map +1 -1
  177. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  178. package/fesm2022/ngwr-schema-form.mjs +3 -3
  179. package/fesm2022/ngwr-scroll.mjs +3 -3
  180. package/fesm2022/ngwr-segmented.mjs +3 -3
  181. package/fesm2022/ngwr-select.mjs +9 -9
  182. package/fesm2022/ngwr-shiny-text.mjs +6 -6
  183. package/fesm2022/ngwr-sidebar.mjs +3 -3
  184. package/fesm2022/ngwr-skeleton.mjs +3 -3
  185. package/fesm2022/ngwr-slider.mjs +18 -5
  186. package/fesm2022/ngwr-slider.mjs.map +1 -1
  187. package/fesm2022/ngwr-sparkline.mjs +3 -3
  188. package/fesm2022/ngwr-speed-dial.mjs +3 -3
  189. package/fesm2022/ngwr-spinner.mjs +3 -3
  190. package/fesm2022/ngwr-splash-cursor.mjs +3 -3
  191. package/fesm2022/ngwr-split-text.mjs +3 -3
  192. package/fesm2022/ngwr-splitter.mjs +3 -3
  193. package/fesm2022/ngwr-spotlight-card.mjs +6 -6
  194. package/fesm2022/ngwr-squircle.mjs +28 -9
  195. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  196. package/fesm2022/ngwr-star-border.mjs +3 -3
  197. package/fesm2022/ngwr-statistic.mjs +20 -13
  198. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  199. package/fesm2022/ngwr-stepper.mjs +6 -6
  200. package/fesm2022/ngwr-storage.mjs +3 -3
  201. package/fesm2022/ngwr-switch.mjs +3 -3
  202. package/fesm2022/ngwr-table.mjs +18 -18
  203. package/fesm2022/ngwr-tabs-router.mjs +3 -3
  204. package/fesm2022/ngwr-tabs.mjs +6 -6
  205. package/fesm2022/ngwr-textarea.mjs +3 -3
  206. package/fesm2022/ngwr-theme.mjs +3 -3
  207. package/fesm2022/ngwr-tilt-card.mjs +6 -6
  208. package/fesm2022/ngwr-timeline.mjs +6 -6
  209. package/fesm2022/ngwr-toast.mjs +10 -10
  210. package/fesm2022/ngwr-toast.mjs.map +1 -1
  211. package/fesm2022/ngwr-toolbar.mjs +3 -3
  212. package/fesm2022/ngwr-tour.mjs +6 -6
  213. package/fesm2022/ngwr-transfer.mjs +88 -11
  214. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  215. package/fesm2022/ngwr-tree-testing.mjs +24 -0
  216. package/fesm2022/ngwr-tree-testing.mjs.map +1 -1
  217. package/fesm2022/ngwr-tree.mjs +72 -7
  218. package/fesm2022/ngwr-tree.mjs.map +1 -1
  219. package/fesm2022/ngwr-typewriter.mjs +3 -3
  220. package/fesm2022/ngwr-typography.mjs +3 -3
  221. package/fesm2022/ngwr-version.mjs +1 -1
  222. package/fesm2022/ngwr-version.mjs.map +1 -1
  223. package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
  224. package/fesm2022/ngwr-waves.mjs +3 -3
  225. package/fesm2022/ngwr-window.mjs +12 -12
  226. package/form/styles/_index.scss +63 -0
  227. package/i18n/ar.json +4 -2
  228. package/i18n/cs.json +4 -2
  229. package/i18n/de.json +4 -2
  230. package/i18n/en.json +6 -4
  231. package/i18n/es.json +4 -2
  232. package/i18n/fr.json +4 -2
  233. package/i18n/he.json +4 -2
  234. package/i18n/hi.json +4 -2
  235. package/i18n/id.json +4 -2
  236. package/i18n/it.json +4 -2
  237. package/i18n/ja.json +4 -2
  238. package/i18n/ko.json +4 -2
  239. package/i18n/nl.json +4 -2
  240. package/i18n/pl.json +4 -2
  241. package/i18n/pt.json +4 -2
  242. package/i18n/ru.json +4 -2
  243. package/i18n/sv.json +4 -2
  244. package/i18n/tr.json +4 -2
  245. package/i18n/uk.json +4 -2
  246. package/i18n/vi.json +4 -2
  247. package/i18n/zh-TW.json +4 -2
  248. package/i18n/zh.json +4 -2
  249. package/input-otp/styles/_index.scss +5 -1
  250. package/line-chart/styles/_index.scss +5 -3
  251. package/llms-full.txt +1 -1
  252. package/markdown/styles/_index.scss +4 -1
  253. package/mention/styles/_index.scss +22 -1
  254. package/package.json +1 -1
  255. package/radio/styles/_index.scss +3 -0
  256. package/result/styles/_index.scss +12 -0
  257. package/schematics/migrations/v14/index.js +6 -3
  258. package/schematics/migrations.json +1 -1
  259. package/schematics/ng-add/index.js +34 -5
  260. package/segmented/styles/_index.scss +4 -1
  261. package/select/styles/_index.scss +20 -1
  262. package/statistic/styles/_index.scss +4 -0
  263. package/stepper/styles/_index.scss +36 -0
  264. package/switch/styles/_index.scss +3 -0
  265. package/table/styles/_index.scss +12 -0
  266. package/tabs/styles/_index.scss +4 -1
  267. package/textarea/styles/_index.scss +6 -1
  268. package/theme/styles/_colors.scss +11 -0
  269. package/theme/styles/_contrast.scss +136 -0
  270. package/theme/styles/_index.scss +1 -0
  271. package/theme/styles/_mixins.scss +15 -8
  272. package/timeline/styles/_index.scss +28 -1
  273. package/toast/styles/_index.scss +11 -0
  274. package/tree/styles/_index.scss +27 -1
  275. package/types/ngwr-badge.d.ts +1 -1
  276. package/types/ngwr-bar-chart-testing.d.ts +11 -1
  277. package/types/ngwr-button.d.ts +1 -1
  278. package/types/ngwr-calendar-heatmap-testing.d.ts +10 -5
  279. package/types/ngwr-calendar-heatmap.d.ts +22 -0
  280. package/types/ngwr-calendar.d.ts +21 -0
  281. package/types/ngwr-cascader-testing.d.ts +74 -17
  282. package/types/ngwr-cascader.d.ts +28 -0
  283. package/types/ngwr-checkbox-testing.d.ts +12 -1
  284. package/types/ngwr-checkbox.d.ts +10 -0
  285. package/types/ngwr-clipboard.d.ts +1 -1
  286. package/types/ngwr-confetti.d.ts +1 -1
  287. package/types/ngwr-cookie.d.ts +1 -1
  288. package/types/ngwr-date-adapters-fns.d.ts +1 -1
  289. package/types/ngwr-date-adapters-luxon.d.ts +1 -1
  290. package/types/ngwr-date.d.ts +9 -3
  291. package/types/ngwr-density.d.ts +1 -1
  292. package/types/ngwr-dialog.d.ts +1 -1
  293. package/types/ngwr-donut-chart-testing.d.ts +11 -1
  294. package/types/ngwr-drawer.d.ts +1 -1
  295. package/types/ngwr-dropdown.d.ts +16 -0
  296. package/types/ngwr-file-upload.d.ts +11 -0
  297. package/types/ngwr-form.d.ts +25 -0
  298. package/types/ngwr-gauge-testing.d.ts +9 -1
  299. package/types/ngwr-hotkey.d.ts +1 -1
  300. package/types/ngwr-i18n.d.ts +1 -1
  301. package/types/ngwr-input-number.d.ts +12 -2
  302. package/types/ngwr-input-otp.d.ts +12 -0
  303. package/types/ngwr-knob-testing.d.ts +11 -3
  304. package/types/ngwr-knob.d.ts +13 -0
  305. package/types/ngwr-line-chart-testing.d.ts +11 -1
  306. package/types/ngwr-line-chart.d.ts +18 -0
  307. package/types/ngwr-loading-bar.d.ts +1 -1
  308. package/types/ngwr-markdown.d.ts +1 -1
  309. package/types/ngwr-media.d.ts +1 -1
  310. package/types/ngwr-meta.d.ts +1 -1
  311. package/types/ngwr-overlay.d.ts +2 -2
  312. package/types/ngwr-pagination.d.ts +16 -0
  313. package/types/ngwr-platform.d.ts +3 -3
  314. package/types/ngwr-popover.d.ts +16 -0
  315. package/types/ngwr-rating-testing.d.ts +12 -3
  316. package/types/ngwr-rating.d.ts +13 -0
  317. package/types/ngwr-scroll.d.ts +1 -1
  318. package/types/ngwr-squircle.d.ts +22 -3
  319. package/types/ngwr-statistic.d.ts +0 -1
  320. package/types/ngwr-storage.d.ts +1 -1
  321. package/types/ngwr-theme.d.ts +1 -1
  322. package/types/ngwr-toast.d.ts +1 -1
  323. package/types/ngwr-tour.d.ts +1 -1
  324. package/types/ngwr-transfer.d.ts +52 -0
  325. package/types/ngwr-tree-testing.d.ts +20 -0
  326. package/types/ngwr-tree.d.ts +41 -0
  327. package/types/ngwr-version.d.ts +1 -1
  328. package/types/ngwr-window.d.ts +1 -1
  329. package/typography/styles/_index.scss +26 -4
@@ -41,6 +41,20 @@ type WrSquircleCornerMask = 'all' | 'left' | 'right' | 'top' | 'bottom' | 'none'
41
41
  * Apply a Figma-style smooth-corner ("squircle") `clip-path` to the host
42
42
  * element. Re-computes the path whenever the element resizes.
43
43
  *
44
+ * @deprecated Use the native route instead — `@use 'ngwr/theme'` and the
45
+ * `smooth-br` mixin, which 31 entry points already ride by default. This
46
+ * directive exists because `corner-shape` was Chromium-only, and that reason
47
+ * has an expiry date: WebKit has it in Technology Preview. It will be removed
48
+ * in the major after Safari stable ships the property.
49
+ *
50
+ * It is deprecated rather than removed today because it is still the only
51
+ * DETERMINISTIC squircle — the native property reaches roughly two thirds of
52
+ * users and the rest see a rounded corner. If that difference matters to a
53
+ * design, this is still the way to get it, with the costs stated: a hand-ported
54
+ * superellipse, a `ResizeObserver` and a `getBoundingClientRect` per host on
55
+ * every resize, square corners until hydration under SSR, no test harness, and
56
+ * a clip that `box-shadow`, `border-image` and the focus ring do not follow.
57
+ *
44
58
  * Borders: pass `[borderWidth]` (px) + `[borderColor]` and the directive
45
59
  * paints a `::before` pseudo with an *inset* squircle path on top of the
46
60
  * host. The visible border is the host's own background colour, so set
@@ -92,9 +106,11 @@ declare class WrSquircle {
92
106
  * only the two corners on the named side and leave the other two at
93
107
  * 90°. `'none'` is equivalent to disabling the directive.
94
108
  *
95
- * Modelled so parent components composing the directive can flip the
96
- * value imperatively — used by `WrButtonGroup` to squircle only the
97
- * outer corners of the first / last child.
109
+ * A `model()` rather than an `input()` so a parent composing the directive
110
+ * can flip it imperatively. Nothing in the library does today: this line
111
+ * used to name `WrButtonGroup` as the consumer, and that component has
112
+ * carried no squircle reference for several releases — `wr-btn--squircle`
113
+ * is plain CSS now.
98
114
  *
99
115
  * @default 'all'
100
116
  */
@@ -122,6 +138,9 @@ declare class WrSquircle {
122
138
  * ```
123
139
  *
124
140
  * @see https://ngwr.dev/reference/components/squircle
141
+ *
142
+ * @deprecated Follows `[wrSquircle]`, which it wraps — see that directive
143
+ * for why, and for the native route to use instead.
125
144
  */
126
145
  declare class WrSquircleHost {
127
146
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSquircleHost, never>;
@@ -128,7 +128,6 @@ declare class WrStatisticCountdown {
128
128
  readonly tickMs: _angular_core.InputSignalWithTransform<number, unknown>;
129
129
  /** Fires once when the countdown crosses zero. */
130
130
  readonly countdownEnd: _angular_core.OutputEmitterRef<void>;
131
- private readonly destroyRef;
132
131
  private readonly isBrowser;
133
132
  private readonly targetMs;
134
133
  /**
@@ -94,7 +94,7 @@ declare class WrStorage {
94
94
  private rawKeys;
95
95
  private installCrossTabListener;
96
96
  static ɵfac: i0.ɵɵFactoryDeclaration<WrStorage, never>;
97
- static ɵprov: i0.ɵɵInjectableDeclaration<WrStorage>;
97
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
98
98
  }
99
99
 
100
100
  /**
@@ -219,7 +219,7 @@ declare class WrTheme {
219
219
  private readPersisted;
220
220
  private persist;
221
221
  static ɵfac: i0.ɵɵFactoryDeclaration<WrTheme, never>;
222
- static ɵprov: i0.ɵɵInjectableDeclaration<WrTheme>;
222
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
223
223
  }
224
224
 
225
225
  /**
@@ -238,7 +238,7 @@ declare class WrToast {
238
238
  private pushToHost;
239
239
  private disposeHost;
240
240
  static ɵfac: i0.ɵɵFactoryDeclaration<WrToast, never>;
241
- static ɵprov: i0.ɵɵInjectableDeclaration<WrToast>;
241
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
242
242
  }
243
243
 
244
244
  /**
@@ -126,7 +126,7 @@ declare class WrTour {
126
126
  */
127
127
  private isRtl;
128
128
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTour, never>;
129
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<WrTour>;
129
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
130
130
  }
131
131
 
132
132
  /** What the popup needs from the running tour, without importing the service (cycle). */
@@ -114,6 +114,17 @@ declare class WrTransfer implements FormValueControl<readonly unknown[]> {
114
114
  protected readonly resolvedSearch: _angular_core.Signal<string>;
115
115
  protected readonly resolvedEmpty: _angular_core.Signal<string>;
116
116
  protected readonly resolvedSelectAll: _angular_core.Signal<string>;
117
+ /**
118
+ * The select-all checkbox's accessible name, composed IN THE CATALOG.
119
+ *
120
+ * It used to be a template literal — `` `${title} — ${selectAll}` `` — which
121
+ * froze both the separator and the operand order into English. A translator
122
+ * could change each half and not the sentence they make, which is the exact
123
+ * defect the calendar and event-calendar catalogs were rewritten to remove.
124
+ * The key ships as `{{pane}} — {{action}}` in every locale, so nothing reads
125
+ * differently today and every locale can now reorder it without a code change.
126
+ */
127
+ protected readonly selectAllAria: (params?: ngwr_i18n.WrI18nParams) => string;
117
128
  protected readonly resolvedToTarget: _angular_core.Signal<string>;
118
129
  protected readonly resolvedToSource: _angular_core.Signal<string>;
119
130
  /** `{{checked}} / {{total}}` under each heading. @internal */
@@ -129,6 +140,23 @@ declare class WrTransfer implements FormValueControl<readonly unknown[]> {
129
140
  private readonly valueSet;
130
141
  protected readonly source: _angular_core.Signal<PaneState>;
131
142
  protected readonly target: _angular_core.Signal<PaneState>;
143
+ /**
144
+ * Say something when `value` holds a value no `items` entry matches.
145
+ *
146
+ * Such a value is in NEITHER pane — the left one filters out anything already
147
+ * selected and the right one can only render rows it found — and the header
148
+ * counts the rows it shows, so nothing on screen contradicts anything. The
149
+ * result is a value the user can neither see nor remove, and no sign that it
150
+ * is there.
151
+ *
152
+ * A warning rather than an invented row, which matches how the library treats
153
+ * the same question elsewhere: `wr-select` renders a value outside its option
154
+ * list only under an explicit `freeText`, so an unmatched value is a mode a
155
+ * consumer opts into, not a shape a component guesses at. It also stays quiet
156
+ * about the common transient case — `items` arriving after `value` — because
157
+ * the message names the values and a developer can see them settle.
158
+ */
159
+ private warnAboutOrphans;
132
160
  protected readonly canMoveRight: _angular_core.Signal<boolean>;
133
161
  protected readonly canMoveLeft: _angular_core.Signal<boolean>;
134
162
  protected readonly classes: _angular_core.Signal<string>;
@@ -137,6 +165,30 @@ declare class WrTransfer implements FormValueControl<readonly unknown[]> {
137
165
  /** Header checkbox — stages or clears every enabled row the filter shows. */
138
166
  protected toggleAll(pane: 'source' | 'target', checked: boolean): void;
139
167
  protected onSearch(pane: 'source' | 'target', event: Event): void;
168
+ private readonly host;
169
+ private readonly injector;
170
+ /**
171
+ * Keep focus in the widget after a move.
172
+ *
173
+ * A move empties the pane's staging set, which is exactly what disables the
174
+ * button that was just pressed — so the element holding DOM focus went
175
+ * `disabled` as a RESULT of its own activation and the browser dropped focus
176
+ * to `<body>`. From there the next Tab restarts at the top of the document,
177
+ * which for a keyboard user is being thrown out of a control they were in the
178
+ * middle of using.
179
+ *
180
+ * The landing is the FIRST ROW OF THE PANE THE ROWS ARRIVED IN, and the
181
+ * obvious alternative does not work: after a move BOTH buttons are disabled,
182
+ * because each needs something ticked and the move cleared the tick on one
183
+ * side and arrived unticked on the other. The rows that just moved are where
184
+ * the user's attention is and where the next action lives, so that is where
185
+ * focus goes.
186
+ *
187
+ * `afterNextRender`, not `queueMicrotask`: under zoneless CD the microtask
188
+ * runs before the moved rows are in the DOM, so the focus call would land on
189
+ * the pane as it was before the move.
190
+ */
191
+ private restoreFocusAfterMove;
140
192
  protected moveRight(): void;
141
193
  protected moveLeft(): void;
142
194
  /** Filter, then derive the header state from what survived. */
@@ -358,6 +358,26 @@ declare class WrTreeHarness extends ContentContainerComponentHarness {
358
358
  removeChip(label: string): Promise<void>;
359
359
  /** Click the clear (×) control on the trigger. */
360
360
  clear(): Promise<void>;
361
+ /**
362
+ * Backspace on the closed overlay trigger — the keyboard route to the ×.
363
+ *
364
+ * In single mode it clears (only while `clearable` is on); in multi mode it
365
+ * drops the LAST chip, one per call, whatever `clearable` says. Both ×
366
+ * controls are `tabindex="-1"` spans inside the trigger, so a key can never
367
+ * reach them directly. In single mode this is the ONLY keyboard route back to
368
+ * no selection; in multi mode a keyboard user can also toggle a row off in the
369
+ * panel ({@link selectNode} with `additive`). {@link clear} / {@link removeChip}
370
+ * prove the pointer path and nothing more.
371
+ *
372
+ * The key is honoured only on the CLOSED trigger, so an open panel is closed
373
+ * first with Escape — the step a keyboard user takes too, since focus sits in
374
+ * the panel while it is up.
375
+ *
376
+ * Does nothing, rather than throwing, where the component does nothing —
377
+ * nothing selected, disabled or read-only — so a spec asserts the outcome on
378
+ * the value.
379
+ */
380
+ clearByKeyboard(): Promise<void>;
361
381
  /**
362
382
  * The nodes currently rendered, in the order they are shown.
363
383
  *
@@ -291,7 +291,48 @@ declare class WrTree<TId = string> implements FormValueControl<unknown> {
291
291
  protected onKeydown(event: KeyboardEvent): void;
292
292
  protected onTriggerClick(): void;
293
293
  /** Trigger blur — mark the bound field touched. */
294
+ /**
295
+ * Leaving an INLINE tree marks it touched.
296
+ *
297
+ * `onBlur` below belongs to the overlay trigger, which only renders under
298
+ * `openOn="overlay"` — so an inline tree emitted `touch` on SELECTION and
299
+ * nowhere else. Focusing it and walking away without choosing anything left
300
+ * the control neither touched nor dirty, which is exactly the state a
301
+ * `<wr-form-field>` waits for before it will show a message: a `required`
302
+ * tree the user considered and skipped stayed silent, and the form looked
303
+ * fine while being invalid.
304
+ *
305
+ * `relatedTarget` inside the host means focus only moved BETWEEN rows, which
306
+ * is not leaving. A `null` one — clicking the page background, or a browser
307
+ * that withholds it — counts as leaving, which is the safe direction: marking
308
+ * touched too eagerly shows a message the field already had grounds for.
309
+ */
310
+ protected onFocusOut(event: FocusEvent): void;
294
311
  protected onBlur(): void;
312
+ /**
313
+ * Backspace on the CLOSED overlay trigger — the keyboard twin of the two ×
314
+ * controls inside it.
315
+ *
316
+ * Both the clear × and every chip's remove × are `tabindex="-1"` spans inside
317
+ * this `<button>`, and they carried `(keydown.enter)` / `(keydown.space)`
318
+ * bindings that could never fire: a keydown goes to the focused element, and
319
+ * those spans cannot be focused. The spans stay unfocusable, since a focusable
320
+ * child of a button is `nested-interactive`.
321
+ *
322
+ * What that cost differs by mode, and the difference is worth keeping straight.
323
+ * In SINGLE mode it was a real WCAG 2.1.1 failure: Enter on the selected row
324
+ * re-selects it, so the × was the only way back to nothing. In MULTI mode it
325
+ * was not — Ctrl/Cmd+Enter on a row in the panel toggles it off, which is the
326
+ * route {@link WrTreeHarness.selectNode} drives with `additive`. The multi
327
+ * branch below is parity with `wr-select` and a shorter path, not a repair.
328
+ *
329
+ * The same key and the same split `wr-select` uses, so the two read alike:
330
+ * in MULTI mode Backspace drops the last chip — chip removal is its own
331
+ * control, not gated on `clearable()` — and in SINGLE mode it clears, gated on
332
+ * `clearable()`, because that input IS the clear control. Only while closed:
333
+ * an open panel owns the keyboard.
334
+ */
335
+ protected onTriggerKey(event: KeyboardEvent): void;
295
336
  protected removeChip(id: TId, event: Event): void;
296
337
  protected clearSelection(event: Event): void;
297
338
  private toggleExpanded;
@@ -16,7 +16,7 @@ import { InjectionToken } from '@angular/core';
16
16
  * Distinct from `Version` exported by `@angular/core`, which reports the
17
17
  * loaded Angular runtime version (e.g. `'22.0.0'`), not ngwr's.
18
18
  */
19
- declare const NGWR_VERSION = "14.3.1";
19
+ declare const NGWR_VERSION = "14.4.0";
20
20
 
21
21
  /**
22
22
  * @license
@@ -467,7 +467,7 @@ declare class WrWindowManager {
467
467
  /** Drop a saved workspace. */
468
468
  clearLayout(name: string): void;
469
469
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrWindowManager, never>;
470
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<WrWindowManager>;
470
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
471
471
  }
472
472
 
473
473
  /**
@@ -149,17 +149,39 @@
149
149
  }
150
150
  }
151
151
 
152
- // Links — flowbite default: medium weight, brand color, underline on
153
- // hover. Add your own `underline` class for the always-underlined look.
152
+ // Links are underlined ALWAYS, and the underline is the whole point rather
153
+ // than a style preference.
154
+ //
155
+ // WCAG technique G183 lets a link be marked by colour alone only when it
156
+ // clears 3:1 against the prose around it. `--wr-color-primary-ink` on
157
+ // `--wr-color-on-surface` measures 2.72:1 in LIGHT, so it never did — the
158
+ // underline was the missing half, and putting it on `:hover` gave it to a
159
+ // mouse and to nobody else. `ngwr/markdown` had this right all along, which
160
+ // made the library disagree with itself about its own links.
161
+ //
162
+ // The dark figure is deliberately not quoted here: `-ink` is a `color-mix`
163
+ // there, so it cannot be read off the source, and a hand-composited guess is
164
+ // the mistake `_colors.scss` already warns about. `check:contrast` measures
165
+ // it in a browser; the underline does not depend on the answer either way.
166
+ //
167
+ // Hover thickens rather than adds, so the interaction still answers. And the
168
+ // focus ring is here because it was nowhere: this variant is the one piece of
169
+ // typography that is reliably INTERACTIVE, and it had no `:focus-visible`
170
+ // rule at all, so a keyboard reached it and nothing on screen said so.
154
171
  &--link {
155
172
  font-weight: var(--wr-font-weight-medium);
156
173
  color: var(--wr-color-primary-ink);
157
- text-decoration: none;
174
+ text-decoration: underline;
175
+ text-decoration-thickness: 1px;
158
176
  text-underline-offset: 2px;
159
177
  cursor: pointer;
160
178
 
161
179
  &:hover {
162
- text-decoration: underline;
180
+ text-decoration-thickness: 2px;
181
+ }
182
+
183
+ &:focus-visible {
184
+ @include theme.focus-ring;
163
185
  }
164
186
  }
165
187