ngwr 7.2.0 → 8.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 (275) hide show
  1. package/README.md +8 -7
  2. package/alert/styles/_index.scss +44 -17
  3. package/avatar/styles/_index.scss +2 -2
  4. package/badge/styles/_index.scss +11 -7
  5. package/badge/styles/_tag.scss +1 -1
  6. package/bar-chart/styles/_index.scss +1 -2
  7. package/breadcrumbs/styles/_index.scss +4 -2
  8. package/burger/styles/_index.scss +2 -2
  9. package/button/styles/_index.scss +30 -20
  10. package/calendar/styles/_index.scss +11 -9
  11. package/calendar-heatmap/styles/_index.scss +2 -0
  12. package/card/styles/_index.scss +1 -1
  13. package/carousel/styles/_index.scss +3 -1
  14. package/cascader/styles/_index.scss +54 -14
  15. package/checkbox/styles/_index.scss +21 -4
  16. package/collapse/styles/_index.scss +1 -1
  17. package/color-picker/styles/_index.scss +18 -12
  18. package/command-palette/styles/_index.scss +3 -3
  19. package/compare/styles/_index.scss +3 -3
  20. package/context-menu/styles/_index.scss +1 -1
  21. package/date-picker/styles/_index.scss +5 -6
  22. package/density/styles/_index.scss +13 -3
  23. package/dialog/styles/_index.scss +3 -3
  24. package/divider/styles/_index.scss +1 -1
  25. package/drawer/styles/_index.scss +13 -11
  26. package/dropdown/styles/_index.scss +2 -2
  27. package/fesm2022/ngwr-affix.mjs +3 -3
  28. package/fesm2022/ngwr-alert.mjs +22 -10
  29. package/fesm2022/ngwr-alert.mjs.map +1 -1
  30. package/fesm2022/ngwr-anchor.mjs +3 -3
  31. package/fesm2022/ngwr-aurora.mjs +3 -3
  32. package/fesm2022/ngwr-avatar.mjs +3 -3
  33. package/fesm2022/ngwr-back-top.mjs +3 -3
  34. package/fesm2022/ngwr-badge.mjs +6 -6
  35. package/fesm2022/ngwr-bar-chart.mjs +3 -3
  36. package/fesm2022/ngwr-blur-text.mjs +3 -3
  37. package/fesm2022/ngwr-border-glow.mjs +3 -3
  38. package/fesm2022/ngwr-breadcrumbs.mjs +7 -7
  39. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  40. package/fesm2022/ngwr-burger.mjs +3 -3
  41. package/fesm2022/ngwr-button.mjs +6 -6
  42. package/fesm2022/ngwr-calendar-heatmap.mjs +3 -3
  43. package/fesm2022/ngwr-calendar.mjs +4 -4
  44. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  45. package/fesm2022/ngwr-card.mjs +10 -10
  46. package/fesm2022/ngwr-card.mjs.map +1 -1
  47. package/fesm2022/ngwr-carousel.mjs +50 -9
  48. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  49. package/fesm2022/ngwr-cascader.mjs +12 -35
  50. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  51. package/fesm2022/ngwr-checkbox.mjs +13 -30
  52. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  53. package/fesm2022/ngwr-circular-text.mjs +3 -3
  54. package/fesm2022/ngwr-click-spark.mjs +25 -6
  55. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  56. package/fesm2022/ngwr-clipboard.mjs +27 -6
  57. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  58. package/fesm2022/ngwr-collapse.mjs +9 -9
  59. package/fesm2022/ngwr-color-picker.mjs +7 -7
  60. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  61. package/fesm2022/ngwr-command-palette.mjs +3 -3
  62. package/fesm2022/ngwr-compare.mjs +3 -3
  63. package/fesm2022/ngwr-confetti.mjs +3 -3
  64. package/fesm2022/ngwr-context-menu.mjs +39 -15
  65. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  66. package/fesm2022/ngwr-cookie.mjs +3 -3
  67. package/fesm2022/ngwr-counter.mjs +12 -8
  68. package/fesm2022/ngwr-counter.mjs.map +1 -1
  69. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  70. package/fesm2022/ngwr-date-adapter-luxon.mjs +3 -3
  71. package/fesm2022/ngwr-date-adapter.mjs +3 -3
  72. package/fesm2022/ngwr-date-picker.mjs +25 -11
  73. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  74. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  75. package/fesm2022/ngwr-density.mjs +14 -14
  76. package/fesm2022/ngwr-density.mjs.map +1 -1
  77. package/fesm2022/ngwr-descriptions.mjs +6 -6
  78. package/fesm2022/ngwr-dialog.mjs +15 -15
  79. package/fesm2022/ngwr-directives.mjs +15 -87
  80. package/fesm2022/ngwr-directives.mjs.map +1 -1
  81. package/fesm2022/ngwr-divider.mjs +3 -3
  82. package/fesm2022/ngwr-donut-chart.mjs +10 -4
  83. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  84. package/fesm2022/ngwr-drag-drop.mjs +18 -8
  85. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  86. package/fesm2022/ngwr-drawer.mjs +80 -19
  87. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  88. package/fesm2022/ngwr-dropdown.mjs +9 -9
  89. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  90. package/fesm2022/ngwr-empty.mjs +3 -3
  91. package/fesm2022/ngwr-falling-text.mjs +3 -3
  92. package/fesm2022/ngwr-file-upload.mjs +3 -3
  93. package/fesm2022/ngwr-form.mjs +9 -9
  94. package/fesm2022/ngwr-fuzzy-text.mjs +8 -7
  95. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  96. package/fesm2022/ngwr-gauge.mjs +3 -3
  97. package/fesm2022/ngwr-glitch-text.mjs +15 -7
  98. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  99. package/fesm2022/ngwr-gradient-text.mjs +3 -3
  100. package/fesm2022/ngwr-hotkey.mjs +6 -6
  101. package/fesm2022/ngwr-i18n.mjs +9 -9
  102. package/fesm2022/ngwr-icon.mjs +3 -3
  103. package/fesm2022/ngwr-image-cropper.mjs +3 -3
  104. package/fesm2022/ngwr-input-number.mjs +4 -4
  105. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  106. package/fesm2022/ngwr-input-otp.mjs +10 -4
  107. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  108. package/fesm2022/ngwr-input.mjs +25 -16
  109. package/fesm2022/ngwr-input.mjs.map +1 -1
  110. package/fesm2022/ngwr-keyboard.mjs +3 -3
  111. package/fesm2022/ngwr-knob.mjs +3 -3
  112. package/fesm2022/ngwr-layout.mjs +15 -15
  113. package/fesm2022/ngwr-lightbox.mjs +60 -5
  114. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  115. package/fesm2022/ngwr-line-chart.mjs +3 -3
  116. package/fesm2022/ngwr-list.mjs +7 -7
  117. package/fesm2022/ngwr-list.mjs.map +1 -1
  118. package/fesm2022/ngwr-loading-bar.mjs +6 -6
  119. package/fesm2022/ngwr-marquee.mjs +3 -3
  120. package/fesm2022/ngwr-media.mjs +3 -3
  121. package/fesm2022/ngwr-mention.mjs +6 -6
  122. package/fesm2022/ngwr-meta.mjs +6 -6
  123. package/fesm2022/ngwr-meter-group.mjs +3 -3
  124. package/fesm2022/ngwr-overlay.mjs +3 -3
  125. package/fesm2022/ngwr-page-header.mjs +3 -3
  126. package/fesm2022/ngwr-pagination.mjs +14 -16
  127. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  128. package/fesm2022/ngwr-pipes.mjs +21 -21
  129. package/fesm2022/ngwr-platform.mjs +3 -3
  130. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  131. package/fesm2022/ngwr-popover.mjs +6 -6
  132. package/fesm2022/ngwr-progress.mjs +3 -3
  133. package/fesm2022/ngwr-qr.mjs +3 -3
  134. package/fesm2022/ngwr-radio.mjs +28 -26
  135. package/fesm2022/ngwr-radio.mjs.map +1 -1
  136. package/fesm2022/ngwr-rating.mjs +12 -23
  137. package/fesm2022/ngwr-rating.mjs.map +1 -1
  138. package/fesm2022/ngwr-result.mjs +12 -12
  139. package/fesm2022/ngwr-rotating-text.mjs +18 -7
  140. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  141. package/fesm2022/ngwr-scroll.mjs +3 -3
  142. package/fesm2022/ngwr-segmented.mjs +10 -22
  143. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  144. package/fesm2022/ngwr-select.mjs +26 -13
  145. package/fesm2022/ngwr-select.mjs.map +1 -1
  146. package/fesm2022/ngwr-shiny-text.mjs +6 -6
  147. package/fesm2022/ngwr-sidebar.mjs +3 -3
  148. package/fesm2022/ngwr-skeleton.mjs +3 -3
  149. package/fesm2022/ngwr-slider.mjs +3 -3
  150. package/fesm2022/ngwr-sparkline.mjs +3 -3
  151. package/fesm2022/ngwr-speed-dial.mjs +3 -3
  152. package/fesm2022/ngwr-spinner.mjs +3 -3
  153. package/fesm2022/ngwr-splash-cursor.mjs +3 -3
  154. package/fesm2022/ngwr-split-text.mjs +3 -3
  155. package/fesm2022/ngwr-splitter.mjs +3 -3
  156. package/fesm2022/ngwr-spotlight-card.mjs +8 -8
  157. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  158. package/fesm2022/ngwr-squircle.mjs +6 -6
  159. package/fesm2022/ngwr-star-border.mjs +3 -3
  160. package/fesm2022/ngwr-statistic.mjs +79 -10
  161. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  162. package/fesm2022/ngwr-stepper.mjs +6 -6
  163. package/fesm2022/ngwr-storage.mjs +3 -3
  164. package/fesm2022/ngwr-switch.mjs +10 -14
  165. package/fesm2022/ngwr-switch.mjs.map +1 -1
  166. package/fesm2022/ngwr-table.mjs +20 -14
  167. package/fesm2022/ngwr-table.mjs.map +1 -1
  168. package/fesm2022/ngwr-tabs.mjs +45 -11
  169. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  170. package/fesm2022/ngwr-textarea.mjs +84 -25
  171. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  172. package/fesm2022/ngwr-theme.mjs +3 -3
  173. package/fesm2022/ngwr-tilt-card.mjs +6 -6
  174. package/fesm2022/ngwr-timeline.mjs +6 -6
  175. package/fesm2022/ngwr-toast.mjs +99 -25
  176. package/fesm2022/ngwr-toast.mjs.map +1 -1
  177. package/fesm2022/ngwr-toolbar.mjs +13 -6
  178. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  179. package/fesm2022/ngwr-tree.mjs +3 -3
  180. package/fesm2022/ngwr-typewriter.mjs +3 -3
  181. package/fesm2022/ngwr-typography.mjs +3 -3
  182. package/fesm2022/ngwr-validators.mjs +41 -3
  183. package/fesm2022/ngwr-validators.mjs.map +1 -1
  184. package/fesm2022/ngwr-version.mjs +1 -1
  185. package/fesm2022/ngwr-version.mjs.map +1 -1
  186. package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
  187. package/fesm2022/ngwr-waves.mjs +3 -3
  188. package/fesm2022/ngwr-window.mjs +12 -12
  189. package/file-upload/styles/_index.scss +3 -3
  190. package/form/styles/_index.scss +5 -5
  191. package/glitch-text/styles/_index.scss +3 -6
  192. package/image-cropper/styles/_index.scss +3 -3
  193. package/input/styles/_index.scss +26 -7
  194. package/input-otp/styles/_index.scss +23 -5
  195. package/keyboard/styles/_index.scss +6 -4
  196. package/knob/styles/_index.scss +1 -1
  197. package/lightbox/styles/_index.scss +31 -10
  198. package/list/styles/_index.scss +3 -3
  199. package/llms-full.txt +668 -0
  200. package/llms.txt +106 -0
  201. package/mention/styles/_index.scss +2 -2
  202. package/overlay/styles/_index.scss +1 -1
  203. package/package.json +1 -6
  204. package/pagination/styles/_index.scss +36 -25
  205. package/popconfirm/styles/_index.scss +1 -1
  206. package/popover/styles/_index.scss +2 -2
  207. package/radio/styles/_index.scss +20 -5
  208. package/rating/styles/_index.scss +12 -1
  209. package/schematics/migrations/v8/index.js +122 -0
  210. package/schematics/migrations.json +5 -0
  211. package/schematics/ng-add/index.js +3 -3
  212. package/schematics/ng-add/schema.json +6 -6
  213. package/schematics/provider/schema.json +1 -1
  214. package/schematics/use/symbol-map.json +11 -2
  215. package/segmented/styles/_index.scss +31 -8
  216. package/select/styles/_index.scss +73 -25
  217. package/sidebar/styles/_index.scss +3 -3
  218. package/slider/styles/_index.scss +5 -3
  219. package/speed-dial/styles/_index.scss +1 -0
  220. package/splitter/styles/_index.scss +7 -4
  221. package/spotlight-card/styles/_index.scss +8 -4
  222. package/stepper/styles/_index.scss +4 -4
  223. package/styles/_animations.scss +0 -23
  224. package/styles.scss +0 -1
  225. package/switch/styles/_index.scss +25 -6
  226. package/table/styles/_index.scss +69 -8
  227. package/tabs/styles/_index.scss +46 -3
  228. package/textarea/styles/_index.scss +59 -4
  229. package/theme/styles/_colors.scss +57 -0
  230. package/theme/styles/_dark.scss +22 -8
  231. package/theme/styles/_focus.scss +5 -0
  232. package/theme/styles/_variables.scss +24 -0
  233. package/timeline/styles/_index.scss +11 -2
  234. package/toast/styles/_index.scss +15 -5
  235. package/toolbar/styles/_index.scss +30 -1
  236. package/tree/styles/_index.scss +18 -17
  237. package/types/ngwr-alert.d.ts +16 -6
  238. package/types/ngwr-carousel.d.ts +8 -1
  239. package/types/ngwr-cascader.d.ts +5 -2
  240. package/types/ngwr-checkbox.d.ts +5 -2
  241. package/types/ngwr-click-spark.d.ts +13 -1
  242. package/types/ngwr-clipboard.d.ts +12 -1
  243. package/types/ngwr-context-menu.d.ts +20 -3
  244. package/types/ngwr-date-picker.d.ts +3 -0
  245. package/types/ngwr-density.d.ts +7 -7
  246. package/types/ngwr-directives.d.ts +17 -49
  247. package/types/ngwr-drag-drop.d.ts +13 -1
  248. package/types/ngwr-drawer.d.ts +11 -3
  249. package/types/ngwr-fuzzy-text.d.ts +1 -1
  250. package/types/ngwr-glitch-text.d.ts +9 -3
  251. package/types/ngwr-input-otp.d.ts +6 -2
  252. package/types/ngwr-input.d.ts +27 -13
  253. package/types/ngwr-lightbox.d.ts +14 -1
  254. package/types/ngwr-pagination.d.ts +10 -10
  255. package/types/ngwr-radio.d.ts +14 -3
  256. package/types/ngwr-rating.d.ts +5 -1
  257. package/types/ngwr-rotating-text.d.ts +1 -0
  258. package/types/ngwr-segmented.d.ts +5 -2
  259. package/types/ngwr-select.d.ts +6 -2
  260. package/types/ngwr-spotlight-card.d.ts +1 -1
  261. package/types/ngwr-statistic.d.ts +35 -1
  262. package/types/ngwr-switch.d.ts +5 -1
  263. package/types/ngwr-table.d.ts +7 -1
  264. package/types/ngwr-tabs.d.ts +6 -0
  265. package/types/ngwr-textarea.d.ts +25 -3
  266. package/types/ngwr-toast.d.ts +7 -1
  267. package/types/ngwr-toolbar.d.ts +7 -1
  268. package/types/ngwr-validators.d.ts +3 -1
  269. package/types/ngwr-version.d.ts +1 -1
  270. package/window/styles/_index.scss +8 -8
  271. package/fesm2022/ngwr-scramble-text.mjs +0 -165
  272. package/fesm2022/ngwr-scramble-text.mjs.map +0 -1
  273. package/scramble-text/scramble-text.scss +0 -1
  274. package/scramble-text/styles/_index.scss +0 -8
  275. package/types/ngwr-scramble-text.d.ts +0 -49
