ngwr 10.0.0 → 10.1.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 (233) hide show
  1. package/README.md +9 -8
  2. package/action-sheet/styles/_index.scss +6 -1
  3. package/badge/styles/_index.scss +1 -1
  4. package/badge/styles/_tag.scss +2 -2
  5. package/border-glow/styles/_index.scss +5 -0
  6. package/button/styles/_index.scss +6 -6
  7. package/calendar/styles/_index.scss +9 -1
  8. package/circular-text/styles/_index.scss +6 -1
  9. package/density/styles/_index.scss +3 -1
  10. package/dialog/styles/_index.scss +1 -2
  11. package/drag-drop/styles/_index.scss +20 -7
  12. package/event-calendar/styles/_index.scss +284 -0
  13. package/falling-text/styles/_index.scss +5 -0
  14. package/fesm2022/ngwr-alert.mjs +8 -3
  15. package/fesm2022/ngwr-alert.mjs.map +1 -1
  16. package/fesm2022/ngwr-back-top.mjs +6 -4
  17. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  18. package/fesm2022/ngwr-border-glow.mjs +12 -9
  19. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  20. package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
  21. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  22. package/fesm2022/ngwr-calendar.mjs +5 -3
  23. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  24. package/fesm2022/ngwr-card.mjs +2 -2
  25. package/fesm2022/ngwr-card.mjs.map +1 -1
  26. package/fesm2022/ngwr-carousel.mjs +17 -4
  27. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  28. package/fesm2022/ngwr-cascader.mjs +31 -4
  29. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  30. package/fesm2022/ngwr-checkbox.mjs +12 -3
  31. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  32. package/fesm2022/ngwr-circular-text.mjs +2 -2
  33. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  34. package/fesm2022/ngwr-command-palette.mjs +7 -3
  35. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  36. package/fesm2022/ngwr-counter.mjs +9 -1
  37. package/fesm2022/ngwr-counter.mjs.map +1 -1
  38. package/fesm2022/ngwr-date-picker.mjs +23 -6
  39. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  40. package/fesm2022/ngwr-descriptions.mjs +5 -4
  41. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  42. package/fesm2022/ngwr-drag-drop.mjs +2 -2
  43. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  44. package/fesm2022/ngwr-dropdown.mjs +4 -0
  45. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  46. package/fesm2022/ngwr-event-calendar.mjs +723 -0
  47. package/fesm2022/ngwr-event-calendar.mjs.map +1 -0
  48. package/fesm2022/ngwr-falling-text.mjs +2 -2
  49. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  50. package/fesm2022/ngwr-file-upload.mjs +2 -2
  51. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  52. package/fesm2022/ngwr-form.mjs +258 -42
  53. package/fesm2022/ngwr-form.mjs.map +1 -1
  54. package/fesm2022/ngwr-fuzzy-text.mjs +15 -1
  55. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  56. package/fesm2022/ngwr-gauge.mjs +8 -3
  57. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  58. package/fesm2022/ngwr-glitch-text.mjs +2 -2
  59. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  60. package/fesm2022/ngwr-gradient-text.mjs +2 -2
  61. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  62. package/fesm2022/ngwr-i18n-en.mjs +73 -5
  63. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  64. package/fesm2022/ngwr-i18n-ru.mjs +73 -5
  65. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  66. package/fesm2022/ngwr-i18n.mjs +20 -2
  67. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  68. package/fesm2022/ngwr-icon.mjs +5 -0
  69. package/fesm2022/ngwr-icon.mjs.map +1 -1
  70. package/fesm2022/ngwr-input-number.mjs +19 -3
  71. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  72. package/fesm2022/ngwr-input.mjs +48 -6
  73. package/fesm2022/ngwr-input.mjs.map +1 -1
  74. package/fesm2022/ngwr-knob.mjs +8 -3
  75. package/fesm2022/ngwr-knob.mjs.map +1 -1
  76. package/fesm2022/ngwr-lightbox.mjs +32 -3
  77. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  78. package/fesm2022/ngwr-line-chart.mjs +3 -3
  79. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  80. package/fesm2022/ngwr-list.mjs +2 -2
  81. package/fesm2022/ngwr-list.mjs.map +1 -1
  82. package/fesm2022/ngwr-loading-bar.mjs +2 -2
  83. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  84. package/fesm2022/ngwr-marquee.mjs +2 -2
  85. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  86. package/fesm2022/ngwr-media.mjs +3 -0
  87. package/fesm2022/ngwr-media.mjs.map +1 -1
  88. package/fesm2022/ngwr-meter-group.mjs +14 -3
  89. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  90. package/fesm2022/ngwr-page-header.mjs +2 -2
  91. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  92. package/fesm2022/ngwr-pagination.mjs +1 -1
  93. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  94. package/fesm2022/ngwr-progress.mjs +8 -2
  95. package/fesm2022/ngwr-progress.mjs.map +1 -1
  96. package/fesm2022/ngwr-qr.mjs.map +1 -1
  97. package/fesm2022/ngwr-rating.mjs +6 -4
  98. package/fesm2022/ngwr-rating.mjs.map +1 -1
  99. package/fesm2022/ngwr-result.mjs +19 -12
  100. package/fesm2022/ngwr-result.mjs.map +1 -1
  101. package/fesm2022/ngwr-segmented.mjs +2 -2
  102. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  103. package/fesm2022/ngwr-select.mjs +28 -8
  104. package/fesm2022/ngwr-select.mjs.map +1 -1
  105. package/fesm2022/ngwr-shiny-text.mjs +4 -6
  106. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  107. package/fesm2022/ngwr-speed-dial.mjs +11 -3
  108. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  109. package/fesm2022/ngwr-spotlight-card.mjs +2 -2
  110. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  111. package/fesm2022/ngwr-squircle.mjs +1 -1
  112. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  113. package/fesm2022/ngwr-star-border.mjs +2 -2
  114. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  115. package/fesm2022/ngwr-switch.mjs +10 -3
  116. package/fesm2022/ngwr-switch.mjs.map +1 -1
  117. package/fesm2022/ngwr-table.mjs +233 -19
  118. package/fesm2022/ngwr-table.mjs.map +1 -1
  119. package/fesm2022/ngwr-tabs.mjs +21 -4
  120. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  121. package/fesm2022/ngwr-textarea.mjs +20 -4
  122. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  123. package/fesm2022/ngwr-tilt-card.mjs +2 -2
  124. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  125. package/fesm2022/ngwr-toolbar.mjs +2 -2
  126. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  127. package/fesm2022/ngwr-tour.mjs +264 -0
  128. package/fesm2022/ngwr-tour.mjs.map +1 -0
  129. package/fesm2022/ngwr-transfer.mjs +184 -0
  130. package/fesm2022/ngwr-transfer.mjs.map +1 -0
  131. package/fesm2022/ngwr-tree.mjs +23 -6
  132. package/fesm2022/ngwr-tree.mjs.map +1 -1
  133. package/fesm2022/ngwr-typewriter.mjs +2 -2
  134. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  135. package/fesm2022/ngwr-validators.mjs +118 -2
  136. package/fesm2022/ngwr-validators.mjs.map +1 -1
  137. package/fesm2022/ngwr-version.mjs +2 -2
  138. package/fesm2022/ngwr-version.mjs.map +1 -1
  139. package/fesm2022/ngwr-virtual-scroll.mjs +2 -2
  140. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  141. package/fesm2022/ngwr-waves.mjs +2 -2
  142. package/fesm2022/ngwr-waves.mjs.map +1 -1
  143. package/form/styles/_index.scss +8 -4
  144. package/glitch-text/styles/_index.scss +5 -0
  145. package/gradient-text/styles/_index.scss +5 -0
  146. package/i18n/en.json +74 -6
  147. package/i18n/ru.json +74 -6
  148. package/icon/styles/_index.scss +5 -0
  149. package/keyboard/styles/_index.scss +5 -0
  150. package/llms-full.txt +123 -62
  151. package/llms.txt +29 -8
  152. package/loading-bar/styles/_index.scss +5 -0
  153. package/marquee/styles/_index.scss +7 -2
  154. package/overlay/styles/_index.scss +5 -0
  155. package/package.json +13 -1
  156. package/popover/styles/_index.scss +48 -12
  157. package/pull-to-refresh/styles/_index.scss +5 -0
  158. package/result/styles/_index.scss +3 -3
  159. package/schematics/icon-set/index.js +80 -34
  160. package/schematics/icon-set/schema.json +8 -3
  161. package/schematics/ng-add/index.js +5 -2
  162. package/schematics/page/templates.js +17 -21
  163. package/schematics/provider/index.js +31 -13
  164. package/schematics/provider/schema.json +40 -24
  165. package/schematics/use/index.js +5 -1
  166. package/schematics/use/schema.json +8 -3
  167. package/schematics/use/symbol-map.json +6 -177
  168. package/segmented/styles/_index.scss +1 -1
  169. package/select/styles/_index.scss +7 -3
  170. package/shiny-text/styles/_index.scss +5 -0
  171. package/speed-dial/styles/_index.scss +12 -1
  172. package/spotlight-card/styles/_index.scss +5 -0
  173. package/squircle/styles/_index.scss +5 -0
  174. package/star-border/styles/_index.scss +5 -0
  175. package/statistic/styles/_index.scss +2 -2
  176. package/styles/_animations.scss +6 -0
  177. package/styles.scss +3 -0
  178. package/table/styles/_index.scss +100 -2
  179. package/theme/styles/_colors.scss +43 -1
  180. package/theme/styles/_dark.scss +18 -6
  181. package/theme/styles/_focus.scss +2 -8
  182. package/tilt-card/styles/_index.scss +5 -0
  183. package/toast/styles/_index.scss +6 -3
  184. package/tour/styles/_index.scss +63 -0
  185. package/transfer/styles/_index.scss +105 -0
  186. package/types/ngwr-alert.d.ts +4 -1
  187. package/types/ngwr-avatar.d.ts +1 -1
  188. package/types/ngwr-back-top.d.ts +3 -2
  189. package/types/ngwr-badge.d.ts +1 -1
  190. package/types/ngwr-border-glow.d.ts +0 -1
  191. package/types/ngwr-carousel.d.ts +10 -1
  192. package/types/ngwr-cascader.d.ts +12 -1
  193. package/types/ngwr-checkbox.d.ts +9 -1
  194. package/types/ngwr-command-palette.d.ts +4 -1
  195. package/types/ngwr-date-picker.d.ts +9 -1
  196. package/types/ngwr-density.d.ts +1 -1
  197. package/types/ngwr-divider.d.ts +1 -1
  198. package/types/ngwr-event-calendar.d.ts +358 -0
  199. package/types/ngwr-form.d.ts +177 -20
  200. package/types/ngwr-fuzzy-text.d.ts +8 -0
  201. package/types/ngwr-gauge.d.ts +4 -1
  202. package/types/ngwr-i18n.d.ts +15 -0
  203. package/types/ngwr-input-number.d.ts +8 -1
  204. package/types/ngwr-input.d.ts +50 -20
  205. package/types/ngwr-knob.d.ts +4 -1
  206. package/types/ngwr-lightbox.d.ts +7 -1
  207. package/types/ngwr-line-chart.d.ts +1 -1
  208. package/types/ngwr-media.d.ts +1 -1
  209. package/types/ngwr-meter-group.d.ts +9 -1
  210. package/types/ngwr-page-header.d.ts +2 -2
  211. package/types/ngwr-pagination.d.ts +1 -1
  212. package/types/ngwr-progress.d.ts +4 -1
  213. package/types/ngwr-rating.d.ts +3 -2
  214. package/types/ngwr-result.d.ts +12 -6
  215. package/types/ngwr-segmented.d.ts +6 -0
  216. package/types/ngwr-select.d.ts +13 -7
  217. package/types/ngwr-shiny-text.d.ts +2 -4
  218. package/types/ngwr-speed-dial.d.ts +7 -1
  219. package/types/ngwr-squircle.d.ts +1 -1
  220. package/types/ngwr-switch.d.ts +7 -1
  221. package/types/ngwr-table.d.ts +126 -6
  222. package/types/ngwr-tabs.d.ts +1 -4
  223. package/types/ngwr-textarea.d.ts +8 -1
  224. package/types/ngwr-toolbar.d.ts +2 -2
  225. package/types/ngwr-tour.d.ts +132 -0
  226. package/types/ngwr-transfer.d.ts +118 -0
  227. package/types/ngwr-tree.d.ts +10 -2
  228. package/types/ngwr-validators.d.ts +62 -2
  229. package/types/ngwr-version.d.ts +2 -2
  230. package/typewriter/styles/_index.scss +5 -0
  231. package/typography/styles/_index.scss +3 -3
  232. package/virtual-scroll/styles/_index.scss +6 -1
  233. package/waves/styles/_index.scss +5 -0
