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
package/styles.scss CHANGED
@@ -51,6 +51,7 @@
51
51
  @forward './divider/styles';
52
52
  @forward './donut-chart/styles';
53
53
  @forward './drag-drop/styles';
54
+ @forward './event-calendar/styles';
54
55
  @forward './drawer/styles';
55
56
  @forward './dropdown/styles';
56
57
  @forward './empty/styles';
@@ -112,6 +113,8 @@
112
113
  @forward './timeline/styles';
113
114
  @forward './toast/styles';
114
115
  @forward './toolbar/styles';
116
+ @forward './tour/styles';
117
+ @forward './transfer/styles';
115
118
  @forward './tree/styles';
116
119
  @forward './typewriter/styles';
117
120
  @forward './typography/styles';
@@ -126,8 +126,67 @@
126
126
  opacity: 0.35;
127
127
  }
128
128
 
129
- .cdk-drag-animating {
130
- transition: transform 0.18s cubic-bezier(0, 0, 0.2, 1);
129
+ // NOTE: `.cdk-drag-animating` is NOT here. CDK puts it on the preview clone,
130
+ // which lives in `<body>` — see the rule at the end of this file.
131
+
132
+
133
+ // --- Tree rows ------------------------------------------------------------
134
+ // Depth lives on the `<tr>` as `--wr-table-depth` and is spent inside the tree
135
+ // column's cell, not as a lead column: a new column would break `columnOrder`
136
+ // indexes and the pin measurements, and a child would stop being an ordinary
137
+ // `<tr>` going through the same cell loop.
138
+ &__tree-lead {
139
+ display: inline-flex;
140
+ align-items: center;
141
+ vertical-align: middle;
142
+ margin-inline-end: 0.25rem;
143
+ padding-inline-start: calc(var(--wr-table-depth, 0) * var(--wr-table-indent, 1.25rem));
144
+ }
145
+
146
+ &__tree-toggle {
147
+ appearance: none;
148
+ flex: 0 0 auto;
149
+ display: inline-flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ width: 1.25rem;
153
+ height: 1.25rem;
154
+ padding: 0;
155
+ background: transparent;
156
+ border: 0;
157
+ border-radius: var(--wr-border-radius-sm);
158
+ color: var(--wr-color-on-surface-muted);
159
+ cursor: pointer;
160
+
161
+ &:hover {
162
+ background: var(--wr-color-hover);
163
+ color: var(--wr-color-on-surface);
164
+ }
165
+
166
+ // A leaf keeps the slot so labels line up down a column, but is not a
167
+ // button and is hidden from assistive tech.
168
+ &--leaf {
169
+ cursor: default;
170
+ visibility: hidden;
171
+ }
172
+ }
173
+
174
+ &__tree-icon {
175
+ width: 0.875rem;
176
+ height: 0.875rem;
177
+ transition: transform var(--wr-transition-base);
178
+ }
179
+
180
+ &__tree-toggle--open &__tree-icon,
181
+ &__tree-toggle--open .wr-table__tree-icon {
182
+ transform: rotate(90deg);
183
+ }
184
+
185
+ // Card mode stacks label / value with `justify-content: space-between`, so an
186
+ // extra inline child would strand the chevron mid-row. Fold the lead into the
187
+ // value side instead.
188
+ &--responsive &__tree-lead {
189
+ margin-inline-end: 0.375rem;
131
190
  }
132
191
 
133
192
  // --- Row selection --------------------------------------------------------
@@ -206,6 +265,9 @@
206
265
  }
207
266
 
208
267
  // --- Summary / footer row -------------------------------------------------
268
+ // `&__foot-cell--lead` is emitted on the selection / expand footer cells and
269
+ // carries no styles of its own — it exists as a public hook so consumers can
270
+ // target those two cells without matching on position.
209
271
  &__foot-cell {
210
272
  padding: calc(0.625rem * var(--wr-density-y, 1)) calc(0.875rem * var(--wr-density-x, 1));
211
273
  background: var(--wr-table-head-bg);
@@ -762,3 +824,39 @@
762
824
  }
