ngwr 8.0.0 → 9.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 (431) hide show
  1. package/README.md +75 -28
  2. package/action-sheet/styles/_index.scss +93 -0
  3. package/alert/styles/_index.scss +10 -10
  4. package/anchor/styles/_index.scss +3 -3
  5. package/back-top/styles/_index.scss +1 -1
  6. package/badge/styles/_tag.scss +3 -3
  7. package/bar-chart/styles/_index.scss +4 -4
  8. package/border-glow/styles/_index.scss +3 -3
  9. package/breadcrumbs/styles/_index.scss +3 -3
  10. package/burger/styles/_index.scss +1 -1
  11. package/button/styles/_index.scss +4 -4
  12. package/calendar/styles/_index.scss +4 -4
  13. package/calendar-heatmap/styles/_index.scss +3 -3
  14. package/card/styles/_index.scss +5 -5
  15. package/carousel/styles/_index.scss +5 -5
  16. package/cascader/styles/_index.scss +15 -15
  17. package/checkbox/styles/_index.scss +20 -5
  18. package/collapse/styles/_index.scss +6 -6
  19. package/color-picker/styles/_index.scss +15 -9
  20. package/command-palette/styles/_index.scss +19 -16
  21. package/compare/styles/_index.scss +3 -3
  22. package/context-menu/styles/_index.scss +16 -6
  23. package/counter/styles/_index.scss +12 -1
  24. package/date-picker/styles/_index.scss +8 -8
  25. package/descriptions/styles/_index.scss +9 -9
  26. package/dialog/styles/_index.scss +7 -6
  27. package/divider/styles/_index.scss +2 -2
  28. package/donut-chart/styles/_index.scss +3 -3
  29. package/drag-drop/styles/_index.scss +11 -6
  30. package/drawer/styles/_index.scss +15 -6
  31. package/dropdown/styles/_index.scss +5 -5
  32. package/empty/styles/_index.scss +4 -4
  33. package/fesm2022/ngwr-action-sheet.mjs +81 -0
  34. package/fesm2022/ngwr-action-sheet.mjs.map +1 -0
  35. package/fesm2022/ngwr-affix.mjs +3 -3
  36. package/fesm2022/ngwr-alert.mjs +4 -4
  37. package/fesm2022/ngwr-alert.mjs.map +1 -1
  38. package/fesm2022/ngwr-anchor.mjs +4 -4
  39. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  40. package/fesm2022/ngwr-aurora.mjs +5 -4
  41. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  42. package/fesm2022/ngwr-avatar.mjs +4 -4
  43. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  44. package/fesm2022/ngwr-back-top.mjs +4 -4
  45. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  46. package/fesm2022/ngwr-badge.mjs +8 -8
  47. package/fesm2022/ngwr-badge.mjs.map +1 -1
  48. package/fesm2022/ngwr-bar-chart.mjs +4 -4
  49. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  50. package/fesm2022/ngwr-blur-text.mjs +3 -3
  51. package/fesm2022/ngwr-border-glow.mjs +4 -4
  52. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  53. package/fesm2022/ngwr-breadcrumbs.mjs +8 -8
  54. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  55. package/fesm2022/ngwr-burger.mjs +4 -4
  56. package/fesm2022/ngwr-burger.mjs.map +1 -1
  57. package/fesm2022/ngwr-button.mjs +8 -8
  58. package/fesm2022/ngwr-button.mjs.map +1 -1
  59. package/fesm2022/ngwr-calendar-heatmap.mjs +4 -4
  60. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  61. package/fesm2022/ngwr-calendar.mjs +4 -4
  62. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  63. package/fesm2022/ngwr-card.mjs +11 -11
  64. package/fesm2022/ngwr-card.mjs.map +1 -1
  65. package/fesm2022/ngwr-carousel.mjs +7 -7
  66. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  67. package/fesm2022/ngwr-cascader.mjs +52 -60
  68. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  69. package/fesm2022/ngwr-checkbox.mjs +74 -106
  70. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  71. package/fesm2022/ngwr-circular-text.mjs +5 -4
  72. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  73. package/fesm2022/ngwr-click-spark.mjs +5 -4
  74. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  75. package/fesm2022/ngwr-clipboard.mjs +4 -4
  76. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  77. package/fesm2022/ngwr-collapse.mjs +12 -12
  78. package/fesm2022/ngwr-collapse.mjs.map +1 -1
  79. package/fesm2022/ngwr-color-picker.mjs +58 -66
  80. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  81. package/fesm2022/ngwr-command-palette.mjs +4 -4
  82. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  83. package/fesm2022/ngwr-compare.mjs +4 -4
  84. package/fesm2022/ngwr-compare.mjs.map +1 -1
  85. package/fesm2022/ngwr-confetti.mjs +3 -3
  86. package/fesm2022/ngwr-context-menu.mjs +86 -15
  87. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  88. package/fesm2022/ngwr-cookie.mjs +19 -6
  89. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  90. package/fesm2022/ngwr-counter.mjs +26 -12
  91. package/fesm2022/ngwr-counter.mjs.map +1 -1
  92. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  93. package/fesm2022/ngwr-date-adapter-luxon.mjs +3 -3
  94. package/fesm2022/ngwr-date-adapter.mjs +10 -5
  95. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-picker.mjs +128 -123
  97. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  98. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  99. package/fesm2022/ngwr-density.mjs +7 -7
  100. package/fesm2022/ngwr-density.mjs.map +1 -1
  101. package/fesm2022/ngwr-descriptions.mjs +7 -7
  102. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  103. package/fesm2022/ngwr-dialog.mjs +16 -16
  104. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  105. package/fesm2022/ngwr-directives.mjs +21 -15
  106. package/fesm2022/ngwr-directives.mjs.map +1 -1
  107. package/fesm2022/ngwr-divider.mjs +4 -4
  108. package/fesm2022/ngwr-divider.mjs.map +1 -1
  109. package/fesm2022/ngwr-donut-chart.mjs +4 -4
  110. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  111. package/fesm2022/ngwr-drag-drop.mjs +10 -9
  112. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  113. package/fesm2022/ngwr-drawer.mjs +19 -18
  114. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  115. package/fesm2022/ngwr-dropdown.mjs +13 -12
  116. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  117. package/fesm2022/ngwr-empty.mjs +4 -4
  118. package/fesm2022/ngwr-empty.mjs.map +1 -1
  119. package/fesm2022/ngwr-falling-text.mjs +5 -4
  120. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  121. package/fesm2022/ngwr-file-upload.mjs +58 -60
  122. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  123. package/fesm2022/ngwr-form.mjs +11 -11
  124. package/fesm2022/ngwr-form.mjs.map +1 -1
  125. package/fesm2022/ngwr-fuzzy-text.mjs +5 -4
  126. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  127. package/fesm2022/ngwr-gauge.mjs +4 -4
  128. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  129. package/fesm2022/ngwr-glitch-text.mjs +4 -4
  130. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  131. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  132. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  133. package/fesm2022/ngwr-hotkey.mjs +7 -7
  134. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  135. package/fesm2022/ngwr-i18n.mjs +10 -10
  136. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  137. package/fesm2022/ngwr-icon-adapters-lucide.mjs +6 -7
  138. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
  139. package/fesm2022/ngwr-icon.mjs +4 -4
  140. package/fesm2022/ngwr-icon.mjs.map +1 -1
  141. package/fesm2022/ngwr-image-cropper.mjs +6 -5
  142. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  143. package/fesm2022/ngwr-input-number.mjs +56 -73
  144. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  145. package/fesm2022/ngwr-input-otp.mjs +46 -52
  146. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  147. package/fesm2022/ngwr-input.mjs +17 -17
  148. package/fesm2022/ngwr-input.mjs.map +1 -1
  149. package/fesm2022/ngwr-keyboard.mjs +4 -4
  150. package/fesm2022/ngwr-keyboard.mjs.map +1 -1
  151. package/fesm2022/ngwr-knob.mjs +47 -58
  152. package/fesm2022/ngwr-knob.mjs.map +1 -1
  153. package/fesm2022/ngwr-layout.mjs +16 -16
  154. package/fesm2022/ngwr-layout.mjs.map +1 -1
  155. package/fesm2022/ngwr-lightbox.mjs +7 -6
  156. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  157. package/fesm2022/ngwr-line-chart.mjs +4 -4
  158. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  159. package/fesm2022/ngwr-list.mjs +8 -8
  160. package/fesm2022/ngwr-list.mjs.map +1 -1
  161. package/fesm2022/ngwr-loading-bar.mjs +7 -7
  162. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  163. package/fesm2022/ngwr-marquee.mjs +6 -5
  164. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  165. package/fesm2022/ngwr-media.mjs +4 -4
  166. package/fesm2022/ngwr-media.mjs.map +1 -1
  167. package/fesm2022/ngwr-mention.mjs +15 -9
  168. package/fesm2022/ngwr-mention.mjs.map +1 -1
  169. package/fesm2022/ngwr-meta.mjs +7 -7
  170. package/fesm2022/ngwr-meta.mjs.map +1 -1
  171. package/fesm2022/ngwr-meter-group.mjs +4 -4
  172. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  173. package/fesm2022/ngwr-overlay.mjs +9 -4
  174. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  175. package/fesm2022/ngwr-page-header.mjs +4 -4
  176. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  177. package/fesm2022/ngwr-pagination.mjs +4 -4
  178. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  179. package/fesm2022/ngwr-pipes.mjs +21 -21
  180. package/fesm2022/ngwr-platform.mjs +169 -5
  181. package/fesm2022/ngwr-platform.mjs.map +1 -1
  182. package/fesm2022/ngwr-popconfirm.mjs +7 -7
  183. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  184. package/fesm2022/ngwr-popover.mjs +7 -7
  185. package/fesm2022/ngwr-popover.mjs.map +1 -1
  186. package/fesm2022/ngwr-progress.mjs +4 -4
  187. package/fesm2022/ngwr-progress.mjs.map +1 -1
  188. package/fesm2022/ngwr-pull-to-refresh.mjs +172 -0
  189. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -0
  190. package/fesm2022/ngwr-qr.mjs +5 -5
  191. package/fesm2022/ngwr-qr.mjs.map +1 -1
  192. package/fesm2022/ngwr-radio.mjs +27 -52
  193. package/fesm2022/ngwr-radio.mjs.map +1 -1
  194. package/fesm2022/ngwr-rating.mjs +35 -48
  195. package/fesm2022/ngwr-rating.mjs.map +1 -1
  196. package/fesm2022/ngwr-result.mjs +13 -13
  197. package/fesm2022/ngwr-result.mjs.map +1 -1
  198. package/fesm2022/ngwr-rotating-text.mjs +15 -4
  199. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  200. package/fesm2022/ngwr-scroll.mjs +4 -4
  201. package/fesm2022/ngwr-scroll.mjs.map +1 -1
  202. package/fesm2022/ngwr-segmented.mjs +3 -3
  203. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  204. package/fesm2022/ngwr-select.mjs +289 -85
  205. package/fesm2022/ngwr-select.mjs.map +1 -1
  206. package/fesm2022/ngwr-shiny-text.mjs +7 -7
  207. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  208. package/fesm2022/ngwr-sidebar.mjs +4 -4
  209. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  210. package/fesm2022/ngwr-skeleton.mjs +4 -4
  211. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  212. package/fesm2022/ngwr-slider.mjs +79 -73
  213. package/fesm2022/ngwr-slider.mjs.map +1 -1
  214. package/fesm2022/ngwr-sparkline.mjs +4 -4
  215. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  216. package/fesm2022/ngwr-speed-dial.mjs +13 -5
  217. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  218. package/fesm2022/ngwr-spinner.mjs +4 -4
  219. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  220. package/fesm2022/ngwr-splash-cursor.mjs +4 -4
  221. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  222. package/fesm2022/ngwr-split-text.mjs +3 -3
  223. package/fesm2022/ngwr-splitter.mjs +4 -4
  224. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  225. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  226. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  227. package/fesm2022/ngwr-squircle.mjs +7 -7
  228. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  229. package/fesm2022/ngwr-star-border.mjs +4 -4
  230. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  231. package/fesm2022/ngwr-statistic.mjs +65 -10
  232. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  233. package/fesm2022/ngwr-stepper.mjs +8 -8
  234. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  235. package/fesm2022/ngwr-storage.mjs +4 -4
  236. package/fesm2022/ngwr-storage.mjs.map +1 -1
  237. package/fesm2022/ngwr-switch.mjs +16 -48
  238. package/fesm2022/ngwr-switch.mjs.map +1 -1
  239. package/fesm2022/ngwr-table.mjs +824 -20
  240. package/fesm2022/ngwr-table.mjs.map +1 -1
  241. package/fesm2022/ngwr-tabs.mjs +9 -8
  242. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  243. package/fesm2022/ngwr-textarea.mjs +18 -50
  244. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  245. package/fesm2022/ngwr-theme.mjs +20 -5
  246. package/fesm2022/ngwr-theme.mjs.map +1 -1
  247. package/fesm2022/ngwr-tilt-card.mjs +27 -11
  248. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  249. package/fesm2022/ngwr-timeline.mjs +7 -7
  250. package/fesm2022/ngwr-timeline.mjs.map +1 -1
  251. package/fesm2022/ngwr-toast.mjs +10 -10
  252. package/fesm2022/ngwr-toast.mjs.map +1 -1
  253. package/fesm2022/ngwr-toolbar.mjs +4 -4
  254. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  255. package/fesm2022/ngwr-tree.mjs +280 -84
  256. package/fesm2022/ngwr-tree.mjs.map +1 -1
  257. package/fesm2022/ngwr-typewriter.mjs +10 -5
  258. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  259. package/fesm2022/ngwr-typography.mjs +4 -4
  260. package/fesm2022/ngwr-typography.mjs.map +1 -1
  261. package/fesm2022/ngwr-validators.mjs +1 -1
  262. package/fesm2022/ngwr-validators.mjs.map +1 -1
  263. package/fesm2022/ngwr-version.mjs +1 -1
  264. package/fesm2022/ngwr-version.mjs.map +1 -1
  265. package/fesm2022/ngwr-virtual-scroll.mjs +9 -7
  266. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  267. package/fesm2022/ngwr-waves.mjs +6 -5
  268. package/fesm2022/ngwr-waves.mjs.map +1 -1
  269. package/fesm2022/ngwr-window.mjs +16 -15
  270. package/fesm2022/ngwr-window.mjs.map +1 -1
  271. package/file-upload/styles/_index.scss +11 -11
  272. package/form/styles/_index.scss +4 -4
  273. package/gauge/styles/_index.scss +2 -2
  274. package/glitch-text/styles/_index.scss +1 -1
  275. package/gradient-text/styles/_index.scss +1 -1
  276. package/image-cropper/styles/_index.scss +5 -4
  277. package/input/styles/_index.scss +9 -9
  278. package/input-number/styles/_index.scss +1 -1
  279. package/input-otp/styles/_index.scss +5 -5
  280. package/keyboard/styles/_index.scss +5 -5
  281. package/knob/styles/_index.scss +6 -2
  282. package/layout/styles/_index.scss +12 -12
  283. package/lightbox/styles/_index.scss +10 -8
  284. package/line-chart/styles/_index.scss +5 -5
  285. package/list/styles/_index.scss +3 -3
  286. package/llms-full.txt +31 -5
  287. package/llms.txt +48 -32
  288. package/marquee/styles/_index.scss +1 -1
  289. package/mention/styles/_index.scss +4 -4
  290. package/meter-group/styles/_index.scss +4 -4
  291. package/overlay/styles/_index.scss +8 -0
  292. package/package.json +21 -9
  293. package/page-header/styles/_index.scss +4 -4
  294. package/pagination/styles/_index.scss +3 -3
  295. package/popconfirm/styles/_index.scss +3 -3
  296. package/popover/styles/_index.scss +5 -5
  297. package/progress/styles/_index.scss +1 -1
  298. package/pull-to-refresh/styles/_index.scss +38 -0
  299. package/radio/styles/_index.scss +4 -4
  300. package/rating/styles/_index.scss +1 -1
  301. package/result/styles/_index.scss +3 -3
  302. package/schematics/migrations/v9/index.js +71 -0
  303. package/schematics/migrations.json +5 -0
  304. package/schematics/ng-add/schema.json +1 -1
  305. package/schematics/use/symbol-map.json +13 -0
  306. package/segmented/styles/_index.scss +4 -4
  307. package/select/styles/_index.scss +53 -18
  308. package/shiny-text/styles/_index.scss +4 -4
  309. package/sidebar/styles/_index.scss +12 -12
  310. package/slider/styles/_index.scss +5 -5
  311. package/speed-dial/styles/_index.scss +22 -6
  312. package/splash-cursor/styles/_index.scss +1 -0
  313. package/splitter/styles/_index.scss +7 -4
  314. package/spotlight-card/styles/_index.scss +7 -7
  315. package/star-border/styles/_index.scss +3 -3
  316. package/statistic/styles/_index.scss +51 -4
  317. package/stepper/styles/_index.scss +6 -6
  318. package/styles/_typography.scss +4 -1
  319. package/styles.scss +2 -0
  320. package/switch/styles/_index.scss +4 -4
  321. package/table/styles/_index.scss +447 -17
  322. package/tabs/styles/_index.scss +3 -3
  323. package/textarea/styles/_index.scss +7 -7
  324. package/theme/styles/_colors.scss +27 -3
  325. package/tilt-card/styles/_index.scss +4 -4
  326. package/timeline/styles/_index.scss +7 -6
  327. package/toast/styles/_index.scss +11 -11
  328. package/toolbar/styles/_index.scss +4 -4
  329. package/tree/styles/_index.scss +45 -15
  330. package/types/ngwr-action-sheet.d.ts +75 -0
  331. package/types/ngwr-alert.d.ts +1 -1
  332. package/types/ngwr-anchor.d.ts +1 -1
  333. package/types/ngwr-avatar.d.ts +1 -1
  334. package/types/ngwr-back-top.d.ts +1 -1
  335. package/types/ngwr-badge.d.ts +4 -4
  336. package/types/ngwr-bar-chart.d.ts +1 -1
  337. package/types/ngwr-breadcrumbs.d.ts +1 -1
  338. package/types/ngwr-burger.d.ts +1 -1
  339. package/types/ngwr-button.d.ts +3 -3
  340. package/types/ngwr-calendar-heatmap.d.ts +1 -1
  341. package/types/ngwr-calendar.d.ts +1 -1
  342. package/types/ngwr-card.d.ts +1 -1
  343. package/types/ngwr-carousel.d.ts +1 -1
  344. package/types/ngwr-cascader.d.ts +27 -16
  345. package/types/ngwr-checkbox.d.ts +63 -43
  346. package/types/ngwr-clipboard.d.ts +1 -1
  347. package/types/ngwr-collapse.d.ts +3 -3
  348. package/types/ngwr-color-picker.d.ts +24 -19
  349. package/types/ngwr-command-palette.d.ts +1 -1
  350. package/types/ngwr-compare.d.ts +1 -1
  351. package/types/ngwr-context-menu.d.ts +25 -1
  352. package/types/ngwr-cookie.d.ts +7 -1
  353. package/types/ngwr-counter.d.ts +9 -2
  354. package/types/ngwr-date-picker.d.ts +36 -23
  355. package/types/ngwr-density.d.ts +1 -1
  356. package/types/ngwr-descriptions.d.ts +1 -1
  357. package/types/ngwr-dialog.d.ts +1 -1
  358. package/types/ngwr-directives.d.ts +1 -0
  359. package/types/ngwr-divider.d.ts +2 -2
  360. package/types/ngwr-donut-chart.d.ts +1 -1
  361. package/types/ngwr-drag-drop.d.ts +1 -1
  362. package/types/ngwr-drawer.d.ts +1 -1
  363. package/types/ngwr-dropdown.d.ts +1 -1
  364. package/types/ngwr-empty.d.ts +1 -1
  365. package/types/ngwr-file-upload.d.ts +28 -17
  366. package/types/ngwr-form.d.ts +2 -2
  367. package/types/ngwr-gauge.d.ts +1 -1
  368. package/types/ngwr-hotkey.d.ts +1 -1
  369. package/types/ngwr-i18n.d.ts +1 -1
  370. package/types/ngwr-icon-adapters-lucide.d.ts +5 -3
  371. package/types/ngwr-icon.d.ts +1 -1
  372. package/types/ngwr-image-cropper.d.ts +1 -1
  373. package/types/ngwr-input-number.d.ts +25 -19
  374. package/types/ngwr-input-otp.d.ts +23 -17
  375. package/types/ngwr-input.d.ts +2 -2
  376. package/types/ngwr-keyboard.d.ts +1 -1
  377. package/types/ngwr-knob.d.ts +24 -19
  378. package/types/ngwr-layout.d.ts +1 -1
  379. package/types/ngwr-lightbox.d.ts +1 -1
  380. package/types/ngwr-line-chart.d.ts +1 -1
  381. package/types/ngwr-list.d.ts +1 -1
  382. package/types/ngwr-loading-bar.d.ts +1 -1
  383. package/types/ngwr-marquee.d.ts +1 -1
  384. package/types/ngwr-media.d.ts +1 -1
  385. package/types/ngwr-mention.d.ts +1 -1
  386. package/types/ngwr-meta.d.ts +1 -1
  387. package/types/ngwr-meter-group.d.ts +1 -1
  388. package/types/ngwr-page-header.d.ts +1 -1
  389. package/types/ngwr-pagination.d.ts +1 -1
  390. package/types/ngwr-platform.d.ts +93 -2
  391. package/types/ngwr-popconfirm.d.ts +3 -3
  392. package/types/ngwr-progress.d.ts +2 -2
  393. package/types/ngwr-pull-to-refresh.d.ts +69 -0
  394. package/types/ngwr-qr.d.ts +1 -1
  395. package/types/ngwr-radio.d.ts +25 -22
  396. package/types/ngwr-rating.d.ts +28 -20
  397. package/types/ngwr-result.d.ts +1 -1
  398. package/types/ngwr-rotating-text.d.ts +1 -0
  399. package/types/ngwr-scroll.d.ts +1 -1
  400. package/types/ngwr-segmented.d.ts +1 -1
  401. package/types/ngwr-select.d.ts +93 -26
  402. package/types/ngwr-sidebar.d.ts +1 -1
  403. package/types/ngwr-skeleton.d.ts +2 -2
  404. package/types/ngwr-slider.d.ts +35 -21
  405. package/types/ngwr-sparkline.d.ts +1 -1
  406. package/types/ngwr-speed-dial.d.ts +8 -2
  407. package/types/ngwr-spinner.d.ts +1 -1
  408. package/types/ngwr-splitter.d.ts +1 -1
  409. package/types/ngwr-squircle.d.ts +1 -1
  410. package/types/ngwr-statistic.d.ts +40 -5
  411. package/types/ngwr-stepper.d.ts +2 -2
  412. package/types/ngwr-storage.d.ts +1 -1
  413. package/types/ngwr-switch.d.ts +20 -16
  414. package/types/ngwr-table.d.ts +417 -6
  415. package/types/ngwr-tabs.d.ts +1 -1
  416. package/types/ngwr-textarea.d.ts +21 -18
  417. package/types/ngwr-theme.d.ts +7 -2
  418. package/types/ngwr-tilt-card.d.ts +3 -0
  419. package/types/ngwr-timeline.d.ts +1 -1
  420. package/types/ngwr-toast.d.ts +1 -1
  421. package/types/ngwr-toolbar.d.ts +1 -1
  422. package/types/ngwr-tree.d.ts +100 -19
  423. package/types/ngwr-typography.d.ts +1 -1
  424. package/types/ngwr-validators.d.ts +1 -1
  425. package/types/ngwr-version.d.ts +1 -1
  426. package/types/ngwr-virtual-scroll.d.ts +1 -1
  427. package/types/ngwr-window.d.ts +1 -1
  428. package/typography/styles/_index.scss +11 -11
  429. package/virtual-scroll/styles/_index.scss +1 -1
  430. package/waves/styles/_index.scss +1 -1
  431. package/window/styles/_index.scss +18 -18