@@ -13,6 +13,9 @@ import * as _angular_core from '@angular/core';
13
13
  * @see https://ngwr.dev/reference/components/gauge
14
14
  */
15
15
  declare class WrGauge {
16
+ /** Accessible name — the role needs one. Falls back to `gauge.label`. */
17
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
18
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
16
19
  readonly value: _angular_core.InputSignal<number>;
17
20
  readonly min: _angular_core.InputSignalWithTransform<number, unknown>;
18
21
  readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -33,7 +36,7 @@ declare class WrGauge {
33
36
  protected readonly valuePath: _angular_core.Signal<string>;
34
37
  protected readonly viewBox = "0 0 100 56";
35
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrGauge, never>;
36
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrGauge, "wr-gauge", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "valueColor": { "alias": "valueColor"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrGauge, "wr-gauge", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "valueColor": { "alias": "valueColor"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
37
40
  }
38
41
 
39
42
  export { WrGauge };
@@ -190,6 +190,21 @@ declare class WrTDirective {
190
190
  interface WrI18nLoader {
191
191
  load(locale: string, scope: string | null): Observable<WrI18nCatalog>;
192
192
  }
193
+ /**
194
+ * The active loader.
195
+ *
196
+ * Defaults to one that serves an empty catalog, which is what makes
197
+ * `provideWrI18n()` genuinely optional: every ngwr component routes its
198
+ * built-in strings through `useI18nText` / `readI18nText`, those inject
199
+ * `WrI18n` optionally — and because `WrI18n` is `providedIn: 'root'`, an
200
+ * optional inject still CONSTRUCTS it. Without a default here that construction
201
+ * threw `NG0201: No provider found for WR_I18N_LOADER`, so an app that had
202
+ * simply not configured i18n could not render `<wr-alert>` at all.
203
+ *
204
+ * With the empty catalog, every lookup misses, `t()` hands back the key, and
205
+ * the helpers fall through to the component's own English default — the
206
+ * documented no-i18n behaviour.
207
+ */
193
208
  declare const WR_I18N_LOADER: InjectionToken<WrI18nLoader>;
194
209
 
195
210
  /**
@@ -44,6 +44,13 @@ declare class WrInputNumber implements FormValueControl<number | null> {
44
44
  readonly suffix: _angular_core.InputSignal<string>;
45
45
  /** Placeholder shown when the input is empty. */
46
46
  readonly placeholder: _angular_core.InputSignal<string>;
47
+ /**
48
+ * Accessible name for the field. Falls back to the placeholder — inside a
49
+ * `<wr-form-field>` the projected `wrInput` picks up the label's id and needs
50
+ * neither, but standalone the text field has no name at all.
51
+ */
52
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
53
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
47
54
  /** Disable interaction. @default false */
48
55
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
49
56
  /** Read-only — values cannot be changed (steppers + typing disabled). @default false */
@@ -77,7 +84,7 @@ declare class WrInputNumber implements FormValueControl<number | null> {
77
84
  /** Format a value using `Intl.NumberFormat` for the active locale. */
78
85
  private format;
79
86
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrInputNumber, never>;
80
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrInputNumber, "wr-input-number", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; "showSteppers": { "alias": "showSteppers"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
87
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrInputNumber, "wr-input-number", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; "showSteppers": { "alias": "showSteppers"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
81
88
  }
82
89
 
83
90
  export { WrInputNumber };
@@ -1,4 +1,4 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
2
 
3
3
  /**
4
4
  * @license
@@ -7,7 +7,7 @@ import * as i0 from '@angular/core';
7
7
  * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
8
8
  */
9
9
  /**
10
- * Native input `type` values supported by `<wr-input>`.
10
+ * Native input `type` values supported by ``input[wrInput]``.
11
11
  */
12
12
  type WrInputType = 'text' | 'number' | 'password' | 'email' | 'search' | 'tel' | 'url';
13
13
 
@@ -42,16 +42,40 @@ type WrInputSize = 'sm' | 'md' | 'lg';
42
42
  * @see https://ngwr.dev/reference/components/input
43
43
  */
44
44
  declare class WrInput {
45
+ private readonly host;
46
+ private readonly field;
47
+ /**
48
+ * Read once, at construction: a static `id=""` in the template is already on
49
+ * the element by the time a directive is instantiated, and it must win over
50
+ * the field's generated one.
51
+ */
52
+ private readonly ownId;
53
+ /**
54
+ * Adopts the surrounding `<wr-form-field>`'s `controlId`, so the label it
55
+ * already rendered actually points at this element. Without this the `for`
56
+ * referenced an id that existed nowhere and the input had no label at all.
57
+ */
58
+ protected readonly resolvedId: _angular_core.Signal<string | null>;
59
+ /**
60
+ * Announced state, taken from the surrounding `<wr-form-field>`.
61
+ *
62
+ * The field renders the message but cannot reach the projected control, so
63
+ * the control reads back: without this the error is visible on screen and
64
+ * invisible to a screen reader, which never learns the field is invalid or
65
+ * what the message says.
66
+ */
67
+ protected readonly ariaInvalid: _angular_core.Signal<"true" | null>;
68
+ protected readonly describedBy: _angular_core.Signal<string | null>;
45
69
  /**
46
70
  * Control size. Named `wrSize` (not `size`) so it never clashes with the
47
71
  * native `<input size>` attribute. @default 'md'
48
72
  */
49
- readonly wrSize: i0.InputSignal<WrInputSize>;
73
+ readonly wrSize: _angular_core.InputSignal<WrInputSize>;
50
74
  /** Pill-shaped corners. @default false */
51
- readonly rounded: i0.InputSignalWithTransform<boolean, any>;
52
- protected readonly classes: i0.Signal<string>;
53
- static ɵfac: i0.ɵɵFactoryDeclaration<WrInput, 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>;
75
+ readonly rounded: _angular_core.InputSignalWithTransform<boolean, any>;
76
+ protected readonly classes: _angular_core.Signal<string>;
77
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrInput, never>;
78
+ static ɵdir: _angular_core.ɵɵ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>;
55
79
  }
56
80
 
57
81
  /**
@@ -68,8 +92,8 @@ declare class WrInput {
68
92
  * ```
69
93
  */
70
94
  declare class WrInputPrefix {
71
- static ɵfac: i0.ɵɵFactoryDeclaration<WrInputPrefix, never>;
72
- static ɵdir: i0.ɵɵDirectiveDeclaration<WrInputPrefix, "[wrInputPrefix]", never, {}, {}, never, never, true, never>;
95
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrInputPrefix, never>;
96
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrInputPrefix, "[wrInputPrefix]", never, {}, {}, never, never, true, never>;
73
97
  }
74
98
 
75
99
  /**
@@ -86,8 +110,8 @@ declare class WrInputPrefix {
86
110
  * ```
87
111
  */
88
112
  declare class WrInputSuffix {
89
- static ɵfac: i0.ɵɵFactoryDeclaration<WrInputSuffix, never>;
90
- static ɵdir: i0.ɵɵDirectiveDeclaration<WrInputSuffix, "[wrInputSuffix]", never, {}, {}, never, never, true, never>;
113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrInputSuffix, never>;
114
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrInputSuffix, "[wrInputSuffix]", never, {}, {}, never, never, true, never>;
91
115
  }
92
116
 
93
117
  /**
@@ -112,10 +136,10 @@ declare class WrInputSuffix {
112
136
  */
113
137
  declare class WrInputGroup {
114
138
  /** Pill-shaped corners. @default false */
115
- readonly rounded: i0.InputSignalWithTransform<boolean, any>;
116
- protected readonly classes: i0.Signal<string>;
117
- static ɵfac: i0.ɵɵFactoryDeclaration<WrInputGroup, never>;
118
- static ɵcmp: i0.ɵɵComponentDeclaration<WrInputGroup, "wr-input-group", never, { "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
139
+ readonly rounded: _angular_core.InputSignalWithTransform<boolean, any>;
140
+ protected readonly classes: _angular_core.Signal<string>;
141
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrInputGroup, never>;
142
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrInputGroup, "wr-input-group", never, { "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
119
143
  }
120
144
 
121
145
  /**
@@ -133,12 +157,18 @@ declare class WrInputGroup {
133
157
  */
134
158
  declare class WrPasswordToggle {
135
159
  /** Reference to the linked password input. */
136
- readonly for: i0.InputSignal<HTMLInputElement>;
137
- protected readonly revealed: i0.WritableSignal<boolean>;
138
- protected readonly ariaLabel: i0.Signal<"Hide password" | "Show password">;
160
+ readonly for: _angular_core.InputSignal<HTMLInputElement>;
161
+ protected readonly revealed: _angular_core.WritableSignal<boolean>;
162
+ /** Accessible name while the password is hidden. Falls back to `input.showPassword`. */
163
+ readonly showLabel: _angular_core.InputSignal<string | null>;
164
+ /** Accessible name while the password is revealed. Falls back to `input.hidePassword`. */
165
+ readonly hideLabel: _angular_core.InputSignal<string | null>;
166
+ private readonly resolvedShowLabel;
167
+ private readonly resolvedHideLabel;
168
+ protected readonly ariaLabel: _angular_core.Signal<string>;
139
169
  protected toggle(): void;
140
- static ɵfac: i0.ɵɵFactoryDeclaration<WrPasswordToggle, never>;
141
- static ɵcmp: i0.ɵɵComponentDeclaration<WrPasswordToggle, "wr-password-toggle", never, { "for": { "alias": "for"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
170
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrPasswordToggle, never>;
171
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrPasswordToggle, "wr-password-toggle", never, { "for": { "alias": "for"; "required": true; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
142
172
  }
143
173
 
144
174
  export { WrInput, WrInputGroup, WrInputPrefix, WrInputSuffix, WrPasswordToggle };
@@ -21,6 +21,9 @@ import { FormValueControl } from '@angular/forms/signals';
21
21
  * @see https://ngwr.dev/reference/components/knob
22
22
  */
23
23
  declare class WrKnob implements FormValueControl<number> {
24
+ /** Accessible name — the role needs one. Falls back to `knob.label`. */
25
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
26
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
24
27
  /** Minimum allowed value. @default 0 */
25
28
  readonly min: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
26
29
  /** Maximum allowed value. @default 100 */
@@ -76,7 +79,7 @@ declare class WrKnob implements FormValueControl<number> {
76
79
  private commit;
77
80
  private arcPath;
78
81
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrKnob, never>;
79
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrKnob, "wr-knob", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "valueColor": { "alias": "valueColor"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "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>;
82
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrKnob, "wr-knob", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "valueColor": { "alias": "valueColor"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "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>;
80
83
  }
81
84
 
82
85
  export { WrKnob };
@@ -19,6 +19,9 @@ import { TemplateRef } from '@angular/core';
19
19
  * @see https://ngwr.dev/reference/components/lightbox
20
20
  */
21
21
  declare class WrLightbox {
22
+ /** Accessible name. Falls back to `image.close`, then `'Close preview'`. */
23
+ readonly closeLabel: _angular_core.InputSignal<string | null>;
24
+ protected readonly resolvedCloseLabel: _angular_core.Signal<string>;
22
25
  /** Image source. */
23
26
  readonly src: _angular_core.InputSignal<string>;
24
27
  /** Alt text. Required for a11y; falls back to an empty string. @default '' */
@@ -44,6 +47,9 @@ declare class WrLightbox {
44
47
  private readonly overlay;
45
48
  private readonly vcr;
46
49
  private readonly destroyRef;
50
+ private readonly focusTrapFactory;
51
+ private focusTrap;
52
+ private previouslyFocused;
47
53
  private overlayRef;
48
54
  constructor();
49
55
  protected onClick(): void;
@@ -57,7 +63,7 @@ declare class WrLightbox {
57
63
  private openOverlay;
58
64
  private closeOverlay;
59
65
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrLightbox, 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>;
66
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrLightbox, "wr-lightbox", never, { "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "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>;
61
67
  }
62
68
 
63
69
  export { WrLightbox };
@@ -12,7 +12,7 @@ interface WrLineSeries {
12
12
  *
13
13
  * @example
14
14
  * ```html
15
- * <wr-lineChart
15
+ * <wr-line-chart
16
16
  * [series]="[
17
17
  * { label: 'Visits', data: [12, 18, 9, 22, 30, 27, 35] },
18
18
  * { label: 'Signups', data: [3, 5, 4, 8, 11, 9, 14], color: 'var(--wr-color-success)' }
@@ -3,7 +3,7 @@ import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
3
3
  import * as ngwr_media from 'ngwr/media';
4
4
 
5
5
  /** Named breakpoint identifiers — match the SCSS `_breakpoints.scss` keys. */
6
- type WrBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
6
+ type WrBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xga' | 'fhd' | 'rt';
7
7
  /** Map of breakpoint → minimum viewport width in pixels. */
8
8
  type WrBreakpointMap = Readonly<Record<WrBreakpoint, number>>;
9
9
 
@@ -35,6 +35,9 @@ interface WrMeterSegment {
35
35
  * @see https://ngwr.dev/reference/components/meter-group
36
36
  */
37
37
  declare class WrMeterGroup {
38
+ /** Accessible name — the role needs one. Falls back to `meterGroup.label`. */
39
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
40
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
38
41
  readonly segments: _angular_core.InputSignal<readonly WrMeterSegment[]>;
39
42
  /** Explicit total. When `0` (default), `max = sum(values)`. @default 0 */
40
43
  readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -43,6 +46,11 @@ declare class WrMeterGroup {
43
46
  /** Show each segment's percent value in the legend. @default true */
44
47
  readonly showValues: _angular_core.InputSignalWithTransform<boolean, any>;
45
48
  protected readonly resolvedMax: _angular_core.Signal<number>;
49
+ /**
50
+ * Sum of the segments, for `aria-valuenow`. `role="progressbar"` without it
51
+ * announces no value at all, so the bar was invisible to assistive tech.
52
+ */
53
+ protected readonly totalValue: _angular_core.Signal<number>;
46
54
  protected readonly slices: _angular_core.Signal<{
47
55
  label: string;
48
56
  value: number;
@@ -50,7 +58,7 @@ declare class WrMeterGroup {
50
58
  percent: number;
51
59
  }[]>;
52
60
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrMeterGroup, never>;
53
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrMeterGroup, "wr-meter-group", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
61
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrMeterGroup, "wr-meter-group", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
54
62
  }
55
63
 
56
64
  export { WrMeterGroup };
@@ -11,8 +11,8 @@ import * as _angular_core from '@angular/core';
11
11
  * <wr-page-header title="Settings" subtitle="Manage your workspace">
12
12
  * <nav wrPageHeaderBreadcrumbs>…</nav>
13
13
  * <div wrPageHeaderActions>
14
- * <button wrButton>Invite</button>
15
- * <button wrButton color="primary">Save</button>
14
+ * <button wr-btn>Invite</button>
15
+ * <button wr-btn color="primary">Save</button>
16
16
  * </div>
17
17
  * <div wrPageHeaderExtra>
18
18
  * <wr-tag>v2.4</wr-tag>
@@ -129,4 +129,4 @@ declare class WrPagination {
129
129
  }
130
130
 
131
131
  export { WrPagination };
132
- export type { WrPaginationAlign };
132
+ export type { WrPaginationAlign, WrPaginationShape, WrPaginationSize };
@@ -12,6 +12,9 @@ import * as _angular_core from '@angular/core';
12
12
  * @see https://ngwr.dev/reference/components/progress
13
13
  */
14
14
  declare class WrProgress {
15
+ /** Accessible name — `role="progressbar"` needs one. Falls back to `progress.label`. */
16
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
17
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
15
18
  /**
16
19
  * Bar color.
17
20
  *
@@ -27,7 +30,7 @@ declare class WrProgress {
27
30
  protected readonly clamped: _angular_core.Signal<number>;
28
31
  protected readonly classes: _angular_core.Signal<string>;
29
32
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrProgress, never>;
30
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrProgress, "wr-progress", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
33
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrProgress, "wr-progress", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
31
34
  }
32
35
 
33
36
  export { WrProgress };
@@ -42,8 +42,9 @@ declare class WrRating implements FormValueControl<number | null> {
42
42
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
43
43
  /** Control size — scales the icons + gaps. @default 'md' */
44
44
  readonly size: _angular_core.InputSignal<WrRatingSize>;
45
- /** Accessible label. @default 'Rating' */
46
- readonly ariaLabel: _angular_core.InputSignal<string>;
45
+ /** Accessible label. Falls back to `rating.label`, then `'Rating'`. */
46
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
47
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
47
48
  /** The rating. Bound by `[formField]`, or two-way via `[(value)]`. */
48
49
  readonly value: _angular_core.ModelSignal<number | null>;
49
50
  /** Emitted on blur so a bound field can mark itself touched. */
@@ -10,11 +10,11 @@ type WrResultStatus = 'success' | 'warning' | 'error' | 'info' | 'empty';
10
10
  * @example
11
11
  * ```html
12
12
  * <wr-result status="success" title="Submitted!" description="We'll be in touch.">
13
- * <button wrButton color="primary" wrResultExtra>Continue</button>
13
+ * <button wr-btn color="primary" wrResultExtra>Continue</button>
14
14
  * </wr-result>
15
15
  *
16
16
  * <wr-result status="empty" title="No projects yet">
17
- * <button wrButton wrResultExtra>Create one</button>
17
+ * <button wr-btn wrResultExtra>Create one</button>
18
18
  * </wr-result>
19
19
  * ```
20
20
  *
@@ -35,27 +35,33 @@ declare class WrResult {
35
35
  * @example
36
36
  * ```html
37
37
  * <wr-result-404>
38
- * <button wrButton wrResultExtra>Back home</button>
38
+ * <button wr-btn wrResultExtra>Back home</button>
39
39
  * </wr-result-404>
40
40
  * ```
41
41
  */
42
42
  declare class WrResult404 {
43
43
  readonly title: _angular_core.InputSignal<string>;
44
- readonly description: _angular_core.InputSignal<string>;
44
+ /** Body text. Falls back to `result.notFound` from WrI18n. */
45
+ readonly description: _angular_core.InputSignal<string | null>;
46
+ protected readonly desc: _angular_core.Signal<string>;
45
47
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrResult404, never>;
46
48
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrResult404, "wr-result-404", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
47
49
  }
48
50
  /** Pre-set 403 result — forbidden / no access. */
49
51
  declare class WrResult403 {
50
52
  readonly title: _angular_core.InputSignal<string>;
51
- readonly description: _angular_core.InputSignal<string>;
53
+ /** Body text. Falls back to `result.forbidden` from WrI18n. */
54
+ readonly description: _angular_core.InputSignal<string | null>;
55
+ protected readonly desc: _angular_core.Signal<string>;
52
56
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrResult403, never>;
53
57
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrResult403, "wr-result-403", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
54
58
  }
55
59
  /** Pre-set 500 result — internal server error. */
56
60
  declare class WrResult500 {
57
61
  readonly title: _angular_core.InputSignal<string>;
58
- readonly description: _angular_core.InputSignal<string>;
62
+ /** Body text. Falls back to `result.serverError` from WrI18n. */
63
+ readonly description: _angular_core.InputSignal<string | null>;
64
+ protected readonly desc: _angular_core.Signal<string>;
59
65
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrResult500, never>;
60
66
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrResult500, "wr-result-500", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
61
67
  }
@@ -18,6 +18,12 @@ interface WrSegmentedOption<T = unknown> {
18
18
  readonly value: T;
19
19
  readonly label?: string;
20
20
  readonly icon?: WrIconName;
21
+ /**
22
+ * Accessible name for an icon-only option. Without a `label` the button has
23
+ * no text at all, so assistive tech announced nothing; when this is omitted
24
+ * the option's `value` is used as a last resort.
25
+ */
26
+ readonly ariaLabel?: string;
21
27
  readonly disabled?: boolean;
22
28
  }
23
29
 
@@ -21,8 +21,8 @@ import { Observable } from 'rxjs';
21
21
  * - `'multi'` — array value, chips on the trigger, options toggle on click.
22
22
  * - `'search'` — type-ahead with sync filter or async loader (replaces
23
23
  * the standalone `<wr-autocomplete>`).
24
- * - `'tag'` — free-text + chips, with optional `allowCreate` /
25
- * `createValidator` for typed lists (replaces `<wr-chips-input>`).
24
+ * - `'tag'` — free-text + chips, with `separators` / `validate` /
25
+ * `allowDuplicates` (replaces `<wr-chips-input>`).
26
26
  */
27
27
  type WrSelectMode = 'single' | 'multi' | 'search' | 'tag';
28
28
  /**
@@ -166,8 +166,6 @@ interface SelectedChip {
166
166
  * />
167
167
  * ```
168
168
  *
169
- * The legacy `[multi]="true"` boolean is still accepted but is now an
170
- * alias for `[mode]="'multi'"` — prefer the explicit mode.
171
169
  *
172
170
  * @see https://ngwr.dev/reference/components/select
173
171
  */
@@ -178,6 +176,14 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
178
176
  readonly clearLabel: _angular_core.InputSignal<string | null>;
179
177
  protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
180
178
  protected readonly resolvedClear: _angular_core.Signal<string>;
179
+ /**
180
+ * Accessible name of the trigger. Falls back to the placeholder, then to
181
+ * `select.label` — `role="combobox"` on an empty trigger otherwise has no name
182
+ * at all, which is the common case before anything is selected.
183
+ */
184
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
185
+ private readonly labelText;
186
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
181
187
  /** Per-chip ARIA label — interpolates `{{label}}`. @internal */
182
188
  protected readonly chipRemoveLabel: (params?: ngwr_i18n.WrI18nParams) => string;
183
189
  /**
@@ -204,8 +210,8 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
204
210
  *
205
211
  * - `'single'` (default) — one value, no input. Classic dropdown.
206
212
  * - `'multi'` — array value, chips on the trigger.
207
- * - `'search'` *(planned)* — type-ahead with sync filter or async loader.
208
- * - `'tag'` *(planned)* — free-text + chips with optional `allowCreate`.
213
+ * - `'search'` — type-ahead with sync filter or async loader.
214
+ * - `'tag'` — free-text + chips.
209
215
  *
210
216
  */
211
217
  readonly mode: _angular_core.InputSignal<WrSelectMode | null>;
@@ -533,7 +539,7 @@ declare class WrSelect implements FormValueControl<unknown>, WrSelectContext {
533
539
  private openOverlay;
534
540
  private closeOverlay;
535
541
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSelect, never>;
536
- 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; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchQuery": { "alias": "searchQuery"; "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; }; "serverSearch": { "alias": "serverSearch"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "freeText": { "alias": "freeText"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "overscan": { "alias": "overscan"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "maxTagCount": { "alias": "maxTagCount"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "searchQuery": "searchQueryChange"; "searchChange": "searchChange"; "value": "valueChange"; "touch": "touch"; }, ["projectedOptions"], ["*"], true, never>;
542
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSelect, "wr-select", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "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; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchQuery": { "alias": "searchQuery"; "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; }; "serverSearch": { "alias": "serverSearch"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; "freeText": { "alias": "freeText"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "overscan": { "alias": "overscan"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "maxTagCount": { "alias": "maxTagCount"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "searchQuery": "searchQueryChange"; "searchChange": "searchChange"; "value": "valueChange"; "touch": "touch"; }, ["projectedOptions"], ["*"], true, never>;
537
543
  }
538
544
 
539
545
  /**
@@ -27,11 +27,9 @@ declare class WrShinyText {
27
27
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
28
28
  /** Time for the bright stripe to traverse the text, in seconds. @default 2 */
29
29
  readonly speed: _angular_core.InputSignalWithTransform<number, unknown>;
30
- /** Base text colour (outside the bright stripe). @default '#b5b5b5' */
31
- /** Base text colour. When unset, the theme decides. */
30
+ /** Base text colour outside the bright stripe. Unset falls back to `--wr-shiny-text-base`. */
32
31
  readonly color: _angular_core.InputSignal<string | null>;
33
- /** Bright stripe colour. @default '#ffffff' */
34
- /** Sweep highlight colour. When unset, the theme decides. */
32
+ /** Sweep highlight colour. Unset falls back to the theme token. */
35
33
  readonly shineColor: _angular_core.InputSignal<string | null>;
36
34
  /** Gradient angle in degrees. @default 120 */
37
35
  readonly spread: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -30,6 +30,12 @@ type WrSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
30
30
  */
31
31
  declare class WrSpeedDial {
32
32
  readonly actions: _angular_core.InputSignal<readonly WrSpeedDialAction[]>;
33
+ /**
34
+ * Accessible name of the trigger. Falls back to `speedDial.label`, then
35
+ * `'Actions'` — the trigger is icon-only, so without this it has no name at all.
36
+ */
37
+ readonly triggerLabel: _angular_core.InputSignal<string | null>;
38
+ protected readonly resolvedTriggerLabel: _angular_core.Signal<string>;
33
39
  /** Direction the actions fan out. @default 'up' */
34
40
  readonly direction: _angular_core.InputSignal<WrSpeedDialDirection>;
35
41
  /** Two-way bindable open state. @default false */
@@ -50,7 +56,7 @@ declare class WrSpeedDial {
50
56
  protected onTrigger(): void;
51
57
  protected onPick(action: WrSpeedDialAction): void;
52
58
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSpeedDial, never>;
53
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSpeedDial, "wr-speed-dial", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "safeArea": { "alias": "safeArea"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "pick": "pick"; }, never, never, true, never>;
59
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSpeedDial, "wr-speed-dial", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "safeArea": { "alias": "safeArea"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "pick": "pick"; }, never, never, true, never>;
54
60
  }
55
61
 
56
62
  export { WrSpeedDial };
@@ -49,7 +49,7 @@ type WrSquircleCornerMask = 'all' | 'left' | 'right' | 'top' | 'bottom' | 'none'
49
49
  *
50
50
  * @example
51
51
  * ```html
52
- * <button wrButton wrSquircle [radius]="16">Save</button>
52
+ * <button wr-btn wrSquircle [radius]="16">Save</button>
53
53
  * <wr-tag wrSquircle>v2.0</wr-tag>
54
54
  * <div wrSquircle [radius]="32" [smoothing]="0.8">…</div>
55
55
  * <div wrSquircle [borderWidth]="2" borderColor="var(--wr-color-primary)">…</div>
@@ -21,6 +21,12 @@ import { FormCheckboxControl } from '@angular/forms/signals';
21
21
  */
22
22
  type WrSwitchSize = 'sm' | 'md' | 'lg';
23
23
  declare class WrSwitch implements FormCheckboxControl {
24
+ /**
25
+ * Accessible name for a switch used WITHOUT projected text. The wrapping
26
+ * `<label>` names the control whenever content is projected; with none, the
27
+ * label is empty and the input has no name at all.
28
+ */
29
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
24
30
  /** Stable id used to associate the native input with its label. */
25
31
  readonly id: _angular_core.InputSignal<string>;
26
32
  /**
@@ -40,7 +46,7 @@ declare class WrSwitch implements FormCheckboxControl {
40
46
  protected onInputChange(event: Event): void;
41
47
  protected onInputBlur(): void;
42
48
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrSwitch, never>;
43
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSwitch, "wr-switch", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
49
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrSwitch, "wr-switch", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
44
50
  }
45
51
 
46
52
  export { WrSwitch };