763
825
  }
764
826
  }
827
+
828
+ // The dragged header's preview is a clone CDK moves to `document.body`, so it
829
+ // leaves `.wr-table` behind and no ancestor selector reaches it — the clone's
830
+ // own `wr-table__th` class does. Declared here rather than inherited: until the
831
+ // drag-drop entry point's rules were scoped, this preview silently wore
832
+ // `wr-sortable-list`'s lift shadow, and scoping them without this would have
833
+ // left the column preview with no chrome at all.
834
+ .cdk-drag-preview.wr-table__th {
835
+ box-sizing: border-box;
836
+ display: flex;
837
+ align-items: center;
838
+ // Every value has to resolve in `<body>`: the `--wr-table-*` tokens are
839
+ // declared on `.wr-table`, which the preview has left, so they are passed with
840
+ // the same defaults that block sets. `--wr-density-*` and `--wr-color-*` are
841
+ // root-level and resolve as-is.
842
+ padding: calc(0.625rem * var(--wr-density-y, 1)) calc(0.875rem * var(--wr-density-x, 1));
843
+ background: var(--wr-table-head-bg, rgba(var(--wr-color-outline-rgb), 0.25));
844
+ color: var(--wr-color-on-surface-muted);
845
+ font-family: var(--wr-font-family-base);
846
+ font-weight: 600;
847
+ font-size: var(--wr-text-xs);
848
+ letter-spacing: var(--wr-table-head-letter-spacing, var(--wr-tracking-normal));
849
+ text-transform: var(--wr-table-head-transform, none);
850
+ white-space: nowrap;
851
+ border-radius: var(--wr-border-radius-sm);
852
+ box-shadow: 0 8px 12px rgba(var(--wr-color-backdrop-rgb), 0.24);
853
+ // The preview must track the cursor 1:1 — never animate its transform.
854
+ transition: none;
855
+ }
856
+
857
+ // The settle animation after a drop. Same element as the rule above — CDK adds
858
+ // `cdk-drag-animating` to the preview while it flies back to the drop slot — so
859
+ // it must come after it to beat that `transition: none` at equal specificity.
860
+ .cdk-drag-animating.wr-table__th {
861
+ transition: transform 0.18s var(--wr-ease-out);
862
+ }
@@ -141,7 +141,11 @@ $contrast-light: #ffffff !default;
141
141
  // labels / captions / placeholders read consistently. One place each.
142
142
  // Only the full-opacity token above is AA-safe for body text; these two are
143
143
  // decorative by design (0.85 reaches ~3.5:1, 0.6 ~2.3:1 on a light surface).
144
- --wr-color-text-muted: rgba(var(--wr-color-muted-text-rgb), 0.85);
144
+ // 0.95, not 0.85: the role itself is 5.35:1 on the light surface, but wrapping
145
+ // it at 0.85 composited to #778291 — 3.90:1, under the AA bar. 0.95 is the
146
+ // most softening that still clears it (4.81), which leaves this token barely
147
+ // distinguishable from the flat role it wraps.
148
+ --wr-color-text-muted: rgba(var(--wr-color-muted-text-rgb), 0.95);
145
149
  --wr-color-text-faint: rgba(var(--wr-color-muted-text-rgb), 0.6);
146
150
 
147
151
  // Neutral gray ramp — a FIXED primitive scale (slate). Each step is a stable
@@ -214,6 +218,44 @@ $contrast-light: #ffffff !default;
214
218
  --wr-color-#{$name}-soft-contrast: color-mix(in srgb, var(--wr-color-#{$name}) 62%, var(--wr-color-dark));
215
219
  --wr-color-#{$name}-active: rgba(var(--wr-color-#{$name}-rgb), 0.2);
216
220
  }
