@forgeroute/ui 0.4.74 → 0.4.76
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/fesm2022/forgeroute-ui.mjs +971 -38
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +389 -30
package/types/forgeroute-ui.d.ts
CHANGED
|
@@ -68,6 +68,23 @@ export interface ToolbarAction {
|
|
|
68
68
|
* the on / off state. Leave unset for ordinary buttons (no attribute).
|
|
69
69
|
*/
|
|
70
70
|
pressed?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Optional confirmation before the click is reported (library source 2026-11-05, not yet published). Set it ONLY on an action that needs a
|
|
73
|
+
* confirm dialog (pause / run now / send to all): the table shows its confirm modal first, emits `(tableButtonClick)` only when the user
|
|
74
|
+
* confirms, and emits nothing on Cancel / Escape / backdrop. An action without `confirm` behaves exactly as before. Not used for the
|
|
75
|
+
* table's own Import and Export. Same copy fields as a row action's `modal` (`message` may be a function read at click time, for text that
|
|
76
|
+
* depends on the host's current state); say what happens before -> after and what is NOT affected.
|
|
77
|
+
*/
|
|
78
|
+
confirm?: ToolbarConfirm;
|
|
79
|
+
}
|
|
80
|
+
/** Confirm dialog copy of a toolbar action (see `ToolbarAction.confirm`). */
|
|
81
|
+
export interface ToolbarConfirm {
|
|
82
|
+
title: string;
|
|
83
|
+
message: string | (() => string);
|
|
84
|
+
confirmLabel?: string;
|
|
85
|
+
cancelLabel?: string;
|
|
86
|
+
variant?: 'danger' | 'primary' | 'warning';
|
|
87
|
+
details?: string[];
|
|
71
88
|
}
|
|
72
89
|
export interface ConfirmConfig {
|
|
73
90
|
title: string;
|
|
@@ -179,6 +196,14 @@ export interface ColumnDef {
|
|
|
179
196
|
* Example: `{ key: 'name', label: 'Name', starFn: (doc) => doc.isAuthForm ? 'Authorization Form' : null }`
|
|
180
197
|
*/
|
|
181
198
|
starFn?: (item: any) => string | null | undefined;
|
|
199
|
+
/**
|
|
200
|
+
* Footer text for this column, from the table's `totalsEndpoint` response (shown only while the table has rows and the totals loaded).
|
|
201
|
+
* Return null / undefined / '' for an empty footer cell. `cellType: 'number'` columns are right-aligned like their body cells.
|
|
202
|
+
* The table's `totalsLabel` goes in the footer cell of the first visible column; when that column has a `footerFn` too, the label is
|
|
203
|
+
* kept as visually hidden text before the value ("Total: $1,200") so it is still announced once.
|
|
204
|
+
* Example: `{ key: 'amount', label: 'Amount', cellType: 'number', footerFn: t => t['amount'] == null ? null : '$' + t['amount'] }`
|
|
205
|
+
*/
|
|
206
|
+
footerFn?: (totals: Record<string, string | number | null>) => string | null | undefined;
|
|
182
207
|
/** Date format string. Default: 'MMM d, y' */
|
|
183
208
|
dateFormat?: string;
|
|
184
209
|
/** Returns the display name for the row. Default: item[col.key] */
|
|
@@ -202,7 +227,7 @@ export interface ColumnDef {
|
|
|
202
227
|
ariaLabel?: string;
|
|
203
228
|
} | null;
|
|
204
229
|
/** Key in item holding the tags array. Defaults to col.key.
|
|
205
|
-
* Expected shape: { name: string; variant?: BadgeVariant; color?: string }[]. `color` is a custom hex colour (`#rgb` / `#rrggbb`,
|
|
230
|
+
* Expected shape: { name: string; variant?: BadgeVariant; color?: string; colorName?: string }[]. `colorName` is the colour (or state) in words, e.g. 'red' or 'error': it is read by screen readers after the tag name (hidden visually) so the colour is never the only signal; omit it and nothing changes. `color` is a custom hex colour (`#rgb` / `#rrggbb`,
|
|
206
231
|
* e.g. the colour a user picked for the tag): it becomes the chip background with dark or white text for contrast and wins over `variant`;
|
|
207
232
|
* an invalid value is ignored. */
|
|
208
233
|
tagsKey?: string;
|
|
@@ -1555,6 +1580,16 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1555
1580
|
protected readonly _showHeader: Signal<boolean>;
|
|
1556
1581
|
/** Optional endpoint that returns Record<string,number> counts per quick-filter value. */
|
|
1557
1582
|
readonly countsEndpoint: import("@angular/core").InputSignal<string>;
|
|
1583
|
+
/**
|
|
1584
|
+
* Optional footer totals row. Path relative to `baseUrl` (like `endpoint`). When set, the table GETs it with the same query params as the
|
|
1585
|
+
* rows request except paging and sorting (host `params`, lower-cased `search` + `searchFields`, active tab as `filter`, column filters) and
|
|
1586
|
+
* shows a footer built from each column's `footerFn`. The response is `Record<string, string | number | null>`. Totals follow the FILTERED
|
|
1587
|
+
* set, not the page; they are refetched on search / tab / filter / params / refresh() / resetToFirstPage() / import (not on paging or
|
|
1588
|
+
* sorting) and never cached. Hidden while loading, on error, with zero rows, or when the totals request fails (silently).
|
|
1589
|
+
*/
|
|
1590
|
+
readonly totalsEndpoint: import("@angular/core").InputSignal<string>;
|
|
1591
|
+
/** Text of the footer's label cell (first visible column) and the phone summary card's accessible name. */
|
|
1592
|
+
readonly totalsLabel: import("@angular/core").InputSignal<string>;
|
|
1558
1593
|
/**
|
|
1559
1594
|
* Optional extra query params owned by the host page (e.g. a period picker or a parent-record id),
|
|
1560
1595
|
* sent with every row, /counts, /filter-counts and export request. When the value changes the table
|
|
@@ -1803,6 +1838,23 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1803
1838
|
/** Current active filter/search/sort params — passed to the export so it exports the filtered view. */
|
|
1804
1839
|
/** Visible searchable column keys (comma-joined) — the table and Export only search what's on screen. */
|
|
1805
1840
|
protected readonly _searchFields: Signal<string>;
|
|
1841
|
+
/** Latest footer totals response (null = none / failed / not requested). */
|
|
1842
|
+
protected readonly _totals: import("@angular/core").WritableSignal<Record<string, string | number | null> | null>;
|
|
1843
|
+
private _totalsSub?;
|
|
1844
|
+
/** Set by paging and sorting: they reload rows but never change the totals. */
|
|
1845
|
+
private _totalsSkipNext;
|
|
1846
|
+
protected readonly _footerVisible: Signal<boolean>;
|
|
1847
|
+
/** Footer text per visible column key (only columns whose footerFn returns text). */
|
|
1848
|
+
protected readonly _footerCells: Signal<Record<string, string>>;
|
|
1849
|
+
protected readonly _footerPhoneLines: Signal<{
|
|
1850
|
+
key: string;
|
|
1851
|
+
label: string;
|
|
1852
|
+
value: string;
|
|
1853
|
+
}[]>;
|
|
1854
|
+
/** Totals request params: the export params without sorting (the rows request without paging and sorting). */
|
|
1855
|
+
private _totalsParams;
|
|
1856
|
+
/** `keepShown`: a silent (background) refresh keeps the current footer on screen until the new totals arrive. */
|
|
1857
|
+
private _fetchTotals;
|
|
1806
1858
|
protected readonly _exportParams: Signal<Record<string, string>>;
|
|
1807
1859
|
/**
|
|
1808
1860
|
* Toolbar buttons with auto-injected Export (always) and Import (only when
|
|
@@ -1868,6 +1920,13 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1868
1920
|
protected rowActionsLabel(item: T): string;
|
|
1869
1921
|
protected toggleSelectAll(): void;
|
|
1870
1922
|
protected toggleRow(item: T): void;
|
|
1923
|
+
/**
|
|
1924
|
+
* The table's current query as the parameters it sends with Export: the host `params`, the lower-cased `search` (+ `searchFields`),
|
|
1925
|
+
* the active quick tab as `filter`, `sort` + `direction`, and every active column filter (multi-values comma-joined). A new copy
|
|
1926
|
+
* on every call; reading it changes nothing. A host uses it to act on exactly what the table shows (print the same rows, call a
|
|
1927
|
+
* report endpoint with the same search / filters) without keeping its own copy of that state. Paging is not included.
|
|
1928
|
+
*/
|
|
1929
|
+
currentQuery(): Record<string, string>;
|
|
1871
1930
|
/** Clears the selection — call from the host component after a bulk action completes. */
|
|
1872
1931
|
clearSelection(): void;
|
|
1873
1932
|
resetColumns(): void;
|
|
@@ -2023,7 +2082,7 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
2023
2082
|
protected onRowClick(item: T): void;
|
|
2024
2083
|
/** Enter / Space on a focused clickable row or card activates it — ignored when focus is on a control inside it. */
|
|
2025
2084
|
protected onRowKeydown(e: KeyboardEvent, item: T): void;
|
|
2026
|
-
protected onInternalButtonClick(type: string): void
|
|
2085
|
+
protected onInternalButtonClick(type: string): Promise<void>;
|
|
2027
2086
|
protected onImported(): void;
|
|
2028
2087
|
/** Row actions visible for the current permission: everything for 'full'; otherwise only View (`type: 'view'`) and actions marked
|
|
2029
2088
|
* `allowReadOnly` (never the built-in delete). The Actions column itself is shown only while some row has a visible action. */
|
|
@@ -2169,6 +2228,16 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
2169
2228
|
"required": false;
|
|
2170
2229
|
"isSignal": true;
|
|
2171
2230
|
};
|
|
2231
|
+
"totalsEndpoint": {
|
|
2232
|
+
"alias": "totalsEndpoint";
|
|
2233
|
+
"required": false;
|
|
2234
|
+
"isSignal": true;
|
|
2235
|
+
};
|
|
2236
|
+
"totalsLabel": {
|
|
2237
|
+
"alias": "totalsLabel";
|
|
2238
|
+
"required": false;
|
|
2239
|
+
"isSignal": true;
|
|
2240
|
+
};
|
|
2172
2241
|
"params": {
|
|
2173
2242
|
"alias": "params";
|
|
2174
2243
|
"required": false;
|
|
@@ -2414,7 +2483,7 @@ export declare class ModalComponent implements OnInit, OnDestroy {
|
|
|
2414
2483
|
*/
|
|
2415
2484
|
readonly describedBy: import("@angular/core").InputSignal<string | null>;
|
|
2416
2485
|
readonly maxWidth: import("@angular/core").InputSignal<string>;
|
|
2417
|
-
readonly bodyOverflow: import("@angular/core").InputSignal<"
|
|
2486
|
+
readonly bodyOverflow: import("@angular/core").InputSignal<"hidden" | "auto" | "visible">;
|
|
2418
2487
|
/** `data-testid` of the dialog element itself (the host `<ui-modal>` is always in the page, the dialog only while open). None when empty. */
|
|
2419
2488
|
readonly dialogTestId: import("@angular/core").InputSignal<string>;
|
|
2420
2489
|
/** Hides the header X button (e.g. while a request is running). Escape and a backdrop click still close unless `closable` is false. */
|
|
@@ -2545,7 +2614,7 @@ export declare class ModalComponent implements OnInit, OnDestroy {
|
|
|
2545
2614
|
"close": "close";
|
|
2546
2615
|
}, never, ["[modal-header-end]", "*", "[modal-footer-left]", "[modal-footer-center]", "[modal-footer-right]"], true, never>;
|
|
2547
2616
|
}
|
|
2548
|
-
export type ToastType = 'success' | 'error' | 'info';
|
|
2617
|
+
export type ToastType = 'success' | 'error' | 'info' | 'warning';
|
|
2549
2618
|
/** A button on a toast (e.g. "View Contact", "Call Back"). */
|
|
2550
2619
|
export interface ToastAction {
|
|
2551
2620
|
/** Identifies the button in `onAction` and in the `(action)` output; also the test id suffix (`toast-action-<id>`). */
|
|
@@ -2565,11 +2634,11 @@ export interface ToastActionEvent {
|
|
|
2565
2634
|
key?: string;
|
|
2566
2635
|
}
|
|
2567
2636
|
/**
|
|
2568
|
-
* Per-message options for `show()` / `success()` / `info()` / `error()` / `notify()`. Every field is optional; a call without any of them is a plain
|
|
2637
|
+
* Per-message options for `show()` / `success()` / `info()` / `warning()` / `error()` / `notify()`. Every field is optional; a call without any of them is a plain
|
|
2569
2638
|
* toast exactly as before.
|
|
2570
2639
|
*/
|
|
2571
2640
|
export interface ToastOptions {
|
|
2572
|
-
/** Only `notify()` reads this (`show` / `success` / `info` / `error` fix their own type). Default `success`. */
|
|
2641
|
+
/** Only `notify()` reads this (`show` / `success` / `info` / `warning` / `error` fix their own type). Default `success`. */
|
|
2573
2642
|
type?: ToastType;
|
|
2574
2643
|
/** How long it stays, in ms. Default: 3000 (4000 for errors). */
|
|
2575
2644
|
duration?: number;
|
|
@@ -2651,6 +2720,12 @@ export declare class ToastService implements OnDestroy {
|
|
|
2651
2720
|
success(msg: string, durationOrOptions?: number | ToastOptions): void;
|
|
2652
2721
|
/** Neutral (blue) toast for a result that is neither a success nor a failure, e.g. "No changes to save.". */
|
|
2653
2722
|
info(msg: string, durationOrOptions?: number | ToastOptions): void;
|
|
2723
|
+
/**
|
|
2724
|
+
* Amber toast for a result that worked but needs attention, e.g. "Saved, but 2 screenshots could not be attached." Announced politely (not as an
|
|
2725
|
+
* alert: nothing failed). Default 4000ms, a little longer than info because the user has something to read and maybe act on.
|
|
2726
|
+
* (library source 2026-11-04, not yet published)
|
|
2727
|
+
*/
|
|
2728
|
+
warning(msg: string, durationOrOptions?: number | ToastOptions): void;
|
|
2654
2729
|
error(msg: string, durationOrOptions?: number | ToastOptions): void;
|
|
2655
2730
|
/** A toast whose type comes from `options.type` (default `success`); the same as the named methods otherwise. */
|
|
2656
2731
|
notify(msg: string, options?: ToastOptions): void;
|
|
@@ -2869,6 +2944,86 @@ export declare class ProgressBarComponent {
|
|
|
2869
2944
|
};
|
|
2870
2945
|
}, {}, never, never, true, never>;
|
|
2871
2946
|
}
|
|
2947
|
+
/** Library source 2026-11-05, not yet published. One segment of a `ui-stacked-bar`. */
|
|
2948
|
+
export interface StackedBarSegment {
|
|
2949
|
+
/** Name shown in the legend and read out for the segment. */
|
|
2950
|
+
label: string;
|
|
2951
|
+
/** Amount of this segment (negative / NaN count as 0). */
|
|
2952
|
+
value: number;
|
|
2953
|
+
/** Built-in colour (same set as `ui-progress-bar`). Default: a fixed rotation by position. */
|
|
2954
|
+
variant?: ProgressBarVariant;
|
|
2955
|
+
/** Any CSS colour; wins over `variant`. */
|
|
2956
|
+
color?: string;
|
|
2957
|
+
}
|
|
2958
|
+
/**
|
|
2959
|
+
* A single horizontal bar split into coloured segments by their share of the total (e.g. an aging snapshot: current / 1-30 / 31-60 / 61-90 / 91+).
|
|
2960
|
+
* Pure CSS (no chart library): each segment's width is its rounded share, a value above 0 is never drawn narrower than 2%, segments of 0 are left
|
|
2961
|
+
* out of the bar (but stay in the legend). A total of 0 draws an empty track.
|
|
2962
|
+
*
|
|
2963
|
+
* Accessible without sight: the coloured strip is decorative (`aria-hidden`); the legend is a real list ("<label>: <value> (<share>%)") that is always
|
|
2964
|
+
* in the page, and `showLegend="false"` only hides it visually. The group is named by `ariaLabel`. Each segment also has a hover `title`.
|
|
2965
|
+
* Colours never carry the meaning alone (the legend repeats label, value and share); forced-colors mode draws the segments with a border.
|
|
2966
|
+
*
|
|
2967
|
+
* Inputs: `segments`, `ariaLabel`, `height` (px, default 14), `showLegend` (default true), `formatValue` (default: en-US grouped number; pass e.g. a
|
|
2968
|
+
* currency formatter). Output: none.
|
|
2969
|
+
*/
|
|
2970
|
+
export declare class StackedBarComponent {
|
|
2971
|
+
readonly segments: import("@angular/core").InputSignal<StackedBarSegment[]>;
|
|
2972
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
2973
|
+
readonly height: import("@angular/core").InputSignal<number>;
|
|
2974
|
+
readonly showLegend: import("@angular/core").InputSignal<boolean>;
|
|
2975
|
+
readonly formatValue: import("@angular/core").InputSignal<(value: number) => string>;
|
|
2976
|
+
/** Segments with their cleaned value, colour and share (legend order = input order). */
|
|
2977
|
+
protected readonly rows: import("@angular/core").Signal<{
|
|
2978
|
+
percent: number;
|
|
2979
|
+
text: string;
|
|
2980
|
+
title: string;
|
|
2981
|
+
key: string;
|
|
2982
|
+
label: string;
|
|
2983
|
+
color: string;
|
|
2984
|
+
variant: ProgressBarVariant;
|
|
2985
|
+
value: number;
|
|
2986
|
+
}[]>;
|
|
2987
|
+
/** Only the segments that have something to draw. */
|
|
2988
|
+
protected readonly drawn: import("@angular/core").Signal<{
|
|
2989
|
+
percent: number;
|
|
2990
|
+
text: string;
|
|
2991
|
+
title: string;
|
|
2992
|
+
key: string;
|
|
2993
|
+
label: string;
|
|
2994
|
+
color: string;
|
|
2995
|
+
variant: ProgressBarVariant;
|
|
2996
|
+
value: number;
|
|
2997
|
+
}[]>;
|
|
2998
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StackedBarComponent, never>;
|
|
2999
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StackedBarComponent, "ui-stacked-bar", never, {
|
|
3000
|
+
"segments": {
|
|
3001
|
+
"alias": "segments";
|
|
3002
|
+
"required": false;
|
|
3003
|
+
"isSignal": true;
|
|
3004
|
+
};
|
|
3005
|
+
"ariaLabel": {
|
|
3006
|
+
"alias": "ariaLabel";
|
|
3007
|
+
"required": false;
|
|
3008
|
+
"isSignal": true;
|
|
3009
|
+
};
|
|
3010
|
+
"height": {
|
|
3011
|
+
"alias": "height";
|
|
3012
|
+
"required": false;
|
|
3013
|
+
"isSignal": true;
|
|
3014
|
+
};
|
|
3015
|
+
"showLegend": {
|
|
3016
|
+
"alias": "showLegend";
|
|
3017
|
+
"required": false;
|
|
3018
|
+
"isSignal": true;
|
|
3019
|
+
};
|
|
3020
|
+
"formatValue": {
|
|
3021
|
+
"alias": "formatValue";
|
|
3022
|
+
"required": false;
|
|
3023
|
+
"isSignal": true;
|
|
3024
|
+
};
|
|
3025
|
+
}, {}, never, never, true, never>;
|
|
3026
|
+
}
|
|
2872
3027
|
export type ProgressRingVariant = 'blue' | 'green' | 'amber' | 'red' | 'slate' | 'sky';
|
|
2873
3028
|
/**
|
|
2874
3029
|
* Circular progress ring with the rounded percentage (or a custom `label`) in the middle.
|
|
@@ -2988,7 +3143,7 @@ export declare class AudioPlayerComponent {
|
|
|
2988
3143
|
/** Accessible name of the player. */
|
|
2989
3144
|
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
2990
3145
|
/** How much to load before play: 'metadata' (default), 'auto' or 'none'. */
|
|
2991
|
-
readonly preload: import("@angular/core").InputSignal<"
|
|
3146
|
+
readonly preload: import("@angular/core").InputSignal<"none" | "metadata" | "auto">;
|
|
2992
3147
|
/** Fires when the browser can't load or decode the source. */
|
|
2993
3148
|
readonly playbackError: import("@angular/core").OutputEmitterRef<void>;
|
|
2994
3149
|
protected readonly failed: import("@angular/core").WritableSignal<boolean>;
|
|
@@ -3242,7 +3397,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
3242
3397
|
* 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.
|
|
3243
3398
|
* Default null: plain label text, exactly as before. Single mode only.
|
|
3244
3399
|
*/
|
|
3245
|
-
readonly headingLevel: import("@angular/core").InputSignal<1 |
|
|
3400
|
+
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 5 | 3 | 6 | 4 | null>;
|
|
3246
3401
|
readonly indeterminate: import("@angular/core").InputSignal<boolean>;
|
|
3247
3402
|
readonly checked: import("@angular/core").ModelSignal<boolean>;
|
|
3248
3403
|
/**
|
|
@@ -3260,7 +3415,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
3260
3415
|
*/
|
|
3261
3416
|
protected readonly _legend: import("@angular/core").Signal<string>;
|
|
3262
3417
|
/** Group mode: lay the options out in a column (default) or in a wrapping row. */
|
|
3263
|
-
readonly orientation: import("@angular/core").InputSignal<"
|
|
3418
|
+
readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
|
|
3264
3419
|
/**
|
|
3265
3420
|
* Group mode: the ticked option values as a two-way model (`[(values)]`), an alternative to ngModel / forms. Unset (default) = the
|
|
3266
3421
|
* group is driven by ngModel / FormControl only. Values that are not an option are dropped and the order follows `options`.
|
|
@@ -3641,7 +3796,7 @@ export declare class StepperComponent {
|
|
|
3641
3796
|
/** Accessible name of the list. */
|
|
3642
3797
|
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
3643
3798
|
/** Horizontal, <= 480px: show only the current step's label (`'current'`, default) or every label (`'all'`). */
|
|
3644
|
-
readonly labelsOnSmallScreens: import("@angular/core").InputSignal<"
|
|
3799
|
+
readonly labelsOnSmallScreens: import("@angular/core").InputSignal<"all" | "current">;
|
|
3645
3800
|
/**
|
|
3646
3801
|
* Horizontal only. `'beside'` (default): the label sits to the right of its circle. `'below'`: equal-width columns, the label centred under
|
|
3647
3802
|
* its circle, one continuous line behind the circles that fills as steps complete; a complete step shows a check, the current step an
|
|
@@ -3679,7 +3834,7 @@ export declare class StepperComponent {
|
|
|
3679
3834
|
protected readonly rows: import("@angular/core").Signal<{
|
|
3680
3835
|
step: StepperStep;
|
|
3681
3836
|
index: number;
|
|
3682
|
-
state: "
|
|
3837
|
+
state: "complete" | "current" | "upcoming";
|
|
3683
3838
|
error: boolean;
|
|
3684
3839
|
errorMessage: string;
|
|
3685
3840
|
selectable: boolean;
|
|
@@ -3992,7 +4147,7 @@ export declare class RadioGroupComponent implements ControlValueAccessor, Valida
|
|
|
3992
4147
|
readonly error: import("@angular/core").InputSignal<string>;
|
|
3993
4148
|
/** Reveal the built-in error messages now (e.g. after a failed Save click), without waiting for blur. */
|
|
3994
4149
|
readonly showErrors: import("@angular/core").InputSignal<boolean>;
|
|
3995
|
-
readonly orientation: import("@angular/core").InputSignal<"
|
|
4150
|
+
readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
|
|
3996
4151
|
/** Native `name` shared by the radios; a unique one is generated when omitted. */
|
|
3997
4152
|
readonly name: import("@angular/core").InputSignal<string>;
|
|
3998
4153
|
/** `<ng-template uiRadioOptionContent="value">` children: content shown under that option while it is selected. */
|
|
@@ -4281,7 +4436,7 @@ export declare class ButtonComponent {
|
|
|
4281
4436
|
* `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
|
|
4282
4437
|
* background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
|
|
4283
4438
|
*/
|
|
4284
|
-
readonly variant: import("@angular/core").InputSignal<"link" | "primary" | "secondary" | "danger" | "warning" | "
|
|
4439
|
+
readonly variant: import("@angular/core").InputSignal<"link" | "primary" | "secondary" | "danger" | "warning" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
|
|
4285
4440
|
/** 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`). */
|
|
4286
4441
|
readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
|
|
4287
4442
|
/** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
|
|
@@ -4302,7 +4457,7 @@ export declare class ButtonComponent {
|
|
|
4302
4457
|
*/
|
|
4303
4458
|
readonly href: import("@angular/core").InputSignal<string | null>;
|
|
4304
4459
|
/** Where to open the `href` (`_blank` = a new tab). */
|
|
4305
|
-
readonly target: import("@angular/core").InputSignal<"
|
|
4460
|
+
readonly target: import("@angular/core").InputSignal<"_self" | "_blank" | "_parent" | "_top" | null>;
|
|
4306
4461
|
/** `rel` of the `href` link. A `_blank` target always gets `noopener noreferrer` added. */
|
|
4307
4462
|
readonly rel: import("@angular/core").InputSignal<string | null>;
|
|
4308
4463
|
/** The href when it is allowed (http, https, mailto, tel, sms or a relative URL), else null. */
|
|
@@ -4556,7 +4711,7 @@ export declare class PillTabsComponent {
|
|
|
4556
4711
|
/** Keep every pill at its own width on one line (default false: pills may shrink and wrap their text). On a phone the row scrolls sideways, as it always does. */
|
|
4557
4712
|
readonly noWrap: import("@angular/core").InputSignal<boolean>;
|
|
4558
4713
|
/** 'vertical' stacks the tabs in a column (Up/Down arrows move between them, `aria-orientation="vertical"`). Default 'horizontal' = unchanged. */
|
|
4559
|
-
readonly orientation: import("@angular/core").InputSignal<"
|
|
4714
|
+
readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
|
|
4560
4715
|
protected readonly vertical: () => boolean;
|
|
4561
4716
|
/**
|
|
4562
4717
|
* (library source 2026-11-04, not yet published) Associate the tabs with their panels: every tab gets
|
|
@@ -4910,7 +5065,7 @@ export declare class BulkMessagePanelComponent {
|
|
|
4910
5065
|
readonly sending: import("@angular/core").InputSignal<boolean>;
|
|
4911
5066
|
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
4912
5067
|
readonly send: import("@angular/core").OutputEmitterRef<BulkMessageSendEvent>;
|
|
4913
|
-
readonly channel: import("@angular/core").WritableSignal<"
|
|
5068
|
+
readonly channel: import("@angular/core").WritableSignal<"text" | "email">;
|
|
4914
5069
|
private readonly _subject;
|
|
4915
5070
|
private readonly _body;
|
|
4916
5071
|
get subject(): string;
|
|
@@ -5438,7 +5593,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
5438
5593
|
readonly passwordRequirements: import("@angular/core").InputSignal<boolean>;
|
|
5439
5594
|
/** Rules for `passwordRequirements`; default = the library's five rules (8+ characters, upper, lower, digit, special). */
|
|
5440
5595
|
readonly passwordRules: import("@angular/core").InputSignal<readonly PasswordRule[] | undefined>;
|
|
5441
|
-
readonly type: import("@angular/core").InputSignal<"number" | "
|
|
5596
|
+
readonly type: import("@angular/core").InputSignal<"number" | "text" | "email" | "tel" | "password" | "url">;
|
|
5442
5597
|
readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
|
|
5443
5598
|
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
5444
5599
|
readonly autocomplete: import("@angular/core").InputSignal<string>;
|
|
@@ -5447,7 +5602,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
5447
5602
|
* `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
|
|
5448
5603
|
* It only picks the keyboard; it does not restrict what can be typed or pasted.
|
|
5449
5604
|
*/
|
|
5450
|
-
readonly inputmode: import("@angular/core").InputSignal<"" | "
|
|
5605
|
+
readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "decimal" | "email" | "tel" | "url" | "numeric">;
|
|
5451
5606
|
readonly readonly: import("@angular/core").InputSignal<boolean>;
|
|
5452
5607
|
readonly hint: import("@angular/core").InputSignal<string>;
|
|
5453
5608
|
/** 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. */
|
|
@@ -5519,7 +5674,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
5519
5674
|
protected readonly _stepAttr: import("@angular/core").Signal<string | null>;
|
|
5520
5675
|
protected readonly _revealable: import("@angular/core").Signal<boolean>;
|
|
5521
5676
|
protected readonly _shown: import("@angular/core").WritableSignal<boolean>;
|
|
5522
|
-
protected readonly _inputType: import("@angular/core").Signal<"number" | "
|
|
5677
|
+
protected readonly _inputType: import("@angular/core").Signal<"number" | "text" | "email" | "tel" | "password" | "url">;
|
|
5523
5678
|
protected readonly _eyePath: string;
|
|
5524
5679
|
protected readonly _eyeOffPath: string;
|
|
5525
5680
|
protected readonly _showRequirements: import("@angular/core").Signal<boolean>;
|
|
@@ -5544,6 +5699,26 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
5544
5699
|
* view exists, or on a disabled field, it does nothing and never throws.
|
|
5545
5700
|
*/
|
|
5546
5701
|
focus(options?: FocusOptions): void;
|
|
5702
|
+
/**
|
|
5703
|
+
* Library source 2026-11-05, not yet published. Caret access for hosts (e.g. an "insert variable at the cursor" chip row), so a host never
|
|
5704
|
+
* queries the inner element. Reach it with `viewChild(TextInputComponent)`. All three methods are safe at any time: before the view exists, on a
|
|
5705
|
+
* disabled / read-only field, or for a type that has no selection API (email, number) they do nothing / return null and never throw.
|
|
5706
|
+
*
|
|
5707
|
+
* `getSelection()` -> `{ start, end }` of the selected text (equal when only a caret) or `null` when it cannot be read.
|
|
5708
|
+
*/
|
|
5709
|
+
getSelection(): {
|
|
5710
|
+
start: number;
|
|
5711
|
+
end: number;
|
|
5712
|
+
} | null;
|
|
5713
|
+
/** Selects `start`..`end` (a caret when `end` is left out); values are clamped to the text. Does nothing where the selection API is unavailable. */
|
|
5714
|
+
setSelection(start: number, end?: number): void;
|
|
5715
|
+
/**
|
|
5716
|
+
* Inserts `text` at the caret, replacing any selected text, and puts the caret right after it. The change goes through the normal typing path
|
|
5717
|
+
* (formatting, `ngModel` / form control, `valueChange`), exactly as if the user had typed it, and `maxlength` caps it like typing does (the
|
|
5718
|
+
* part that does not fit is not inserted). With no caret known (a type without a selection API) the text is appended. Does nothing on a
|
|
5719
|
+
* disabled or read-only field or for an empty `text`.
|
|
5720
|
+
*/
|
|
5721
|
+
insertAtCaret(text: string): void;
|
|
5547
5722
|
private _onChange;
|
|
5548
5723
|
private _onTouched;
|
|
5549
5724
|
private _onValidatorChange;
|
|
@@ -5873,6 +6048,27 @@ export declare class TextareaInputComponent implements ControlValueAccessor, Val
|
|
|
5873
6048
|
* nothing and never throws.
|
|
5874
6049
|
*/
|
|
5875
6050
|
focus(options?: FocusOptions): void;
|
|
6051
|
+
/**
|
|
6052
|
+
* Library source 2026-11-05, not yet published. Caret access for hosts (e.g. an "insert variable at the cursor" chip row), so a host never
|
|
6053
|
+
* queries the inner element. Reach it with `viewChild(TextareaInputComponent)`. All three methods are safe at any time: before the view exists, on a
|
|
6054
|
+
* disabled / read-only field they do nothing / return null and never throw.
|
|
6055
|
+
*
|
|
6056
|
+
* `getSelection()` -> `{ start, end }` of the selected text (equal when only a caret) or `null` when it cannot be read.
|
|
6057
|
+
*/
|
|
6058
|
+
getSelection(): {
|
|
6059
|
+
start: number;
|
|
6060
|
+
end: number;
|
|
6061
|
+
} | null;
|
|
6062
|
+
/** Selects `start`..`end` (a caret when `end` is left out); values are clamped to the text. Does nothing where the selection API is unavailable. */
|
|
6063
|
+
setSelection(start: number, end?: number): void;
|
|
6064
|
+
/**
|
|
6065
|
+
* Inserts `text` at the caret, replacing any selected text, and puts the caret right after it. The change goes through the normal typing path
|
|
6066
|
+
* (`ngModel` / form control), exactly as if the user had typed it, and `maxlength` caps it like typing does (the
|
|
6067
|
+
* part that does not fit is not inserted). With no caret known the text is appended. Does nothing on a
|
|
6068
|
+
* disabled or read-only field or for an empty `text`.
|
|
6069
|
+
*/
|
|
6070
|
+
insertAtCaret(text: string): void;
|
|
6071
|
+
private _textarea;
|
|
5876
6072
|
private _onChange;
|
|
5877
6073
|
private _onTouched;
|
|
5878
6074
|
writeValue(val: string | null): void;
|
|
@@ -6091,6 +6287,14 @@ export declare class FileInputComponent implements ControlValueAccessor, Validat
|
|
|
6091
6287
|
* Default `false`: nothing is toasted (the field message and `(fileRejected)` are unchanged). Needs a `ui-toast` outlet like any toast.
|
|
6092
6288
|
*/
|
|
6093
6289
|
readonly toastOnReject: import("@angular/core").InputSignal<boolean>;
|
|
6290
|
+
/**
|
|
6291
|
+
* When several files are refused in one pick or drop, show EVERY one inside the field as a list (each line
|
|
6292
|
+
* `"name" was not added. <reason>`) instead of only the first refusal message. No toast is raised. The same list is available to the
|
|
6293
|
+
* host through `rejections` and `(filesRejected)`. Default `false`: the field shows the first refusal message only (unchanged).
|
|
6294
|
+
*/
|
|
6295
|
+
readonly listRejections: import("@angular/core").InputSignal<boolean>;
|
|
6296
|
+
/** Id(s) of host elements that describe the picker (space-separated), added after the field's own error text, like `ui-text-input`'s `ariaDescribedBy`. Empty: nothing is added. */
|
|
6297
|
+
readonly ariaDescribedBy: import("@angular/core").InputSignal<string>;
|
|
6094
6298
|
/** Show a Remove button next to the chosen file. */
|
|
6095
6299
|
readonly clearable: import("@angular/core").InputSignal<boolean>;
|
|
6096
6300
|
readonly removeLabel: import("@angular/core").InputSignal<string>;
|
|
@@ -6124,6 +6328,8 @@ export declare class FileInputComponent implements ControlValueAccessor, Validat
|
|
|
6124
6328
|
readonly filesSelected: import("@angular/core").OutputEmitterRef<File[]>;
|
|
6125
6329
|
/** A picked or dropped file was refused (wrong type or too big). */
|
|
6126
6330
|
readonly fileRejected: import("@angular/core").OutputEmitterRef<FileRejection>;
|
|
6331
|
+
/** Every file refused by ONE pick or drop, in one event (fires only when at least one file was refused; `(fileRejected)` still fires per file). */
|
|
6332
|
+
readonly filesRejected: import("@angular/core").OutputEmitterRef<FileRejection[]>;
|
|
6127
6333
|
/** The Remove button cleared the selection. */
|
|
6128
6334
|
readonly fileRemoved: import("@angular/core").OutputEmitterRef<void>;
|
|
6129
6335
|
/** Emits whenever the field becomes invalid / valid. */
|
|
@@ -6138,6 +6344,15 @@ export declare class FileInputComponent implements ControlValueAccessor, Validat
|
|
|
6138
6344
|
/** Message of the last refused file ('' when the last pick was fine); shown in every mode. */
|
|
6139
6345
|
private readonly _toast;
|
|
6140
6346
|
private readonly _rejection;
|
|
6347
|
+
/** `aria-describedby` of the native input and the drop zone: the shown error text, then the host's ids. Absent when neither exists. */
|
|
6348
|
+
protected readonly _describedBy: import("@angular/core").Signal<string | null>;
|
|
6349
|
+
private readonly _rejected;
|
|
6350
|
+
/** The files refused by the last pick or drop (empty when the last pick was fine, after Remove / clear, and when files are set from the form). */
|
|
6351
|
+
readonly rejections: import("@angular/core").Signal<FileRejection[]>;
|
|
6352
|
+
/** One line per refused file: `"name" was not added. <reason>`. */
|
|
6353
|
+
readonly rejectionLines: import("@angular/core").Signal<string[]>;
|
|
6354
|
+
/** The list replaces the single message only while it is the refusal that is shown (a host `[error]` on a visible field wins). */
|
|
6355
|
+
protected readonly _showRejectList: import("@angular/core").Signal<boolean>;
|
|
6141
6356
|
private readonly _reveal;
|
|
6142
6357
|
private readonly _issue;
|
|
6143
6358
|
/** True while a required field is empty, the last pick was refused, or the host passed an `[error]`. */
|
|
@@ -6174,6 +6389,8 @@ export declare class FileInputComponent implements ControlValueAccessor, Validat
|
|
|
6174
6389
|
protected onDragOver(event: DragEvent): void;
|
|
6175
6390
|
protected onDragLeave(event: DragEvent): void;
|
|
6176
6391
|
protected onDrop(event: DragEvent): void;
|
|
6392
|
+
/** Keeps the first-message string (the `invalid` state) and the full list in step. */
|
|
6393
|
+
private setRejections;
|
|
6177
6394
|
private rejectionFor;
|
|
6178
6395
|
/** Applies picked / dropped files: refused ones raise the message and `fileRejected`, accepted ones become the value. */
|
|
6179
6396
|
private accept$;
|
|
@@ -6239,6 +6456,16 @@ export declare class FileInputComponent implements ControlValueAccessor, Validat
|
|
|
6239
6456
|
"required": false;
|
|
6240
6457
|
"isSignal": true;
|
|
6241
6458
|
};
|
|
6459
|
+
"listRejections": {
|
|
6460
|
+
"alias": "listRejections";
|
|
6461
|
+
"required": false;
|
|
6462
|
+
"isSignal": true;
|
|
6463
|
+
};
|
|
6464
|
+
"ariaDescribedBy": {
|
|
6465
|
+
"alias": "ariaDescribedBy";
|
|
6466
|
+
"required": false;
|
|
6467
|
+
"isSignal": true;
|
|
6468
|
+
};
|
|
6242
6469
|
"clearable": {
|
|
6243
6470
|
"alias": "clearable";
|
|
6244
6471
|
"required": false;
|
|
@@ -6322,10 +6549,125 @@ export declare class FileInputComponent implements ControlValueAccessor, Validat
|
|
|
6322
6549
|
}, {
|
|
6323
6550
|
"filesSelected": "filesSelected";
|
|
6324
6551
|
"fileRejected": "fileRejected";
|
|
6552
|
+
"filesRejected": "filesRejected";
|
|
6325
6553
|
"fileRemoved": "fileRemoved";
|
|
6326
6554
|
"invalidChange": "invalidChange";
|
|
6327
6555
|
}, never, never, true, never>;
|
|
6328
6556
|
}
|
|
6557
|
+
/**
|
|
6558
|
+
* A read-only text field with a Copy button (a feed address, an API URL, an invite link).
|
|
6559
|
+
*
|
|
6560
|
+
* <ui-copy-field label="Feed address" [value]="feedUrl()" (copied)="toast.success('Address copied')" />
|
|
6561
|
+
*
|
|
6562
|
+
* The button copies `value` with the Clipboard API; where that is missing or refused (older Safari / Firefox settings, an insecure page) it
|
|
6563
|
+
* selects the text and uses `document.execCommand('copy')`. If that fails too, the text stays selected and a status line asks the user to
|
|
6564
|
+
* press Ctrl/Cmd + C, and `(copyFailed)` is emitted. A polite live region announces the result. The button's accessible name contains its
|
|
6565
|
+
* visible text (WCAG 2.5.3). The field shows the full value (it scrolls inside the field); it never changes `value`.
|
|
6566
|
+
*/
|
|
6567
|
+
export declare class CopyFieldComponent implements OnDestroy {
|
|
6568
|
+
/** The text shown and copied. */
|
|
6569
|
+
readonly value: import("@angular/core").InputSignal<string>;
|
|
6570
|
+
readonly label: import("@angular/core").InputSignal<string>;
|
|
6571
|
+
/** Visible button text (default "Copy"). */
|
|
6572
|
+
readonly copyLabel: import("@angular/core").InputSignal<string>;
|
|
6573
|
+
/** Visible button text for 2 seconds after a successful copy (default "Copied"). */
|
|
6574
|
+
readonly copiedLabel: import("@angular/core").InputSignal<string>;
|
|
6575
|
+
/** Accessible name of the button; default `<copyLabel> <label>`. Keep the visible text inside it. */
|
|
6576
|
+
readonly buttonAriaLabel: import("@angular/core").InputSignal<string>;
|
|
6577
|
+
/** Announced after a successful copy (default "Copied to clipboard"). */
|
|
6578
|
+
readonly copiedMessage: import("@angular/core").InputSignal<string>;
|
|
6579
|
+
/** Shown and announced when copying was refused (default asks for Ctrl/Cmd + C). */
|
|
6580
|
+
readonly failedMessage: import("@angular/core").InputSignal<string>;
|
|
6581
|
+
readonly hint: import("@angular/core").InputSignal<string>;
|
|
6582
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
6583
|
+
/** Id(s) of host elements that also describe the field (space-separated). */
|
|
6584
|
+
readonly ariaDescribedBy: import("@angular/core").InputSignal<string>;
|
|
6585
|
+
readonly inputTestId: import("@angular/core").InputSignal<string>;
|
|
6586
|
+
readonly buttonTestId: import("@angular/core").InputSignal<string>;
|
|
6587
|
+
/** The text was copied. */
|
|
6588
|
+
readonly copied: import("@angular/core").OutputEmitterRef<string>;
|
|
6589
|
+
/** Neither the Clipboard API nor the fallback could copy. */
|
|
6590
|
+
readonly copyFailed: import("@angular/core").OutputEmitterRef<void>;
|
|
6591
|
+
protected readonly _id: string;
|
|
6592
|
+
protected readonly _state: import("@angular/core").WritableSignal<"idle" | "failed" | "copied">;
|
|
6593
|
+
protected readonly _announcement: import("@angular/core").Signal<string>;
|
|
6594
|
+
protected readonly _buttonName: import("@angular/core").Signal<string>;
|
|
6595
|
+
protected readonly _describedBy: import("@angular/core").Signal<string | null>;
|
|
6596
|
+
private readonly fieldEl;
|
|
6597
|
+
private _timer;
|
|
6598
|
+
ngOnDestroy(): void;
|
|
6599
|
+
/** Selects the whole text (also done on focus, so a manual copy is one keystroke away). */
|
|
6600
|
+
selectAll(): void;
|
|
6601
|
+
/** Copies `value`; the button calls this. Resolves to true when the text reached the clipboard. */
|
|
6602
|
+
copy(): Promise<boolean>;
|
|
6603
|
+
private legacyCopy;
|
|
6604
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CopyFieldComponent, never>;
|
|
6605
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CopyFieldComponent, "ui-copy-field", never, {
|
|
6606
|
+
"value": {
|
|
6607
|
+
"alias": "value";
|
|
6608
|
+
"required": false;
|
|
6609
|
+
"isSignal": true;
|
|
6610
|
+
};
|
|
6611
|
+
"label": {
|
|
6612
|
+
"alias": "label";
|
|
6613
|
+
"required": false;
|
|
6614
|
+
"isSignal": true;
|
|
6615
|
+
};
|
|
6616
|
+
"copyLabel": {
|
|
6617
|
+
"alias": "copyLabel";
|
|
6618
|
+
"required": false;
|
|
6619
|
+
"isSignal": true;
|
|
6620
|
+
};
|
|
6621
|
+
"copiedLabel": {
|
|
6622
|
+
"alias": "copiedLabel";
|
|
6623
|
+
"required": false;
|
|
6624
|
+
"isSignal": true;
|
|
6625
|
+
};
|
|
6626
|
+
"buttonAriaLabel": {
|
|
6627
|
+
"alias": "buttonAriaLabel";
|
|
6628
|
+
"required": false;
|
|
6629
|
+
"isSignal": true;
|
|
6630
|
+
};
|
|
6631
|
+
"copiedMessage": {
|
|
6632
|
+
"alias": "copiedMessage";
|
|
6633
|
+
"required": false;
|
|
6634
|
+
"isSignal": true;
|
|
6635
|
+
};
|
|
6636
|
+
"failedMessage": {
|
|
6637
|
+
"alias": "failedMessage";
|
|
6638
|
+
"required": false;
|
|
6639
|
+
"isSignal": true;
|
|
6640
|
+
};
|
|
6641
|
+
"hint": {
|
|
6642
|
+
"alias": "hint";
|
|
6643
|
+
"required": false;
|
|
6644
|
+
"isSignal": true;
|
|
6645
|
+
};
|
|
6646
|
+
"disabled": {
|
|
6647
|
+
"alias": "disabled";
|
|
6648
|
+
"required": false;
|
|
6649
|
+
"isSignal": true;
|
|
6650
|
+
};
|
|
6651
|
+
"ariaDescribedBy": {
|
|
6652
|
+
"alias": "ariaDescribedBy";
|
|
6653
|
+
"required": false;
|
|
6654
|
+
"isSignal": true;
|
|
6655
|
+
};
|
|
6656
|
+
"inputTestId": {
|
|
6657
|
+
"alias": "inputTestId";
|
|
6658
|
+
"required": false;
|
|
6659
|
+
"isSignal": true;
|
|
6660
|
+
};
|
|
6661
|
+
"buttonTestId": {
|
|
6662
|
+
"alias": "buttonTestId";
|
|
6663
|
+
"required": false;
|
|
6664
|
+
"isSignal": true;
|
|
6665
|
+
};
|
|
6666
|
+
}, {
|
|
6667
|
+
"copied": "copied";
|
|
6668
|
+
"copyFailed": "copyFailed";
|
|
6669
|
+
}, never, never, true, never>;
|
|
6670
|
+
}
|
|
6329
6671
|
export declare class DateInputComponent implements ControlValueAccessor, Validator, UiFieldValidity {
|
|
6330
6672
|
readonly label: import("@angular/core").InputSignal<string>;
|
|
6331
6673
|
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
@@ -7033,7 +7375,7 @@ export declare class DropdownComponent {
|
|
|
7033
7375
|
readonly loader: import("@angular/core").InputSignal<(() => Promise<DropdownItem[]>) | null>;
|
|
7034
7376
|
readonly active: import("@angular/core").InputSignal<boolean>;
|
|
7035
7377
|
readonly activeValue: import("@angular/core").InputSignal<string>;
|
|
7036
|
-
readonly variant: import("@angular/core").InputSignal<"
|
|
7378
|
+
readonly variant: import("@angular/core").InputSignal<"badge" | "button">;
|
|
7037
7379
|
/** Trigger size for `variant="button"`: `sm` (default, the compact toolbar look) or `md` (same padding and type as a medium `ui-button`). */
|
|
7038
7380
|
readonly size: import("@angular/core").InputSignal<"sm" | "md">;
|
|
7039
7381
|
readonly menuWidth: import("@angular/core").InputSignal<string>;
|
|
@@ -7346,7 +7688,7 @@ export declare class FormSectionComponent {
|
|
|
7346
7688
|
}, {}, never, ["*"], true, never>;
|
|
7347
7689
|
}
|
|
7348
7690
|
export declare class FormRowComponent {
|
|
7349
|
-
readonly cols: import("@angular/core").InputSignal<1 |
|
|
7691
|
+
readonly cols: import("@angular/core").InputSignal<1 | 2 | 3 | 4>;
|
|
7350
7692
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormRowComponent, never>;
|
|
7351
7693
|
static ɵcmp: i0.ɵɵComponentDeclaration<FormRowComponent, "ui-form-row", never, {
|
|
7352
7694
|
"cols": {
|
|
@@ -7363,7 +7705,7 @@ export declare class FormRowComponent {
|
|
|
7363
7705
|
* child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
|
|
7364
7706
|
*/
|
|
7365
7707
|
export declare class FormColSpanDirective {
|
|
7366
|
-
readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 | "
|
|
7708
|
+
readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 | "2" | "3" | "all">;
|
|
7367
7709
|
protected readonly _class: import("@angular/core").Signal<string>;
|
|
7368
7710
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
|
|
7369
7711
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
|
|
@@ -7415,16 +7757,28 @@ export declare class FormColSpanDirective {
|
|
|
7415
7757
|
*/
|
|
7416
7758
|
/** One secondary line under the title: plain text, or text with a small icon and a tone (`danger` red, `warning` amber). */
|
|
7417
7759
|
export type ListItemDetail = string | {
|
|
7418
|
-
text
|
|
7760
|
+
text?: string;
|
|
7761
|
+
segments?: ListItemSegment[];
|
|
7419
7762
|
icon?: string;
|
|
7420
7763
|
tone?: 'default' | 'warning' | 'danger';
|
|
7421
7764
|
};
|
|
7765
|
+
/**
|
|
7766
|
+
* One piece of a rich detail line (library source 2026-11-04, not yet published): plain text, or text shown in bold and/or as inline code. Rich text
|
|
7767
|
+
* is structured data, never HTML, so nothing is injected. `{ segments: ['Click ', { text: 'Connect', bold: true }, ' and copy ', { text: 'client_id', code: true }] }`
|
|
7768
|
+
* renders `Click <strong>Connect</strong> and copy <code>client_id</code>`. A detail with `segments` ignores `text` for display (when `text` is empty
|
|
7769
|
+
* the segments' plain text is used, e.g. for the visible-line check).
|
|
7770
|
+
*/
|
|
7771
|
+
export type ListItemSegment = string | {
|
|
7772
|
+
text: string;
|
|
7773
|
+
bold?: boolean;
|
|
7774
|
+
code?: boolean;
|
|
7775
|
+
};
|
|
7422
7776
|
/** Colour of the optional leading icon tile. */
|
|
7423
7777
|
export type ListItemIconColor = 'slate' | 'amber' | 'red' | 'blue' | 'green' | 'purple' | 'teal' | 'orange';
|
|
7424
7778
|
export declare class ListItemComponent implements AfterContentChecked {
|
|
7425
7779
|
private readonly host;
|
|
7426
7780
|
/** Show a radio button, checkbox, or nothing on the left. */
|
|
7427
|
-
readonly leading: import("@angular/core").InputSignal<"none" | "
|
|
7781
|
+
readonly leading: import("@angular/core").InputSignal<"none" | "checkbox" | "radio">;
|
|
7428
7782
|
/** `name` attribute for the radio/checkbox (groups radios together). */
|
|
7429
7783
|
readonly inputName: import("@angular/core").InputSignal<string>;
|
|
7430
7784
|
/** `id` attribute for the radio/checkbox (links the label). */
|
|
@@ -7506,6 +7860,11 @@ export declare class ListItemComponent implements AfterContentChecked {
|
|
|
7506
7860
|
protected onRowKey(e: Event): void;
|
|
7507
7861
|
protected readonly visibleDetails: () => {
|
|
7508
7862
|
text: string;
|
|
7863
|
+
segs: {
|
|
7864
|
+
text: string;
|
|
7865
|
+
bold: boolean;
|
|
7866
|
+
code: boolean;
|
|
7867
|
+
}[] | null;
|
|
7509
7868
|
d: string | null;
|
|
7510
7869
|
tone: "default" | "warning" | "danger";
|
|
7511
7870
|
}[];
|
|
@@ -8941,13 +9300,13 @@ export declare class AlertComponent {
|
|
|
8941
9300
|
}
|
|
8942
9301
|
/**
|
|
8943
9302
|
* Every key `<ui-icon>` draws by itself (the data-table action keys such as `view` / `edit` / `call` are accepted too, see `builtInActionIcon`).
|
|
8944
|
-
* Each resolves with `iconPath(key)`. Includes `search`, `cup` (food / drink) and `wrench` (rental / tools), library source 2026-11-04, not yet published.
|
|
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.
|
|
8945
9304
|
*/
|
|
8946
9305
|
export declare const ICON_NAMES: readonly string[];
|
|
8947
9306
|
/** The SVG path (24×24 stroke icon) for an icon key, or undefined when the key is unknown. */
|
|
8948
9307
|
export declare function iconPath(name: string): string | undefined;
|
|
8949
9308
|
/** Keys with an icon of their own (the data-table action keys are accepted too — see `builtInActionIcon`). */
|
|
8950
|
-
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' | 'history' | 'move-up' | 'move-down';
|
|
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';
|
|
8951
9310
|
/**
|
|
8952
9311
|
* A clickable icon. The host passes a key (`name="delete"`) and the library draws that icon; clicking it emits
|
|
8953
9312
|
* `iconClick`, and the host does the actual work (delete the row, open a panel, …).
|
|
@@ -9086,7 +9445,7 @@ export declare class TimelineComponent {
|
|
|
9086
9445
|
/** Any CSS length (e.g. `600px`). When set, the list scrolls inside a keyboard-focusable region of at most this height. Empty = no wrapper. */
|
|
9087
9446
|
readonly maxHeight: import("@angular/core").InputSignal<string>;
|
|
9088
9447
|
/** `below` (default): the time is under the title / description. `end`: the time sits right-aligned on the title row. */
|
|
9089
|
-
readonly timePosition: import("@angular/core").InputSignal<"
|
|
9448
|
+
readonly timePosition: import("@angular/core").InputSignal<"end" | "below">;
|
|
9090
9449
|
/**
|
|
9091
9450
|
* Group the items under a heading per calendar day of `dateTime` ("Today", "Yesterday", "Oct 3", "Oct 3, 2025"). Default false = no headings,
|
|
9092
9451
|
* DOM unchanged. The given order is kept: consecutive items of one day share a heading, the same day appearing again later starts a new group.
|
|
@@ -9285,7 +9644,7 @@ export declare class AddressInputComponent implements ControlValueAccessor, Vali
|
|
|
9285
9644
|
* the object. `valueChange` always emits the object. A written string is read with `parseAddressValue` for display only: the control keeps
|
|
9286
9645
|
* the original text until the user edits a field (so a text the parser cannot split is not rewritten on load).
|
|
9287
9646
|
*/
|
|
9288
|
-
readonly valueFormat: import("@angular/core").InputSignal<"object" | "
|
|
9647
|
+
readonly valueFormat: import("@angular/core").InputSignal<"object" | "text" | "auto">;
|
|
9289
9648
|
/** ZIP rule; the default is the US 5 digits / 5+4 rule. `null` accepts any non-empty ZIP. The ZIP is validated and stored trimmed. */
|
|
9290
9649
|
readonly zipPattern: import("@angular/core").InputSignal<RegExp | null>;
|
|
9291
9650
|
/** Message shown when the ZIP breaks `zipPattern`. */
|
|
@@ -11204,7 +11563,7 @@ export declare class DetailCardComponent {
|
|
|
11204
11563
|
/** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
|
|
11205
11564
|
readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
|
|
11206
11565
|
/** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
|
|
11207
|
-
readonly headingLevel: import("@angular/core").InputSignal<1 |
|
|
11566
|
+
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 5 | 3 | 6 | 4 | null>;
|
|
11208
11567
|
/** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
|
|
11209
11568
|
readonly titleId: import("@angular/core").InputSignal<string>;
|
|
11210
11569
|
/** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */
|
|
@@ -15988,7 +16347,7 @@ export declare class PaymentSidePanelComponent {
|
|
|
15988
16347
|
private readonly terminalAvailable;
|
|
15989
16348
|
/** value -> label of every live method the rendered plugins contribute (the first plugin wins a duplicate value). */
|
|
15990
16349
|
private readonly liveMethods;
|
|
15991
|
-
protected readonly kind: import("@angular/core").Signal<"none" | "
|
|
16350
|
+
protected readonly kind: import("@angular/core").Signal<"none" | "manual" | "live" | "terminal">;
|
|
15992
16351
|
private kindOf;
|
|
15993
16352
|
/** 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. */
|
|
15994
16353
|
readonly methodList: import("@angular/core").Signal<PaymentMethodOption[]>;
|