@@ -2,7 +2,7 @@ import * as ngwr_i18n from 'ngwr/i18n';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { InjectionToken, Signal, TemplateRef, ElementRef } from '@angular/core';
4
4
  import { BooleanInput } from '@angular/cdk/coercion';
5
- import { ControlValueAccessor } from '@angular/forms';
5
+ import { FormValueControl } from '@angular/forms/signals';
6
6
  import { Observable } from 'rxjs';
7
7
 
8
8
  /**
@@ -120,20 +120,22 @@ interface SelectedChip {
120
120
  * - `'tag'` — free-text + chips with `[separators]` / `[validate]` /
121
121
  * `[allowDuplicates]`. Replaces `<wr-chips-input>`.
122
122
  *
123
- * Implements `ControlValueAccessor` — usable with `[(ngModel)]`,
124
- * `formControl`, or `formControlName`.
123
+ * A signal-forms native control: it implements `FormValueControl<unknown>`, so
124
+ * `[formField]` binds straight to its `value` model — no
125
+ * `ControlValueAccessor` in between. `[(value)]` works standalone, and classic
126
+ * `[(ngModel)]` / reactive forms keep working through Angular's bridge.
125
127
  *
126
128
  * @example
127
129
  * ```html
128
- * <!-- Single -->
129
- * <wr-select placeholder="Pick a size" [(ngModel)]="size">
130
+ * <!-- Single (signal forms) -->
131
+ * <wr-select placeholder="Pick a size" [formField]="form.size">
130
132
  * <wr-option value="sm">Small</wr-option>
131
133
  * <wr-option value="md">Medium</wr-option>
132
134
  * <wr-option value="lg">Large</wr-option>
133
135
  * </wr-select>
134
136
  *
135
- * <!-- Multi -->
136
- * <wr-select mode="multi" placeholder="Pick tags" [(ngModel)]="tags">
137
+ * <!-- Multi (standalone two-way binding) -->
138
+ * <wr-select mode="multi" placeholder="Pick tags" [(value)]="tags">
137
139
  * <wr-option value="ts">TypeScript</wr-option>
138
140
  * <wr-option value="ng">Angular</wr-option>
139
141
  * </wr-select>
@@ -142,9 +144,9 @@ interface SelectedChip {
142
144
  * The legacy `[multi]="true"` boolean is still accepted but is now an
143
145
  * alias for `[mode]="'multi'"` — prefer the explicit mode.
144
146
  *
145
- * @see https://ngwr.dev/components/select
147
+ * @see https://ngwr.dev/reference/components/select
146
148
  */