221
+
222
+ // `-ink`: the intent used as TEXT on `--wr-color-surface`.
223
+ //
224
+ // v10 fixed the opposite direction — `-contrast`, the label ON a filled
225
+ // intent. The inverse was never covered, and the light theme fails WCAG AA
226
+ // everywhere an outlined / bordered variant paints the hue as its own label:
227
+ // warning lands at 1.71:1 against a 4.5 bar, medium 3.10, success 3.33,
228
+ // danger and info 3.68, secondary 3.99. Dark passes on all of them, because
229
+ // its bases were retuned lighter for a dark canvas and that happens to be the
230
+ // accessible direction.
231
+ //
232
+ // Same recipe as `-soft-contrast`: mixing toward `--wr-color-dark` darkens in
233
+ // light and lightens in dark from ONE declaration, because that token itself
234
+ // flips. The share is per intent rather than uniform — warning has to travel
235
+ // furthest (a yellow readable on white is not yellow), and forcing every
236
+ // intent to warning's share would drag primary to near-navy for no reason.
237
+ // Each is the measured minimum that clears 4.5:1 in BOTH themes on the surface
238
+ // and on the tag's 6% / 10% tints, with 3pp of headroom.
239
+ $ink-mix: (
240
+ primary: 93%,
241
+ secondary: 80%,
242
+ success: 72%,
243
+ warning: 50%,
244
+ danger: 77%,
245
+ info: 76%,
246
+ medium: 69%,
247
+ );
248
+
249
+ @each $name, $share in $ink-mix {
250
+ --wr-color-#{$name}-ink: color-mix(in srgb, var(--wr-color-#{$name}) #{$share}, var(--wr-color-dark));
251
+ }
252
+
253
+ // `light` is a surface tone by definition — a hair off the page background in
254
+ // either theme — so there is no darkening that keeps it recognisable AND
255
+ // readable. It borrows the page's own ink; the border still carries the
256
+ // intent. `dark` already IS the ink.
257
+ --wr-color-light-ink: var(--wr-color-on-surface);
258
+ --wr-color-dark-ink: var(--wr-color-dark);
217
259
  }
218
260
 
219
261
  // Public SCSS list
@@ -38,7 +38,8 @@ $_dark: #e6ebf3;
38
38
  // Text
39
39
  // Softer than pure-white — easier on the eyes for long reading.
40
40
  --wr-color-dark: #{$_dark};
41
- --wr-color-dark-rgb: #{color.channel($_dark, 'red')}, #{color.channel($_dark, 'green')}, #{color.channel($_dark, 'blue')};
41
+ --wr-color-dark-rgb:
42
+ #{color.channel($_dark, 'red')}, #{color.channel($_dark, 'green')}, #{color.channel($_dark, 'blue')};
42
43
  // `*-contrast` values are baked at SCSS compile time from the light
43
44
  // palette, so they don't auto-flip when `--wr-color-dark` /
44
45
  // `--wr-color-white` are reassigned for dark mode. Tooltip-style
@@ -50,8 +51,16 @@ $_dark: #e6ebf3;
50
51
  // palette's near-black ink, so `.wr-btn--dark:hover` painted itself almost
51
52
  // black while keeping the near-black `-contrast` text. `dark` is an INK token,
52
53
  // so unlike `light` below its shades mean exactly what they say.
53
- --wr-color-dark-light: #{color.adjust($_dark, $lightness: 5%)};
54
- --wr-color-dark-lighter: #{color.adjust($_dark, $lightness: 10%)};
54
+ // `color.scale`, not `color.adjust`, for the two lighter steps. In dark mode
55
+ // `dark` IS the near-white ink (#e6ebf3, L 92.7%), so `adjust(+10%)` asks for
56
+ // L 102.7% — out of gamut. Sass then cannot emit rgb and falls back to legacy
57
+ // comma-hsl with an out-of-range lightness, which browsers clamp: the token
58
+ // silently became pure white instead of a controlled step. `scale` moves a
59
+ // percentage of the REMAINING headroom, so it approaches white without ever
60
+ // leaving the gamut. 70% reproduces the previous `-light` to within a rounding
61
+ // step; 85% is the distinct step beyond it.
62
+ --wr-color-dark-light: #{color.scale($_dark, $lightness: 70%)};
63
+ --wr-color-dark-lighter: #{color.scale($_dark, $lightness: 85%)};
55
64
  --wr-color-dark-dark: #{color.adjust($_dark, $lightness: -5%)};
