ngwr 10.0.0 → 10.2.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.
- package/README.md +9 -8
- package/action-sheet/styles/_index.scss +6 -1
- package/alert/styles/_index.scss +7 -3
- package/badge/styles/_index.scss +1 -1
- package/badge/styles/_tag.scss +2 -2
- package/border-glow/styles/_index.scss +5 -0
- package/breadcrumbs/styles/_index.scss +1 -1
- package/button/styles/_index.scss +6 -6
- package/calendar/styles/_index.scss +9 -1
- package/circular-text/styles/_index.scss +6 -1
- package/density/styles/_index.scss +3 -1
- package/dialog/styles/_index.scss +1 -2
- package/drag-drop/styles/_index.scss +20 -7
- package/event-calendar/styles/_index.scss +284 -0
- package/falling-text/styles/_index.scss +5 -0
- package/fesm2022/ngwr-alert.mjs +8 -3
- package/fesm2022/ngwr-alert.mjs.map +1 -1
- package/fesm2022/ngwr-back-top.mjs +6 -4
- package/fesm2022/ngwr-back-top.mjs.map +1 -1
- package/fesm2022/ngwr-border-glow.mjs +12 -9
- package/fesm2022/ngwr-border-glow.mjs.map +1 -1
- package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
- package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngwr-calendar.mjs +5 -3
- package/fesm2022/ngwr-calendar.mjs.map +1 -1
- package/fesm2022/ngwr-card.mjs +2 -2
- package/fesm2022/ngwr-card.mjs.map +1 -1
- package/fesm2022/ngwr-carousel.mjs +17 -4
- package/fesm2022/ngwr-carousel.mjs.map +1 -1
- package/fesm2022/ngwr-cascader.mjs +31 -4
- package/fesm2022/ngwr-cascader.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +12 -3
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-circular-text.mjs +2 -2
- package/fesm2022/ngwr-circular-text.mjs.map +1 -1
- package/fesm2022/ngwr-command-palette.mjs +7 -3
- package/fesm2022/ngwr-command-palette.mjs.map +1 -1
- package/fesm2022/ngwr-counter.mjs +9 -1
- package/fesm2022/ngwr-counter.mjs.map +1 -1
- package/fesm2022/ngwr-date-picker.mjs +23 -6
- package/fesm2022/ngwr-date-picker.mjs.map +1 -1
- package/fesm2022/ngwr-descriptions.mjs +5 -4
- package/fesm2022/ngwr-descriptions.mjs.map +1 -1
- package/fesm2022/ngwr-drag-drop.mjs +2 -2
- package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
- package/fesm2022/ngwr-dropdown.mjs +4 -0
- package/fesm2022/ngwr-dropdown.mjs.map +1 -1
- package/fesm2022/ngwr-event-calendar.mjs +723 -0
- package/fesm2022/ngwr-event-calendar.mjs.map +1 -0
- package/fesm2022/ngwr-falling-text.mjs +2 -2
- package/fesm2022/ngwr-falling-text.mjs.map +1 -1
- package/fesm2022/ngwr-file-upload.mjs +2 -2
- package/fesm2022/ngwr-file-upload.mjs.map +1 -1
- package/fesm2022/ngwr-form.mjs +258 -42
- package/fesm2022/ngwr-form.mjs.map +1 -1
- package/fesm2022/ngwr-fuzzy-text.mjs +15 -1
- package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
- package/fesm2022/ngwr-gauge.mjs +8 -3
- package/fesm2022/ngwr-gauge.mjs.map +1 -1
- package/fesm2022/ngwr-glitch-text.mjs +2 -2
- package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
- package/fesm2022/ngwr-gradient-text.mjs +2 -2
- package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-en.mjs +73 -5
- package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
- package/fesm2022/ngwr-i18n-ru.mjs +73 -5
- package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
- package/fesm2022/ngwr-i18n.mjs +20 -2
- package/fesm2022/ngwr-i18n.mjs.map +1 -1
- package/fesm2022/ngwr-icon.mjs +5 -0
- package/fesm2022/ngwr-icon.mjs.map +1 -1
- package/fesm2022/ngwr-input-number.mjs +19 -3
- package/fesm2022/ngwr-input-number.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +48 -6
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-knob.mjs +8 -3
- package/fesm2022/ngwr-knob.mjs.map +1 -1
- package/fesm2022/ngwr-lightbox.mjs +32 -3
- package/fesm2022/ngwr-lightbox.mjs.map +1 -1
- package/fesm2022/ngwr-line-chart.mjs +3 -3
- package/fesm2022/ngwr-line-chart.mjs.map +1 -1
- package/fesm2022/ngwr-list.mjs +2 -2
- package/fesm2022/ngwr-list.mjs.map +1 -1
- package/fesm2022/ngwr-loading-bar.mjs +2 -2
- package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
- package/fesm2022/ngwr-marquee.mjs +2 -2
- package/fesm2022/ngwr-marquee.mjs.map +1 -1
- package/fesm2022/ngwr-media.mjs +3 -0
- package/fesm2022/ngwr-media.mjs.map +1 -1
- package/fesm2022/ngwr-meter-group.mjs +14 -3
- package/fesm2022/ngwr-meter-group.mjs.map +1 -1
- package/fesm2022/ngwr-page-header.mjs +2 -2
- package/fesm2022/ngwr-page-header.mjs.map +1 -1
- package/fesm2022/ngwr-pagination.mjs +1 -1
- package/fesm2022/ngwr-pagination.mjs.map +1 -1
- package/fesm2022/ngwr-progress.mjs +8 -2
- package/fesm2022/ngwr-progress.mjs.map +1 -1
- package/fesm2022/ngwr-qr.mjs.map +1 -1
- package/fesm2022/ngwr-rating.mjs +6 -4
- package/fesm2022/ngwr-rating.mjs.map +1 -1
- package/fesm2022/ngwr-result.mjs +19 -12
- package/fesm2022/ngwr-result.mjs.map +1 -1
- package/fesm2022/ngwr-segmented.mjs +2 -2
- package/fesm2022/ngwr-segmented.mjs.map +1 -1
- package/fesm2022/ngwr-select.mjs +28 -8
- package/fesm2022/ngwr-select.mjs.map +1 -1
- package/fesm2022/ngwr-shiny-text.mjs +4 -6
- package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
- package/fesm2022/ngwr-speed-dial.mjs +11 -3
- package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
- package/fesm2022/ngwr-spotlight-card.mjs +2 -2
- package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
- package/fesm2022/ngwr-squircle.mjs +1 -1
- package/fesm2022/ngwr-squircle.mjs.map +1 -1
- package/fesm2022/ngwr-star-border.mjs +2 -2
- package/fesm2022/ngwr-star-border.mjs.map +1 -1
- package/fesm2022/ngwr-switch.mjs +10 -3
- package/fesm2022/ngwr-switch.mjs.map +1 -1
- package/fesm2022/ngwr-table.mjs +233 -19
- package/fesm2022/ngwr-table.mjs.map +1 -1
- package/fesm2022/ngwr-tabs.mjs +21 -4
- package/fesm2022/ngwr-tabs.mjs.map +1 -1
- package/fesm2022/ngwr-textarea.mjs +20 -4
- package/fesm2022/ngwr-textarea.mjs.map +1 -1
- package/fesm2022/ngwr-tilt-card.mjs +2 -2
- package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
- package/fesm2022/ngwr-toolbar.mjs +2 -2
- package/fesm2022/ngwr-toolbar.mjs.map +1 -1
- package/fesm2022/ngwr-tour.mjs +264 -0
- package/fesm2022/ngwr-tour.mjs.map +1 -0
- package/fesm2022/ngwr-transfer.mjs +184 -0
- package/fesm2022/ngwr-transfer.mjs.map +1 -0
- package/fesm2022/ngwr-tree.mjs +23 -6
- package/fesm2022/ngwr-tree.mjs.map +1 -1
- package/fesm2022/ngwr-typewriter.mjs +2 -2
- package/fesm2022/ngwr-typewriter.mjs.map +1 -1
- package/fesm2022/ngwr-validators.mjs +118 -2
- package/fesm2022/ngwr-validators.mjs.map +1 -1
- package/fesm2022/ngwr-version.mjs +2 -2
- package/fesm2022/ngwr-version.mjs.map +1 -1
- package/fesm2022/ngwr-virtual-scroll.mjs +2 -2
- package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ngwr-waves.mjs +2 -2
- package/fesm2022/ngwr-waves.mjs.map +1 -1
- package/form/styles/_index.scss +8 -4
- package/glitch-text/styles/_index.scss +5 -0
- package/gradient-text/styles/_index.scss +5 -0
- package/i18n/en.json +74 -6
- package/i18n/ru.json +74 -6
- package/icon/styles/_index.scss +5 -0
- package/keyboard/styles/_index.scss +5 -0
- package/llms-full.txt +123 -62
- package/llms.txt +29 -8
- package/loading-bar/styles/_index.scss +5 -0
- package/marquee/styles/_index.scss +7 -2
- package/overlay/styles/_index.scss +5 -0
- package/package.json +13 -1
- package/popover/styles/_index.scss +48 -12
- package/pull-to-refresh/styles/_index.scss +5 -0
- package/result/styles/_index.scss +3 -3
- package/schematics/icon-set/index.js +80 -34
- package/schematics/icon-set/schema.json +8 -3
- package/schematics/ng-add/index.js +5 -2
- package/schematics/page/templates.js +17 -21
- package/schematics/provider/index.js +31 -13
- package/schematics/provider/schema.json +40 -24
- package/schematics/use/index.js +5 -1
- package/schematics/use/schema.json +8 -3
- package/schematics/use/symbol-map.json +6 -177
- package/segmented/styles/_index.scss +1 -1
- package/select/styles/_index.scss +7 -3
- package/shiny-text/styles/_index.scss +5 -0
- package/sidebar/styles/_index.scss +3 -3
- package/speed-dial/styles/_index.scss +12 -1
- package/spotlight-card/styles/_index.scss +5 -0
- package/squircle/styles/_index.scss +5 -0
- package/star-border/styles/_index.scss +5 -0
- package/statistic/styles/_index.scss +2 -2
- package/stepper/styles/_index.scss +3 -3
- package/styles/_animations.scss +6 -0
- package/styles.scss +3 -0
- package/table/styles/_index.scss +100 -2
- package/tabs/styles/_index.scss +1 -1
- package/theme/styles/_colors.scss +65 -2
- package/theme/styles/_dark.scss +18 -6
- package/theme/styles/_focus.scss +2 -8
- package/tilt-card/styles/_index.scss +5 -0
- package/toast/styles/_index.scss +6 -3
- package/tour/styles/_index.scss +63 -0
- package/transfer/styles/_index.scss +105 -0
- package/types/ngwr-alert.d.ts +4 -1
- package/types/ngwr-avatar.d.ts +1 -1
- package/types/ngwr-back-top.d.ts +3 -2
- package/types/ngwr-badge.d.ts +1 -1
- package/types/ngwr-border-glow.d.ts +0 -1
- package/types/ngwr-carousel.d.ts +10 -1
- package/types/ngwr-cascader.d.ts +12 -1
- package/types/ngwr-checkbox.d.ts +9 -1
- package/types/ngwr-command-palette.d.ts +4 -1
- package/types/ngwr-date-picker.d.ts +9 -1
- package/types/ngwr-density.d.ts +1 -1
- package/types/ngwr-divider.d.ts +1 -1
- package/types/ngwr-event-calendar.d.ts +358 -0
- package/types/ngwr-form.d.ts +177 -20
- package/types/ngwr-fuzzy-text.d.ts +8 -0
- package/types/ngwr-gauge.d.ts +4 -1
- package/types/ngwr-i18n.d.ts +15 -0
- package/types/ngwr-input-number.d.ts +8 -1
- package/types/ngwr-input.d.ts +50 -20
- package/types/ngwr-knob.d.ts +4 -1
- package/types/ngwr-lightbox.d.ts +7 -1
- package/types/ngwr-line-chart.d.ts +1 -1
- package/types/ngwr-media.d.ts +1 -1
- package/types/ngwr-meter-group.d.ts +9 -1
- package/types/ngwr-page-header.d.ts +2 -2
- package/types/ngwr-pagination.d.ts +1 -1
- package/types/ngwr-progress.d.ts +4 -1
- package/types/ngwr-rating.d.ts +3 -2
- package/types/ngwr-result.d.ts +12 -6
- package/types/ngwr-segmented.d.ts +6 -0
- package/types/ngwr-select.d.ts +13 -7
- package/types/ngwr-shiny-text.d.ts +2 -4
- package/types/ngwr-speed-dial.d.ts +7 -1
- package/types/ngwr-squircle.d.ts +1 -1
- package/types/ngwr-switch.d.ts +7 -1
- package/types/ngwr-table.d.ts +126 -6
- package/types/ngwr-tabs.d.ts +1 -4
- package/types/ngwr-textarea.d.ts +8 -1
- package/types/ngwr-toolbar.d.ts +2 -2
- package/types/ngwr-tour.d.ts +132 -0
- package/types/ngwr-transfer.d.ts +118 -0
- package/types/ngwr-tree.d.ts +10 -2
- package/types/ngwr-validators.d.ts +62 -2
- package/types/ngwr-version.d.ts +2 -2
- package/typewriter/styles/_index.scss +5 -0
- package/typography/styles/_index.scss +5 -5
- package/virtual-scroll/styles/_index.scss +6 -1
- package/waves/styles/_index.scss +5 -0
package/types/ngwr-form.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
|
|
2
3
|
import * as _angular_forms from '@angular/forms';
|
|
3
4
|
import { NgControl } from '@angular/forms';
|
|
4
5
|
|
|
@@ -12,7 +13,7 @@ import { NgControl } from '@angular/forms';
|
|
|
12
13
|
* ```html
|
|
13
14
|
* <wr-form-item [hasError]="form.controls.email.invalid">
|
|
14
15
|
* <label>Email</label>
|
|
15
|
-
* <
|
|
16
|
+
* <input wrInput formControlName="email" />
|
|
16
17
|
* <wr-form-error>Invalid email</wr-form-error>
|
|
17
18
|
* </wr-form-item>
|
|
18
19
|
* ```
|
|
@@ -31,6 +32,71 @@ declare class WrFormItem {
|
|
|
31
32
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrFormItem, "wr-form-item", never, { "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
/**
|
|
36
|
+
* @license
|
|
37
|
+
*
|
|
38
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
39
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* What a projected control can read from its surrounding `<wr-form-field>`.
|
|
44
|
+
*
|
|
45
|
+
* The field renders `<label [for]>` before it can see what was projected into
|
|
46
|
+
* it, so the id has to travel the other way: the control adopts the id the
|
|
47
|
+
* label already points at. Doing it through DI keeps it a render-time binding,
|
|
48
|
+
* which is what SSR needs — stamping the id from `afterNextRender` would leave
|
|
49
|
+
* every prerendered page with a label pointing at nothing.
|
|
50
|
+
*/
|
|
51
|
+
interface WrFormFieldContext {
|
|
52
|
+
/** Id the field's `<label for>` points at. */
|
|
53
|
+
readonly controlId: Signal<string>;
|
|
54
|
+
/**
|
|
55
|
+
* Validator keys currently in error, once the control is touched or dirty.
|
|
56
|
+
* Empty when the field is valid or has not been interacted with.
|
|
57
|
+
*/
|
|
58
|
+
readonly errorKeys: Signal<readonly string[]>;
|
|
59
|
+
/** Id of the element listing the visible messages, or `null` when there are none. */
|
|
60
|
+
readonly describedBy: Signal<string | null>;
|
|
61
|
+
}
|
|
62
|
+
/** Present only inside a `<wr-form-field>`; inject with `{ optional: true }`. */
|
|
63
|
+
declare const WR_FORM_FIELD: InjectionToken<WrFormFieldContext>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* One error message tied to a validator key. Renders only when the parent
|
|
67
|
+
* form-field has a matching error in `control.errors`, and only once the
|
|
68
|
+
* control is touched or dirty.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```html
|
|
72
|
+
* <wr-form-error key="required">This field is required.</wr-form-error>
|
|
73
|
+
* <wr-form-error key="email">That doesn't look right.</wr-form-error>
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
declare class WrFormError {
|
|
77
|
+
/**
|
|
78
|
+
* Validator key this message corresponds to (e.g. `'required'`).
|
|
79
|
+
* Optional — without a key the message always renders, which is the
|
|
80
|
+
* plain inline-error usage inside `<wr-form-item>`.
|
|
81
|
+
*/
|
|
82
|
+
readonly key: _angular_core.InputSignal<string | undefined>;
|
|
83
|
+
private readonly field;
|
|
84
|
+
/**
|
|
85
|
+
* Whether this message is the one the current error calls for.
|
|
86
|
+
*
|
|
87
|
+
* The parent projects every `<wr-form-error>` through a single
|
|
88
|
+
* `<ng-content select>`, which cannot filter — so each message decides for
|
|
89
|
+
* itself. Without this, one invalid control rendered "Email is required."
|
|
90
|
+
* and "That isn't a valid email." side by side, which is what the docs have
|
|
91
|
+
* always described as gated behaviour.
|
|
92
|
+
*
|
|
93
|
+
* A keyless message always shows: that is the plain inline-error usage inside
|
|
94
|
+
* `<wr-form-item>`, which has no error discovery at all.
|
|
95
|
+
*/
|
|
96
|
+
protected readonly visible: _angular_core.Signal<boolean>;
|
|
97
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrFormError, never>;
|
|
98
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrFormError, "wr-form-error", never, { "key": { "alias": "key"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
99
|
+
}
|
|
34
100
|
/**
|
|
35
101
|
* Wraps a label + control + hint + error messages into a single block —
|
|
36
102
|
* the layout primitive every form ends up reinventing.
|
|
@@ -52,7 +118,7 @@ declare class WrFormItem {
|
|
|
52
118
|
*
|
|
53
119
|
* @see https://ngwr.dev/reference/components/form-field
|
|
54
120
|
*/
|
|
55
|
-
declare class WrFormField {
|
|
121
|
+
declare class WrFormField implements WrFormFieldContext {
|
|
56
122
|
/** Label text shown above the control. */
|
|
57
123
|
readonly label: _angular_core.InputSignal<string>;
|
|
58
124
|
/** Hint text shown below the control. Hidden when an error is visible. */
|
|
@@ -61,35 +127,126 @@ declare class WrFormField {
|
|
|
61
127
|
readonly required: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
62
128
|
/** Show `(optional)` next to the label. Mutually exclusive with `required`. @default false */
|
|
63
129
|
readonly optional: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
64
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* Force a specific id on the label's `for` attribute. Auto-generated
|
|
132
|
+
* otherwise, and adopted by the projected `wrInput` unless that element
|
|
133
|
+
* already carries an `id` of its own.
|
|
134
|
+
*/
|
|
65
135
|
readonly controlId: _angular_core.InputSignal<string>;
|
|
66
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* Projected `NgControl` — used to read touched / dirty / errors.
|
|
138
|
+
*
|
|
139
|
+
* This catches `[formField]` too: Angular's Signal Forms directive provides
|
|
140
|
+
* `NgControl` via its interop shim, so both forms flavours land here.
|
|
141
|
+
*/
|
|
67
142
|
protected readonly ngControl: _angular_core.Signal<NgControl | undefined>;
|
|
143
|
+
/**
|
|
144
|
+
* Bumped on every event the projected control emits.
|
|
145
|
+
*
|
|
146
|
+
* `AbstractControl`'s `touched` / `dirty` / `errors` accessors are NOT
|
|
147
|
+
* reactive under classic forms — Angular reads them inside `untracked()`, and
|
|
148
|
+
* `errors` is a plain assigned field. A `computed` over them therefore caches
|
|
149
|
+
* its first value and never recomputes, which in a zoneless app means the
|
|
150
|
+
* error block never appears at all. `control.events` is the reactive source
|
|
151
|
+
* Angular does expose, so the computed depends on this counter instead.
|
|
152
|
+
* Signal Forms needs none of this — its interop getters read live signals —
|
|
153
|
+
* and harmlessly contributes no events.
|
|
154
|
+
*/
|
|
155
|
+
private readonly revision;
|
|
156
|
+
constructor();
|
|
68
157
|
protected readonly errors: _angular_core.Signal<_angular_forms.ValidationErrors | null>;
|
|
69
158
|
protected readonly hasError: _angular_core.Signal<boolean>;
|
|
159
|
+
/** @internal Read by the projected `<wr-form-error>` children to decide which of them renders. */
|
|
160
|
+
readonly errorKeys: _angular_core.Signal<readonly string[]>;
|
|
161
|
+
/** @internal Read by the projected control so a screen reader is pointed at the message. */
|
|
162
|
+
readonly describedBy: _angular_core.Signal<string | null>;
|
|
163
|
+
/**
|
|
164
|
+
* Render a catalog message for any error the markup does not already answer.
|
|
165
|
+
*
|
|
166
|
+
* On by default: a field with no `<wr-form-error>` at all is the common case,
|
|
167
|
+
* and an empty error block helps nobody. Turn it off for a field whose copy is
|
|
168
|
+
* entirely hand-written. @default true
|
|
169
|
+
*/
|
|
170
|
+
readonly autoErrors: _angular_core.InputSignalWithTransform<boolean, any>;
|
|
171
|
+
private readonly projectedErrors;
|
|
172
|
+
private readonly appMessages;
|
|
173
|
+
private readonly i18n;
|
|
174
|
+
/**
|
|
175
|
+
* Errors with no projected `<wr-form-error key>` to answer them, resolved to
|
|
176
|
+
* text: the app catalog first, then the `validation.*` i18n keys, then a
|
|
177
|
+
* built-in English sentence. Per-field markup always wins — it is the most
|
|
178
|
+
* specific thing the author wrote.
|
|
179
|
+
*/
|
|
180
|
+
protected readonly autoMessages: _angular_core.Signal<readonly {
|
|
181
|
+
key: string;
|
|
182
|
+
text: string;
|
|
183
|
+
}[]>;
|
|
184
|
+
private resolve;
|
|
70
185
|
protected readonly classes: _angular_core.Signal<string>;
|
|
71
186
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrFormField, never>;
|
|
72
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrFormField, "wr-form-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; }, {}, ["ngControl"], ["*", "wr-form-error"], true, never>;
|
|
187
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrFormField, "wr-form-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "autoErrors": { "alias": "autoErrors"; "required": false; "isSignal": true; }; }, {}, ["ngControl", "projectedErrors"], ["*", "wr-form-error"], true, never>;
|
|
73
188
|
}
|
|
189
|
+
|
|
74
190
|
/**
|
|
75
|
-
*
|
|
76
|
-
* parent form-field has a matching error in `control.errors`.
|
|
191
|
+
* @license
|
|
77
192
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* <wr-form-error key="required">This field is required.</wr-form-error>
|
|
81
|
-
* <wr-form-error key="email">That doesn't look right.</wr-form-error>
|
|
82
|
-
* ```
|
|
193
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
194
|
+
* found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
|
|
83
195
|
*/
|
|
84
|
-
|
|
196
|
+
|
|
197
|
+
/** What a message function is handed to build its sentence. */
|
|
198
|
+
interface WrFormErrorContext {
|
|
199
|
+
/** Validator key (classic forms) or Signal Forms `kind` that produced the error. */
|
|
200
|
+
readonly key: string;
|
|
85
201
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
202
|
+
* The validator's own payload — `{ requiredLength, actualLength }` for
|
|
203
|
+
* `minlength`, `{ min }` for `wrMinDate`, and so on. `true` for the
|
|
204
|
+
* flag-shaped validators, which carry nothing.
|
|
89
205
|
*/
|
|
90
|
-
readonly
|
|
91
|
-
|
|
92
|
-
|
|
206
|
+
readonly error: unknown;
|
|
207
|
+
/** The surrounding field's `label`, so a message can name the field. */
|
|
208
|
+
readonly label: string;
|
|
93
209
|
}
|
|
210
|
+
/** A message, or a function that builds one from the validator's payload. */
|
|
211
|
+
type WrFormErrorMessage = string | ((ctx: WrFormErrorContext) => string);
|
|
212
|
+
/** Validator key → message. Keys are matched exactly against `control.errors`. */
|
|
213
|
+
type WrFormErrorMessages = Readonly<Record<string, WrFormErrorMessage>>;
|
|
214
|
+
/**
|
|
215
|
+
* App-wide validation copy. Empty by default; `<wr-form-field>` falls through
|
|
216
|
+
* to the `ngwr/i18n` catalog and then to a built-in English sentence, so a
|
|
217
|
+
* form shows a usable message with no configuration at all.
|
|
218
|
+
*/
|
|
219
|
+
declare const WR_FORM_ERRORS: InjectionToken<Readonly<Record<string, WrFormErrorMessage>>>;
|
|
220
|
+
/**
|
|
221
|
+
* Register validation messages for the whole app.
|
|
222
|
+
*
|
|
223
|
+
* Only the keys you name are overridden — everything else keeps resolving
|
|
224
|
+
* through the i18n catalog, so this composes with `provideWrI18n()` rather than
|
|
225
|
+
* replacing it. A projected `<wr-form-error key="…">` still wins over both:
|
|
226
|
+
* per-field copy beats app-wide copy.
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```ts
|
|
230
|
+
* bootstrapApplication(App, {
|
|
231
|
+
* providers: [
|
|
232
|
+
* provideWrFormErrors({
|
|
233
|
+
* required: 'Please fill this in.',
|
|
234
|
+
* minlength: ({ error }) => `At least ${(error as { requiredLength: number }).requiredLength} characters.`,
|
|
235
|
+
* }),
|
|
236
|
+
* ],
|
|
237
|
+
* });
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
declare function provideWrFormErrors(messages?: WrFormErrorMessages): EnvironmentProviders;
|
|
241
|
+
/**
|
|
242
|
+
* Last-resort English, used when no app catalog and no i18n catalog answer.
|
|
243
|
+
*
|
|
244
|
+
* These exist so that a form with zero configuration still says something true
|
|
245
|
+
* rather than rendering an empty error block. Every key here also ships as a
|
|
246
|
+
* `validation.*` entry in `ngwr/i18n/{en,ru}`, which is what a localized app
|
|
247
|
+
* actually reads.
|
|
248
|
+
*/
|
|
249
|
+
declare const WR_FORM_ERROR_FALLBACKS: WrFormErrorMessages;
|
|
94
250
|
|
|
95
|
-
export { WrFormError, WrFormField, WrFormItem };
|
|
251
|
+
export { WR_FORM_ERRORS, WR_FORM_ERROR_FALLBACKS, WR_FORM_FIELD, WrFormError, WrFormField, WrFormItem, provideWrFormErrors };
|
|
252
|
+
export type { WrFormErrorContext, WrFormErrorMessage, WrFormErrorMessages, WrFormFieldContext };
|
|
@@ -64,6 +64,14 @@ declare class WrFuzzyText {
|
|
|
64
64
|
private readonly isBrowser;
|
|
65
65
|
private readonly platform;
|
|
66
66
|
private teardown;
|
|
67
|
+
/**
|
|
68
|
+
* `init()` suspends on font loading, so the component can be destroyed while
|
|
69
|
+
* it is awaiting. At that moment `teardown` is still undefined, so the
|
|
70
|
+
* destroy hook has nothing to call — and everything the rest of `init()`
|
|
71
|
+
* starts (the rAF loop, the glitch timers, canvas listeners) would run for
|
|
72
|
+
* the life of the page. This flag lets the continuation bail out.
|
|
73
|
+
*/
|
|
74
|
+
private destroyed;
|
|
67
75
|
constructor();
|
|
68
76
|
private init;
|
|
69
77
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrFuzzyText, never>;
|
package/types/ngwr-gauge.d.ts
CHANGED
|
@@ -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 };
|
package/types/ngwr-i18n.d.ts
CHANGED
|
@@ -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 };
|
package/types/ngwr-input.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
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
|
|
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:
|
|
73
|
+
readonly wrSize: _angular_core.InputSignal<WrInputSize>;
|
|
50
74
|
/** Pill-shaped corners. @default false */
|
|
51
|
-
readonly rounded:
|
|
52
|
-
protected readonly classes:
|
|
53
|
-
static ɵfac:
|
|
54
|
-
static ɵdir:
|
|
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:
|
|
72
|
-
static ɵdir:
|
|
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:
|
|
90
|
-
static ɵdir:
|
|
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:
|
|
116
|
-
protected readonly classes:
|
|
117
|
-
static ɵfac:
|
|
118
|
-
static ɵcmp:
|
|
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:
|
|
137
|
-
protected readonly revealed:
|
|
138
|
-
|
|
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:
|
|
141
|
-
static ɵcmp:
|
|
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 };
|
package/types/ngwr-knob.d.ts
CHANGED
|
@@ -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 };
|
package/types/ngwr-lightbox.d.ts
CHANGED
|
@@ -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-
|
|
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)' }
|
package/types/ngwr-media.d.ts
CHANGED
|
@@ -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
|
|
15
|
-
* <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>
|
package/types/ngwr-progress.d.ts
CHANGED
|
@@ -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 };
|
package/types/ngwr-rating.d.ts
CHANGED
|
@@ -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.
|
|
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. */
|