@@ -1,5 +1,25 @@
1
1
  import * as i0 from '@angular/core';
2
2
 
3
+ /**
4
+ * @license
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
8
+ */
9
+ /**
10
+ * Native input `type` values supported by `<wr-input>`.
11
+ */
12
+ type WrInputType = 'text' | 'number' | 'password' | 'email' | 'search' | 'tel' | 'url';
13
+
14
+ /**
15
+ * @license
16
+ *
17
+ * Use of this source code is governed by an MIT-style license that can be
18
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
19
+ */
20
+ /** Control size for `[wrInput]` — shares the `--wr-control-*` contract. */
21
+ type WrInputSize = 'sm' | 'md' | 'lg';
22
+
3
23
  /**
4
24
  * Applies NGWR input styling to a native `<input>` element.
5
25
  *
@@ -22,11 +42,16 @@ import * as i0 from '@angular/core';
22
42
  * @see https://ngwr.dev/components/input
23
43
  */
24
44
  declare class WrInput {
45
+ /**
46
+ * Control size. Named `wrSize` (not `size`) so it never clashes with the
47
+ * native `<input size>` attribute. @default 'md'
48
+ */
49
+ readonly wrSize: i0.InputSignal<WrInputSize>;
25
50
  /** Pill-shaped corners. @default false */
26
51
  readonly rounded: i0.InputSignalWithTransform<boolean, any>;
27
52
  protected readonly classes: i0.Signal<string>;
28
53
  static ɵfac: i0.ɵɵFactoryDeclaration<WrInput, never>;
29
- static ɵdir: i0.ɵɵDirectiveDeclaration<WrInput, "input[wrInput], textarea[wrInput]", never, { "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
54
+ static ɵdir: i0.ɵɵDirectiveDeclaration<WrInput, "input[wrInput], textarea[wrInput]", never, { "wrSize": { "alias": "wrSize"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
30
55
  }
31
56
 
32
57
  /**
@@ -116,16 +141,5 @@ declare class WrPasswordToggle {
116
141
  static ɵcmp: i0.ɵɵComponentDeclaration<WrPasswordToggle, "wr-password-toggle", never, { "for": { "alias": "for"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
117
142
  }
118
143
 
119
- /**
120
- * @license
121
- *
122
- * Use of this source code is governed by an MIT-style license that can be
123
- * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
124
- */
125
- /**
126
- * Native input `type` values supported by `<wr-input>`.
127
- */
128
- type WrInputType = 'text' | 'number' | 'password' | 'email' | 'search' | 'tel' | 'url';
129
-
130
144
  export { WrInput, WrInputGroup, WrInputPrefix, WrInputSuffix, WrPasswordToggle };
131
- export type { WrInputType };
145
+ export type { WrInputSize, WrInputType };
@@ -29,6 +29,14 @@ declare class WrLightbox {
29
29
  readonly disablePreview: _angular_core.InputSignalWithTransform<boolean, any>;
30
30
  /** Caption shown under the full image in the lightbox. */
31
31
  readonly caption: _angular_core.InputSignal<string>;
32
+ /**
33
+ * Reserve space before the image resolves by fixing the thumbnail's
34
+ * `aspect-ratio` (e.g. `'16 / 9'`, `'4 / 3'`, or a number like `1.5`).
35
+ * Prevents the layout jump when the intrinsic image size isn't known up
36
+ * front — pair it with a `width` and the box keeps its height from first
37
+ * paint. @default null
38
+ */
39
+ readonly aspectRatio: _angular_core.InputSignal<string | number | null>;
32
40
  protected readonly open: _angular_core.WritableSignal<boolean>;
33
41
  protected readonly loaded: _angular_core.WritableSignal<boolean>;
34
42
  protected readonly classes: _angular_core.Signal<string>;
@@ -40,11 +48,16 @@ declare class WrLightbox {
40
48
  constructor();
41
49
  protected onClick(): void;
42
50
  protected onClose(): void;
51
+ private viewerStartY;
52
+ private viewerSwiping;
53
+ protected onViewerSwipeStart(event: TouchEvent): void;
54
+ protected onViewerSwipeMove(event: TouchEvent, viewer: HTMLElement): void;
55
+ protected onViewerSwipeEnd(event: TouchEvent, viewer: HTMLElement): void;
43
56
  protected onLoad(): void;
44
57
  private openOverlay;
45
58
  private closeOverlay;
46
59
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrLightbox, never>;
47
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrLightbox, "wr-lightbox", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "preview": { "alias": "preview"; "required": false; "isSignal": true; }; "disablePreview": { "alias": "disablePreview"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
60
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrLightbox, "wr-lightbox", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "preview": { "alias": "preview"; "required": false; "isSignal": true; }; "disablePreview": { "alias": "disablePreview"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
48
61
  }
49
62
 
50
63
  export { WrLightbox };
@@ -1,5 +1,4 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { WrButtonSize } from 'ngwr/button';
3
2
 
4
3
  /**
5
4
  * @license
@@ -33,12 +32,9 @@ type WrPaginationShape = 'rounded' | 'square';
33
32
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
34
33
  */
35
34
  /**
36
- * Size variant. The middle three (`sm` / `md` / `lg`) cascade the
37
- * matching `<wr-btn>` size directly; `xs` and `xl` reuse the closest
38
- * button size and overlay tighter / chunkier padding + font tokens so
39
- * the cells read smaller / bigger than the button's own scale.
35
+ * Size variant. Cascades the matching `<wr-btn>` size to every cell.
40
36
  */
41
- type WrPaginationSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
37
+ type WrPaginationSize = 'sm' | 'md' | 'lg';
42
38
 
43
39
  declare const ELLIPSIS: "\u2026";
44
40
  type PageEntry = number | typeof ELLIPSIS;
@@ -75,14 +71,18 @@ declare class WrPagination {
75
71
  readonly showTotal: _angular_core.InputSignalWithTransform<boolean, any>;
76
72
  /** Horizontal alignment. @default 'start' */
77
73
  readonly align: _angular_core.InputSignal<WrPaginationAlign>;
78
- /** Size variant — cascades to every internal button. @default 'md' */
74
+ /** Size variant — cascades to every internal button. @default 'sm' */
79
75
  readonly size: _angular_core.InputSignal<WrPaginationSize>;
80
- /** Resolved button size — clamps xs/xl to the closest button size. @internal */
81
- protected readonly buttonSize: _angular_core.Signal<WrButtonSize>;
82
76
  /** Cell corner treatment. @default 'rounded' */
83
77
  readonly shape: _angular_core.InputSignal<WrPaginationShape>;
84
78
  /** Disable interaction. @default false */
85
79
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
80
+ /**
81
+ * Collapse to a compact `‹ page / total ›` pager when the control's own box
82
+ * is too narrow for the full numbered strip (a container query on its own
83
+ * width, not the viewport). @default false
84
+ */
85
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
86
86
  /** Localised text between range and total ("X–Y of Z"). Falls back to `pagination.of` then `'of'`. */
87
87
  readonly ofLabel: _angular_core.InputSignal<string | null>;
88
88
  /** Previous-page button aria-label. Falls back to `pagination.prev`. */
@@ -112,7 +112,7 @@ declare class WrPagination {
112
112
  protected goTo(page: number | typeof ELLIPSIS): void;
113
113
  protected onSizeChange(size: number): void;
114
114
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrPagination, never>;
115
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPagination, "wr-pagination", never, { "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showSizeChanger": { "alias": "showSizeChanger"; "required": false; "isSignal": true; }; "showTotal": { "alias": "showTotal"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; }, never, never, true, never>;
115
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPagination, "wr-pagination", never, { "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showSizeChanger": { "alias": "showSizeChanger"; "required": false; "isSignal": true; }; "showTotal": { "alias": "showTotal"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; }, never, never, true, never>;
116
116
  }
117
117
 
118
118
  export { WrPagination };
@@ -16,6 +16,7 @@ import { ControlValueAccessor } from '@angular/forms';
16
16
  *
17
17
  * @see https://ngwr.dev/components/radio
18
18
  */
19
+ type WrRadioSize = 'sm' | 'md' | 'lg';
19
20
  declare class WrRadio {
20
21
  /** Stable id used to associate the native input with its label. */
21
22
  readonly id: _angular_core.InputSignal<string>;
@@ -26,16 +27,26 @@ declare class WrRadio {
26
27
  * default solid circle. Use any registered NGWR icon.
27
28
  */
28
29
  readonly icon: _angular_core.InputSignal<string | null>;
30
+ /** Control size — shares the `--wr-control-*` contract. @default 'md' */
31
+ readonly size: _angular_core.InputSignal<WrRadioSize>;
32
+ /**
33
+ * Disable just this option. The group can also be disabled as a whole via
34
+ * `<wr-radio-group disabled>`; either source disables this radio.
35
+ *
36
+ * @default false
37
+ */
38
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
29
39
  private readonly group;
30
40
  constructor();
31
41
  protected readonly name: _angular_core.Signal<string>;
32
42
  protected readonly checked: _angular_core.Signal<boolean>;
33
- protected readonly disabled: _angular_core.Signal<boolean>;
43
+ /** Effective disabled — this option's own `disabled` or the group's. */
44
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
34
45
  protected readonly classes: _angular_core.Signal<string>;
35
46
  protected onSelect(): void;
36
47
  protected onBlur(): void;
37
48
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrRadio, never>;
38
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrRadio, "wr-radio", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
49
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrRadio, "wr-radio", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
39
50
  }
40
51
 
41
52
  /**
@@ -117,4 +128,4 @@ declare class WrRadioGroup implements ControlValueAccessor, WrRadioGroupContext
117
128
  }
118
129
 
119
130
  export { WR_RADIO_GROUP, WrRadio, WrRadioGroup };
120
- export type { WrRadioGroupContext };
131
+ export type { WrRadioGroupContext, WrRadioSize };
@@ -18,6 +18,7 @@ import { ControlValueAccessor } from '@angular/forms';
18
18
  *
19
19
  * @see https://ngwr.dev/components/rating
20
20
  */
21
+ type WrRatingSize = 'sm' | 'md' | 'lg';
21
22
  declare class WrRating implements ControlValueAccessor {
22
23
  /** Total number of slots. @default 5 */
23
24
  readonly count: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -27,6 +28,8 @@ declare class WrRating implements ControlValueAccessor {
27
28
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, any>;
28
29
  /** Disable interaction. @default false */
29
30
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
31
+ /** Control size — scales the icons + gaps. @default 'md' */
32
+ readonly size: _angular_core.InputSignal<WrRatingSize>;
30
33
  /** Accessible label. @default 'Rating' */
31
34
  readonly ariaLabel: _angular_core.InputSignal<string>;
32
35
  /** Last committed value (mirrored from the CVA). */
@@ -56,7 +59,8 @@ declare class WrRating implements ControlValueAccessor {
56
59
  private computeValue;
57
60
  private commit;
58
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrRating, never>;
59
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrRating, "wr-rating", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
62
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrRating, "wr-rating", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
60
63
  }
61
64
 
62
65
  export { WrRating };
66
+ export type { WrRatingSize };
@@ -49,6 +49,7 @@ declare class WrRotatingText {
49
49
  protected readonly current: _angular_core.Signal<string>;
50
50
  protected readonly words: _angular_core.Signal<readonly Word[]>;
51
51
  private readonly host;
52
+ private readonly injector;
52
53
  private readonly destroyRef;
53
54
  private readonly isBrowser;
54
55
  private readonly platform;
@@ -39,6 +39,7 @@ interface WrSegmentedOption<T = unknown> {
39
39
  *
40
40
  * @see https://ngwr.dev/components/segmented
41
41
  */
42
+ type WrSegmentedSize = 'sm' | 'md' | 'lg';
42
43
  declare class WrSegmented<T = unknown> {
43
44
  /** The segments to render. */
44
45
  readonly options: _angular_core.InputSignal<readonly WrSegmentedOption<T>[]>;
@@ -46,6 +47,8 @@ declare class WrSegmented<T = unknown> {
46
47
  readonly value: _angular_core.ModelSignal<T | null>;
47
48
  /** Disable the whole control. @default false */
48
49
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
50
+ /** Control size — shares the `--wr-control-*` contract. @default 'md' */
51
+ readonly size: _angular_core.InputSignal<WrSegmentedSize>;
49
52
  /** Index of the selected option, or `-1` when nothing is selected. */
50
53
  protected readonly selectedIndex: _angular_core.Signal<number>;
51
54
  /** Flips true after the first paint so the thumb only animates user-driven changes, not the initial snap. */
@@ -58,8 +61,8 @@ declare class WrSegmented<T = unknown> {
58
61
  protected select(option: WrSegmentedOption<T>): void;
59
62
  protected trackByValue(_: number, option: WrSegmentedOption<T>): unknown;
60
63
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSegmented<any>, never>;
61
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSegmented<any>, "wr-segmented", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
64
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSegmented<any>, "wr-segmented", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
62
65
  }
63
66
 
64
67
  export { WrSegmented };
65
- export type { WrSegmentedOption };
68
+ export type { WrSegmentedOption, WrSegmentedSize };
@@ -37,6 +37,8 @@ type WrSelectTagValidator = (value: string, existing: readonly string[]) => bool
37
37
  * so stale responses can't clobber fresh ones.
38
38
  */
39
39
  type WrSelectSearchLoader<T> = (query: string) => Observable<readonly T[]> | Promise<readonly T[]> | readonly T[];
40
+ /** Control size for `<wr-select>` — shares the `--wr-control-*` contract. */
41
+ type WrSelectSize = 'sm' | 'md' | 'lg';
40
42
 
41
43
  /**
42
44
  * @license
@@ -155,6 +157,8 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
155
157
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
156
158
  /** Pill-shaped corners on the trigger. @default false */
157
159
  readonly rounded: _angular_core.InputSignalWithTransform<boolean, any>;
160
+ /** Control size — shares the `--wr-control-*` contract. @default 'md' */
161
+ readonly size: _angular_core.InputSignal<WrSelectSize>;
158
162
  /**
159
163
  * Present the option panel as a full-width bottom-sheet on small
160
164
  * viewports instead of an anchored dropdown. `undefined` follows the
@@ -355,7 +359,7 @@ declare class WrSelect implements ControlValueAccessor, WrSelectContext {
355
359
  private openOverlay;
356
360
  private closeOverlay;
357
361
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSelect, never>;
358
- 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; }; "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>;
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>;
359
363
  }
360
364
 
361
365
  /**
@@ -419,4 +423,4 @@ declare class WrOptionGroup {
419
423
  }
420
424
 
421
425
  export { WR_SELECT, WrOption, WrOptionGroup, WrSelect };
422
- export type { WrSelectContext, WrSelectMode, WrSelectSearchLoader, WrSelectTagValidator };
426
+ export type { WrSelectContext, WrSelectMode, WrSelectSearchLoader, WrSelectSize, WrSelectTagValidator };
@@ -20,7 +20,7 @@ import * as _angular_core from '@angular/core';
20
20
  declare class WrSpotlightCard {
21
21
  /**
22
22
  * Highlight colour (any CSS colour). When unset, the theme decides:
23
- * a soft dark tint on light surfaces, white-alpha on dark.
23
+ * a dark-ish glow on light surfaces, a light glow on dark.
24
24
  */
25
25
  readonly spotlightColor: _angular_core.InputSignal<string | null>;
26
26
  /** Where the spotlight fades out, as a percentage of the gradient. @default 80 */
@@ -4,15 +4,22 @@ import * as _angular_core from '@angular/core';
4
4
  * KPI card — label + big number + optional prefix/suffix + delta. Pair
5
5
  * with a layout grid for dashboards.
6
6
  *
7
+ * When `value` is numeric the number counts up (eased) from its previous
8
+ * value to the new one on every change — see `animate`. String values and
9
+ * `prefers-reduced-motion` render instantly.
10
+ *
7
11
  * @example
8
12
  * ```html
9
13
  * <wr-statistic label="Active users" [value]="12345" suffix="users" />
10
14
  * <wr-statistic label="Revenue" [value]="9512" prefix="$" [delta]="12.4" />
15
+ * <wr-statistic label="Churn" [value]="1.8" suffix="%" [precision]="1" />
11
16
  * ```
12
17
  *
13
18
  * @see https://ngwr.dev/components/statistic
14
19
  */
15
20
  declare class WrStatistic {
21
+ private readonly platform;
22
+ private readonly locale;
16
23
  readonly label: _angular_core.InputSignal<string>;
17
24
  /** The number (or string) to display in the main slot. */
18
25
  readonly value: _angular_core.InputSignal<string | number | null>;
@@ -20,6 +27,33 @@ declare class WrStatistic {
20
27
  readonly prefix: _angular_core.InputSignal<string>;
21
28
  /** Suffix glyph / unit (e.g. `'%'`, `'kg'`). */
22
29
  readonly suffix: _angular_core.InputSignal<string>;
30
+ /** Fixed number of decimals applied to numeric values. @default 0 */
31
+ readonly precision: _angular_core.InputSignalWithTransform<number, unknown>;
32
+ /**
33
+ * Count up to a new numeric `value` instead of swapping instantly. Always
34
+ * off for string values or under `prefers-reduced-motion`. @default true
35
+ */
36
+ readonly animate: _angular_core.InputSignalWithTransform<boolean, any>;
37
+ /** Count-up duration (ms). @default 700 */
38
+ readonly duration: _angular_core.InputSignalWithTransform<number, unknown>;
39
+ /**
40
+ * The current value coerced to a finite number, or `null` when `value` is
41
+ * a non-numeric string / empty / nullish (rendered as-is).
42
+ */
43
+ protected readonly numericValue: _angular_core.Signal<number | null>;
44
+ /** Whether the value should count up (browser, numeric, opted-in, motion allowed). */
45
+ protected readonly animated: _angular_core.Signal<boolean>;
46
+ /** Animation start — the previously-rendered numeric value (0 on first paint). */
47
+ protected readonly animateFrom: _angular_core.WritableSignal<number>;
48
+ /** Bookkeeping: the last numeric value seen, fed back as the next `from`. */
49
+ private readonly lastNumeric;
50
+ constructor();
51
+ /**
52
+ * Static (non-animated) display string. Numeric values honour `precision`
53
+ * and locale grouping so they match the count-up output; everything else
54
+ * renders verbatim with an em-dash fallback.
55
+ */
56
+ protected readonly displayValue: _angular_core.Signal<string>;
23
57
  /**
24
58
  * Optional delta vs previous period — shown as `+x.x%` (or `-x.x%`).
25
59
  * Use `deltaSuffix` to change the trailing unit.
@@ -31,7 +65,7 @@ declare class WrStatistic {
31
65
  protected readonly deltaDirection: _angular_core.Signal<"up" | "down" | "flat">;
32
66
  protected readonly deltaText: _angular_core.Signal<string>;
33
67
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrStatistic, never>;
34
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrStatistic, "wr-statistic", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaSuffix": { "alias": "deltaSuffix"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
68
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrStatistic, "wr-statistic", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "precision": { "alias": "precision"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaSuffix": { "alias": "deltaSuffix"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
35
69
  }
36
70
 
37
71
  /**
@@ -11,6 +11,7 @@ import { ControlValueAccessor } from '@angular/forms';
11
11
  *
12
12
  * @see https://ngwr.dev/components/switch
13
13
  */
14
+ type WrSwitchSize = 'sm' | 'md' | 'lg';
14
15
  declare class WrSwitch implements ControlValueAccessor {
15
16
  /** Stable id used to associate the native input with its label. */
16
17
  readonly id: _angular_core.InputSignal<string>;
@@ -20,6 +21,8 @@ declare class WrSwitch implements ControlValueAccessor {
20
21
  * @default false
21
22
  */
22
23
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
24
+ /** Control size — shares the `--wr-control-*` contract. @default 'md' */
25
+ readonly size: _angular_core.InputSignal<WrSwitchSize>;
23
26
  protected readonly checked: _angular_core.WritableSignal<boolean>;
24
27
  private readonly disabledFromCva;
25
28
  protected readonly effectiveDisabled: _angular_core.Signal<boolean>;
@@ -33,7 +36,8 @@ declare class WrSwitch implements ControlValueAccessor {
33
36
  protected onInputChange(event: Event): void;
34
37
  protected onInputBlur(): void;
35
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSwitch, never>;
36
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSwitch, "wr-switch", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, 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>;
37
40
  }
38
41
 
39
42
  export { WrSwitch };
43
+ export type { WrSwitchSize };
@@ -139,6 +139,12 @@ declare class WrTable {
139
139
  readonly items: _angular_core.InputSignal<readonly Record<string, unknown>[] | null | undefined>;
140
140
  /** Show the loading spinner overlay. @default false */
141
141
  readonly loading: _angular_core.InputSignalWithTransform<boolean, any>;
142
+ /**
143
+ * Collapse each row to a labelled card when the table's own box is too narrow
144
+ * for columns (a container query on its own width, not the viewport). Every
145
+ * cell shows its column title as a label. @default false
146
+ */
147
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, any>;
142
148
  /** Two-way bindable sort array. Order in array = application order. */
143
149
  readonly sort: _angular_core.ModelSignal<readonly WrTableSortState[]>;
144
150
  /** Fires whenever a column's filter selection changes. */
@@ -174,7 +180,7 @@ declare class WrTable {
174
180
  protected getValue(item: Record<string, unknown>, key: unknown): unknown;
175
181
  protected templateFor(key: unknown): TemplateRef<WrTableCellContext> | undefined;
176
182
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTable, never>;
177
- 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; }; "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>;
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>;
178
184
  }
179
185
 
180
186
  /**
@@ -110,6 +110,12 @@ declare class WrTabs implements WrTabsContext {
110
110
  }): void;
111
111
  unregister(): void;
112
112
  protected readonly stripRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
113
+ /** Whether the strip is scrolled away from its start / end — drives the edge fades. */
114
+ protected readonly canScrollStart: _angular_core.WritableSignal<boolean>;
115
+ protected readonly canScrollEnd: _angular_core.WritableSignal<boolean>;
116
+ constructor();
117
+ /** Recompute which edges can scroll, from the strip's scroll metrics. @internal */
118
+ protected updateFades(): void;
113
119
  protected onTabClick(tab: WrTab): void;
114
120
  /** Header id for `aria-labelledby` on the panel. @internal */
115
121
  headerId(key: string): string;
@@ -16,13 +16,19 @@ import { ControlValueAccessor } from '@angular/forms';
16
16
  *
17
17
  * @see https://ngwr.dev/components/textarea
18
18
  */
19
+ type WrTextareaSize = 'sm' | 'md' | 'lg';
20
+ type WrTextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
19
21
  declare class WrTextarea implements ControlValueAccessor {
20
22
  /** Native placeholder text. @default '' */
21
23
  readonly placeholder: _angular_core.InputSignal<string>;
24
+ /** Control size — shares the `--wr-control-*` contract. @default 'md' */
25
+ readonly size: _angular_core.InputSignal<WrTextareaSize>;
22
26
  /** Visible row count. @default 3 */
23
27
  readonly rows: _angular_core.InputSignalWithTransform<number, unknown>;
24
- /** Allow user resize via the native handle. @default true */
28
+ /** Allow user resize via the corner grip. @default true */
25
29
  readonly resizable: _angular_core.InputSignalWithTransform<boolean, any>;
30
+ /** Resize direction of the corner grip (the grip icon adapts). @default 'vertical' */
31
+ readonly resize: _angular_core.InputSignal<WrTextareaResize>;
26
32
  /** Read-only state. @default false */
27
33
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, any>;
28
34
  /** Grow the textarea to fit its content. @default false */
@@ -40,11 +46,23 @@ declare class WrTextarea implements ControlValueAccessor {
40
46
  protected readonly focused: _angular_core.WritableSignal<boolean>;
41
47
  protected readonly effectiveDisabled: _angular_core.Signal<boolean>;
42
48
  protected readonly native: _angular_core.Signal<ElementRef<HTMLTextAreaElement>>;
49
+ /** Resize direction, gated by `resizable` (false → 'none'). */
50
+ protected readonly effectiveResize: _angular_core.Signal<WrTextareaResize>;
43
51
  protected readonly classes: _angular_core.Signal<string>;
52
+ /** Show the corner grip (hidden when direction is 'none' / autosize / disabled). */
53
+ protected readonly showHandle: _angular_core.Signal<boolean>;
44
54
  private readonly platformId;
45
55
  private readonly isBrowser;
56
+ private readonly hostEl;
46
57
  private onChange;
47
58
  private onTouched;
59
+ private resizing;
60
+ private resizeStartY;
61
+ private resizeStartX;
62
+ private resizeStartHeight;
63
+ private resizeStartWidth;
64
+ private resizeMinHeight;
65
+ private resizeMaxWidth;
48
66
  constructor();
49
67
  writeValue(value: string | null): void;
50
68
  registerOnChange(fn: (value: string) => void): void;
@@ -52,9 +70,13 @@ declare class WrTextarea implements ControlValueAccessor {
52
70
  setDisabledState(isDisabled: boolean): void;
53
71
  protected onInput(event: Event): void;
54
72
  protected onBlur(): void;
55
- private resize;
73
+ protected startResize(event: PointerEvent): void;
74
+ protected onResize(event: PointerEvent): void;
75
+ protected endResize(event: PointerEvent): void;
76
+ private autofit;
56
77
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrTextarea, never>;
57
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrTextarea, "wr-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "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>;
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>;
58
79
  }
59
80
 
60
81
  export { WrTextarea };
82
+ export type { WrTextareaResize, WrTextareaSize };
@@ -147,7 +147,11 @@ declare class WrToast {
147
147
  private currentPosition;
148
148
  private currentMode;
149
149
  private nextId;
150
+ /** Currently rendered toasts (capped at `config.maxStack`). */
150
151
  private active;
152
+ /** Overflow waiting for a free slot — promoted FIFO as actives dismiss, so
153
+ * nothing is ever silently dropped. */
154
+ private queue;
151
155
  /** Open a toast. Returns a handle you can `dismiss()` early. */
152
156
  show(options: WrToastOptions): WrToastRef;
153
157
  /** Dismiss a single toast by id. */
@@ -161,7 +165,9 @@ declare class WrToast {
161
165
  private startTimer;
162
166
  private pauseTimer;
163
167
  private ensureHost;
164
- private enforceMaxStack;
168
+ /** Fill any free stack slots from the queue (FIFO), starting each promoted
169
+ * toast's auto-dismiss timer only as it becomes visible. */
170
+ private promoteFromQueue;
165
171
  private pushToHost;
166
172
  private disposeHost;
167
173
  static ɵfac: i0.ɵɵFactoryDeclaration<WrToast, never>;
@@ -23,8 +23,14 @@ import * as i0 from '@angular/core';
23
23
  * @see https://ngwr.dev/components/toolbar
24
24
  */
25
25
  declare class WrToolbar {
26
+ /**
27
+ * Stack the zones vertically when the toolbar's own box is too narrow to fit
28
+ * them in a row (a container query on its own width, not the viewport — so it
29
+ * adapts inside a narrow column or split pane). @default false
30
+ */
31
+ readonly responsive: i0.InputSignalWithTransform<boolean, any>;
26
32
  static ɵfac: i0.ɵɵFactoryDeclaration<WrToolbar, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<WrToolbar, "wr-toolbar", never, {}, {}, never, ["[wrToolbarStart]", "[wrToolbarCenter]", "[wrToolbarEnd]"], true, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<WrToolbar, "wr-toolbar", never, { "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, {}, never, ["[wrToolbarStart]", "[wrToolbarCenter]", "[wrToolbarEnd]"], true, never>;
28
34
  }
29
35
 
30
36
  export { WrToolbar };
@@ -39,10 +39,12 @@ declare const WrValidators: {
39
39
  hexColor: (control: AbstractControl) => ValidationErrors | null;
40
40
  /**
41
41
  * Valid URL. Accepts any scheme by default; pass `{ protocols: ['https'] }`
42
- * to restrict.
42
+ * to restrict. A scheme is required by default; pass `{ requireProtocol: false }`
43
+ * to also accept bare domains (e.g. `ngwr.dev`), assuming `https`.
43
44
  */
44
45
  url: (options?: {
45
46
  readonly protocols?: readonly string[];
47
+ readonly requireProtocol?: boolean;
46
48
  }) => ValidatorFn;
47
49
  /** Credit card number — Luhn check + 13-19 digit length. Spaces and dashes are stripped first. */
48
50
  cardNumber: (control: AbstractControl) => ValidationErrors | null;
@@ -16,7 +16,7 @@ import { InjectionToken } from '@angular/core';
16
16
  * Distinct from `Version` exported by `@angular/core`, which reports the
17
17
  * loaded Angular runtime version (e.g. `'21.2.13'`), not ngwr's.
18
18
  */
19
- declare const NGWR_VERSION = "7.2.0";
19
+ declare const NGWR_VERSION = "8.0.0";
20
20
 
21
21
  /**
22
22
  * @license