56
65
  --wr-color-dark-darker: #{color.adjust($_dark, $lightness: -10%)};
57
66
 
@@ -63,7 +72,8 @@ $_dark: #e6ebf3;
63
72
  // divider on cards / inputs without shouting — matches what Vercel
64
73
  // and shadcn ship for the same job.
65
74
  --wr-color-light: #{$_light};
66
- --wr-color-light-rgb: #{color.channel($_light, 'red')}, #{color.channel($_light, 'green')}, #{color.channel($_light, 'blue')};
75
+ --wr-color-light-rgb:
76
+ #{color.channel($_light, 'red')}, #{color.channel($_light, 'green')}, #{color.channel($_light, 'blue')};
67
77
  // The baked contrast pairs with the LIGHT value (#cbd5e1 → dark text);
68
78
  // the dark surface above needs light text instead.
69
79
  --wr-color-light-contrast: #e6ebf3;
@@ -89,7 +99,8 @@ $_dark: #e6ebf3;
89
99
  // Lifted from slate-400 → slate-300-ish for better legibility on
90
100
  // the deeper canvas.
91
101
  --wr-color-medium: #{$_medium};
92
- --wr-color-medium-rgb: #{color.channel($_medium, 'red')}, #{color.channel($_medium, 'green')}, #{color.channel($_medium, 'blue')};
102
+ --wr-color-medium-rgb:
103
+ #{color.channel($_medium, 'red')}, #{color.channel($_medium, 'green')}, #{color.channel($_medium, 'blue')};
93
104
  // This block shipped base + rgb only, so contrast and all four shades still
94
105
  // came from the light palette's slate. Ink token, plain shades.
95
106
  --wr-color-medium-contrast: #{colors.contrast($_medium)};
@@ -125,7 +136,8 @@ $_dark: #e6ebf3;
125
136
  // Re-derived, not inherited: the light-palette token would pair the wrong
126
137
  // foreground with a re-tuned base.
127
138
  --wr-color-#{$name}-contrast: #{colors.contrast($base)};
128
- --wr-color-#{$name}-rgb: #{color.channel($base, 'red')}, #{color.channel($base, 'green')}, #{color.channel($base, 'blue')};
139
+ --wr-color-#{$name}-rgb:
140
+ #{color.channel($base, 'red')}, #{color.channel($base, 'green')}, #{color.channel($base, 'blue')};
129
141
  --wr-color-#{$name}-light: #{color.adjust($base, $lightness: 5%)};
130
142
  --wr-color-#{$name}-lighter: #{color.adjust($base, $lightness: 10%)};
131
143
  --wr-color-#{$name}-dark: #{color.adjust($base, $lightness: -5%)};
@@ -37,7 +37,7 @@
37
37
  }
38
38
 
39
39
  // Mention option rows
40
- .wr-mention__option:focus-visible {
40
+ .wr-mention-panel__option:focus-visible {
41
41
  @include focus-ring;
42
42
  }
43
43
 
@@ -64,13 +64,7 @@
64
64
  }
65
65
 
66
66
  // Stepper step headers
