@forgeroute/ui 0.4.15 → 0.4.17
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-messaging.mjs +14 -1
- package/fesm2022/forgeroute-ui-messaging.mjs.map +1 -1
- package/fesm2022/forgeroute-ui-stripe.mjs +5 -1
- package/fesm2022/forgeroute-ui-stripe.mjs.map +1 -1
- package/fesm2022/forgeroute-ui.mjs +1434 -518
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +215 -13
package/package.json
CHANGED
package/types/forgeroute-ui.d.ts
CHANGED
|
@@ -398,6 +398,18 @@ export interface BulkActionEvent {
|
|
|
398
398
|
value?: string;
|
|
399
399
|
skippedCount: number;
|
|
400
400
|
}
|
|
401
|
+
/** Emitted by (rowReorder) after the user moves a row (`reorderable`). */
|
|
402
|
+
export interface TableRowReorderEvent<T = any> {
|
|
403
|
+
/** The row that was moved. */
|
|
404
|
+
item: T;
|
|
405
|
+
/** Its index on the page before and after the move (0-based). */
|
|
406
|
+
from: number;
|
|
407
|
+
to: number;
|
|
408
|
+
/** The rows on the page in their new order. */
|
|
409
|
+
items: T[];
|
|
410
|
+
/** How many rows come before this page (0 on the first page), so `offset + to` is the row's position in the whole list. */
|
|
411
|
+
offset: number;
|
|
412
|
+
}
|
|
401
413
|
export interface PageResponse<T> {
|
|
402
414
|
content: T[];
|
|
403
415
|
totalElements: number;
|
|
@@ -1213,6 +1225,12 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1213
1225
|
readonly page: import("@angular/core").InputSignal<string>;
|
|
1214
1226
|
/** Show column config + saved views toolbar. Defaults true. Set false to hide both. */
|
|
1215
1227
|
readonly showToolbar: import("@angular/core").InputSignal<boolean>;
|
|
1228
|
+
/**
|
|
1229
|
+
* Show the More Actions menu in the toolbar (Import, Columns, Save/Saved Views and page-defined menu items). Defaults true.
|
|
1230
|
+
* Set false for a page that has nothing to offer there; Export, page-defined primary/secondary buttons and the search box
|
|
1231
|
+
* are unaffected. The table still hides the menu by itself when it is empty and unfiltered.
|
|
1232
|
+
*/
|
|
1233
|
+
readonly showMoreActions: import("@angular/core").InputSignal<boolean>;
|
|
1216
1234
|
/**
|
|
1217
1235
|
* Show the search box above the table. Defaults true. Set false for small fixed tables where searching is meaningless
|
|
1218
1236
|
* (a handful of summary rows). Quick-filter tabs and the toolbar are unaffected; when the search box, the tabs and the
|
|
@@ -1307,6 +1325,16 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1307
1325
|
readonly bulkAction: import("@angular/core").OutputEmitterRef<BulkActionEvent>;
|
|
1308
1326
|
/** Emitted after a built-in single-row delete completes successfully. */
|
|
1309
1327
|
readonly rowDeleted: import("@angular/core").OutputEmitterRef<T>;
|
|
1328
|
+
/**
|
|
1329
|
+
* Optional drag-and-drop ordering of the rows. Off by default; when `true` (and the user has full access) every row gets a grip
|
|
1330
|
+
* (drag it, or focus it and use the arrow keys / Home / End; phone cards get Move up / Move down buttons). Reordering is only
|
|
1331
|
+
* offered while the list is in its stored order: with a sort, search, quick tab or column filter active the grips are disabled
|
|
1332
|
+
* (their tooltip says why), because the visible order is then not the stored one. The move is applied to the page on screen at
|
|
1333
|
+
* once and announced as `(rowReorder)`; the host saves it (a failed save should call `refresh()` to bring back the stored order).
|
|
1334
|
+
*/
|
|
1335
|
+
readonly reorderable: import("@angular/core").InputSignal<boolean>;
|
|
1336
|
+
/** Emitted after the user moves a row: `items` is the page in its new order, `from` / `to` are page indexes, `offset` is the number of rows on earlier pages. */
|
|
1337
|
+
readonly rowReorder: import("@angular/core").OutputEmitterRef<TableRowReorderEvent<T>>;
|
|
1310
1338
|
private readonly config;
|
|
1311
1339
|
private readonly http;
|
|
1312
1340
|
private readonly destroyRef;
|
|
@@ -1400,6 +1428,34 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1400
1428
|
protected readonly _toolbarButtons: Signal<ToolbarAction[]>;
|
|
1401
1429
|
/** True while the table is empty and unfiltered but the host kept a More Actions item (`keepWhenEmpty`) — the menu stays. */
|
|
1402
1430
|
protected readonly _keepMoreActions: Signal<boolean>;
|
|
1431
|
+
/** The reorder column is part of the table (the grips may still be disabled, see `_reorderActive`). */
|
|
1432
|
+
protected readonly _reorderOn: Signal<boolean>;
|
|
1433
|
+
/** Moves are allowed: the list is in its stored order (no sort / search / tab / filter), loaded, and has more than one row. */
|
|
1434
|
+
protected readonly _reorderActive: Signal<boolean>;
|
|
1435
|
+
/** Why the grips are off: an active sort / search / tab / filter is the reason to name even when it left one row ("nothing to reorder" would hide it). */
|
|
1436
|
+
protected readonly _reorderHint: Signal<"Clear the sort, search and filters to change the order" | "There is nothing to reorder" | "Reordering is not available right now">;
|
|
1437
|
+
/** One id per table, so each grip can point to the instructions (aria-describedby) even with several tables on a page. */
|
|
1438
|
+
protected readonly _reorderHelpId: string;
|
|
1439
|
+
protected readonly _dragFrom: import("@angular/core").WritableSignal<number | null>;
|
|
1440
|
+
/** Key of the row being dragged: the index can go stale if the page reloads mid-drag, the key cannot. */
|
|
1441
|
+
private _dragKey;
|
|
1442
|
+
protected readonly _dragOver: import("@angular/core").WritableSignal<number | null>;
|
|
1443
|
+
/** Polite screen-reader message after a move. */
|
|
1444
|
+
protected readonly _reorderAnnouncement: import("@angular/core").WritableSignal<string>;
|
|
1445
|
+
private readonly _host;
|
|
1446
|
+
protected reorderLabel(item: T): string;
|
|
1447
|
+
protected onGripDragStart(e: DragEvent, index: number): void;
|
|
1448
|
+
protected onGripDragEnd(): void;
|
|
1449
|
+
protected onRowDragOver(e: DragEvent, index: number): void;
|
|
1450
|
+
protected onRowDrop(e: DragEvent, index: number): void;
|
|
1451
|
+
protected onGripKeydown(e: KeyboardEvent, index: number): void;
|
|
1452
|
+
/**
|
|
1453
|
+
* A Move up / Move down button (touch screens and phone cards). The pressed button can end up disabled (the row reached an end), and a
|
|
1454
|
+
* focused control that gets disabled drops focus to the page, so focus goes to the row's other Move button then.
|
|
1455
|
+
*/
|
|
1456
|
+
protected moveByButton(index: number, direction: -1 | 1): void;
|
|
1457
|
+
/** Moves the row at `from` to `to` (both page indexes) in the table and tells the host. false = nothing changed. */
|
|
1458
|
+
protected moveRow(from: number, to: number): boolean;
|
|
1403
1459
|
protected readonly _hasActiveFilters: Signal<boolean>;
|
|
1404
1460
|
/** Host `params` with empty values dropped; equal by content so a new object with the same values doesn't reload. */
|
|
1405
1461
|
protected readonly _extraParams: Signal<Record<string, string>>;
|
|
@@ -1455,7 +1511,7 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1455
1511
|
*/
|
|
1456
1512
|
private readonly _rowNameSuffix;
|
|
1457
1513
|
/** A row's accessible name: its name, plus the position among rows of the same name when that name repeats on the page. */
|
|
1458
|
-
|
|
1514
|
+
protected rowAccessibleName(item: T): string;
|
|
1459
1515
|
/** "Select Acme Electric" — a row's selection checkbox name ("Select Acme Electric (2 of 3)" when the name repeats on the page). */
|
|
1460
1516
|
protected selectRowLabel(item: T): string;
|
|
1461
1517
|
/**
|
|
@@ -1699,6 +1755,11 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1699
1755
|
"required": false;
|
|
1700
1756
|
"isSignal": true;
|
|
1701
1757
|
};
|
|
1758
|
+
"showMoreActions": {
|
|
1759
|
+
"alias": "showMoreActions";
|
|
1760
|
+
"required": false;
|
|
1761
|
+
"isSignal": true;
|
|
1762
|
+
};
|
|
1702
1763
|
"showSearch": {
|
|
1703
1764
|
"alias": "showSearch";
|
|
1704
1765
|
"required": false;
|
|
@@ -1769,6 +1830,11 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1769
1830
|
"required": false;
|
|
1770
1831
|
"isSignal": true;
|
|
1771
1832
|
};
|
|
1833
|
+
"reorderable": {
|
|
1834
|
+
"alias": "reorderable";
|
|
1835
|
+
"required": false;
|
|
1836
|
+
"isSignal": true;
|
|
1837
|
+
};
|
|
1772
1838
|
}, {
|
|
1773
1839
|
"rowClick": "rowClick";
|
|
1774
1840
|
"linkClick": "linkClick";
|
|
@@ -1782,6 +1848,7 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
|
|
|
1782
1848
|
"tabChange": "tabChange";
|
|
1783
1849
|
"bulkAction": "bulkAction";
|
|
1784
1850
|
"rowDeleted": "rowDeleted";
|
|
1851
|
+
"rowReorder": "rowReorder";
|
|
1785
1852
|
}, never, never, true, never>;
|
|
1786
1853
|
}
|
|
1787
1854
|
/**
|
|
@@ -1822,6 +1889,11 @@ export declare class SidePanelComponent implements OnDestroy {
|
|
|
1822
1889
|
readonly cancelTestId: import("@angular/core").InputSignal<string>;
|
|
1823
1890
|
/** `data-testid` of the primary footer button; none when empty (default). */
|
|
1824
1891
|
readonly primaryTestId: import("@angular/core").InputSignal<string>;
|
|
1892
|
+
/**
|
|
1893
|
+
* Element that gets focus back when the panel closes. Takes precedence over the element that was focused (or last
|
|
1894
|
+
* clicked / activated) when it opened; used only if it is still in the page and visible. Default null = the opener.
|
|
1895
|
+
*/
|
|
1896
|
+
readonly returnFocusTo: import("@angular/core").InputSignal<HTMLElement | null>;
|
|
1825
1897
|
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
1826
1898
|
readonly primaryClick: import("@angular/core").OutputEmitterRef<void>;
|
|
1827
1899
|
protected readonly titleId: string;
|
|
@@ -1831,8 +1903,12 @@ export declare class SidePanelComponent implements OnDestroy {
|
|
|
1831
1903
|
private _prevFocus;
|
|
1832
1904
|
private _scrollLocked;
|
|
1833
1905
|
private _stopViewport;
|
|
1906
|
+
private _stopIframeKeys;
|
|
1907
|
+
private readonly _interaction;
|
|
1834
1908
|
constructor();
|
|
1835
1909
|
onKeydown(event: KeyboardEvent): void;
|
|
1910
|
+
/** A focus-guard sentinel received focus (Tab left the panel's tab order, e.g. out of an iframe): send it back inside. */
|
|
1911
|
+
protected onGuardFocus(which: 'start' | 'end', event?: FocusEvent): void;
|
|
1836
1912
|
/** Initial focus — see `focusInitial` (autofocus target → first usable field → dialog container). */
|
|
1837
1913
|
private _focusFirst;
|
|
1838
1914
|
private _focusable;
|
|
@@ -1899,6 +1975,11 @@ export declare class SidePanelComponent implements OnDestroy {
|
|
|
1899
1975
|
"required": false;
|
|
1900
1976
|
"isSignal": true;
|
|
1901
1977
|
};
|
|
1978
|
+
"returnFocusTo": {
|
|
1979
|
+
"alias": "returnFocusTo";
|
|
1980
|
+
"required": false;
|
|
1981
|
+
"isSignal": true;
|
|
1982
|
+
};
|
|
1902
1983
|
}, {
|
|
1903
1984
|
"closed": "closed";
|
|
1904
1985
|
"primaryClick": "primaryClick";
|
|
@@ -1909,7 +1990,7 @@ export declare class ModalComponent implements OnInit, OnDestroy {
|
|
|
1909
1990
|
readonly title: import("@angular/core").InputSignal<string>;
|
|
1910
1991
|
readonly description: import("@angular/core").InputSignal<string>;
|
|
1911
1992
|
readonly maxWidth: import("@angular/core").InputSignal<string>;
|
|
1912
|
-
readonly bodyOverflow: import("@angular/core").InputSignal<"
|
|
1993
|
+
readonly bodyOverflow: import("@angular/core").InputSignal<"auto" | "visible" | "hidden">;
|
|
1913
1994
|
/** `data-testid` of the dialog element itself (the host `<ui-modal>` is always in the page, the dialog only while open). None when empty. */
|
|
1914
1995
|
readonly dialogTestId: import("@angular/core").InputSignal<string>;
|
|
1915
1996
|
/** Hides the header X button (e.g. while a request is running). Escape and a backdrop click still close unless `closable` is false. */
|
|
@@ -1920,6 +2001,11 @@ export declare class ModalComponent implements OnInit, OnDestroy {
|
|
|
1920
2001
|
*/
|
|
1921
2002
|
readonly closable: import("@angular/core").InputSignal<boolean>;
|
|
1922
2003
|
readonly close: import("@angular/core").OutputEmitterRef<void>;
|
|
2004
|
+
/**
|
|
2005
|
+
* Element that gets focus back when the dialog closes. Takes precedence over the element that was focused (or last
|
|
2006
|
+
* clicked / activated) when it opened; used only if it is still in the page and visible. Default null = the opener.
|
|
2007
|
+
*/
|
|
2008
|
+
readonly returnFocusTo: import("@angular/core").InputSignal<HTMLElement | null>;
|
|
1923
2009
|
protected readonly titleId: string;
|
|
1924
2010
|
private readonly el;
|
|
1925
2011
|
private readonly ren;
|
|
@@ -1928,8 +2014,12 @@ export declare class ModalComponent implements OnInit, OnDestroy {
|
|
|
1928
2014
|
private _prevFocus;
|
|
1929
2015
|
private _scrollLocked;
|
|
1930
2016
|
private _stopViewport;
|
|
2017
|
+
private _stopIframeKeys;
|
|
2018
|
+
private readonly _interaction;
|
|
1931
2019
|
constructor();
|
|
1932
2020
|
onKeydown(event: KeyboardEvent): void;
|
|
2021
|
+
/** A focus-guard sentinel received focus (Tab left the dialog's tab order, e.g. out of an iframe): send it back inside. */
|
|
2022
|
+
protected onGuardFocus(which: 'start' | 'end', event?: FocusEvent): void;
|
|
1933
2023
|
/** Initial focus — see `focusInitial` (autofocus target → first usable field → dialog container). */
|
|
1934
2024
|
private _focusFirst;
|
|
1935
2025
|
private _focusable;
|
|
@@ -1977,6 +2067,11 @@ export declare class ModalComponent implements OnInit, OnDestroy {
|
|
|
1977
2067
|
"required": false;
|
|
1978
2068
|
"isSignal": true;
|
|
1979
2069
|
};
|
|
2070
|
+
"returnFocusTo": {
|
|
2071
|
+
"alias": "returnFocusTo";
|
|
2072
|
+
"required": false;
|
|
2073
|
+
"isSignal": true;
|
|
2074
|
+
};
|
|
1980
2075
|
}, {
|
|
1981
2076
|
"close": "close";
|
|
1982
2077
|
}, never, ["*", "[modal-footer-left]", "[modal-footer-center]", "[modal-footer-right]"], true, never>;
|
|
@@ -2279,7 +2374,7 @@ export declare class AudioPlayerComponent {
|
|
|
2279
2374
|
/** Accessible name of the player. */
|
|
2280
2375
|
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
2281
2376
|
/** How much to load before play: 'metadata' (default), 'auto' or 'none'. */
|
|
2282
|
-
readonly preload: import("@angular/core").InputSignal<"
|
|
2377
|
+
readonly preload: import("@angular/core").InputSignal<"auto" | "none" | "metadata">;
|
|
2283
2378
|
/** Fires when the browser can't load or decode the source. */
|
|
2284
2379
|
readonly playbackError: import("@angular/core").OutputEmitterRef<void>;
|
|
2285
2380
|
protected readonly failed: import("@angular/core").WritableSignal<boolean>;
|
|
@@ -2529,7 +2624,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
2529
2624
|
* 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.
|
|
2530
2625
|
* Default null: plain label text, exactly as before. Single mode only.
|
|
2531
2626
|
*/
|
|
2532
|
-
readonly headingLevel: import("@angular/core").InputSignal<3 | 1 | 2 |
|
|
2627
|
+
readonly headingLevel: import("@angular/core").InputSignal<5 | 3 | 1 | 2 | 4 | 6 | null>;
|
|
2533
2628
|
readonly indeterminate: import("@angular/core").InputSignal<boolean>;
|
|
2534
2629
|
readonly checked: import("@angular/core").ModelSignal<boolean>;
|
|
2535
2630
|
/**
|
|
@@ -2742,7 +2837,7 @@ export declare class CheckboxTrailingDirective {
|
|
|
2742
2837
|
*
|
|
2743
2838
|
* Built on a native `<input type="checkbox" role="switch">`, so Space toggles it, it is focusable, and a screen reader
|
|
2744
2839
|
* announces it as a switch (on / off). The label and hint name and describe it. `disabled` (input or form control) dims it
|
|
2745
|
-
* and blocks changes. On touch devices and phones the switch has a >= 44px hit area.
|
|
2840
|
+
* and blocks changes. `ariaDescribedBy` adds the id of a description rendered elsewhere. On touch devices and phones the switch has a >= 44px hit area.
|
|
2746
2841
|
*/
|
|
2747
2842
|
export declare class ToggleComponent implements ControlValueAccessor {
|
|
2748
2843
|
/** Bold line on the left. */
|
|
@@ -2751,6 +2846,8 @@ export declare class ToggleComponent implements ControlValueAccessor {
|
|
|
2751
2846
|
readonly hint: import("@angular/core").InputSignal<string>;
|
|
2752
2847
|
/** Accessible name when there is no visible `label`. */
|
|
2753
2848
|
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
2849
|
+
/** Id of another element that describes the switch (e.g. a description rendered elsewhere); announced after the hint. Absent when empty. */
|
|
2850
|
+
readonly ariaDescribedBy: import("@angular/core").InputSignal<string>;
|
|
2754
2851
|
/** Whether the switch is on. Two-way: `[(checked)]`. */
|
|
2755
2852
|
readonly checked: import("@angular/core").ModelSignal<boolean>;
|
|
2756
2853
|
/** Public so a host template can bind `[disabled]` (a protected input fails strict template type-checking, TS2445). */
|
|
@@ -2761,6 +2858,8 @@ export declare class ToggleComponent implements ControlValueAccessor {
|
|
|
2761
2858
|
protected readonly _inputId: string;
|
|
2762
2859
|
protected readonly _labelId: string;
|
|
2763
2860
|
protected readonly _hintId: string;
|
|
2861
|
+
/** The hint's id (when there is a hint) followed by the host's `ariaDescribedBy`; null when neither exists. */
|
|
2862
|
+
protected readonly _describedBy: import("@angular/core").Signal<string | null>;
|
|
2764
2863
|
private _onChange;
|
|
2765
2864
|
private _onTouched;
|
|
2766
2865
|
writeValue(val: boolean): void;
|
|
@@ -2786,6 +2885,11 @@ export declare class ToggleComponent implements ControlValueAccessor {
|
|
|
2786
2885
|
"required": false;
|
|
2787
2886
|
"isSignal": true;
|
|
2788
2887
|
};
|
|
2888
|
+
"ariaDescribedBy": {
|
|
2889
|
+
"alias": "ariaDescribedBy";
|
|
2890
|
+
"required": false;
|
|
2891
|
+
"isSignal": true;
|
|
2892
|
+
};
|
|
2789
2893
|
"checked": {
|
|
2790
2894
|
"alias": "checked";
|
|
2791
2895
|
"required": false;
|
|
@@ -3524,7 +3628,7 @@ export declare class ButtonComponent {
|
|
|
3524
3628
|
* `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
|
|
3525
3629
|
* background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
|
|
3526
3630
|
*/
|
|
3527
|
-
readonly variant: import("@angular/core").InputSignal<"
|
|
3631
|
+
readonly variant: import("@angular/core").InputSignal<"primary" | "danger" | "warning" | "link" | "secondary" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
|
|
3528
3632
|
/** 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`). */
|
|
3529
3633
|
readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
|
|
3530
3634
|
/** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
|
|
@@ -3570,7 +3674,7 @@ export declare class ButtonComponent {
|
|
|
3570
3674
|
readonly color: import("@angular/core").InputSignal<string | undefined>;
|
|
3571
3675
|
readonly active: import("@angular/core").InputSignal<boolean>;
|
|
3572
3676
|
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xs">;
|
|
3573
|
-
readonly type: import("@angular/core").InputSignal<"button" | "
|
|
3677
|
+
readonly type: import("@angular/core").InputSignal<"button" | "submit" | "reset">;
|
|
3574
3678
|
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
3575
3679
|
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
3576
3680
|
readonly fullWidth: import("@angular/core").InputSignal<boolean>;
|
|
@@ -3965,7 +4069,7 @@ export declare class BulkMessagePanelComponent {
|
|
|
3965
4069
|
readonly sending: import("@angular/core").InputSignal<boolean>;
|
|
3966
4070
|
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
3967
4071
|
readonly send: import("@angular/core").OutputEmitterRef<BulkMessageSendEvent>;
|
|
3968
|
-
readonly channel: import("@angular/core").WritableSignal<"
|
|
4072
|
+
readonly channel: import("@angular/core").WritableSignal<"email" | "text">;
|
|
3969
4073
|
private readonly _subject;
|
|
3970
4074
|
private readonly _body;
|
|
3971
4075
|
get subject(): string;
|
|
@@ -4103,6 +4207,54 @@ export declare class ErrorStateComponent {
|
|
|
4103
4207
|
"retry": "retry";
|
|
4104
4208
|
}, never, never, true, never>;
|
|
4105
4209
|
}
|
|
4210
|
+
/** One password rule: `test` decides whether the typed password satisfies it. */
|
|
4211
|
+
export interface PasswordRule {
|
|
4212
|
+
id: string;
|
|
4213
|
+
label: string;
|
|
4214
|
+
test: (password: string) => boolean;
|
|
4215
|
+
}
|
|
4216
|
+
/** The default rules (same as the backends): 8+ characters, an uppercase letter, a lowercase letter, a digit and a special character. */
|
|
4217
|
+
export declare const DEFAULT_PASSWORD_RULES: readonly PasswordRule[];
|
|
4218
|
+
/** True when the password satisfies every rule (default: {@link DEFAULT_PASSWORD_RULES}). Use it to gate Save. */
|
|
4219
|
+
export declare function passwordMeetsRules(password: string, rules?: readonly PasswordRule[]): boolean;
|
|
4220
|
+
/**
|
|
4221
|
+
* The password requirements checklist. Pass the typed password; each rule shows as a row that turns green with a check mark once it is
|
|
4222
|
+
* satisfied, and stays grey with an empty circle until then. There is no "(met)" text: the state is also in `data-met` and in
|
|
4223
|
+
* visually hidden text for screen readers, so it is not colour alone.
|
|
4224
|
+
*
|
|
4225
|
+
* Also available as `<ui-text-input type="password" [passwordRequirements]="true">`, which shows this list under the field.
|
|
4226
|
+
*/
|
|
4227
|
+
export declare class PasswordRequirementsComponent {
|
|
4228
|
+
/** The password to check. */
|
|
4229
|
+
readonly value: import("@angular/core").InputSignal<string>;
|
|
4230
|
+
/** Rules to show; default {@link DEFAULT_PASSWORD_RULES}. */
|
|
4231
|
+
readonly rules: import("@angular/core").InputSignal<readonly PasswordRule[]>;
|
|
4232
|
+
readonly title: import("@angular/core").InputSignal<string>;
|
|
4233
|
+
protected readonly _check: string;
|
|
4234
|
+
protected readonly _results: import("@angular/core").Signal<{
|
|
4235
|
+
id: string;
|
|
4236
|
+
label: string;
|
|
4237
|
+
met: boolean;
|
|
4238
|
+
}[]>;
|
|
4239
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PasswordRequirementsComponent, never>;
|
|
4240
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PasswordRequirementsComponent, "ui-password-requirements", never, {
|
|
4241
|
+
"value": {
|
|
4242
|
+
"alias": "value";
|
|
4243
|
+
"required": false;
|
|
4244
|
+
"isSignal": true;
|
|
4245
|
+
};
|
|
4246
|
+
"rules": {
|
|
4247
|
+
"alias": "rules";
|
|
4248
|
+
"required": false;
|
|
4249
|
+
"isSignal": true;
|
|
4250
|
+
};
|
|
4251
|
+
"title": {
|
|
4252
|
+
"alias": "title";
|
|
4253
|
+
"required": false;
|
|
4254
|
+
"isSignal": true;
|
|
4255
|
+
};
|
|
4256
|
+
}, {}, never, never, true, never>;
|
|
4257
|
+
}
|
|
4106
4258
|
export declare class TextInputComponent implements ControlValueAccessor, Validator, UiFieldValidity {
|
|
4107
4259
|
readonly label: import("@angular/core").InputSignal<string>;
|
|
4108
4260
|
/** Accessible name for a field with no visible label (e.g. an inline cell or title input). */
|
|
@@ -4114,7 +4266,19 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4114
4266
|
* Meant for a short mark of 1-3 characters.
|
|
4115
4267
|
*/
|
|
4116
4268
|
readonly prefix: import("@angular/core").InputSignal<string>;
|
|
4117
|
-
|
|
4269
|
+
/**
|
|
4270
|
+
* `type="password"` only: puts an eye button inside the field, at its right end, that shows / hides the typed text (the eye with a slash
|
|
4271
|
+
* means "hidden again"). Per field, starts hidden; the button is a toggle (`aria-pressed`) named "Show password". Ignored for other types.
|
|
4272
|
+
*/
|
|
4273
|
+
readonly revealable: import("@angular/core").InputSignal<boolean>;
|
|
4274
|
+
/**
|
|
4275
|
+
* `type="password"` only: shows the password requirements checklist under the field (`ui-password-requirements`) once the user has typed
|
|
4276
|
+
* (it hides again when the host clears the field, e.g. after a successful change). Each rule turns green with a check when satisfied. Off by default; ignored for other types.
|
|
4277
|
+
*/
|
|
4278
|
+
readonly passwordRequirements: import("@angular/core").InputSignal<boolean>;
|
|
4279
|
+
/** Rules for `passwordRequirements`; default = the library's five rules (8+ characters, upper, lower, digit, special). */
|
|
4280
|
+
readonly passwordRules: import("@angular/core").InputSignal<readonly PasswordRule[] | undefined>;
|
|
4281
|
+
readonly type: import("@angular/core").InputSignal<"number" | "email" | "text" | "tel" | "password" | "url">;
|
|
4118
4282
|
readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
|
|
4119
4283
|
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
4120
4284
|
readonly autocomplete: import("@angular/core").InputSignal<string>;
|
|
@@ -4123,7 +4287,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4123
4287
|
* `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
|
|
4124
4288
|
* It only picks the keyboard; it does not restrict what can be typed or pasted.
|
|
4125
4289
|
*/
|
|
4126
|
-
readonly inputmode: import("@angular/core").InputSignal<"" | "
|
|
4290
|
+
readonly inputmode: import("@angular/core").InputSignal<"" | "email" | "text" | "none" | "search" | "tel" | "url" | "decimal" | "numeric">;
|
|
4127
4291
|
readonly readonly: import("@angular/core").InputSignal<boolean>;
|
|
4128
4292
|
readonly hint: import("@angular/core").InputSignal<string>;
|
|
4129
4293
|
readonly error: import("@angular/core").InputSignal<string>;
|
|
@@ -4185,6 +4349,17 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4185
4349
|
private readonly _numeric;
|
|
4186
4350
|
/** The native `step` attribute: only for `type="number"` and only for a finite number above 0; otherwise none (the browser's step of 1). */
|
|
4187
4351
|
protected readonly _stepAttr: import("@angular/core").Signal<string | null>;
|
|
4352
|
+
protected readonly _revealable: import("@angular/core").Signal<boolean>;
|
|
4353
|
+
protected readonly _shown: import("@angular/core").WritableSignal<boolean>;
|
|
4354
|
+
protected readonly _inputType: import("@angular/core").Signal<"number" | "email" | "text" | "tel" | "password" | "url">;
|
|
4355
|
+
protected readonly _eyePath: string;
|
|
4356
|
+
protected readonly _eyeOffPath: string;
|
|
4357
|
+
protected readonly _showRequirements: import("@angular/core").Signal<boolean>;
|
|
4358
|
+
/** `aria-describedby`: the error / hint text and, while the requirements checklist is shown, the checklist (so a screen reader reads the rules with the field). */
|
|
4359
|
+
protected readonly _describedBy: import("@angular/core").Signal<string | null>;
|
|
4360
|
+
/** True once the user typed in the field; a host-written empty value (a form reset) puts it back to false. */
|
|
4361
|
+
private readonly _typed;
|
|
4362
|
+
protected readonly _defaultRules: readonly PasswordRule[];
|
|
4188
4363
|
private _warned;
|
|
4189
4364
|
private readonly _formatting;
|
|
4190
4365
|
private readonly _issue;
|
|
@@ -4239,6 +4414,21 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4239
4414
|
"required": false;
|
|
4240
4415
|
"isSignal": true;
|
|
4241
4416
|
};
|
|
4417
|
+
"revealable": {
|
|
4418
|
+
"alias": "revealable";
|
|
4419
|
+
"required": false;
|
|
4420
|
+
"isSignal": true;
|
|
4421
|
+
};
|
|
4422
|
+
"passwordRequirements": {
|
|
4423
|
+
"alias": "passwordRequirements";
|
|
4424
|
+
"required": false;
|
|
4425
|
+
"isSignal": true;
|
|
4426
|
+
};
|
|
4427
|
+
"passwordRules": {
|
|
4428
|
+
"alias": "passwordRules";
|
|
4429
|
+
"required": false;
|
|
4430
|
+
"isSignal": true;
|
|
4431
|
+
};
|
|
4242
4432
|
"type": {
|
|
4243
4433
|
"alias": "type";
|
|
4244
4434
|
"required": false;
|
|
@@ -6734,7 +6924,7 @@ export declare class AlertComponent {
|
|
|
6734
6924
|
/** The SVG path (24×24 stroke icon) for an icon key, or undefined when the key is unknown. */
|
|
6735
6925
|
export declare function iconPath(name: string): string | undefined;
|
|
6736
6926
|
/** Keys with an icon of their own (the data-table action keys are accepted too — see `builtInActionIcon`). */
|
|
6737
|
-
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' | 'edit' | 'delete' | 'download' | 'duplicate' | 'archive' | 'restore' | 'share' | 'email' | 'message' | 'call';
|
|
6927
|
+
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';
|
|
6738
6928
|
/**
|
|
6739
6929
|
* A clickable icon. The host passes a key (`name="delete"`) and the library draws that icon; clicking it emits
|
|
6740
6930
|
* `iconClick`, and the host does the actual work (delete the row, open a panel, …).
|
|
@@ -7470,7 +7660,9 @@ export interface DateRange {
|
|
|
7470
7660
|
}
|
|
7471
7661
|
/**
|
|
7472
7662
|
* Date range picker: preset pills (Today … Year to Date, optional All Time, Custom Range) plus
|
|
7473
|
-
* From / To date inputs with an Apply button for the custom range.
|
|
7663
|
+
* From / To date inputs with an Apply button for the custom range. With the presets shown, the custom range opens in a
|
|
7664
|
+
* popover card under the pills (right-aligned, closes on Apply / Escape / outside click; picking Custom Range again
|
|
7665
|
+
* reopens it); with `showPresets` false the From / To row is rendered inline. Emits `rangeChange` with the
|
|
7474
7666
|
* resolved ISO dates whenever a preset is picked or a custom range is applied.
|
|
7475
7667
|
*
|
|
7476
7668
|
* <ui-date-range-picker [activePreset]="preset()" [includeAllTime]="true" (rangeChange)="onRange($event)" />
|
|
@@ -7486,9 +7678,19 @@ export declare class DateRangePickerComponent {
|
|
|
7486
7678
|
readonly rangeChange: import("@angular/core").OutputEmitterRef<DateRange>;
|
|
7487
7679
|
/** Follows `activePreset` from the host, and the user's own picks in between. */
|
|
7488
7680
|
protected readonly selectedPreset: import("@angular/core").WritableSignal<DatePreset>;
|
|
7681
|
+
/** The popover was closed (Apply / Escape / outside click); any preset change reopens it. */
|
|
7682
|
+
private readonly popoverDismissed;
|
|
7683
|
+
protected readonly popoverVisible: import("@angular/core").Signal<boolean>;
|
|
7684
|
+
protected readonly popTop: import("@angular/core").WritableSignal<number>;
|
|
7685
|
+
protected readonly popRight: import("@angular/core").WritableSignal<number>;
|
|
7686
|
+
private readonly host;
|
|
7489
7687
|
protected readonly customStart: import("@angular/core").WritableSignal<string>;
|
|
7490
7688
|
protected readonly customEnd: import("@angular/core").WritableSignal<string>;
|
|
7491
7689
|
protected readonly presetTabs: import("@angular/core").Signal<PillTab[]>;
|
|
7690
|
+
constructor();
|
|
7691
|
+
private place;
|
|
7692
|
+
protected onDocumentClick(e: Event): void;
|
|
7693
|
+
protected onEscape(e: Event): void;
|
|
7492
7694
|
selectPreset(key: DatePreset): void;
|
|
7493
7695
|
applyCustom(): void;
|
|
7494
7696
|
static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerComponent, never>;
|
|
@@ -8281,7 +8483,7 @@ export declare class DetailCardComponent {
|
|
|
8281
8483
|
/** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
|
|
8282
8484
|
readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
|
|
8283
8485
|
/** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
|
|
8284
|
-
readonly headingLevel: import("@angular/core").InputSignal<3 | 1 | 2 |
|
|
8486
|
+
readonly headingLevel: import("@angular/core").InputSignal<5 | 3 | 1 | 2 | 4 | 6 | null>;
|
|
8285
8487
|
/** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
|
|
8286
8488
|
readonly titleId: import("@angular/core").InputSignal<string>;
|
|
8287
8489
|
/** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */
|