@forgeroute/ui 0.4.76 → 0.4.78
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/package.json
CHANGED
package/types/forgeroute-ui.d.ts
CHANGED
|
@@ -196,6 +196,20 @@ export interface ColumnDef {
|
|
|
196
196
|
* Example: `{ key: 'name', label: 'Name', starFn: (doc) => doc.isAuthForm ? 'Authorization Form' : null }`
|
|
197
197
|
*/
|
|
198
198
|
starFn?: (item: any) => string | null | undefined;
|
|
199
|
+
/**
|
|
200
|
+
* Library source 2026-11-05, not yet published. Draws a small decorative icon (16px, `aria-hidden`, currentColor, on the first text line, never shrinks)
|
|
201
|
+
* to the LEFT of the cell text, in desktop cells and in the phone card (title, badge pills, detail rows). Returns a `<ui-icon>` key (see `iconPath()`) or a
|
|
202
|
+
* raw 24x24 stroke SVG path (drawing commands and numbers only, same rule as ui-radio's `icon`); null / undefined / '' / anything else draws nothing.
|
|
203
|
+
* Applies to text, badge, date, phone and number cells; never to avatar-name, link, tags, progress, image, days-ago or actions. The cell's text and the row's
|
|
204
|
+
* accessible name are unchanged (see `iconLabelFn` for meaningful icons). Placed before a `starFn` star.
|
|
205
|
+
* Example: `{ key: 'name', label: 'Name', iconFn: (r) => r.kind === 'rental' ? 'wrench' : 'cup' }`
|
|
206
|
+
*/
|
|
207
|
+
iconFn?: (item: any) => string | null | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* Library source 2026-11-05, not yet published. Accessible text for a MEANINGFUL `iconFn` icon: rendered as visually hidden text right after the icon
|
|
210
|
+
* (the icon stays `aria-hidden`). Default (absent / null / '') = the icon is decorative. Ignored when no icon is drawn for the row.
|
|
211
|
+
*/
|
|
212
|
+
iconLabelFn?: (item: any) => string | null | undefined;
|
|
199
213
|
/**
|
|
200
214
|
* Footer text for this column, from the table's `totalsEndpoint` response (shown only while the table has rows and the totals loaded).
|
|
201
215
|
* Return null / undefined / '' for an empty footer cell. `cellType: 'number'` columns are right-aligned like their body cells.
|
|
@@ -1195,7 +1209,7 @@ export declare class SelectComponent implements ControlValueAccessor, Validator,
|
|
|
1195
1209
|
readonly error: import("@angular/core").InputSignal<string>;
|
|
1196
1210
|
/** Reveal the built-in error messages now (e.g. after a failed Save click), without waiting for blur. */
|
|
1197
1211
|
readonly showErrors: import("@angular/core").InputSignal<boolean>;
|
|
1198
|
-
readonly size: import("@angular/core").InputSignal<"
|
|
1212
|
+
readonly size: import("@angular/core").InputSignal<"default" | "sm">;
|
|
1199
1213
|
readonly _disabledInput: import("@angular/core").InputSignal<boolean>;
|
|
1200
1214
|
private readonly _cvaDisabled;
|
|
1201
1215
|
protected readonly disabled: import("@angular/core").Signal<boolean>;
|
|
@@ -2114,6 +2128,16 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
2114
2128
|
protected onLinkClick(e: MouseEvent, link: ResolvedLink, col: ColumnDef, item: T): void;
|
|
2115
2129
|
protected getInitials(name: string): string;
|
|
2116
2130
|
protected isCardOverdue(col: ColumnDef, item: T): boolean;
|
|
2131
|
+
/** Cell types that never get a leading icon: they draw their own leading visual or are not text-like. */
|
|
2132
|
+
private static readonly _NO_ICON_TYPES;
|
|
2133
|
+
/**
|
|
2134
|
+
* Path of the leading icon for a cell (library source 2026-11-05, not yet published): `iconFn` returns a `<ui-icon>` key (known key wins) or a raw
|
|
2135
|
+
* 24x24 stroke path (drawing commands and numbers only, same rule as ui-radio's `icon`); anything else, an empty value, a throwing `iconFn` or a
|
|
2136
|
+
* non-text-like cell type gives null (nothing is drawn).
|
|
2137
|
+
*/
|
|
2138
|
+
protected cellIconPath(col: ColumnDef, item: T): string | null;
|
|
2139
|
+
/** Screen-reader text for a meaningful icon (`iconLabelFn`); '' (decorative) when absent, empty, throwing or when no icon is drawn. */
|
|
2140
|
+
protected cellIconLabel(col: ColumnDef, item: T): string;
|
|
2117
2141
|
/** Renders any non-badge column value as a plain string for the mobile card view. */
|
|
2118
2142
|
protected cardCellText(col: ColumnDef, item: T): string;
|
|
2119
2143
|
/** Refresh data rows only — used internally for sort, filter, search, pagination. */
|
|
@@ -3143,7 +3167,7 @@ export declare class AudioPlayerComponent {
|
|
|
3143
3167
|
/** Accessible name of the player. */
|
|
3144
3168
|
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
3145
3169
|
/** How much to load before play: 'metadata' (default), 'auto' or 'none'. */
|
|
3146
|
-
readonly preload: import("@angular/core").InputSignal<"none" | "
|
|
3170
|
+
readonly preload: import("@angular/core").InputSignal<"none" | "auto" | "metadata">;
|
|
3147
3171
|
/** Fires when the browser can't load or decode the source. */
|
|
3148
3172
|
readonly playbackError: import("@angular/core").OutputEmitterRef<void>;
|
|
3149
3173
|
protected readonly failed: import("@angular/core").WritableSignal<boolean>;
|
|
@@ -3300,6 +3324,153 @@ export declare class StarComponent {
|
|
|
3300
3324
|
"starClick": "starClick";
|
|
3301
3325
|
}, never, never, true, never>;
|
|
3302
3326
|
}
|
|
3327
|
+
/**
|
|
3328
|
+
* Library source 2026-11-05, not yet published.
|
|
3329
|
+
*
|
|
3330
|
+
* Accessible star rating, 1..`max` (default 5). A ControlValueAccessor with a number value (`0` = no rating).
|
|
3331
|
+
*
|
|
3332
|
+
* - Input mode (default): a `<fieldset role="radiogroup">` (+ `<legend>` = `label`) of native radio inputs that share one `name`, so the browser
|
|
3333
|
+
* gives the roving tab stop and ArrowLeft / ArrowRight / ArrowUp / ArrowDown (move + select) for free; Space selects the focused star natively,
|
|
3334
|
+
* Enter selects it too and Home / End select the first / last star (handled here). Each radio is named "1 star", "2 stars", ...
|
|
3335
|
+
* - `readonly`: all `max` stars are drawn (filled up to the value, the rest outlined) as one `role="img"` named "4 stars out of 5" ("No rating" for 0; with a `label`: "Quality: 4 stars out of 5"). No inputs.
|
|
3336
|
+
* - Validation follows `ui-radio-group` (`UiFieldValidity`, `Validator`, `invalidChange`): `required` -> "<label> is required." when the value is 0;
|
|
3337
|
+
* a value that is not a whole number from 0 to `max` -> "Select a valid option."; messages show after the group lost focus or while `[showErrors]="true"`;
|
|
3338
|
+
* a host `[error]` wins. Disabled and readonly are never invalid.
|
|
3339
|
+
* - Stars are gold (same look as `ui-star`, with a darker amber outline so the shape reaches 3:1 against white); empty stars are outlined, so the value never relies on colour alone. 44px touch targets on touch / phones.
|
|
3340
|
+
*
|
|
3341
|
+
* <ui-star-rating label="Quality" [required]="true" [showErrors]="touched()" [(ngModel)]="form.rating" />
|
|
3342
|
+
* <ui-star-rating [readonly]="true" [value]="4" />
|
|
3343
|
+
*/
|
|
3344
|
+
export declare class StarRatingComponent implements ControlValueAccessor, Validator, UiFieldValidity {
|
|
3345
|
+
/** Largest rating (number of stars). Default 5; values below 1 or non-integers are clamped to a whole number of at least 1. */
|
|
3346
|
+
readonly max: import("@angular/core").InputSignal<number>;
|
|
3347
|
+
/** Current rating for standalone / readonly use (`[value]="4"`); `0` = none. With forms, the control value wins after it is written. */
|
|
3348
|
+
readonly value: import("@angular/core").InputSignal<number>;
|
|
3349
|
+
readonly label: import("@angular/core").InputSignal<string>;
|
|
3350
|
+
/** Accessible name when there is no visible `label` (default "Rating"). */
|
|
3351
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
3352
|
+
readonly hint: import("@angular/core").InputSignal<string>;
|
|
3353
|
+
readonly error: import("@angular/core").InputSignal<string>;
|
|
3354
|
+
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
3355
|
+
/** Reveal the built-in error messages now (e.g. after a failed Save click), without waiting for blur. */
|
|
3356
|
+
readonly showErrors: import("@angular/core").InputSignal<boolean>;
|
|
3357
|
+
/** Star size in px (default 24). */
|
|
3358
|
+
readonly size: import("@angular/core").InputSignal<number>;
|
|
3359
|
+
/** Display only: filled stars as one image named "4 stars out of 5"; no inputs, never invalid. */
|
|
3360
|
+
readonly readonly: import("@angular/core").InputSignal<boolean>;
|
|
3361
|
+
/** Native `name` shared by the radios; a unique one is generated when omitted. */
|
|
3362
|
+
readonly name: import("@angular/core").InputSignal<string>;
|
|
3363
|
+
readonly _disabledInput: import("@angular/core").InputSignal<boolean>;
|
|
3364
|
+
private readonly _cvaDisabled;
|
|
3365
|
+
protected readonly disabled: import("@angular/core").Signal<boolean>;
|
|
3366
|
+
/** Emits the new rating when the USER picks a star (not for values the host writes). */
|
|
3367
|
+
readonly valueChange: import("@angular/core").OutputEmitterRef<number>;
|
|
3368
|
+
/** Emits whenever the field becomes invalid / valid. */
|
|
3369
|
+
readonly invalidChange: import("@angular/core").OutputEmitterRef<boolean>;
|
|
3370
|
+
protected readonly _value: import("@angular/core").WritableSignal<number>;
|
|
3371
|
+
protected readonly _max: import("@angular/core").Signal<number>;
|
|
3372
|
+
protected readonly _stars: import("@angular/core").Signal<number[]>;
|
|
3373
|
+
/** Stars drawn filled: the value, kept inside 0..max (an invalid value never overflows the row). */
|
|
3374
|
+
protected readonly _shown: import("@angular/core").Signal<number>;
|
|
3375
|
+
protected readonly _readonlyText: import("@angular/core").Signal<string>;
|
|
3376
|
+
protected readonly _path = "M10 1.5l2.6 5.3 5.9.9-4.25 4.15 1 5.85L10 14.9l-5.25 2.8 1-5.85L1.5 7.7l5.9-.9L10 1.5z";
|
|
3377
|
+
private readonly _generatedName;
|
|
3378
|
+
protected get _name(): string;
|
|
3379
|
+
protected readonly _descId: string;
|
|
3380
|
+
private readonly _host;
|
|
3381
|
+
private readonly _reveal;
|
|
3382
|
+
private readonly _issue;
|
|
3383
|
+
/** True while the value breaks a built-in rule or the host passed an `[error]`. */
|
|
3384
|
+
readonly invalid: import("@angular/core").Signal<boolean>;
|
|
3385
|
+
/** Message of the first broken built-in rule ('' when valid), shown or not. */
|
|
3386
|
+
readonly errorMessage: import("@angular/core").Signal<string>;
|
|
3387
|
+
protected readonly _activeError: import("@angular/core").Signal<string>;
|
|
3388
|
+
private _onValidatorChange;
|
|
3389
|
+
constructor();
|
|
3390
|
+
/** Re-run the form control's validation when a rule input (required, max) changes. */
|
|
3391
|
+
ngOnChanges(): void;
|
|
3392
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
3393
|
+
registerOnValidatorChange(fn: () => void): void;
|
|
3394
|
+
private _onChange;
|
|
3395
|
+
private _onTouched;
|
|
3396
|
+
writeValue(val: number | null): void;
|
|
3397
|
+
registerOnChange(fn: (v: number) => void): void;
|
|
3398
|
+
registerOnTouched(fn: () => void): void;
|
|
3399
|
+
setDisabledState(d: boolean): void;
|
|
3400
|
+
private static _norm;
|
|
3401
|
+
protected onSelect(n: number): void;
|
|
3402
|
+
/** Enter selects the focused star (Space and the arrow keys are native radio behaviour); Home / End select the first / last star. */
|
|
3403
|
+
protected onKeydown(event: KeyboardEvent, n: number): void;
|
|
3404
|
+
/** Touched once focus leaves the whole group (moving between its stars does not count). */
|
|
3405
|
+
protected onFocusOut(event: FocusEvent): void;
|
|
3406
|
+
private _check;
|
|
3407
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StarRatingComponent, never>;
|
|
3408
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StarRatingComponent, "ui-star-rating", never, {
|
|
3409
|
+
"max": {
|
|
3410
|
+
"alias": "max";
|
|
3411
|
+
"required": false;
|
|
3412
|
+
"isSignal": true;
|
|
3413
|
+
};
|
|
3414
|
+
"value": {
|
|
3415
|
+
"alias": "value";
|
|
3416
|
+
"required": false;
|
|
3417
|
+
"isSignal": true;
|
|
3418
|
+
};
|
|
3419
|
+
"label": {
|
|
3420
|
+
"alias": "label";
|
|
3421
|
+
"required": false;
|
|
3422
|
+
"isSignal": true;
|
|
3423
|
+
};
|
|
3424
|
+
"ariaLabel": {
|
|
3425
|
+
"alias": "ariaLabel";
|
|
3426
|
+
"required": false;
|
|
3427
|
+
"isSignal": true;
|
|
3428
|
+
};
|
|
3429
|
+
"hint": {
|
|
3430
|
+
"alias": "hint";
|
|
3431
|
+
"required": false;
|
|
3432
|
+
"isSignal": true;
|
|
3433
|
+
};
|
|
3434
|
+
"error": {
|
|
3435
|
+
"alias": "error";
|
|
3436
|
+
"required": false;
|
|
3437
|
+
"isSignal": true;
|
|
3438
|
+
};
|
|
3439
|
+
"required": {
|
|
3440
|
+
"alias": "required";
|
|
3441
|
+
"required": false;
|
|
3442
|
+
"isSignal": true;
|
|
3443
|
+
};
|
|
3444
|
+
"showErrors": {
|
|
3445
|
+
"alias": "showErrors";
|
|
3446
|
+
"required": false;
|
|
3447
|
+
"isSignal": true;
|
|
3448
|
+
};
|
|
3449
|
+
"size": {
|
|
3450
|
+
"alias": "size";
|
|
3451
|
+
"required": false;
|
|
3452
|
+
"isSignal": true;
|
|
3453
|
+
};
|
|
3454
|
+
"readonly": {
|
|
3455
|
+
"alias": "readonly";
|
|
3456
|
+
"required": false;
|
|
3457
|
+
"isSignal": true;
|
|
3458
|
+
};
|
|
3459
|
+
"name": {
|
|
3460
|
+
"alias": "name";
|
|
3461
|
+
"required": false;
|
|
3462
|
+
"isSignal": true;
|
|
3463
|
+
};
|
|
3464
|
+
"_disabledInput": {
|
|
3465
|
+
"alias": "disabled";
|
|
3466
|
+
"required": false;
|
|
3467
|
+
"isSignal": true;
|
|
3468
|
+
};
|
|
3469
|
+
}, {
|
|
3470
|
+
"valueChange": "valueChange";
|
|
3471
|
+
"invalidChange": "invalidChange";
|
|
3472
|
+
}, never, never, true, never>;
|
|
3473
|
+
}
|
|
3303
3474
|
export type ImageRepositionShape = 'circle' | 'rounded';
|
|
3304
3475
|
/**
|
|
3305
3476
|
* Drag-to-center photo frame. The image fills the frame (`object-fit: cover`) and the user drags it, or uses the arrow
|
|
@@ -3384,6 +3555,22 @@ export interface CheckboxOption {
|
|
|
3384
3555
|
/** `data-testid` of this option's label text; none when omitted. */
|
|
3385
3556
|
labelTestId?: string;
|
|
3386
3557
|
}
|
|
3558
|
+
/** A link a single `ui-checkbox` label can hold: the label text names it with `{key}`, `labelLinks` says what `{key}` shows and where it goes. */
|
|
3559
|
+
export interface CheckboxLabelLink {
|
|
3560
|
+
/** The link's text (plain text, never HTML). A link with no text is not drawn. */
|
|
3561
|
+
label: string;
|
|
3562
|
+
/** Where it goes: `http:`, `https:`, `mailto:`, `tel:` or an in-app path (`/terms`, `#top`). Anything else (`javascript:`, `data:`, `//host`, empty) draws the text without a link. */
|
|
3563
|
+
url: string;
|
|
3564
|
+
/** `data-testid` of the link; none when omitted. */
|
|
3565
|
+
testId?: string;
|
|
3566
|
+
}
|
|
3567
|
+
/** One piece of a label that holds links: plain text, or a link when `href` is set. */
|
|
3568
|
+
interface CheckboxLabelSegment {
|
|
3569
|
+
text: string;
|
|
3570
|
+
href?: string;
|
|
3571
|
+
newTab?: boolean;
|
|
3572
|
+
testId?: string;
|
|
3573
|
+
}
|
|
3387
3574
|
export declare class CheckboxComponent implements ControlValueAccessor, Validator, UiFieldValidity {
|
|
3388
3575
|
readonly label: import("@angular/core").InputSignal<string>;
|
|
3389
3576
|
/** Accessible name for the native checkbox when there is no visible `label` (e.g. a table row's selector). */
|
|
@@ -3397,7 +3584,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
3397
3584
|
* clicking it still toggles the box - e.g. a product name that is both the heading of its card and the label of its checkbox.
|
|
3398
3585
|
* Default null: plain label text, exactly as before. Single mode only.
|
|
3399
3586
|
*/
|
|
3400
|
-
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 |
|
|
3587
|
+
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
|
|
3401
3588
|
readonly indeterminate: import("@angular/core").InputSignal<boolean>;
|
|
3402
3589
|
readonly checked: import("@angular/core").ModelSignal<boolean>;
|
|
3403
3590
|
/**
|
|
@@ -3421,6 +3608,23 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
3421
3608
|
* group is driven by ngModel / FormControl only. Values that are not an option are dropped and the order follows `options`.
|
|
3422
3609
|
*/
|
|
3423
3610
|
readonly values: import("@angular/core").ModelSignal<string[] | undefined>;
|
|
3611
|
+
/**
|
|
3612
|
+
* Single mode: links inside the label. The label text names where each link goes with `{key}` and this object says what it is, so a sentence can hold links
|
|
3613
|
+
* without HTML and without the host assembling markup:
|
|
3614
|
+
*
|
|
3615
|
+
* <ui-checkbox label="I agree to the {terms} and the {privacy}" [labelLinks]="{ terms: { label: 'Terms of Service', url: '/terms' }, privacy: { label: 'Privacy Policy', url: '/privacy' } }" />
|
|
3616
|
+
*
|
|
3617
|
+
* Only `http:`, `https:`, `mailto:`, `tel:` addresses and in-app paths are linked (see `CheckboxLabelLink`); a link whose address is unsafe or empty still shows its text,
|
|
3618
|
+
* just not as a link, and a link without text is left out. An absolute http(s) address opens in a new tab (`noopener noreferrer`, with "(opens in a new tab)" for
|
|
3619
|
+
* screen readers). A `{key}` that is not in `labelLinks` stays as typed. Clicking a link follows it and does not toggle the box; clicking the rest of the label does.
|
|
3620
|
+
* The checkbox's name is the whole sentence; the "required" message uses the sentence with the link texts in place of the `{key}`s. Without `labelLinks` (default) the
|
|
3621
|
+
* label is plain text exactly as before.
|
|
3622
|
+
*/
|
|
3623
|
+
readonly labelLinks: import("@angular/core").InputSignal<Record<string, CheckboxLabelLink>>;
|
|
3624
|
+
/** The label as text and links, or null when the label has no `{key}` that `labelLinks` knows (then it is drawn as plain text, as before). */
|
|
3625
|
+
protected readonly _labelSegments: import("@angular/core").Signal<CheckboxLabelSegment[] | null>;
|
|
3626
|
+
/** The label as plain text: the link texts in place of their `{key}`s (used for the "required" message). */
|
|
3627
|
+
protected readonly _plainLabel: import("@angular/core").Signal<string>;
|
|
3424
3628
|
/** Single mode: small helper text under the label, linked to the native checkbox with `aria-describedby`. None when empty (default). */
|
|
3425
3629
|
readonly description: import("@angular/core").InputSignal<string>;
|
|
3426
3630
|
/** Set when the host projects a `[checkbox-trailing]` element (see `CheckboxTrailingDirective`). */
|
|
@@ -3540,6 +3744,11 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
3540
3744
|
"required": false;
|
|
3541
3745
|
"isSignal": true;
|
|
3542
3746
|
};
|
|
3747
|
+
"labelLinks": {
|
|
3748
|
+
"alias": "labelLinks";
|
|
3749
|
+
"required": false;
|
|
3750
|
+
"isSignal": true;
|
|
3751
|
+
};
|
|
3543
3752
|
"description": {
|
|
3544
3753
|
"alias": "description";
|
|
3545
3754
|
"required": false;
|
|
@@ -4124,6 +4333,15 @@ export interface RadioOption {
|
|
|
4124
4333
|
* path. Decorative (`aria-hidden`); none when omitted.
|
|
4125
4334
|
*/
|
|
4126
4335
|
icon?: string;
|
|
4336
|
+
/**
|
|
4337
|
+
* Library source 2026-11-05, not yet published. Link shown after the option's description (e.g. "Read the terms"): only http(s), mailto, tel and
|
|
4338
|
+
* in-app paths are linked, an absolute http(s) address opens in a new tab. `testId` is the link's `data-testid`. None when omitted.
|
|
4339
|
+
*/
|
|
4340
|
+
descriptionLink?: {
|
|
4341
|
+
label: string;
|
|
4342
|
+
url: string;
|
|
4343
|
+
testId?: string;
|
|
4344
|
+
};
|
|
4127
4345
|
}
|
|
4128
4346
|
/**
|
|
4129
4347
|
* Group of native radio buttons inside a `<fieldset>` (+ `<legend>` = `label`), a ControlValueAccessor (string value, `''`
|
|
@@ -4436,7 +4654,7 @@ export declare class ButtonComponent {
|
|
|
4436
4654
|
* `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
|
|
4437
4655
|
* background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
|
|
4438
4656
|
*/
|
|
4439
|
-
readonly variant: import("@angular/core").InputSignal<"
|
|
4657
|
+
readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "danger" | "warning" | "link" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
|
|
4440
4658
|
/** Renders an anchor to this route instead of a button (use with `variant="link"` for an inline text link). `['/settings']` or `'/settings'`. While `disabled` or `loading` it renders a non-clickable `<span role="link" aria-disabled>` with no href (like `href`). */
|
|
4441
4659
|
readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
|
|
4442
4660
|
/** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
|
|
@@ -4482,7 +4700,7 @@ export declare class ButtonComponent {
|
|
|
4482
4700
|
readonly color: import("@angular/core").InputSignal<string | undefined>;
|
|
4483
4701
|
readonly active: import("@angular/core").InputSignal<boolean>;
|
|
4484
4702
|
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xs">;
|
|
4485
|
-
readonly type: import("@angular/core").InputSignal<"
|
|
4703
|
+
readonly type: import("@angular/core").InputSignal<"reset" | "submit" | "button">;
|
|
4486
4704
|
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
4487
4705
|
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
4488
4706
|
readonly fullWidth: import("@angular/core").InputSignal<boolean>;
|
|
@@ -5602,7 +5820,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
5602
5820
|
* `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
|
|
5603
5821
|
* It only picks the keyboard; it does not restrict what can be typed or pasted.
|
|
5604
5822
|
*/
|
|
5605
|
-
readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "
|
|
5823
|
+
readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "email" | "tel" | "url" | "decimal" | "numeric">;
|
|
5606
5824
|
readonly readonly: import("@angular/core").InputSignal<boolean>;
|
|
5607
5825
|
readonly hint: import("@angular/core").InputSignal<string>;
|
|
5608
5826
|
/** Id(s) of an external element that also describes this control (e.g. one shared error text for a group of fields). Space separated; MERGED after the control's own hint / error id in `aria-describedby`, never replacing it. Empty = unchanged. */
|
|
@@ -6033,6 +6251,10 @@ export declare class TextareaInputComponent implements ControlValueAccessor, Val
|
|
|
6033
6251
|
readonly errorMessage: import("@angular/core").Signal<string>;
|
|
6034
6252
|
/** Emits whenever the field becomes invalid / valid. */
|
|
6035
6253
|
readonly invalidChange: import("@angular/core").OutputEmitterRef<boolean>;
|
|
6254
|
+
/** Library source 2026-11-05, not yet published. Emits when the inner `<textarea>` gains focus (same as `ui-text-input`). */
|
|
6255
|
+
readonly focused: import("@angular/core").OutputEmitterRef<void>;
|
|
6256
|
+
/** Library source 2026-11-05, not yet published. Emits when the inner `<textarea>` loses focus (same as `ui-text-input`); the form control is marked touched and the built-in error reveal still happens. */
|
|
6257
|
+
readonly blurred: import("@angular/core").OutputEmitterRef<void>;
|
|
6036
6258
|
protected readonly _activeError: import("@angular/core").Signal<string>;
|
|
6037
6259
|
private _onValidatorChange;
|
|
6038
6260
|
constructor();
|
|
@@ -6076,6 +6298,7 @@ export declare class TextareaInputComponent implements ControlValueAccessor, Val
|
|
|
6076
6298
|
registerOnTouched(fn: () => void): void;
|
|
6077
6299
|
setDisabledState(d: boolean): void;
|
|
6078
6300
|
protected onInput(event: Event): void;
|
|
6301
|
+
protected onFocus(): void;
|
|
6079
6302
|
protected onBlur(): void;
|
|
6080
6303
|
private _check;
|
|
6081
6304
|
static ɵfac: i0.ɵɵFactoryDeclaration<TextareaInputComponent, never>;
|
|
@@ -6152,6 +6375,8 @@ export declare class TextareaInputComponent implements ControlValueAccessor, Val
|
|
|
6152
6375
|
};
|
|
6153
6376
|
}, {
|
|
6154
6377
|
"invalidChange": "invalidChange";
|
|
6378
|
+
"focused": "focused";
|
|
6379
|
+
"blurred": "blurred";
|
|
6155
6380
|
}, never, ["[uiLabelEnd]"], true, never>;
|
|
6156
6381
|
}
|
|
6157
6382
|
export type TextSize = 'sm' | 'md' | 'lg';
|
|
@@ -6589,7 +6814,7 @@ export declare class CopyFieldComponent implements OnDestroy {
|
|
|
6589
6814
|
/** Neither the Clipboard API nor the fallback could copy. */
|
|
6590
6815
|
readonly copyFailed: import("@angular/core").OutputEmitterRef<void>;
|
|
6591
6816
|
protected readonly _id: string;
|
|
6592
|
-
protected readonly _state: import("@angular/core").WritableSignal<"idle" | "
|
|
6817
|
+
protected readonly _state: import("@angular/core").WritableSignal<"idle" | "copied" | "failed">;
|
|
6593
6818
|
protected readonly _announcement: import("@angular/core").Signal<string>;
|
|
6594
6819
|
protected readonly _buttonName: import("@angular/core").Signal<string>;
|
|
6595
6820
|
protected readonly _describedBy: import("@angular/core").Signal<string | null>;
|
|
@@ -7705,7 +7930,7 @@ export declare class FormRowComponent {
|
|
|
7705
7930
|
* child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
|
|
7706
7931
|
*/
|
|
7707
7932
|
export declare class FormColSpanDirective {
|
|
7708
|
-
readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 |
|
|
7933
|
+
readonly uiColSpan: import("@angular/core").InputSignal<"" | "2" | "3" | 2 | 3 | "all">;
|
|
7709
7934
|
protected readonly _class: import("@angular/core").Signal<string>;
|
|
7710
7935
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
|
|
7711
7936
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
|
|
@@ -7745,6 +7970,13 @@ export declare class FormColSpanDirective {
|
|
|
7745
7970
|
* <ui-button list-item-action variant="icon" ariaLabel="Remove" (click)="remove(d)">…</ui-button>
|
|
7746
7971
|
* </ui-list-item>
|
|
7747
7972
|
*
|
|
7973
|
+
* Library source 2026-11-05, not yet published: row-end content slot. An element with the `list-item-end` attribute (a `<ui-star-rating>`, a badge, a price...) is
|
|
7974
|
+
* projected at the END of the row, after the text and before the busy spinner and the `list-item-action` buttons, vertically centred, at its own size. Like the action
|
|
7975
|
+
* slot it sits outside the row's label: clicks inside it never emit `select` (also on a plain pressable row), and Enter / Space inside it are not treated as a row
|
|
7976
|
+
* press. Absent = no extra DOM, nothing changes. Accessibility note: a plain pressable row (`leading="none"`, interactive) is `role="button"`, whose children are presentational, so
|
|
7977
|
+
* INTERACTIVE content in this slot (a `<ui-star-rating>`, a button) should go on a row with `[interactive]="false"` (no role, nothing pressable); a badge or other static text is fine on any row.
|
|
7978
|
+
* <ui-list-item [title]="r.name" [details]="[r.date]"><ui-star-rating list-item-end [readonly]="true" [value]="r.rating" [size]="16" /></ui-list-item>
|
|
7979
|
+
*
|
|
7748
7980
|
* Library source 2026-11-04, not yet published: `[disabled]` (aria-disabled, not focusable, never emits `select`, non-colour cue), `[busy]`
|
|
7749
7981
|
* (aria-busy, spinner, presses ignored) and a leading image slot, `<img list-item-image>` / `<ui-image list-item-image>`, rendered in front of
|
|
7750
7982
|
* the text and instead of the icon tile (clicks on it select a plain row; on a radio / checkbox row they do not, because the image sits outside
|
|
@@ -7957,7 +8189,7 @@ export declare class ListItemComponent implements AfterContentChecked {
|
|
|
7957
8189
|
};
|
|
7958
8190
|
}, {
|
|
7959
8191
|
"select": "select";
|
|
7960
|
-
}, never, ["[list-item-image]", "[list-item-action], [li-action]"], true, never>;
|
|
8192
|
+
}, never, ["[list-item-image]", "[list-item-end]", "[list-item-action], [li-action]"], true, never>;
|
|
7961
8193
|
}
|
|
7962
8194
|
/** Colour of the priority dot (`high` red, `medium` amber, `low` grey, `blue`, `green`); `none` = no dot. */
|
|
7963
8195
|
export type CardListIndicator = 'high' | 'medium' | 'low' | 'blue' | 'green' | 'none';
|
|
@@ -9300,13 +9532,13 @@ export declare class AlertComponent {
|
|
|
9300
9532
|
}
|
|
9301
9533
|
/**
|
|
9302
9534
|
* Every key `<ui-icon>` draws by itself (the data-table action keys such as `view` / `edit` / `call` are accepted too, see `builtInActionIcon`).
|
|
9303
|
-
* Each resolves with `iconPath(key)`. Includes `search`, `cup` (food / drink) and `wrench` (rental / tools), library source 2026-11-04, and `cash` (banknote) and `dollar` (payment methods / amounts), library source 2026-11-05, not yet published.
|
|
9535
|
+
* Each resolves with `iconPath(key)`. Includes `search`, `cup` (food / drink) and `wrench` (rental / tools), library source 2026-11-04, and `cash` (banknote) and `dollar` (payment methods / amounts), library source 2026-11-05, not yet published. Also `star`, `gift`, `award` and `calendar-check` (library source 2026-11-05, not yet published).
|
|
9304
9536
|
*/
|
|
9305
9537
|
export declare const ICON_NAMES: readonly string[];
|
|
9306
9538
|
/** The SVG path (24×24 stroke icon) for an icon key, or undefined when the key is unknown. */
|
|
9307
9539
|
export declare function iconPath(name: string): string | undefined;
|
|
9308
9540
|
/** Keys with an icon of their own (the data-table action keys are accepted too — see `builtInActionIcon`). */
|
|
9309
|
-
export type IconName = 'add' | 'close' | 'check' | 'upload' | 'image' | 'chevron-up' | 'chevron-down' | 'arrow-left' | 'bell' | 'print' | 'lock' | 'shield' | 'arrow-up' | 'arrow-down' | 'arrow-right' | 'document' | 'grip' | 'card' | 'bank' | 'view' | 'view-off' | 'edit' | 'delete' | 'download' | 'duplicate' | 'archive' | 'restore' | 'share' | 'email' | 'message' | 'call' | 'refund' | 'chevron-right' | 'link' | 'save' | 'chart' | 'clipboard' | 'unlink' | 'send' | 'refresh' | 'search' | 'cup' | 'wrench' | 'cash' | 'dollar' | 'history' | 'move-up' | 'move-down';
|
|
9541
|
+
export type IconName = 'add' | 'close' | 'check' | 'upload' | 'image' | 'chevron-up' | 'chevron-down' | 'arrow-left' | 'bell' | 'print' | 'lock' | 'shield' | 'arrow-up' | 'arrow-down' | 'arrow-right' | 'document' | 'grip' | 'card' | 'bank' | 'view' | 'view-off' | 'edit' | 'delete' | 'download' | 'duplicate' | 'archive' | 'restore' | 'share' | 'email' | 'message' | 'call' | 'refund' | 'chevron-right' | 'link' | 'save' | 'chart' | 'clipboard' | 'unlink' | 'send' | 'refresh' | 'search' | 'cup' | 'wrench' | 'cash' | 'dollar' | 'star' | 'gift' | 'award' | 'calendar-check' | 'history' | 'move-up' | 'move-down';
|
|
9310
9542
|
/**
|
|
9311
9543
|
* A clickable icon. The host passes a key (`name="delete"`) and the library draws that icon; clicking it emits
|
|
9312
9544
|
* `iconClick`, and the host does the actual work (delete the row, open a panel, …).
|
|
@@ -10721,6 +10953,16 @@ export declare function humanReadableMessage(value: unknown): string | null;
|
|
|
10721
10953
|
export declare class RadioComponent {
|
|
10722
10954
|
readonly label: import("@angular/core").InputSignal<string>;
|
|
10723
10955
|
readonly description: import("@angular/core").InputSignal<string>;
|
|
10956
|
+
/**
|
|
10957
|
+
* Library source 2026-11-05, not yet published. Optional link shown after the description: `linkLabel` is its text, `linkUrl` its address. Only `http:`, `https:`,
|
|
10958
|
+
* `mailto:` and `tel:` addresses and in-app paths (`/...`, `#...`) are linked; anything else (`javascript:`, `data:`, empty) draws nothing. An absolute http(s)
|
|
10959
|
+
* address opens in a new tab (`noopener noreferrer`, with "(opens in a new tab)" for screen readers); the others follow in the same tab. The radio's
|
|
10960
|
+
* accessible name stays the label only.
|
|
10961
|
+
*/
|
|
10962
|
+
readonly linkLabel: import("@angular/core").InputSignal<string>;
|
|
10963
|
+
readonly linkUrl: import("@angular/core").InputSignal<string>;
|
|
10964
|
+
/** `data-testid` of the link; none when empty. */
|
|
10965
|
+
readonly linkTestId: import("@angular/core").InputSignal<string>;
|
|
10724
10966
|
/**
|
|
10725
10967
|
* Library source 2026-11-04, not yet published. Optional icon drawn in front of the label: a `<ui-icon>` key (`cup`, `wrench`, `card`, ...) or a raw 24x24
|
|
10726
10968
|
* stroke SVG path (`M12 5v14 M5 12h14`). Decorative (`aria-hidden`), so the accessible name stays the label. Empty (default), an unknown key or
|
|
@@ -10745,11 +10987,14 @@ export declare class RadioComponent {
|
|
|
10745
10987
|
protected readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
10746
10988
|
/** Path of the icon: a known icon key, else the text itself when it looks like an SVG path (drawing commands and numbers only), else none. */
|
|
10747
10989
|
protected readonly _iconD: import("@angular/core").Signal<string | null>;
|
|
10990
|
+
/** The address to link, or null when the link is not drawn (no label, empty or unsafe address: see [safeLinkHref]). */
|
|
10991
|
+
protected readonly _linkHref: import("@angular/core").Signal<string | null>;
|
|
10992
|
+
protected readonly _linkNewTab: import("@angular/core").Signal<boolean>;
|
|
10748
10993
|
/** Id of the visible label text. Optional: a host (e.g. `ui-radio-group`) can set it to point another element at the label with `aria-labelledby`; a unique id is generated when empty. */
|
|
10749
10994
|
readonly labelId: import("@angular/core").InputSignal<string>;
|
|
10750
10995
|
private readonly _generatedLabelId;
|
|
10751
10996
|
protected readonly _labelId: import("@angular/core").Signal<string>;
|
|
10752
|
-
/** With a description inside the <label>, the accessible name would read "Email We send a message": name the input by the label text only. */
|
|
10997
|
+
/** With a description or link inside the <label>, the accessible name would read "Email We send a message": name the input by the label text only. */
|
|
10753
10998
|
protected readonly _labelledBy: import("@angular/core").Signal<string | null>;
|
|
10754
10999
|
protected readonly _descriptionId: string;
|
|
10755
11000
|
/** Group hint/error id plus the option's own description (kept out of the label so the accessible name is label-only). */
|
|
@@ -10769,6 +11014,21 @@ export declare class RadioComponent {
|
|
|
10769
11014
|
"required": false;
|
|
10770
11015
|
"isSignal": true;
|
|
10771
11016
|
};
|
|
11017
|
+
"linkLabel": {
|
|
11018
|
+
"alias": "linkLabel";
|
|
11019
|
+
"required": false;
|
|
11020
|
+
"isSignal": true;
|
|
11021
|
+
};
|
|
11022
|
+
"linkUrl": {
|
|
11023
|
+
"alias": "linkUrl";
|
|
11024
|
+
"required": false;
|
|
11025
|
+
"isSignal": true;
|
|
11026
|
+
};
|
|
11027
|
+
"linkTestId": {
|
|
11028
|
+
"alias": "linkTestId";
|
|
11029
|
+
"required": false;
|
|
11030
|
+
"isSignal": true;
|
|
11031
|
+
};
|
|
10772
11032
|
"icon": {
|
|
10773
11033
|
"alias": "icon";
|
|
10774
11034
|
"required": false;
|
|
@@ -11563,7 +11823,7 @@ export declare class DetailCardComponent {
|
|
|
11563
11823
|
/** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
|
|
11564
11824
|
readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
|
|
11565
11825
|
/** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
|
|
11566
|
-
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 |
|
|
11826
|
+
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
|
|
11567
11827
|
/** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
|
|
11568
11828
|
readonly titleId: import("@angular/core").InputSignal<string>;
|
|
11569
11829
|
/** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */
|
|
@@ -16347,7 +16607,7 @@ export declare class PaymentSidePanelComponent {
|
|
|
16347
16607
|
private readonly terminalAvailable;
|
|
16348
16608
|
/** value -> label of every live method the rendered plugins contribute (the first plugin wins a duplicate value). */
|
|
16349
16609
|
private readonly liveMethods;
|
|
16350
|
-
protected readonly kind: import("@angular/core").Signal<"none" | "
|
|
16610
|
+
protected readonly kind: import("@angular/core").Signal<"none" | "live" | "terminal" | "manual">;
|
|
16351
16611
|
private kindOf;
|
|
16352
16612
|
/** The method list as shown: record-only built-ins (a plugin takes over its own values), plugin extras, and only manual ones while a split is being built. */
|
|
16353
16613
|
readonly methodList: import("@angular/core").Signal<PaymentMethodOption[]>;
|