67
- .wr-stepper__step:focus-visible {
68
- @include focus-ring;
69
- }
70
-
71
- // Toast close/copy
72
- .wr-toast__close:focus-visible,
73
- .wr-toast__copy:focus-visible {
67
+ .wr-stepper__header:focus-visible {
74
68
  @include focus-ring;
75
69
  }
76
70
 
@@ -1,3 +1,8 @@
1
+ // Pull the whole theme so a standalone `@use 'ngwr/<name>'` brings in every
2
+ // design token this stylesheet references. Sass deduplicates `@use` per
3
+ // compilation, so the umbrella sheet still emits the theme only once.
4
+ @use '../../theme/styles' as theme;
5
+
1
6
  // 3D mouse-tilt card. The transform is set imperatively by `[wrTilt]`,
2
7
  // so this stylesheet just covers the card chrome + the optional glare
3
8
  // overlay that the directive appends when `[glare]="true"`.
@@ -1,7 +1,10 @@
1
1
  @use '../../theme/styles' as theme;
2
2
 
3
+ // `info` mapped to `primary` before the `info` intent existed; alert has used
4
+ // the real intent since it landed, so the same toast and alert read as two
5
+ // different colours for the same meaning.
3
6
  $toast-colors: (
4
- info: primary,
7
+ info: info,
5
8
  success: success,
6
9
  warning: warning,
7
10
  danger: danger,
@@ -59,7 +62,7 @@ $toast-colors: (
59
62
  width: auto;
60
63
  max-width: calc(100% - 2rem);
61
64
  transition:
62
- transform 240ms cubic-bezier(0.4, 0, 0.2, 1),
65
+ transform 240ms var(--wr-ease-out),
63
66
  opacity 240ms ease,
64
67
  box-shadow 240ms ease;
65
68
  transform-origin: center top;
@@ -89,7 +92,7 @@ $toast-colors: (
89
92
 
90
93
  &--stack.wr-toast-host--expanded .wr-toast {
91
94
  transition:
92
- transform 240ms cubic-bezier(0.4, 0, 0.2, 1),
95
+ transform 240ms var(--wr-ease-out),
93
96
  opacity 240ms ease;
94
97
  }
95
98
 
@@ -0,0 +1,63 @@
1
+ @use '../../theme/styles' as theme;
2
+
3
+ // The cut-out. A bare box sized to the spotlit element, dimming everything
4
+ // around it with one enormous spread shadow — the target itself is never
5
+ // covered, so it stays readable and clickable.
6
+ .wr-tour__spotlight {
7
+ position: fixed;
8
+ z-index: 1000;
9
+ pointer-events: none;
10
+ border-radius: var(--wr-border-radius-base);
11
+ box-shadow: 0 0 0 9999px rgba(var(--wr-color-backdrop-rgb), 0.55);
12
+ transition:
13
+ top var(--wr-transition-base),
14
+ left var(--wr-transition-base),
15
+ width var(--wr-transition-base),
16
+ height var(--wr-transition-base);
17
+ }
18
+
19
+ .wr-tour-popup {
20
+ display: block;
21
+ max-width: 20rem;
22
+ padding: 1rem;
23
+ background: var(--wr-color-surface);
24
+ color: var(--wr-color-on-surface);
25
+ border: 1px solid var(--wr-color-outline);
26
+ @include theme.smooth-br(var(--wr-border-radius-base));
27
+ box-shadow: 0 12px 24px rgba(var(--wr-color-backdrop-rgb), 0.24);
28
+ font-family: var(--wr-font-family-base);
29
+
30
+ &__progress {
31
+ margin: 0 0 0.375rem;
32
+ font-size: var(--wr-text-xs);
33
+ color: var(--wr-color-on-surface-muted);
34
+ font-variant-numeric: tabular-nums;
35
+ }
36
+
37
+ &__title {
38
+ margin: 0 0 0.375rem;
39
+ font-size: var(--wr-text-base);
40
+ font-weight: var(--wr-font-weight-semibold);
41
+ }
42
+
43
+ &__content {
44
+ margin: 0 0 0.875rem;
45
+ font-size: var(--wr-text-sm);
46
+ line-height: var(--wr-leading-normal);
47
+ }
48
+
49
+ &__actions {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 0.5rem;
53
+ }
54
+
55
+ &__spacer {
56
+ flex: 1 1 auto;
57
+ }
58
+ }
59
+
60
+ // The popup rides above the cut-out.
61
+ .wr-tour-overlay {
62
+ z-index: 1001;
63
+ }
@@ -0,0 +1,105 @@
1
+ @use '../../theme/styles' as theme;
2
+
3
+ .wr-transfer {
4
+ --wr-transfer-pane-width: 14rem;
5
+ --wr-transfer-pane-height: 15rem;
6
+
7
+ display: flex;
8
+ align-items: stretch;
9
+ gap: 0.75rem;
10
+ font-family: var(--wr-font-family-base);
11
+ color: var(--wr-color-on-surface);
12
+
13
+ &--disabled {
14
+ opacity: 0.6;
15
+ }
16
+
17
+ &__pane {
18
+ display: flex;
19
+ flex-direction: column;
20
+ flex: 1 1 var(--wr-transfer-pane-width);
21
+ min-width: 0;
22
+ border: 1px solid var(--wr-color-outline);
23
+ @include theme.smooth-br(var(--wr-border-radius-base));
24
+ background: var(--wr-color-surface);
25
+ overflow: hidden;
26
+ }
27
+
28
+ &__head {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 0.5rem;
32
+ padding: 0.5rem 0.625rem;
33
+ border-bottom: 1px solid var(--wr-color-outline);
34
+ background: rgba(var(--wr-color-outline-rgb), 0.25);
35
+ }
36
+
37
+ &__title {
38
+ flex: 1 1 auto;
39
+ min-width: 0;
40
+ overflow: hidden;
41
+ text-overflow: ellipsis;
42
+ white-space: nowrap;
43
+ font-size: var(--wr-text-sm);
44
+ font-weight: var(--wr-font-weight-medium);
45
+ }
46
+
47
+ &__count {
48
+ flex: 0 0 auto;
49
+ font-size: var(--wr-text-xs);
50
+ color: var(--wr-color-on-surface-muted);
51
+ font-variant-numeric: tabular-nums;
52
+ }
53
+
54
+ &__search {
55
+ padding: 0.5rem 0.625rem;
56
+ border-bottom: 1px solid var(--wr-color-outline);
57
+ }
58
+
59
+ &__list {
60
+ flex: 1 1 auto;
61
+ margin: 0;
62
+ padding: 0.25rem;
63
+ list-style: none;
64
+ overflow-y: auto;
65
+ max-height: var(--wr-transfer-pane-height);
66
+ }
67
+
68
+ &__item {
69
+ padding: 0.25rem 0.375rem;
70
+ border-radius: var(--wr-border-radius-sm);
71
+
72
+ &:hover {
73
+ background: var(--wr-color-hover);
74
+ }
75
+
76
+ &--disabled:hover {
77
+ background: transparent;
78
+ }
79
+ }
80
+
81
+ &__empty {
82
+ padding: 1rem 0.375rem;
83
+ text-align: center;
84
+ font-size: var(--wr-text-sm);
85
+ color: var(--wr-color-on-surface-muted);
86
+ }
87
+
88
+ &__actions {
89
+ display: flex;
90
+ flex-direction: column;
91
+ justify-content: center;
92
+ gap: 0.5rem;
93
+ flex: 0 0 auto;
94
+ }
95
+
96
+ &__move .wr-icon__svg {
97
+ width: 1rem;
98
+ height: 1rem;
99
+ }
100
+
101
+ // No container query here on purpose: `@container` only styles DESCENDANTS, so
102
+ // a rule that reflows `.wr-transfer` itself could never match its own query.
103
+ // Doing it properly means the house `responsive` opt-in modifier (a wrapper
104
+ // that establishes the container) — not yet shipped for this component.
105
+ }
@@ -23,6 +23,9 @@ type WrAlertType = 'info' | 'success' | 'warning' | 'danger' | 'neutral' | 'offl
23
23
  * @see https://ngwr.dev/reference/components/alert
24
24
  */
25
25
  declare class WrAlert {
26
+ /** Accessible name. Falls back to `alert.close`, then `'Close alert'`. */
27
+ readonly closeLabel: _angular_core.InputSignal<string | null>;
28
+ protected readonly resolvedCloseLabel: _angular_core.Signal<string>;
26
29
  /**
27
30
  * Optional headline shown at the top of the alert.
28
31
  *
@@ -71,7 +74,7 @@ declare class WrAlert {
71
74
  protected readonly liveLevel: _angular_core.Signal<"assertive" | "polite" | null>;
72
75
  protected onClose(): void;
73
76
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAlert, never>;
74
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAlert, "wr-alert", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "closeable": { "alias": "closeable"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
77
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAlert, "wr-alert", never, { "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "closeable": { "alias": "closeable"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
75
78
  }
76
79
 
77
80
  export { WrAlert };
@@ -87,4 +87,4 @@ declare class WrAvatar {
87
87
  }
88
88
 
89
89
  export { WrAvatar };
90
- export type { WrAvatarSize };
90
+ export type { WrAvatarShape, WrAvatarSize };
@@ -20,8 +20,9 @@ declare class WrBackTop {
20
20
  readonly visibilityThreshold: _angular_core.InputSignalWithTransform<number, unknown>;
21
21
  /** Pixel offset subtracted from the scroll target — for sticky headers. @default 0 */
22
22
  readonly offset: _angular_core.InputSignalWithTransform<number, unknown>;
23
- /** Accessible label for the button. @default 'Back to top' */
24
- readonly ariaLabel: _angular_core.InputSignal<string>;
23
+ /** Accessible label for the button. Falls back to `backTop.label`, then `'Back to top'`. */
24
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
25
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
25
26
  protected readonly visible: _angular_core.WritableSignal<boolean>;
26
27
  private readonly scroll;
27
28
  private readonly platform;
@@ -155,4 +155,4 @@ declare class WrTag {
155
155
  }
156
156
 
157
157
  export { WrBadge, WrTag };
158
- export type { WrBadgeSize, WrTagIconPosition };
158
+ export type { WrBadgeShape, WrBadgeSize, WrTagIconPosition };
@@ -50,7 +50,6 @@ declare class WrBorderGlow {
50
50
  readonly animated: _angular_core.InputSignalWithTransform<boolean, any>;
51
51
  private readonly el;
52
52
  private readonly platform;
53
- private readonly destroyRef;
54
53
  private readonly isBrowser;
55
54
  /** Inline CSS variable bag — recomputed when colour / radius / sensitivity inputs change. */
56
55
  protected readonly cssVars: _angular_core.Signal<Record<string, string>>;
@@ -26,6 +26,15 @@ declare class WrCarouselSlide {
26
26
  */
27
27
  declare class WrCarousel {
28
28
  /** Active slide index. Two-way bindable. @default 0 */
29
+ /** Accessible name of the previous-slide button. Falls back to `carousel.prev`. */
30
+ readonly prevLabel: _angular_core.InputSignal<string | null>;
31
+ /** Accessible name of the next-slide button. Falls back to `carousel.next`. */
32
+ readonly nextLabel: _angular_core.InputSignal<string | null>;
33
+ /** Accessible name of the dot group. Falls back to `carousel.pagination`. */
34
+ readonly paginationLabel: _angular_core.InputSignal<string | null>;
35
+ protected readonly resolvedPrevLabel: _angular_core.Signal<string>;
36
+ protected readonly resolvedNextLabel: _angular_core.Signal<string>;
37
+ protected readonly resolvedPaginationLabel: _angular_core.Signal<string>;
29
38
  readonly active: _angular_core.ModelSignal<number>;
30
39
  /** Show prev / next arrow buttons. @default true */
31
40
  readonly showArrows: _angular_core.InputSignalWithTransform<boolean, any>;
@@ -58,7 +67,7 @@ declare class WrCarousel {
58
67
  protected onSwipeMove(event: TouchEvent): void;
59
68
  protected onSwipeEnd(event: TouchEvent, viewport: HTMLElement): void;
60
69
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCarousel, never>;
61
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarousel, "wr-carousel", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "intervalMs": { "alias": "intervalMs"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["slides"], ["*"], true, never>;
70
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCarousel, "wr-carousel", never, { "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "paginationLabel": { "alias": "paginationLabel"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "showArrows": { "alias": "showArrows"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "intervalMs": { "alias": "intervalMs"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; }, ["slides"], ["*"], true, never>;
62
71
  }
63
72
 
64
73
  export { WrCarousel, WrCarouselSlide };
@@ -51,10 +51,21 @@ interface WrCascaderOption<T = string> {
51
51
  */
52
52
  type WrCascaderSize = 'sm' | 'md' | 'lg';
53
53
  declare class WrCascader<T = string> implements FormValueControl<unknown> {
54
+ /** Accessible name. Falls back to `select.clearSelection`, then `'Clear selection'`. */
55
+ readonly clearLabel: _angular_core.InputSignal<string | null>;
56
+ protected readonly resolvedClearLabel: _angular_core.Signal<string>;
54
57
  /** Root-level options. Each may have `children` for deeper levels. */
55
58
  readonly options: _angular_core.InputSignal<readonly WrCascaderOption<T>[]>;
56
59
  /** Placeholder shown when no path is selected. @default '' */
57
60
  readonly placeholder: _angular_core.InputSignal<string>;
61
+ /**
62
+ * Accessible name of the trigger. Falls back to the placeholder, then to
63
+ * `select.label` — a `role="combobox"` with nothing selected and no
64
+ * placeholder otherwise has no name at all.
65
+ */
66
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
67
+ private readonly labelText;
68
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
58
69
  /**
59
70
  * Disable the cascader. Bound automatically from the field's disabled state
60
71
  * when used with `[formField]`.
@@ -115,7 +126,7 @@ declare class WrCascader<T = string> implements FormValueControl<unknown> {
115
126
  private openOverlay;
116
127
  private closeOverlay;
117
128
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCascader<any>, never>;
118
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCascader<any>, "wr-cascader", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "changeOnSelect": { "alias": "changeOnSelect"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
129
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCascader<any>, "wr-cascader", never, { "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "changeOnSelect": { "alias": "changeOnSelect"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
119
130
  }
120
131
 
121
132
  export { WrCascader };
@@ -47,6 +47,14 @@ declare class WrCheckbox implements FormCheckboxControl {
47
47
  * `value`.)
48
48
  */
49
49
  readonly checkboxValue: _angular_core.InputSignal<unknown>;
50
+ /**
51
+ * Accessible name for a checkbox used WITHOUT projected text — a selection
52
+ * cell in a table, say. The wrapping `<label>` names the control whenever
53
+ * content is projected; with none, the native input has no name, and an
54
+ * `aria-label` put on the host lands on a `<wr-checkbox>` element that no
55
+ * screen reader ever announces.
56
+ */
57
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
50
58
  /**
51
59
  * Checked state — the form value. Bound by `[formField]`, two-way via
52
60
  * `[(checked)]`, or `[(ngModel)]`. Ignored inside a `<wr-checkbox-group>`,
@@ -87,7 +95,7 @@ declare class WrCheckbox implements FormCheckboxControl {
87
95
  protected onInputChange(event: Event): void;
88
96
  protected onInputBlur(): void;
89
97
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCheckbox, never>;
90
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCheckbox, "wr-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "checkboxValue": { "alias": "checkboxValue"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
98
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCheckbox, "wr-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "checkboxValue": { "alias": "checkboxValue"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touch": "touch"; }, never, ["*"], true, never>;
91
99
  }
92
100
 
93
101
  /**
@@ -56,6 +56,9 @@ interface Bucket {
56
56
  * @see https://ngwr.dev/reference/components/command-palette
57
57
  */
58
58
  declare class WrCommandPalette {
59
+ /** Accessible name. Falls back to `commandPalette.label`, then `'Command palette'`. */
60
+ readonly paletteLabel: _angular_core.InputSignal<string | null>;
61
+ protected readonly resolvedPaletteLabel: _angular_core.Signal<string>;
59
62
  /** Items shown in the palette. */
60
63
  readonly items: _angular_core.InputSignal<readonly WrCommandItem[]>;
61
64
  /** Controlled open state (two-way bindable). @default false */
@@ -118,7 +121,7 @@ declare class WrCommandPalette {
118
121
  close(): void;
119
122
  private commit;
120
123
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCommandPalette, never>;
121
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
124
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "paletteLabel": { "alias": "paletteLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
122
125
  }
123
126
 
124
127
  export { WrCommandPalette };