147
- declare class WrSelect implements ControlValueAccessor, WrSelectContext {
149
+ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
148
150
  /** Placeholder shown when no option is selected. Falls back to `select.placeholder`. */
149
151
  readonly placeholder: _angular_core.InputSignal<string | null>;
150
152
  /** Clear-selection (×) button aria-label. Falls back to `select.clearSelection`. */
@@ -153,7 +155,12 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
153
155
  protected readonly resolvedClear: _angular_core.Signal<string>;
154
156
  /** Per-chip ARIA label — interpolates `{{label}}`. @internal */
155
157
  protected readonly chipRemoveLabel: (params?: ngwr_i18n.WrI18nParams) => string;
156
- /** Disable the select. Also set by Angular forms via `setDisabledState`. */
158
+ /**
159
+ * Disable the select. Bound automatically from the field's disabled state
160
+ * when used with `[formField]`.
161
+ *
162
+ * @default false
163
+ */
157
164
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
158
165
  /** Pill-shaped corners on the trigger. @default false */
159
166
  readonly rounded: _angular_core.InputSignalWithTransform<boolean, any>;
@@ -218,6 +225,28 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
218
225
  * unmatched query commits the raw text as the form value. @default false
219
226
  */
220
227
  readonly freeText: _angular_core.InputSignalWithTransform<boolean, any>;
228
+ /**
229
+ * Search mode: window the option panel so thousands of `[options]` keep only
230
+ * ~one viewport of rows in the DOM. Opt-in and OFF by default. Engages ONLY on
231
+ * the pure data-array search tier — it silently falls back to the full render
232
+ * when static `<wr-option>` children are projected or the filtered list is
233
+ * empty. While on, rows are plain `role="option"` elements (no `<wr-option>`),
234
+ * navigated via `aria-activedescendant`, selected by value. @default false
235
+ */
236
+ readonly virtualScroll: _angular_core.InputSignalWithTransform<boolean, any>;
237
+ /**
238
+ * Search mode: uniform option-row height in px for the virtual window. `0`
239
+ * (default) measures the first rendered row once and reuses it, so it adapts
240
+ * to the control size. Read only when `virtualScroll` engages. @default 0
241
+ */
242
+ readonly rowHeight: _angular_core.InputSignalWithTransform<number, unknown>;
243
+ /**
244
+ * Search mode: height of the virtual scroll viewport — a number (px) or any
245
+ * CSS length. @default 256
246
+ */
247
+ readonly viewportHeight: _angular_core.InputSignal<string | number>;
248
+ /** Search mode: extra rows kept above/below the virtual viewport. @default 6 */
249
+ readonly overscan: _angular_core.InputSignalWithTransform<number, unknown>;
221
250
  /** Search mode: text shown when the filter / loader returns nothing. Falls back to `select.noResults`. */
222
251
  readonly noResultsText: _angular_core.InputSignal<string | null>;
223
252
  /** Search mode: text shown while the async loader is in flight. Falls back to `select.loading`. */
@@ -259,18 +288,19 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
259
288
  */
260
289
  readonly maxTagCount: _angular_core.InputSignalWithTransform<number, unknown>;
261
290
  /**
262
- * Unified value signal. Single mode holds `T | null`; multi mode
263
- * holds `readonly T[]`. Internal — consumers go through `[(ngModel)]`
264
- * or `[formControl]` via CVA.
265
- * @internal
291
+ * Unified value. Single mode holds a scalar (or `null`); multi / tag
292
+ * mode holds `readonly unknown[]`. Bound by `[formField]`, or two-way
293
+ * via `[(value)]`.
266
294
  */
267
- readonly value: _angular_core.WritableSignal<unknown>;
295
+ readonly value: _angular_core.ModelSignal<unknown>;
296
+ /** Emitted on blur / commit so a bound field can mark itself touched. */
297
+ readonly touch: _angular_core.OutputEmitterRef<void>;
268
298
  /** Listbox id used by the trigger's `aria-controls`. */
269
299
  protected readonly listboxId: string;
270
300
  /** Registered options (insertion order). Internal — distinct from the public `[options]` input. */
271
301
  private readonly registry;
272
302
  /** Keyboard cursor index into `options`. -1 = none. */
273
- private readonly activeIndex;
303
+ protected readonly activeIndex: _angular_core.WritableSignal<number>;
274
304
  /** Id of the active option (for `aria-activedescendant`). */
275
305
  readonly activeOptionId: _angular_core.Signal<string | null>;
276
306
  protected readonly open: _angular_core.WritableSignal<boolean>;
@@ -284,8 +314,7 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
284
314
  protected readonly visibleChips: _angular_core.Signal<readonly SelectedChip[]>;
285
315
  protected readonly hiddenChipCount: _angular_core.Signal<number>;
286
316
  protected readonly hasSelection: _angular_core.Signal<boolean>;
287
- private readonly disabledFromCva;
288
- /** Effective disabled state — input wins, CVA second. */
317
+ /** Effective disabled state. Part of {@link WrSelectContext} for child options. */
289
318
  readonly isDisabled: _angular_core.Signal<boolean>;
290
319
  protected readonly classes: _angular_core.Signal<string>;
291
320
  /**
@@ -294,6 +323,49 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
294
323
  * as an internal `<wr-option>` in the panel.
295
324
  */
296
325
  protected readonly dynamicOptions: _angular_core.Signal<readonly unknown[]>;
326
+ private static readonly FALLBACK_ROW_PX;
327
+ private static readonly FALLBACK_VIEWPORT_PX;
328
+ /** Consumer-projected `<wr-option>` children only (NOT the `@for`-rendered ones). */
329
+ private readonly projectedOptions;
330
+ /**
331
+ * `dynamicOptions()` narrowed to the current search query. `dynamicOptions()`
332
+ * is intentionally UNFILTERED (projected `<wr-option>` self-hide via CSS), so
333
+ * the virtual path — which renders plain rows that can't self-hide — filters
334
+ * here. Loader results are already query-scoped upstream.
335
+ */
336
+ protected readonly filteredDynamicOptions: _angular_core.Signal<readonly unknown[]>;
337
+ /**
338
+ * Virtualization engaged: opt-in, search mode, a non-empty filtered array, and
339
+ * NO projected `<wr-option>` children (those keep the full-render registry path
340
+ * so their DOM-derived labels / selection still work).
341
+ */
342
+ protected readonly virtualActive: _angular_core.Signal<boolean>;
343
+ private readonly scrollTop;
344
+ private readonly viewportPx;
345
+ private readonly measuredRowPx;
346
+ /** Effective uniform row height (px). */
347
+ protected readonly effRowH: _angular_core.Signal<number>;
348
+ private readonly fallbackViewportPx;
349
+ /** `viewportHeight` as a CSS length for the inline max-height (bare number → px). */
350
+ protected readonly resolvedViewportHeight: _angular_core.Signal<string>;
351
+ /** Rendered window [start,end) + spacer pads (px). */
352
+ protected readonly virtualWindow: _angular_core.Signal<{
353
+ start: number;
354
+ end: number;
355
+ padTop: number;
356
+ padBottom: number;
357
+ }>;
358
+ /** The windowed slice of options, each carrying its absolute index. */
359
+ protected readonly windowOptions: _angular_core.Signal<readonly {
360
+ item: unknown;
361
+ index: number;
362
+ }[]>;
363
+ /** Stable id for a virtual option row at filtered index `i`. */
364
+ protected virtualRowId(i: number): string;
365
+ /** The virtual scroll container inside the overlay panel, if attached. */
366
+ private get vlistElement();
367
+ /** Scroll filtered index `i` just into view (sets the `scrollTop` signal synchronously). */
368
+ private ensureVisible;
297
369
  /**
298
370
  * Count of registered options that pass the current search filter.
299
371
  * Hides the noResults state when the panel has at least one visible row.
@@ -325,9 +397,8 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
325
397
  private readonly vcr;
326
398
  private readonly scrollStrategies;
327
399
  private readonly destroyRef;
400
+ private readonly platformId;
328
401
  private overlayRef;
329
- private onChange;
330
- protected onTouched: () => void;
331
402
  constructor();
332
403
  isSelected(value: unknown): boolean;
333
404
  selectOption(value: unknown): void;
@@ -344,22 +415,18 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
344
415
  protected onTagBlur(): void;
345
416
  private commitDraft;
346
417
  private tryAddTag;
347
- writeValue(value: unknown): void;
348
- registerOnChange(fn: (value: unknown) => void): void;
349
- registerOnTouched(fn: () => void): void;
350
- setDisabledState(isDisabled: boolean): void;
351
418
  protected onTriggerClick(): void;
352
419
  protected onTriggerKey(event: KeyboardEvent): void;
353
420
  private seedActiveIndex;
354
421
  private moveActive;
355
422
  private firstEnabled;
356
423
  private lastEnabled;
357
- /** Coerce the multi-mode value signal into an array (handles writeValue from non-array). */
424
+ /** Coerce the multi-mode value into an array (tolerates a scalar or null write). */
358
425
  private asArray;
359
426
  private openOverlay;
360
427
  private closeOverlay;
361
428
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSelect, never>;
362
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSelect, "wr-select", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "loader": { "alias": "loader"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "freeText": { "alias": "freeText"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "maxTagCount": { "alias": "maxTagCount"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
429
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSelect, "wr-select", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "loader": { "alias": "loader"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "freeText": { "alias": "freeText"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "overscan": { "alias": "overscan"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "maxTagCount": { "alias": "maxTagCount"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, ["projectedOptions"], ["*"], true, never>;
363
430
  }
364
431
 
365
432
  /**
@@ -51,7 +51,7 @@ declare function isGroup(entry: WrSidebarEntry): entry is WrSidebarGroup;
51
51
  * ]" />
52
52
  * ```
53
53
  *
54
- * @see https://ngwr.dev/components/sidebar
54
+ * @see https://ngwr.dev/reference/components/sidebar
55
55
  */
56
56
  declare class WrSidebar {
57
57
  readonly entries: _angular_core.InputSignal<readonly WrSidebarEntry[]>;
@@ -13,7 +13,7 @@ import * as _angular_core from '@angular/core';
13
13
  * <wr-skeleton color="primary" [animated]="false" />
14
14
  * ```
15
15
  *
16
- * @see https://ngwr.dev/components/skeleton
16
+ * @see https://ngwr.dev/reference/components/skeleton
17
17
  */
18
18
  declare class WrSkeleton {
19
19
  /**
@@ -26,7 +26,7 @@ declare class WrSkeleton {
26
26
  *
27
27
  * @default 'light'
28
28
  */
29
- readonly color: _angular_core.InputSignal<"primary" | "secondary" | "success" | "warning" | "danger" | "light" | "medium" | "dark">;
29
+ readonly color: _angular_core.InputSignal<"primary" | "secondary" | "success" | "warning" | "danger" | "info" | "light" | "medium" | "dark">;
30
30
  /**
31
31
  * Whether the shimmer animation runs.
32
32
  *
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ElementRef } from '@angular/core';
3
- import { ControlValueAccessor } from '@angular/forms';
3
+ import { FormValueControl } from '@angular/forms/signals';
4
4
 
5
5
  /**
6
6
  * @license
@@ -14,7 +14,7 @@ import { ControlValueAccessor } from '@angular/forms';
14
14
  * - `[number, number]` (`[low, high]`) for range sliders (`range="true"`)
15
15
  *
16
16
  * The component reads `range` at runtime and writes back the matching shape
17
- * through `ControlValueAccessor`.
17
+ * through its `value` model.
18
18
  */
19
19
  type WrSliderValue = number | readonly [number, number];
20
20
 
@@ -22,38 +22,57 @@ type WrSliderValue = number | readonly [number, number];
22
22
  /**
23
23
  * Numeric slider with optional dual-thumb range mode.
24
24
  *
25
- * Implements `ControlValueAccessor` — works with `[(ngModel)]`,
26
- * `formControl`, `formControlName`. The value shape depends on `range`:
27
- * `number` (default) or `[number, number]` when `range="true"`.
25
+ * A signal-forms native control: it implements `FormValueControl<WrSliderValue>`,
26
+ * so `[formField]` binds straight to its `value` model — no
27
+ * `ControlValueAccessor` in between. `[(value)]` works standalone. The value
28
+ * shape depends on `range`: `number` (default) or `[number, number]` when
29
+ * `range="true"`.
28
30
  *
29
31
  * Keyboard: ← / → adjust by `step`; ↑ / ↓ same; Shift+arrow by `step × 10`;
30
32
  * Home / End jump to min / max; PageUp / PageDown by `step × 10`.
31
33
  *
32
34
  * @example
33
35
  * ```html
34
- * <wr-slider [(ngModel)]="volume" min="0" max="100" step="5" />
35
- * <wr-slider [(ngModel)]="range" range min="0" max="1000" step="10" />
36
+ * <!-- signal forms -->
37
+ * <wr-slider [formField]="form.volume" min="0" max="100" step="5" />
38
+ *
39
+ * <!-- standalone two-way binding -->
40
+ * <wr-slider [(value)]="range" range min="0" max="1000" step="10" />
36
41
  * ```
37
42
  *
38
- * @see https://ngwr.dev/components/slider
43
+ * @see https://ngwr.dev/reference/components/slider
39
44
  */
40
- declare class WrSlider implements ControlValueAccessor {
45
+ declare class WrSlider implements FormValueControl<WrSliderValue> {
41
46
  /** Lower bound. @default 0 */
42
- readonly min: _angular_core.InputSignalWithTransform<number, unknown>;
47
+ readonly min: _angular_core.InputSignalWithTransform<WrSliderValue | undefined, unknown>;
43
48
  /** Upper bound. @default 100 */
44
- readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
49
+ readonly max: _angular_core.InputSignalWithTransform<WrSliderValue | undefined, unknown>;
50
+ /** Resolved numeric lower bound for internal arithmetic. */
51
+ private readonly minValue;
52
+ /** Resolved numeric upper bound for internal arithmetic. */
53
+ private readonly maxValue;
45
54
  /** Step size for keyboard and drag. @default 1 */
46
55
  readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
47
56
  /** Render two thumbs and emit `[low, high]`. @default false */
48
57
  readonly range: _angular_core.InputSignalWithTransform<boolean, any>;
49
- /** Disable interaction. @default false */
58
+ /**
59
+ * Disable interaction. Bound automatically from the field's disabled state
60
+ * when used with `[formField]`.
61
+ *
62
+ * @default false
63
+ */
50
64
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
51
65
  /** Render the current value below the track. @default true */
52
66
  readonly showLabel: _angular_core.InputSignalWithTransform<boolean, any>;
67
+ /**
68
+ * Current value. Bound by `[formField]`, or two-way via `[(value)]`. Shape
69
+ * follows `range`: a plain `number`, or `[low, high]` in range mode.
70
+ */
71
+ readonly value: _angular_core.ModelSignal<WrSliderValue>;
72
+ /** Emitted on blur so a bound field can mark itself touched. */
73
+ readonly touch: _angular_core.OutputEmitterRef<void>;
53
74
  protected readonly low: _angular_core.WritableSignal<number>;
54
75
  protected readonly high: _angular_core.WritableSignal<number>;
55
- private readonly disabledFromCva;
56
- protected readonly effectiveDisabled: _angular_core.Signal<boolean>;
57
76
  protected readonly track: _angular_core.Signal<ElementRef<HTMLElement>>;
58
77
  protected readonly classes: _angular_core.Signal<string>;
59
78
  protected readonly lowPercent: _angular_core.Signal<number>;
@@ -61,12 +80,7 @@ declare class WrSlider implements ControlValueAccessor {
61
80
  protected readonly fillLeft: _angular_core.Signal<number>;
62
81
  protected readonly fillWidth: _angular_core.Signal<number>;
63
82
  protected readonly label: _angular_core.Signal<string>;
64
- private onChange;
65
- private onTouched;
66
- writeValue(v: WrSliderValue | null): void;
67
- registerOnChange(fn: (v: WrSliderValue) => void): void;
68
- registerOnTouched(fn: () => void): void;
69
- setDisabledState(isDisabled: boolean): void;
83
+ constructor();
70
84
  protected onPointerDown(event: PointerEvent, thumb: 'low' | 'high'): void;
71
85
  protected onTrackPointerDown(event: PointerEvent): void;
72
86
  protected onKey(event: KeyboardEvent, thumb: 'low' | 'high'): void;
@@ -79,7 +93,7 @@ declare class WrSlider implements ControlValueAccessor {
79
93
  private percentOf;
80
94
  private emitChange;
81
95
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSlider, never>;
82
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSlider, "wr-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
96
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSlider, "wr-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
83
97
  }
84
98
 
85
99
  export { WrSlider };
@@ -10,7 +10,7 @@ import * as _angular_core from '@angular/core';
10
10
  * <wr-sparkline [data]="prices" [showArea]="true" color="var(--wr-color-success)" />
11
11
  * ```
12
12
  *
13
- * @see https://ngwr.dev/components/sparkline
13
+ * @see https://ngwr.dev/reference/components/sparkline
14
14
  */
15
15
  declare class WrSparkline {
16
16
  readonly data: _angular_core.InputSignal<readonly number[]>;
@@ -26,7 +26,7 @@ type WrSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
26
26
  * />
27
27
  * ```
28
28
  *
29
- * @see https://ngwr.dev/components/speed-dial
29
+ * @see https://ngwr.dev/reference/components/speed-dial
30
30
  */
31
31
  declare class WrSpeedDial {
32
32
  readonly actions: _angular_core.InputSignal<readonly WrSpeedDialAction[]>;
@@ -38,13 +38,19 @@ declare class WrSpeedDial {
38
38
  readonly icon: _angular_core.InputSignal<string>;
39
39
  /** Disable interaction. @default false */
40
40
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
41
+ /**
42
+ * Pad the host toward the dial `direction` with `env(safe-area-inset-*)`.
43
+ * Only matters when the consumer pins the dial to that edge of the
44
+ * viewport; otherwise it has no effect. @default false
45
+ */
46
+ readonly safeArea: _angular_core.InputSignalWithTransform<boolean, any>;
41
47
  /** Fires when the user picks one of the actions. */
42
48
  readonly pick: _angular_core.OutputEmitterRef<WrSpeedDialAction>;
43
49
  protected readonly classes: _angular_core.Signal<string>;
44
50
  protected onTrigger(): void;
45
51
  protected onPick(action: WrSpeedDialAction): void;
46
52
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSpeedDial, never>;
47
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSpeedDial, "wr-speed-dial", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "pick": "pick"; }, never, never, true, never>;
53
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSpeedDial, "wr-speed-dial", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "safeArea": { "alias": "safeArea"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "pick": "pick"; }, never, never, true, never>;
48
54
  }
49
55
 
50
56
  export { WrSpeedDial };
@@ -23,7 +23,7 @@ type WrSpinnerSize = 'sm' | 'md' | 'lg';
23
23
  * <wr-spinner size="lg" />
24
24
  * ```
25
25
  *
26
- * @see https://ngwr.dev/components/spinner
26
+ * @see https://ngwr.dev/reference/components/spinner
27
27
  */
28
28
  declare class WrSpinner {
29
29
  /**
@@ -18,7 +18,7 @@ import * as _angular_core from '@angular/core';
18
18
  * </wr-splitter>
19
19
  * ```
20
20
  *
21
- * @see https://ngwr.dev/components/splitter
21
+ * @see https://ngwr.dev/reference/components/splitter
22
22
  */
23
23
  declare class WrSplitter {
24
24
  /** Position of the divider as a percentage (0–100). Two-way bindable. @default 50 */
@@ -121,7 +121,7 @@ declare class WrSquircle {
121
121
  * </wr-squircle>
122
122
  * ```
123
123
  *
124
- * @see https://ngwr.dev/components/squircle
124
+ * @see https://ngwr.dev/reference/components/squircle
125
125
  */
126
126
  declare class WrSquircleHost {
127
127
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSquircleHost, never>;
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
 
3
3
  /**
4
4
  * KPI card — label + big number + optional prefix/suffix + delta. Pair
5
- * with a layout grid for dashboards.
5
+ * with `<wr-statistic-group>` for a responsive dashboard grid.
6
6
  *
7
7
  * When `value` is numeric the number counts up (eased) from its previous
8
8
  * value to the new one on every change — see `animate`. String values and
@@ -15,7 +15,7 @@ import * as _angular_core from '@angular/core';
15
15
  * <wr-statistic label="Churn" [value]="1.8" suffix="%" [precision]="1" />
16
16
  * ```
17
17
  *
18
- * @see https://ngwr.dev/components/statistic
18
+ * @see https://ngwr.dev/reference/components/statistic
19
19
  */
20
20
  declare class WrStatistic {
21
21
  private readonly platform;
@@ -58,7 +58,7 @@ declare class WrStatistic {
58
58
  * Optional delta vs previous period — shown as `+x.x%` (or `-x.x%`).
59
59
  * Use `deltaSuffix` to change the trailing unit.
60
60
  */
61
- readonly delta: _angular_core.InputSignalWithTransform<number | null, number | null>;
61
+ readonly delta: _angular_core.InputSignalWithTransform<number | null, unknown>;
62
62
  /** Unit appended to the delta value. @default '%' */
63
63
  readonly deltaSuffix: _angular_core.InputSignal<string>;
64
64
  protected readonly hasDelta: _angular_core.Signal<boolean>;
@@ -84,7 +84,7 @@ declare class WrStatistic {
84
84
  * />
85
85
  * ```
86
86
  *
87
- * @see https://ngwr.dev/components/statistic
87
+ * @see https://ngwr.dev/reference/components/statistic
88
88
  */
89
89
  declare class WrStatisticCountdown {
90
90
  /** Target date / timestamp the countdown is running down to. */
@@ -119,4 +119,39 @@ declare class WrStatisticCountdown {
119
119
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrStatisticCountdown, "wr-statistic-countdown", never, { "target": { "alias": "target"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "endText": { "alias": "endText"; "required": false; "isSignal": true; }; "tickMs": { "alias": "tickMs"; "required": false; "isSignal": true; }; }, { "countdownEnd": "countdownEnd"; }, never, never, true, never>;
120
120
  }
121
121
 
122
- export { WrStatistic, WrStatisticCountdown };
122
+ /**
123
+ * Dashboard grid for `<wr-statistic>` cards. The column count follows the
124
+ * group's OWN width — an intrinsic container-query grid sized by its box, not
125
+ * a viewport media query — so it reflows correctly inside any column, card, or
126
+ * split pane. Columns are never narrower than `min`; `columns` optionally caps
127
+ * how many ever sit side by side on a wide container.
128
+ *
129
+ * @example
130
+ * ```html
131
+ * <wr-statistic-group [columns]="4" min="11rem">
132
+ * <wr-statistic label="Active users" [value]="12345" />
133
+ * <wr-statistic label="Revenue" [value]="9512" prefix="$" [delta]="12.4" />
134
+ * <wr-statistic label="Churn" [value]="1.8" suffix="%" [delta]="-0.4" />
135
+ * <wr-statistic label="Sessions" [value]="48210" />
136
+ * </wr-statistic-group>
137
+ * ```
138
+ *
139
+ * @see https://ngwr.dev/reference/components/statistic
140
+ */
141
+ declare class WrStatisticGroup {
142
+ /**
143
+ * Minimum width of each column before the grid reflows to fewer columns.
144
+ * Any CSS length — smaller packs more cards per row. @default '12rem'
145
+ */
146
+ readonly min: _angular_core.InputSignal<string>;
147
+ /**
148
+ * Cap on how many columns ever sit side by side on a wide container. `0`
149
+ * (default) leaves it uncapped — fit as many `min`-wide columns as the
150
+ * width allows. @default 0
151
+ */
152
+ readonly columns: _angular_core.InputSignalWithTransform<number, unknown>;
153
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrStatisticGroup, never>;
154
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrStatisticGroup, "wr-statistic-group", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
155
+ }
156
+
157
+ export { WrStatistic, WrStatisticCountdown, WrStatisticGroup };
@@ -14,7 +14,7 @@ import { InjectionToken, Signal } from '@angular/core';
14
14
  * The stepper hides every step except the active one via a host class —
15
15
  * each step still mounts once, so component state survives navigation.
16
16
  *
17
- * @see https://ngwr.dev/components/stepper
17
+ * @see https://ngwr.dev/reference/components/stepper
18
18
  */
19
19
  declare class WrStep {
20
20
  /** Header label. */
@@ -71,7 +71,7 @@ declare const WR_STEPPER: InjectionToken<WrStepperContext>;
71
71
  * </wr-stepper>
72
72
  * ```
73
73
  *
74
- * @see https://ngwr.dev/components/stepper
74
+ * @see https://ngwr.dev/reference/components/stepper
75
75
  */
76
76
  declare class WrStepper implements WrStepperContext {
77
77
  /** Index of the currently visible step. */
@@ -31,7 +31,7 @@ import * as ngwr_storage from 'ngwr/storage';
31
31
  * effect(() => console.log('theme is', theme()));
32
32
  * ```
33
33
  *
34
- * @see https://ngwr.dev/services/storage
34
+ * @see https://ngwr.dev/reference/services/storage
35
35
  */
36
36
  declare class WrStorage {
37
37
  private readonly engine;
@@ -1,42 +1,46 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ControlValueAccessor } from '@angular/forms';
2
+ import { FormCheckboxControl } from '@angular/forms/signals';
3
3
 
4
4
  /**
5
- * Boolean toggle with an iOS-style slider. Implements `ControlValueAccessor`.
5
+ * Boolean toggle with an iOS-style slider.
6
+ *
7
+ * A signal-forms native control: it implements `FormCheckboxControl`, so
8
+ * `[formField]` binds straight to its `checked` model — no
9
+ * `ControlValueAccessor` in between. `[(checked)]` works standalone.
6
10
  *
7
11
  * @example
8
12
  * ```html
9
- * <wr-switch [(ngModel)]="enabled">Notifications</wr-switch>
13
+ * <!-- signal forms -->
14
+ * <wr-switch [formField]="form.notifications">Notifications</wr-switch>
15
+ *
16
+ * <!-- standalone two-way binding -->
17
+ * <wr-switch [(checked)]="enabled">Notifications</wr-switch>
10
18
  * ```
11
19
  *
12
- * @see https://ngwr.dev/components/switch
20
+ * @see https://ngwr.dev/reference/components/switch
13
21
  */
14
22
  type WrSwitchSize = 'sm' | 'md' | 'lg';
15
- declare class WrSwitch implements ControlValueAccessor {
23
+ declare class WrSwitch implements FormCheckboxControl {
16
24
  /** Stable id used to associate the native input with its label. */
17
25
  readonly id: _angular_core.InputSignal<string>;
18
26
  /**
19
- * Disable the switch. Also set by Angular forms via `setDisabledState`.
27
+ * Disable the switch. Bound automatically from the field's disabled state
28
+ * when used with `[formField]`.
20
29
  *
21
30
  * @default false
22
31
  */
23
32
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
24
33
  /** Control size — shares the `--wr-control-*` contract. @default 'md' */
25
34
  readonly size: _angular_core.InputSignal<WrSwitchSize>;
26
- protected readonly checked: _angular_core.WritableSignal<boolean>;
27
- private readonly disabledFromCva;
28
- protected readonly effectiveDisabled: _angular_core.Signal<boolean>;
35
+ /** On / off state. Bound by `[formField]`, or two-way via `[(checked)]`. */
36
+ readonly checked: _angular_core.ModelSignal<boolean>;
37
+ /** Emitted on blur so a bound field can mark itself touched. */
38
+ readonly touch: _angular_core.OutputEmitterRef<void>;
29
39
  protected readonly classes: _angular_core.Signal<string>;
30
- private onChange;
31
- private onTouched;
32
- writeValue(value: boolean | null): void;
33
- registerOnChange(fn: (value: boolean) => void): void;
34
- registerOnTouched(fn: () => void): void;
35
- setDisabledState(isDisabled: boolean): void;
36
40
  protected onInputChange(event: Event): void;
37
41
  protected onInputBlur(): void;
38
42
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSwitch, never>;
39
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSwitch, "wr-switch", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
43
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSwitch, "wr-switch", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
40
44
  }
41
45
 
42
46
  export { WrSwitch };