@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.
@@ -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<"auto" | "hidden" | "visible">;
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<"auto" | "none" | "metadata">;
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 | 4 | 2 | 3 | 5 | 6 | null>;
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<"horizontal" | "vertical">;
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<"current" | "all">;
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: "current" | "complete" | "upcoming";
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<"horizontal" | "vertical">;
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" | "icon" | "ghost" | "ghost-start" | "tab" | "icon-danger">;
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<"_blank" | "_self" | "_parent" | "_top" | null>;
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<"horizontal" | "vertical">;
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<"email" | "text">;
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" | "email" | "text" | "tel" | "password" | "url">;
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<"" | "email" | "search" | "none" | "text" | "tel" | "url" | "decimal" | "numeric">;
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" | "email" | "text" | "tel" | "password" | "url">;
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<"button" | "badge">;
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 | 4 | 2 | 3>;
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 | "all" | "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: string;
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" | "radio" | "checkbox">;
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<"below" | "end">;
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" | "auto" | "text">;
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 | 4 | 2 | 3 | 5 | 6 | null>;
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" | "live" | "terminal" | "manual">;
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[]>;