ngwr 8.0.0 → 9.0.1

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 +76 -29
  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
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef } from '@angular/core';
3
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
3
4
 
4
5
  /**
5
6
  * @license
@@ -67,6 +68,11 @@ interface WrTableFilterChange {
67
68
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
68
69
  */
69
70
 
71
+ /**
72
+ * A column's footer aggregate — a built-in over its numeric values, or a
73
+ * function given all rows that returns the value to display.
74
+ */
75
+ type WrTableSummary = 'sum' | 'avg' | 'count' | 'min' | 'max' | ((rows: readonly Record<string, unknown>[]) => unknown);
70
76
  /** A single column definition. */
71
77
  interface WrTableColumn {
72
78
  /** Heading shown in the column's header. */
@@ -75,6 +81,22 @@ interface WrTableColumn {
75
81
  readonly sortable?: boolean;
76
82
  /** When non-empty, shows a filter dropdown in the header. */
77
83
  readonly filterItems?: readonly WrTableFilterItem[];
84
+ /**
85
+ * Freeze the column against the left or right edge — it stays visible while
86
+ * the rest of the table scrolls horizontally. Pin the leftmost columns
87
+ * `'left'` and the rightmost `'right'`; several per side stack in order.
88
+ */
89
+ readonly pin?: 'left' | 'right';
90
+ /** Show a drag handle on the header edge to resize the column. */
91
+ readonly resizable?: boolean;
92
+ /** Initial column width in px. Overridden once the user drags to resize. */
93
+ readonly width?: number;
94
+ /**
95
+ * Footer aggregate for this column — renders a summary row when any column
96
+ * sets it. Computed over the current `items`, so in server-side mode
97
+ * (`totalItems` set) it reflects the current page, not the whole dataset.
98
+ */
99
+ readonly summary?: WrTableSummary;
78
100
  }
79
101
  /**
80
102
  * Column map — keys are the row's property names; values are column defs.
@@ -109,6 +131,87 @@ interface WrTableCellContext {
109
131
  readonly column: WrTableColumn;
110
132
  }
111
133
 
134
+ /**
135
+ * @license
136
+ *
137
+ * Use of this source code is governed by an MIT-style license that can be
138
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
139
+ */
140
+ /** Options for `WrTable.toCsv()` / `WrTable.exportCsv()`. */
141
+ interface WrTableCsvOptions {
142
+ /** Download filename. @default 'table.csv' */
143
+ readonly filename?: string;
144
+ /** Export only the selected rows (needs `rowSelection`). @default false */
145
+ readonly selectedOnly?: boolean;
146
+ /** Field delimiter — use `';'` for locales where Excel expects it. @default ',' */
147
+ readonly delimiter?: string;
148
+ /**
149
+ * Prefix string values starting with `= + - @` with a quote so spreadsheets
150
+ * treat them as text instead of formulas. @default true
151
+ */
152
+ readonly escapeFormulas?: boolean;
153
+ }
154
+
155
+ /**
156
+ * @license
157
+ *
158
+ * Use of this source code is governed by an MIT-style license that can be
159
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
160
+ */
161
+ /**
162
+ * Context passed to a `[wrTableExpand]` detail template.
163
+ */
164
+ interface WrTableExpandContext {
165
+ /** The expanded row. Use as `let-row`. */
166
+ readonly $implicit: Record<string, unknown>;
167
+ /** The expanded row (alias of `$implicit`). */
168
+ readonly row: Record<string, unknown>;
169
+ }
170
+
171
+ /**
172
+ * @license
173
+ *
174
+ * Use of this source code is governed by an MIT-style license that can be
175
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
176
+ */
177
+ /**
178
+ * Context of one rendered row group — passed to a `[wrTableGroupHeader]`
179
+ * template and used to build the built-in band. One is produced per group on
180
+ * the current page (grouping runs after pagination).
181
+ */
182
+ interface WrTableGroupContext {
183
+ /** The group value returned by `groupBy` (alias of `value`). Use as `let-group`. */
184
+ readonly $implicit: unknown;
185
+ /** The group value. Also the identity stored in `collapsedGroups`. */
186
+ readonly value: unknown;
187
+ /** Default label — `String(value)`, or `'—'` for `null` / `undefined` / `''`. */
188
+ readonly label: string;
189
+ /** The group's rows on the current page, in page order. */
190
+ readonly rows: readonly Record<string, unknown>[];
191
+ /** `rows.length` — the group's row count on the current page. */
192
+ readonly count: number;
193
+ /** Whether the group is currently collapsed. */
194
+ readonly collapsed: boolean;
195
+ /** 0-based index of the group on the current page. */
196
+ readonly index: number;
197
+ /** Collapse / expand this group — wire it to a custom header's own control. */
198
+ readonly toggle: () => void;
199
+ }
200
+
201
+ /** One `<tbody>` row descriptor. Not exported — same precedent as the tree's flat node. */
202
+ type RenderRow = {
203
+ readonly kind: 'group';
204
+ readonly id: string;
205
+ readonly group: WrTableGroupContext;
206
+ } | {
207
+ readonly kind: 'row';
208
+ readonly id: string;
209
+ readonly row: Record<string, unknown>;
210
+ } | {
211
+ readonly kind: 'group-foot';
212
+ readonly id: string;
213
+ readonly summaries: ReadonlyMap<string, unknown>;
214
+ };
112
215
  /**
113
216
  * Data table with sortable / filterable headers and custom cell templates.
114
217
  *
@@ -130,7 +233,7 @@ interface WrTableCellContext {
130
233
  * </wr-table>
131
234
  * ```
132
235
  *
133
- * @see https://ngwr.dev/components/table
236
+ * @see https://ngwr.dev/reference/components/table
134
237
  */
135
238
  declare class WrTable {
136
239
  /** Column definitions, keyed by row property name. */
@@ -145,6 +248,62 @@ declare class WrTable {
145
248
  * cell shows its column title as a label. @default false
146
249
  */
147
250
  readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
251
+ /** Enable drag-to-reorder on the column headers. @default false */
252
+ readonly reorderable: _angular_core.InputSignalWithTransform<boolean, any>;
253
+ /**
254
+ * Two-way bindable column order — an array of column keys. Reflects and drives
255
+ * the header order: the table falls back to declaration order for any key not
256
+ * listed, and updates this on drag. Bind it to persist a user's arrangement.
257
+ */
258
+ readonly columnOrder: _angular_core.ModelSignal<readonly string[]>;
259
+ /**
260
+ * Row selection with a leading checkbox column — `'multiple'` adds a
261
+ * select-all header; `'single'` keeps one row selected. @default null (off)
262
+ */
263
+ readonly rowSelection: _angular_core.InputSignal<"single" | "multiple" | null>;
264
+ /**
265
+ * How to identify a row for selection — a property name or a function.
266
+ * Unset uses the row object itself (fine for a stable row array).
267
+ */
268
+ readonly rowKey: _angular_core.InputSignal<string | ((row: Record<string, unknown>) => unknown) | null>;
269
+ /** Two-way bindable selected row keys. */
270
+ readonly selection: _angular_core.ModelSignal<readonly unknown[]>;
271
+ /** Two-way bindable expanded row keys (needs a `[wrTableExpand]` template). */
272
+ readonly expanded: _angular_core.ModelSignal<readonly unknown[]>;
273
+ /**
274
+ * Group rows under collapsible band headers — a row property name, or a
275
+ * function returning the group value. `null` (default) renders the table
276
+ * exactly as before.
277
+ *
278
+ * Grouping runs AFTER pagination: it buckets the rows on the current page in
279
+ * first-appearance order (it never re-sorts your data — same contract as
280
+ * `[(sort)]`), so a group straddling a page boundary shows a band on both
281
+ * pages, and per-group counts / subtotals are page-scoped. Sort `items` by the
282
+ * same key upstream to keep groups whole, or pair with `pageSize = 0`.
283
+ *
284
+ * Group values are compared by identity (`Map`/`Set`, SameValueZero) — return
285
+ * a primitive, exactly as for `rowKey`. Objects / `Date`s bucket by reference.
286
+ *
287
+ * @default null
288
+ */
289
+ readonly groupBy: _angular_core.InputSignal<string | ((row: Record<string, unknown>) => unknown) | null>;
290
+ /**
291
+ * Two-way bindable collapsed group values (the values `groupBy` returns).
292
+ * Keyed by value, so a collapsed group stays collapsed across page changes and
293
+ * re-sorts. Empty (the default) shows every group expanded.
294
+ */
295
+ readonly collapsedGroups: _angular_core.ModelSignal<readonly unknown[]>;
296
+ /**
297
+ * Render an aggregate row under each group using the same `column.summary`
298
+ * definitions as the grand footer, computed over that group's rows on the
299
+ * current page. No-op unless at least one column defines a `summary`. The grand
300
+ * `<tfoot>` is unaffected and still aggregates the whole client dataset — with
301
+ * client-side pagination the two describe different scopes, so pair grouping
302
+ * with `pageSize = 0` when you need them to reconcile. @default false
303
+ */
304
+ readonly groupSummary: _angular_core.InputSignalWithTransform<boolean, any>;
305
+ /** Show the page-scoped row-count badge in each group band. @default true */
306
+ readonly showGroupCount: _angular_core.InputSignalWithTransform<boolean, any>;
148
307
  /** Two-way bindable sort array. Order in array = application order. */
149
308
  readonly sort: _angular_core.ModelSignal<readonly WrTableSortState[]>;
150
309
  /** Fires whenever a column's filter selection changes. */
@@ -162,6 +321,42 @@ declare class WrTable {
162
321
  * page's slice yourself and react to `(page)` changes).
163
322
  */
164
323
  readonly totalItems: _angular_core.InputSignal<number | null>;
324
+ /**
325
+ * Window the `<tbody>` so a table of thousands of rows keeps only ~one
326
+ * viewport of `<tr>`s in the DOM. Opt-in and OFF by default — a table
327
+ * without it renders byte-identically to today.
328
+ *
329
+ * Engages ONLY on the flat, fixed-height tier: it silently falls back to the
330
+ * full render whenever a variable-height layout is active — `groupBy`, a
331
+ * `[wrTableExpand]` template, `responsive` card mode, or a visible pager
332
+ * (`pageSize > 0` / `totalItems`). While on, it forces fixed layout for
333
+ * stable column widths and assumes a uniform row height (see `rowHeight`).
334
+ *
335
+ * Intended as static config. Give columns an explicit `width` so the frozen
336
+ * layout is exact (a virtualized table always renders fixed-layout); toggling
337
+ * it off at runtime leaves the frozen widths in place as column minimums.
338
+ * @default false
339
+ */
340
+ readonly virtualScroll: _angular_core.InputSignalWithTransform<boolean, any>;
341
+ /**
342
+ * Uniform body-row height in px used to map scroll offset to row index. `0`
343
+ * (default) measures the first rendered row once — matching the density at
344
+ * that point — and reuses it; pass an explicit value to remove the
345
+ * post-hydration measure and make SSR pixel-exact (recommended if the density
346
+ * can change at runtime). Read only when `virtualScroll` is on. Keep
347
+ * virtualized cells single-line and no taller than this — a taller custom
348
+ * `[wrTableCell]` template drifts the window. @default 0
349
+ */
350
+ readonly rowHeight: _angular_core.InputSignalWithTransform<number, unknown>;
351
+ /**
352
+ * Height of the scroll viewport when `virtualScroll` is on — a number (px) or
353
+ * any CSS length (`'70vh'`). Applied as `max-height` on `.wr-table__scroll`
354
+ * (a short table shrinks to fit; a long one caps and scrolls). A numeric px
355
+ * value lets the server prerender the exact first window. @default 480
356
+ */
357
+ readonly viewportHeight: _angular_core.InputSignal<string | number>;
358
+ /** Extra rows kept rendered above and below the viewport as scroll headroom. @default 6 */
359
+ readonly overscan: _angular_core.InputSignalWithTransform<number, unknown>;
165
360
  /** Total row count derived for the pager (server-mode wins). */
166
361
  protected readonly resolvedTotal: _angular_core.Signal<number>;
167
362
  /** Items visible on the current page (client mode slices; server mode passes through). */
@@ -171,8 +366,168 @@ declare class WrTable {
171
366
  private readonly cellTemplates;
172
367
  /** Map of column key → custom template (if provided via `[wrTableCell]`). */
173
368
  protected readonly cellMap: _angular_core.Signal<Map<string, TemplateRef<WrTableCellContext>>>;
174
- /** Keep KeyValuePipe in declaration order (comparator that treats all keys as equal). */
175
- protected readonly keepOrder: () => number;
369
+ private readonly platformId;
370
+ private readonly headerCells;
371
+ /**
372
+ * Columns in render order — declaration order, overridden by `columnOrder`
373
+ * once reordered; new keys append, removed keys drop out. Pin and resize
374
+ * measurement key off this, so it must equal the rendered order.
375
+ */
376
+ protected readonly displayColumns: _angular_core.Signal<readonly {
377
+ key: string;
378
+ column: WrTableColumn;
379
+ }[]>;
380
+ /**
381
+ * Sticky offsets for pinned columns, measured from the header cells so any
382
+ * number of columns can stack per side. Also names the inner-edge column on
383
+ * each side (where the separating shadow sits). Empty until measured in the
384
+ * browser; on the server the pins stay at offset 0, corrected on hydration.
385
+ */
386
+ private readonly pins;
387
+ constructor();
388
+ private measurePins;
389
+ /** Sticky `left` offset (px) for a left-pinned column, else `null`. */
390
+ protected leftPin(key: string): number | null;
391
+ /** Sticky `right` offset (px) for a right-pinned column, else `null`. */
392
+ protected rightPin(key: string): number | null;
393
+ /** Whether `key` is the inner-edge pinned column on `side` (carries the shadow). */
394
+ protected isPinEdge(key: string, side: 'left' | 'right'): boolean;
395
+ private readonly resizeWidths;
396
+ private resizeKey;
397
+ private resizeStartX;
398
+ private resizeStartWidth;
399
+ private lastColumnKeys;
400
+ /**
401
+ * Once a column has been dragged, the table switches to fixed layout so the
402
+ * `<col>` widths are honoured exactly (auto layout treats them as minimums).
403
+ */
404
+ protected readonly fixedLayout: _angular_core.WritableSignal<boolean>;
405
+ /** Current width (px) for a column, or `null` for auto — a live resize wins. */
406
+ protected colWidth(key: string): number | null;
407
+ /** Freeze every column at its current rendered header width (skips frozen keys). */
408
+ private freezeColumnWidths;
409
+ protected onResizeStart(event: PointerEvent, key: string, th: HTMLElement): void;
410
+ protected onResizeMove(event: PointerEvent): void;
411
+ protected onResizeEnd(event: PointerEvent): void;
412
+ /** md-density fallback row height (px), used before measuring / on the server. */
413
+ private static readonly FALLBACK_ROW_PX;
414
+ private static readonly FALLBACK_VIEWPORT_PX;
415
+ /** The `.wr-table__scroll` div (always in the template; only read when virtual). */
416
+ private readonly scrollEl;
417
+ /** Live vertical scroll offset (px); 0 on the server / before first scroll. */
418
+ private readonly scrollTop;
419
+ /** Measured viewport clientHeight (px); 0 until the browser observer fires. */
420
+ private readonly viewportPx;
421
+ /** Measured first-row height (px) when `rowHeight` is auto; 0 until measured. */
422
+ private readonly measuredRowPx;
423
+ /** Fixed layout forced ON by virtualization (distinct from the resize latch). */
424
+ private readonly virtualFixed;
425
+ /** `virtualScroll` requested AND the data shape is safe to window. SSR-deterministic. */
426
+ protected readonly virtualized: _angular_core.Signal<boolean>;
427
+ /** Effective uniform row height (px). */
428
+ protected readonly effRowH: _angular_core.Signal<number>;
429
+ /** Deterministic viewport px for SSR + first paint (numeric height, else fallback). */
430
+ private readonly fallbackViewportPx;
431
+ /** `viewportHeight` as a CSS length for the inline max-height. */
432
+ protected readonly resolvedViewportHeight: _angular_core.Signal<string>;
433
+ /** Rendered window [start,end) + spacer pads (px). Pure math, O(1) per scroll frame. */
434
+ protected readonly virtualWindow: _angular_core.Signal<{
435
+ start: number;
436
+ end: number;
437
+ padTop: number;
438
+ padBottom: number;
439
+ }>;
440
+ /** Flat index of the first rendered window row (for `aria-rowindex`). */
441
+ protected readonly windowStart: _angular_core.Signal<number>;
442
+ /** Rows placed in `<tbody>`. SAME array instance as `renderRows()` when off → byte-identical DOM. */
443
+ protected readonly windowRows: _angular_core.Signal<readonly RenderRow[]>;
444
+ /** Fixed layout is on when a resize drag latched it OR virtualization forces it. */
445
+ protected readonly fixedLayoutActive: _angular_core.Signal<boolean>;
446
+ /** Scroll a flat row index to the top of the virtual viewport. No-op on the server / when not virtual. */
447
+ scrollToRow(index: number, behavior?: ScrollBehavior): void;
448
+ protected onColumnDrop(event: CdkDragDrop<unknown>): void;
449
+ /**
450
+ * Keep pinned columns anchored — a drop can't land on a pinned column's slot,
451
+ * so a scrollable column can't be dragged into the frozen region at either edge.
452
+ */
453
+ protected readonly sortPredicate: (index: number) => boolean;
454
+ private rowKeyOf;
455
+ /** Keys of the rows on the current page — the select-all scope. */
456
+ private readonly pageRowKeys;
457
+ protected isRowSelected(row: Record<string, unknown>): boolean;
458
+ /** Every current-page row selected (drives the header checkbox). */
459
+ protected readonly allSelected: _angular_core.Signal<boolean>;
460
+ /** Some but not all selected (drives the header indeterminate). */
461
+ protected readonly someSelected: _angular_core.Signal<boolean>;
462
+ protected toggleRow(row: Record<string, unknown>, checked: boolean): void;
463
+ /** Add (or remove) a set of row keys from the selection in one update. */
464
+ private applySelection;
465
+ protected toggleAll(checked: boolean): void;
466
+ private readonly expandTpl;
467
+ /** Whether the expand column shows (a `[wrTableExpand]` template was projected). */
468
+ protected readonly expandable: _angular_core.Signal<boolean>;
469
+ /** Leading control columns — selection + expand. */
470
+ protected readonly leadingCols: _angular_core.Signal<number>;
471
+ /** Total rendered columns (data + leading), for detail-row / empty colspans. */
472
+ protected readonly totalCols: _angular_core.Signal<number>;
473
+ protected expandTemplate(): TemplateRef<WrTableExpandContext> | undefined;
474
+ protected isExpanded(row: Record<string, unknown>): boolean;
475
+ protected toggleExpand(row: Record<string, unknown>): void;
476
+ protected expandContext(row: Record<string, unknown>): WrTableExpandContext;
477
+ /** Whether any column defines a `summary` (so the footer row shows). */
478
+ protected readonly hasSummary: _angular_core.Signal<boolean>;
479
+ /** Per-column footer values, computed over `items` (the current page in server mode). */
480
+ private readonly summaries;
481
+ protected summaryFor(key: string): unknown;
482
+ private readonly groupTpl;
483
+ protected groupTemplate(): TemplateRef<WrTableGroupContext> | undefined;
484
+ /**
485
+ * Rows on the current page bucketed by `groupBy`, in first-appearance order.
486
+ * Depends only on `visibleItems()` + `groupBy` (not on collapse / summary), so
487
+ * a collapse toggle never re-buckets. The ungrouped path returns one synthetic
488
+ * bucket holding the same array instance `visibleItems()` returned.
489
+ */
490
+ private readonly groupBuckets;
491
+ /**
492
+ * The flat `<tbody>` render list. Ungrouped it is exactly today's rows in
493
+ * order (the rendered elements are unchanged; only the `@for` track identity
494
+ * moves to a stable id). Returns `[]` for both no-rows and loading — the
495
+ * template's `@if (visibleItems())` guard keeps the loading case from showing
496
+ * the empty row.
497
+ */
498
+ protected readonly renderRows: _angular_core.Signal<readonly RenderRow[]>;
499
+ /** Default band label — the primitive as text, `'—'` for empty, JSON for objects. */
500
+ private groupLabelOf;
501
+ protected toggleGroupCollapse(value: unknown): void;
502
+ /** Collapse every group on the current page. No-op when `groupBy` is unset. */
503
+ collapseAllGroups(): void;
504
+ /** Expand every group. */
505
+ expandAllGroups(): void;
506
+ /** Memoized selection as a Set — O(1) membership for row + group + select-all checks. */
507
+ private readonly selectionSet;
508
+ protected groupChecked(rows: readonly Record<string, unknown>[]): boolean;
509
+ protected groupIndeterminate(rows: readonly Record<string, unknown>[]): boolean;
510
+ protected toggleGroupSelection(rows: readonly Record<string, unknown>[], checked: boolean): void;
511
+ private readonly doc;
512
+ /**
513
+ * Build the table as an RFC-4180 CSV string — a header row from the column
514
+ * titles, then one row per item in the current column order. Values are taken
515
+ * from the row data, not from custom `[wrTableCell]` templates.
516
+ *
517
+ * Covers the current `items`, so in server-side mode (`totalItems` set) it
518
+ * exports the current page, while client-side pagination exports every page.
519
+ *
520
+ * @example
521
+ * ```html
522
+ * <wr-table #table [columns]="columns" [items]="rows" />
523
+ * <wr-btn (click)="table.exportCsv({ filename: 'users.csv' })">Export</wr-btn>
524
+ * ```
525
+ */
526
+ toCsv(options?: WrTableCsvOptions): string;
527
+ /** Download the table as a CSV file. No-op on the server. */
528
+ exportCsv(options?: WrTableCsvOptions): void;
529
+ private selectedRows;
530
+ private computeSummary;
176
531
  protected directionFor(key: string): WrTableSortDirection;
177
532
  protected cycleSort(key: string): void;
178
533
  protected onFilter(key: string, items: readonly WrTableFilterItem[]): void;
@@ -180,7 +535,7 @@ declare class WrTable {
180
535
  protected getValue(item: Record<string, unknown>, key: unknown): unknown;
181
536
  protected templateFor(key: unknown): TemplateRef<WrTableCellContext> | undefined;
182
537
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTable, never>;
183
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTable, "wr-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; "filterChange": "filterChange"; "page": "pageChange"; }, ["cellTemplates"], never, true, never>;
538
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTable, "wr-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "columnOrder": { "alias": "columnOrder"; "required": false; "isSignal": true; }; "rowSelection": { "alias": "rowSelection"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "collapsedGroups": { "alias": "collapsedGroups"; "required": false; "isSignal": true; }; "groupSummary": { "alias": "groupSummary"; "required": false; "isSignal": true; }; "showGroupCount": { "alias": "showGroupCount"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "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; }; }, { "columnOrder": "columnOrderChange"; "selection": "selectionChange"; "expanded": "expandedChange"; "collapsedGroups": "collapsedGroupsChange"; "sort": "sortChange"; "filterChange": "filterChange"; "page": "pageChange"; }, ["cellTemplates", "expandTpl", "groupTpl"], never, true, never>;
184
539
  }
185
540
 
186
541
  /**
@@ -203,6 +558,62 @@ declare class WrTableCell {
203
558
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrTableCell, "[wrTableCell]", never, { "columnKey": { "alias": "wrTableCell"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
204
559
  }
205
560
 
561
+ /**
562
+ * @license
563
+ *
564
+ * Use of this source code is governed by an MIT-style license that can be
565
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
566
+ */
567
+
568
+ /**
569
+ * Provide the detail template revealed when a row is expanded. Adding it turns
570
+ * on the leading expand column; the row object is the template's implicit
571
+ * context.
572
+ *
573
+ * @example
574
+ * ```html
575
+ * <wr-table [columns]="columns" [items]="items" [(expanded)]="expanded" rowKey="id">
576
+ * <ng-template wrTableExpand let-row>
577
+ * <p>{{ row.bio }}</p>
578
+ * </ng-template>
579
+ * </wr-table>
580
+ * ```
581
+ */
582
+ declare class WrTableExpand {
583
+ readonly template: TemplateRef<WrTableExpandContext>;
584
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTableExpand, never>;
585
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrTableExpand, "ng-template[wrTableExpand]", never, {}, {}, never, never, true, never>;
586
+ }
587
+
588
+ /**
589
+ * @license
590
+ *
591
+ * Use of this source code is governed by an MIT-style license that can be
592
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
593
+ */
594
+
595
+ /**
596
+ * Provide a custom template for a group band's label area. The collapse chevron
597
+ * and the optional group checkbox are still rendered by the table around it, so
598
+ * the template may safely contain its own interactive content. Projecting it
599
+ * does NOT enable grouping — set `[groupBy]` for that.
600
+ *
601
+ * @example
602
+ * ```html
603
+ * <wr-table [columns]="columns" [items]="rows" groupBy="department">
604
+ * <ng-template wrTableGroupHeader let-value let-count="count" let-toggle="toggle">
605
+ * <wr-tag color="primary" (click)="toggle()">{{ value }}</wr-tag>
606
+ * <small>{{ count }} people</small>
607
+ * </ng-template>
608
+ * </wr-table>
609
+ * ```
610
+ */
611
+ declare class WrTableGroupHeader {
612
+ readonly template: TemplateRef<WrTableGroupContext>;
613
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTableGroupHeader, never>;
614
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrTableGroupHeader, "ng-template[wrTableGroupHeader]", never, {}, {}, never, never, true, never>;
615
+ }
616
+
206
617
  /**
207
618
  * Sort indicator rendered in a sortable column's header.
208
619
  *
@@ -239,5 +650,5 @@ declare class WrTableFilter {
239
650
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTableFilter, "wr-table-filter", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
240
651
  }
241
652
 
242
- export { WrTable, WrTableCell, WrTableFilter, WrTableSort };
243
- export type { WrTableCellContext, WrTableColumn, WrTableColumns, WrTableFilterChange, WrTableFilterItem, WrTableSortDirection, WrTableSortState };
653
+ export { WrTable, WrTableCell, WrTableExpand, WrTableFilter, WrTableGroupHeader, WrTableSort };
654
+ export type { WrTableCellContext, WrTableColumn, WrTableColumns, WrTableCsvOptions, WrTableExpandContext, WrTableFilterChange, WrTableFilterItem, WrTableGroupContext, WrTableSortDirection, WrTableSortState, WrTableSummary };
@@ -91,7 +91,7 @@ declare const WR_TABS: InjectionToken<WrTabsContext>;
91
91
  * <router-outlet />
92
92
  * ```
93
93
  *
94
- * @see https://ngwr.dev/components/tabs
94
+ * @see https://ngwr.dev/reference/components/tabs
95
95
  */
96
96
  declare class WrTabs implements WrTabsContext {
97
97
  /** Two-way bindable active tab key (content mode). */
@@ -1,24 +1,31 @@
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
  * Multi-line text input.
7
7
  *
8
- * Implements `ControlValueAccessor`. Optional `autosize` grows the
9
- * textarea with its content, capped at `maxRows` if provided.
8
+ * A signal-forms native control: it implements `FormValueControl<string>`, so
9
+ * `[formField]` binds straight to its `value` model — no
10
+ * `ControlValueAccessor` in between. `[(value)]` works standalone.
11
+ *
12
+ * Optional `autosize` grows the textarea with its content, capped at
13
+ * `maxRows` if provided.
10
14
  *
11
15
  * @example
12
16
  * ```html
13
- * <wr-textarea placeholder="Notes" [(ngModel)]="text" />
14
- * <wr-textarea autosize [maxRows]="6" [(ngModel)]="text" />
17
+ * <!-- signal forms -->
18
+ * <wr-textarea placeholder="Notes" [formField]="form.notes" />
19
+ *
20
+ * <!-- standalone two-way binding -->
21
+ * <wr-textarea autosize [maxRows]="6" [(value)]="text" />
15
22
  * ```
16
23
  *
17
- * @see https://ngwr.dev/components/textarea
24
+ * @see https://ngwr.dev/reference/components/textarea
18
25
  */
19
26
  type WrTextareaSize = 'sm' | 'md' | 'lg';
20
27
  type WrTextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
21
- declare class WrTextarea implements ControlValueAccessor {
28
+ declare class WrTextarea implements FormValueControl<string> {
22
29
  /** Native placeholder text. @default '' */
23
30
  readonly placeholder: _angular_core.InputSignal<string>;
24
31
  /** Control size — shares the `--wr-control-*` contract. @default 'md' */
@@ -36,15 +43,17 @@ declare class WrTextarea implements ControlValueAccessor {
36
43
  /** Cap autosize at this many rows. Ignored when `autosize` is false. */
37
44
  readonly maxRows: _angular_core.InputSignal<number | null>;
38
45
  /**
39
- * Disable the textarea. Also set by Angular forms via `setDisabledState`.
46
+ * Disable the textarea. Bound automatically from the field's disabled state
47
+ * when used with `[formField]`.
40
48
  *
41
49
  * @default false
42
50
  */
43
51
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
44
- protected readonly value: _angular_core.WritableSignal<string>;
45
- protected readonly disabledFromCva: _angular_core.WritableSignal<boolean>;
52
+ /** The edited text. Bound by `[formField]`, or two-way via `[(value)]`. */
53
+ readonly value: _angular_core.ModelSignal<string>;
54
+ /** Emitted on blur so a bound field can mark itself touched. */
55
+ readonly touch: _angular_core.OutputEmitterRef<void>;
46
56
  protected readonly focused: _angular_core.WritableSignal<boolean>;
47
- protected readonly effectiveDisabled: _angular_core.Signal<boolean>;
48
57
  protected readonly native: _angular_core.Signal<ElementRef<HTMLTextAreaElement>>;
49
58
  /** Resize direction, gated by `resizable` (false → 'none'). */
50
59
  protected readonly effectiveResize: _angular_core.Signal<WrTextareaResize>;
@@ -54,8 +63,6 @@ declare class WrTextarea implements ControlValueAccessor {
54
63
  private readonly platformId;
55
64
  private readonly isBrowser;
56
65
  private readonly hostEl;
57
- private onChange;
58
- private onTouched;
59
66
  private resizing;
60
67
  private resizeStartY;
61
68
  private resizeStartX;
@@ -64,10 +71,6 @@ declare class WrTextarea implements ControlValueAccessor {
64
71
  private resizeMinHeight;
65
72
  private resizeMaxWidth;
66
73
  constructor();
67
- writeValue(value: string | null): void;
68
- registerOnChange(fn: (value: string) => void): void;
69
- registerOnTouched(fn: () => void): void;
70
- setDisabledState(isDisabled: boolean): void;
71
74
  protected onInput(event: Event): void;
72
75
  protected onBlur(): void;
73
76
  protected startResize(event: PointerEvent): void;
@@ -75,7 +78,7 @@ declare class WrTextarea implements ControlValueAccessor {
75
78
  protected endResize(event: PointerEvent): void;
76
79
  private autofit;
77
80
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTextarea, never>;
78
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTextarea, "wr-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "autosize": { "alias": "autosize"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
81
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTextarea, "wr-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "autosize": { "alias": "autosize"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
79
82
  }
80
83
 
81
84
  export { WrTextarea };
@@ -13,6 +13,11 @@ import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
13
13
  * Kept in sync manually with the SCSS `$base-colors` map in
14
14
  * `theme/styles/_colors.scss`. Both sources must stay aligned —
15
15
  * adding a color requires updating both this array and the SCSS map.
16
+ * Nothing enforces that, and it has already drifted once: `info` landed
17
+ * in the map without landing here, so v8.0.0 shipped every
18
+ * `--wr-color-info*` token — plus an `--info` modifier from each of the
19
+ * five stylesheets that iterate the map — while this type refused the
20
+ * value. Order matches the map so the two read as one list.
16
21
  *
17
22
  * @example
18
23
  * ```ts
@@ -22,7 +27,7 @@ import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
22
27
  * WR_COLORS.forEach(color => console.log(color));
23
28
  * ```
24
29
  */
25
- declare const WR_COLORS: readonly ["primary", "secondary", "success", "warning", "danger", "light", "medium", "dark"];
30
+ declare const WR_COLORS: readonly ["primary", "secondary", "success", "warning", "danger", "info", "light", "medium", "dark"];
26
31
  /**
27
32
  * A color variant name.
28
33
  *
@@ -81,7 +86,7 @@ declare const WR_THEME_CONFIG: InjectionToken<WrThemeConfig>;
81
86
  * theme.resolved(); // 'dark'
82
87
  * ```
83
88
  *
84
- * @see https://ngwr.dev/services/theme
89
+ * @see https://ngwr.dev/reference/services/theme
85
90
  */
86
91
  declare class WrTheme {
87
92
  private readonly doc;
@@ -23,12 +23,15 @@ declare class WrTilt {
23
23
  private readonly zone;
24
24
  private readonly destroyRef;
25
25
  private readonly platform;
26
+ private readonly isBrowser;
27
+ private glareEl;
26
28
  constructor();
27
29
  /** @internal */
28
30
  protected onMove(event: PointerEvent): void;
29
31
  /** @internal */
30
32
  protected onLeave(): void;
31
33
  private installGlare;
34
+ private removeGlare;
32
35
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTilt, never>;
33
36
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrTilt, "[wrTilt]", never, { "maxTilt": { "alias": "maxTilt"; "required": false; "isSignal": true; }; "perspective": { "alias": "perspective"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; "glare": { "alias": "glare"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
34
37
  }
@@ -11,7 +11,7 @@ import * as _angular_core from '@angular/core';
11
11
  * </wr-timeline>
12
12
  * ```
13
13
  *
14
- * @see https://ngwr.dev/components/timeline
14
+ * @see https://ngwr.dev/reference/components/timeline
15
15
  */
16
16
  declare class WrTimeline {
17
17
  readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;