@forgeroute/ui 0.4.75 → 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 +532 -23
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +236 -23
package/package.json
CHANGED
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] */
|
|
@@ -1170,7 +1195,7 @@ export declare class SelectComponent implements ControlValueAccessor, Validator,
|
|
|
1170
1195
|
readonly error: import("@angular/core").InputSignal<string>;
|
|
1171
1196
|
/** Reveal the built-in error messages now (e.g. after a failed Save click), without waiting for blur. */
|
|
1172
1197
|
readonly showErrors: import("@angular/core").InputSignal<boolean>;
|
|
1173
|
-
readonly size: import("@angular/core").InputSignal<"
|
|
1198
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "default">;
|
|
1174
1199
|
readonly _disabledInput: import("@angular/core").InputSignal<boolean>;
|
|
1175
1200
|
private readonly _cvaDisabled;
|
|
1176
1201
|
protected readonly disabled: import("@angular/core").Signal<boolean>;
|
|
@@ -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;
|
|
@@ -2283,7 +2352,7 @@ export declare class SidePanelComponent implements OnDestroy {
|
|
|
2283
2352
|
readonly cancelLabel: import("@angular/core").InputSignal<string>;
|
|
2284
2353
|
/** Right-aligned primary action button label. Empty string = hidden. */
|
|
2285
2354
|
readonly primaryLabel: import("@angular/core").InputSignal<string>;
|
|
2286
|
-
readonly primaryVariant: import("@angular/core").InputSignal<"
|
|
2355
|
+
readonly primaryVariant: import("@angular/core").InputSignal<"primary" | "danger" | "warning">;
|
|
2287
2356
|
readonly primaryLoading: import("@angular/core").InputSignal<boolean>;
|
|
2288
2357
|
readonly primaryDisabled: import("@angular/core").InputSignal<boolean>;
|
|
2289
2358
|
/** `data-testid` of the Cancel button; none when empty (default). */
|
|
@@ -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<"hidden" | "
|
|
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.
|
|
@@ -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 | 2 |
|
|
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
|
/**
|
|
@@ -3647,7 +3802,7 @@ export declare class StepperComponent {
|
|
|
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
|
|
3648
3803
|
* accent ring with a dot, an upcoming step an empty circle (no numbers). Circles are 40px (32px with `size="sm"`).
|
|
3649
3804
|
*/
|
|
3650
|
-
readonly labelPosition: import("@angular/core").InputSignal<"
|
|
3805
|
+
readonly labelPosition: import("@angular/core").InputSignal<"beside" | "below">;
|
|
3651
3806
|
/** Viewport width in px below which a horizontal stepper is drawn vertical (labels beside the circles), e.g. `640`. null (default) = never. */
|
|
3652
3807
|
readonly stackBelow: import("@angular/core").InputSignal<number | null>;
|
|
3653
3808
|
/** CSS length (e.g. `10.5rem`): horizontal only - the list gets `min-width: calc(<step count> * <value>)`. Empty (default) = no minimum. */
|
|
@@ -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" | "
|
|
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' }`). */
|
|
@@ -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<"" | "none" | "
|
|
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;
|
|
@@ -6393,7 +6589,7 @@ export declare class CopyFieldComponent implements OnDestroy {
|
|
|
6393
6589
|
/** Neither the Clipboard API nor the fallback could copy. */
|
|
6394
6590
|
readonly copyFailed: import("@angular/core").OutputEmitterRef<void>;
|
|
6395
6591
|
protected readonly _id: string;
|
|
6396
|
-
protected readonly _state: import("@angular/core").WritableSignal<"idle" | "
|
|
6592
|
+
protected readonly _state: import("@angular/core").WritableSignal<"idle" | "failed" | "copied">;
|
|
6397
6593
|
protected readonly _announcement: import("@angular/core").Signal<string>;
|
|
6398
6594
|
protected readonly _buttonName: import("@angular/core").Signal<string>;
|
|
6399
6595
|
protected readonly _describedBy: import("@angular/core").Signal<string | null>;
|
|
@@ -7561,16 +7757,28 @@ export declare class FormColSpanDirective {
|
|
|
7561
7757
|
*/
|
|
7562
7758
|
/** One secondary line under the title: plain text, or text with a small icon and a tone (`danger` red, `warning` amber). */
|
|
7563
7759
|
export type ListItemDetail = string | {
|
|
7564
|
-
text
|
|
7760
|
+
text?: string;
|
|
7761
|
+
segments?: ListItemSegment[];
|
|
7565
7762
|
icon?: string;
|
|
7566
7763
|
tone?: 'default' | 'warning' | 'danger';
|
|
7567
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
|
+
};
|
|
7568
7776
|
/** Colour of the optional leading icon tile. */
|
|
7569
7777
|
export type ListItemIconColor = 'slate' | 'amber' | 'red' | 'blue' | 'green' | 'purple' | 'teal' | 'orange';
|
|
7570
7778
|
export declare class ListItemComponent implements AfterContentChecked {
|
|
7571
7779
|
private readonly host;
|
|
7572
7780
|
/** Show a radio button, checkbox, or nothing on the left. */
|
|
7573
|
-
readonly leading: import("@angular/core").InputSignal<"none" | "
|
|
7781
|
+
readonly leading: import("@angular/core").InputSignal<"none" | "checkbox" | "radio">;
|
|
7574
7782
|
/** `name` attribute for the radio/checkbox (groups radios together). */
|
|
7575
7783
|
readonly inputName: import("@angular/core").InputSignal<string>;
|
|
7576
7784
|
/** `id` attribute for the radio/checkbox (links the label). */
|
|
@@ -7652,6 +7860,11 @@ export declare class ListItemComponent implements AfterContentChecked {
|
|
|
7652
7860
|
protected onRowKey(e: Event): void;
|
|
7653
7861
|
protected readonly visibleDetails: () => {
|
|
7654
7862
|
text: string;
|
|
7863
|
+
segs: {
|
|
7864
|
+
text: string;
|
|
7865
|
+
bold: boolean;
|
|
7866
|
+
code: boolean;
|
|
7867
|
+
}[] | null;
|
|
7655
7868
|
d: string | null;
|
|
7656
7869
|
tone: "default" | "warning" | "danger";
|
|
7657
7870
|
}[];
|
|
@@ -9120,7 +9333,7 @@ export declare class IconComponent {
|
|
|
9120
9333
|
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
9121
9334
|
/** Icon size in px. */
|
|
9122
9335
|
readonly size: import("@angular/core").InputSignal<number>;
|
|
9123
|
-
readonly variant: import("@angular/core").InputSignal<"
|
|
9336
|
+
readonly variant: import("@angular/core").InputSignal<"danger" | "default">;
|
|
9124
9337
|
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
9125
9338
|
/** The host is running the request this icon started: a spinner replaces the picture and the button is disabled (no click) until it is false again. */
|
|
9126
9339
|
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
@@ -9232,7 +9445,7 @@ export declare class TimelineComponent {
|
|
|
9232
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. */
|
|
9233
9446
|
readonly maxHeight: import("@angular/core").InputSignal<string>;
|
|
9234
9447
|
/** `below` (default): the time is under the title / description. `end`: the time sits right-aligned on the title row. */
|
|
9235
|
-
readonly timePosition: import("@angular/core").InputSignal<"
|
|
9448
|
+
readonly timePosition: import("@angular/core").InputSignal<"end" | "below">;
|
|
9236
9449
|
/**
|
|
9237
9450
|
* Group the items under a heading per calendar day of `dateTime` ("Today", "Yesterday", "Oct 3", "Oct 3, 2025"). Default false = no headings,
|
|
9238
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.
|
|
@@ -11213,7 +11426,7 @@ export declare class PdfHotspotComponent {
|
|
|
11213
11426
|
/** `ready`: clickable; `blocked`: disabled (a prerequisite is missing); `signed`: shows `image`. */
|
|
11214
11427
|
readonly state: import("@angular/core").InputSignal<"ready" | "blocked" | "signed">;
|
|
11215
11428
|
/** `warning` gives the ready state an amber look (e.g. for initials), default is blue. */
|
|
11216
|
-
readonly tone: import("@angular/core").InputSignal<"
|
|
11429
|
+
readonly tone: import("@angular/core").InputSignal<"primary" | "warning">;
|
|
11217
11430
|
/** Text of the ready button (e.g. "Sign Here"). */
|
|
11218
11431
|
readonly label: import("@angular/core").InputSignal<string>;
|
|
11219
11432
|
/** Text of the blocked button (e.g. "Add signature above"). */
|
|
@@ -11350,7 +11563,7 @@ export declare class DetailCardComponent {
|
|
|
11350
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. */
|
|
11351
11564
|
readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
|
|
11352
11565
|
/** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
|
|
11353
|
-
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 |
|
|
11566
|
+
readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 5 | 3 | 6 | 4 | null>;
|
|
11354
11567
|
/** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
|
|
11355
11568
|
readonly titleId: import("@angular/core").InputSignal<string>;
|
|
11356
11569
|
/** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */
|
|
@@ -11364,7 +11577,7 @@ export declare class DetailCardComponent {
|
|
|
11364
11577
|
/** Background colour of the footer bar (the `[card-footer]` slot) as any CSS colour. Empty = no colour of its own. */
|
|
11365
11578
|
readonly footerBackground: import("@angular/core").InputSignal<string>;
|
|
11366
11579
|
/** Alignment of the `[card-footer]` content: `'start'` (default, unchanged) or `'end'` = a right-aligned action row with an 8px gap. */
|
|
11367
|
-
readonly footerAlign: import("@angular/core").InputSignal<"
|
|
11580
|
+
readonly footerAlign: import("@angular/core").InputSignal<"start" | "end">;
|
|
11368
11581
|
/** Text colour as any CSS colour (`#fff`, `var(--on-dark)` …). Empty = the default colours. Colours the title, subtitle, chevron and body text. */
|
|
11369
11582
|
readonly textColor: import("@angular/core").InputSignal<string>;
|
|
11370
11583
|
/** false = no header at all (no title, edit button, toggle or divider): the card is only the body, always open. */
|
|
@@ -16134,7 +16347,7 @@ export declare class PaymentSidePanelComponent {
|
|
|
16134
16347
|
private readonly terminalAvailable;
|
|
16135
16348
|
/** value -> label of every live method the rendered plugins contribute (the first plugin wins a duplicate value). */
|
|
16136
16349
|
private readonly liveMethods;
|
|
16137
|
-
protected readonly kind: import("@angular/core").Signal<"none" | "
|
|
16350
|
+
protected readonly kind: import("@angular/core").Signal<"none" | "manual" | "live" | "terminal">;
|
|
16138
16351
|
private kindOf;
|
|
16139
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. */
|
|
16140
16353
|
readonly methodList: import("@angular/core").Signal<PaymentMethodOption[]>;
|