@acontplus/ng-components 3.2.0 → 4.0.0

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.
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EventEmitter, TemplateRef, InjectionToken, OnDestroy, OnInit, ElementRef, Signal, ViewContainerRef, Injector, Binding, Type, ComponentRef, AfterViewInit, EnvironmentProviders, OnChanges, SimpleChanges, NgZone, QueryList, TrackByFunction, KeyValueChangeRecord, OutputEmitterRef, WritableSignal, AfterContentInit, PipeTransform } from '@angular/core';
2
+ import { EventEmitter, TemplateRef, InjectionToken, OnDestroy, OnInit, ElementRef, Signal, ViewContainerRef, Injector, Binding, Type, ComponentRef, AfterViewInit, EnvironmentProviders, DoCheck, OnChanges, SimpleChanges, NgZone, QueryList, TrackByFunction, KeyValueChangeRecord, OutputEmitterRef, WritableSignal, AfterContentInit, PipeTransform } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable, Subject } from 'rxjs';
5
5
  import { DialogPosition, MatDialogRef, MatDialogState } from '@angular/material/dialog';
@@ -7,6 +7,9 @@ import { ScrollStrategy } from '@angular/cdk/overlay';
7
7
  import * as _acontplus_ng_components from '@acontplus/ng-components';
8
8
  import { FormControl, ControlValueAccessor, FormGroup } from '@angular/forms';
9
9
  import { SelectOption, IconDefinition, ButtonVariant, ButtonType, MaterialButtonStyle, REPORT_FORMAT } from '@acontplus/ui-kit';
10
+ import { ErrorStateMatcher, ThemePalette } from '@angular/material/core';
11
+ import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
12
+ import { MatFormFieldAppearance } from '@angular/material/form-field';
10
13
  import { SafeHtml } from '@angular/platform-browser';
11
14
  import { MatChipInputEvent, MatChipEditedEvent } from '@angular/material/chips';
12
15
  import { LiveAnnouncer, FocusOrigin } from '@angular/cdk/a11y';
@@ -17,7 +20,6 @@ import { SortDirection, MatSort, Sort } from '@angular/material/sort';
17
20
  import { SelectionModel } from '@angular/cdk/collections';
18
21
  import { MatBadgePosition, MatBadgeSize } from '@angular/material/badge';
19
22
  import { MatButtonAppearance } from '@angular/material/button';
20
- import { ThemePalette } from '@angular/material/core';
21
23
  import { TooltipPosition, TooltipTouchGestures } from '@angular/material/tooltip';
22
24
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
23
25
  import { MatMenu, MatMenuTrigger } from '@angular/material/menu';
@@ -113,136 +115,6 @@ declare const ACP_BADGE_SHAPES: AcpBadgeShape[];
113
115
 
114
116
  declare const TREND_CONFIGS: Record<AcpBadgeTrend, AcpBadgeTrendConfig>;
115
117
 
116
- /**
117
- * A versatile card component that wraps Angular Material's mat-card with additional functionality
118
- * and customization options. This component provides a consistent card layout with configurable
119
- * header, content, and action areas.
120
- */
121
- declare class DynamicCard {
122
- /**
123
- * The title text to display in the card header.
124
- * @default null
125
- */
126
- cardTitle: _angular_core.InputSignal<string | null>;
127
- /**
128
- * The subtitle text to display in the card header.
129
- * @default null
130
- */
131
- cardSubtitle: _angular_core.InputSignal<string | null>;
132
- /**
133
- * URL for the avatar image to display in the card header.
134
- * @default null
135
- */
136
- avatarImageUrl: _angular_core.InputSignal<string | null>;
137
- /**
138
- * Whether to show the card header section.
139
- * @default false
140
- */
141
- isHeaderVisible: _angular_core.InputSignalWithTransform<boolean, unknown>;
142
- /**
143
- * CSS padding value for the card content area.
144
- * @default '1rem'
145
- */
146
- contentPadding: _angular_core.InputSignal<string>;
147
- /**
148
- * Whether to show a divider between the header and content sections.
149
- * @default false
150
- */
151
- hasDivider: _angular_core.InputSignalWithTransform<boolean, unknown>;
152
- /**
153
- * Whether to show the action buttons section.
154
- * @default false
155
- */
156
- areActionsVisible: _angular_core.InputSignalWithTransform<boolean, unknown>;
157
- /**
158
- * Text for the primary action button.
159
- * @default 'Confirm'
160
- */
161
- primaryButtonText: _angular_core.InputSignal<string>;
162
- /**
163
- * Text for the secondary action button.
164
- * @default 'Cancel'
165
- */
166
- secondaryButtonText: _angular_core.InputSignal<string>;
167
- /**
168
- * Material icon name for the primary button.
169
- * @default null
170
- */
171
- primaryButtonIcon: _angular_core.InputSignal<string | null>;
172
- /**
173
- * Material icon name for the secondary button.
174
- * @default null
175
- */
176
- secondaryButtonIcon: _angular_core.InputSignal<string | null>;
177
- /**
178
- * Alignment of the action buttons.
179
- * @default 'end'
180
- */
181
- buttonsPosition: _angular_core.InputSignal<"start" | "end">;
182
- /**
183
- * Event emitted when the primary button is clicked.
184
- */
185
- primaryButtonClicked: _angular_core.OutputEmitterRef<void>;
186
- /**
187
- * Event emitted when the secondary button is clicked.
188
- */
189
- secondaryButtonClicked: _angular_core.OutputEmitterRef<void>;
190
- /**
191
- * Event emitted when the card is clicked.
192
- */
193
- cardClicked: _angular_core.OutputEmitterRef<Event>;
194
- /**
195
- * Event emitted when a key is pressed down on the card.
196
- */
197
- keyDown: _angular_core.OutputEmitterRef<KeyboardEvent>;
198
- /**
199
- * Event emitted when a key is released on the card.
200
- */
201
- keyUp: _angular_core.OutputEmitterRef<KeyboardEvent>;
202
- /**
203
- * Event emitted when a key is pressed on the card.
204
- */
205
- keyPress: _angular_core.OutputEmitterRef<KeyboardEvent>;
206
- /**
207
- * Handles the primary button click event.
208
- * Stops event propagation and emits the primaryButtonClicked event.
209
- * @param event The click event
210
- */
211
- handlePrimaryButtonClick(event: Event): void;
212
- /**
213
- * Handles the secondary button click event.
214
- * Stops event propagation and emits the secondaryButtonClicked event.
215
- * @param event The click event
216
- */
217
- handleSecondaryButtonClick(event: Event): void;
218
- /**
219
- * Handles the card click event.
220
- * Emits the cardClicked event with the original event.
221
- * @param event The click event
222
- */
223
- handleCardClick(event: Event): void;
224
- /**
225
- * Handles the key down event on the card.
226
- * Emits the keyDown event with the original keyboard event.
227
- * @param event The keyboard event
228
- */
229
- handleKeyDown(event: KeyboardEvent): void;
230
- /**
231
- * Handles the key up event on the card.
232
- * Emits the keyUp event with the original keyboard event.
233
- * @param event The keyboard event
234
- */
235
- handleKeyUp(event: KeyboardEvent): void;
236
- /**
237
- * Handles the key press event on the card.
238
- * Emits the keyPress event with the original keyboard event.
239
- * @param event The keyboard event
240
- */
241
- handleKeyPress(event: KeyboardEvent): void;
242
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicCard, never>;
243
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicCard, "acp-dynamic-card", never, { "cardTitle": { "alias": "cardTitle"; "required": false; "isSignal": true; }; "cardSubtitle": { "alias": "cardSubtitle"; "required": false; "isSignal": true; }; "avatarImageUrl": { "alias": "avatarImageUrl"; "required": false; "isSignal": true; }; "isHeaderVisible": { "alias": "isHeaderVisible"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; "hasDivider": { "alias": "hasDivider"; "required": false; "isSignal": true; }; "areActionsVisible": { "alias": "areActionsVisible"; "required": false; "isSignal": true; }; "primaryButtonText": { "alias": "primaryButtonText"; "required": false; "isSignal": true; }; "secondaryButtonText": { "alias": "secondaryButtonText"; "required": false; "isSignal": true; }; "primaryButtonIcon": { "alias": "primaryButtonIcon"; "required": false; "isSignal": true; }; "secondaryButtonIcon": { "alias": "secondaryButtonIcon"; "required": false; "isSignal": true; }; "buttonsPosition": { "alias": "buttonsPosition"; "required": false; "isSignal": true; }; }, { "primaryButtonClicked": "primaryButtonClicked"; "secondaryButtonClicked": "secondaryButtonClicked"; "cardClicked": "cardClicked"; "keyDown": "keyDown"; "keyUp": "keyUp"; "keyPress": "keyPress"; }, never, ["*"], true, never>;
244
- }
245
-
246
118
  /**
247
119
  * Context Menu Types and Interfaces
248
120
  * Defines the API contract for the ContextMenu component
@@ -1148,7 +1020,7 @@ declare class AcpDialogContainer implements AfterViewInit {
1148
1020
  /** Pending declarative titlebar template, captured before the outlet is ready. */
1149
1021
  private readonly pendingTitlebarTemplate;
1150
1022
  /** Alignment requested by a declarative actions template. */
1151
- protected readonly declarativeActionsAlign: _angular_core.WritableSignal<"start" | "end" | "center" | undefined>;
1023
+ protected readonly declarativeActionsAlign: _angular_core.WritableSignal<"start" | "center" | "end" | undefined>;
1152
1024
  /** Title requested by a declarative titlebar template. */
1153
1025
  protected readonly declarativeTitle: _angular_core.WritableSignal<string | undefined>;
1154
1026
  /** Outlet object provided to content so `acp-dialog-actions` can register itself. */
@@ -1160,7 +1032,7 @@ declare class AcpDialogContainer implements AfterViewInit {
1160
1032
  /** Title used for the actions footer label. */
1161
1033
  protected readonly resolvedDialogTitle: Signal<string | undefined>;
1162
1034
  /** Alignment used for the actions footer. */
1163
- protected readonly resolvedActionsAlign: Signal<"start" | "end" | "center">;
1035
+ protected readonly resolvedActionsAlign: Signal<"start" | "center" | "end">;
1164
1036
  /** Whether the current content is a plain string. */
1165
1037
  protected readonly isStringContent: _angular_core.WritableSignal<boolean>;
1166
1038
  get config(): _acontplus_ng_components.AcpDialogConfig<unknown>;
@@ -1246,7 +1118,7 @@ declare class AcpDialogActions implements AfterViewInit {
1246
1118
  protected readonly renderInline: _angular_core.WritableSignal<boolean>;
1247
1119
  protected readonly hostDisplay: _angular_core.WritableSignal<string>;
1248
1120
  /** Alignment of the action buttons. @default 'end' */
1249
- align: _angular_core.InputSignal<"start" | "end" | "center">;
1121
+ align: _angular_core.InputSignal<"start" | "center" | "end">;
1250
1122
  /** Configured footer actions. When omitted, the component works as a declarative slot. */
1251
1123
  actions: _angular_core.InputSignal<AcpDialogAction<unknown>[] | undefined>;
1252
1124
  /** Optional title used to label the actions footer. */
@@ -1584,6 +1456,113 @@ declare class DynamicSelect implements OnInit, OnDestroy {
1584
1456
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicSelect, "acp-dynamic-select", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "selectedValue": { "alias": "selectedValue"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "hideSelected": { "alias": "hideSelected"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectOnTab": { "alias": "selectOnTab"; "required": false; "isSignal": true; }; "openOnEnter": { "alias": "openOnEnter"; "required": false; "isSignal": true; }; "selectableGroup": { "alias": "selectableGroup"; "required": false; "isSignal": true; }; "selectableGroupAsModel": { "alias": "selectableGroupAsModel"; "required": false; "isSignal": true; }; "clearOnBackspace": { "alias": "clearOnBackspace"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "searchWhileComposing": { "alias": "searchWhileComposing"; "required": false; "isSignal": true; }; "minTermLength": { "alias": "minTermLength"; "required": false; "isSignal": true; }; "editableSearchTerm": { "alias": "editableSearchTerm"; "required": false; "isSignal": true; }; "typeToSearchText": { "alias": "typeToSearchText"; "required": false; "isSignal": true; }; "addTagText": { "alias": "addTagText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "clearAllText": { "alias": "clearAllText"; "required": false; "isSignal": true; }; "notFoundText": { "alias": "notFoundText"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
1585
1457
  }
1586
1458
 
1459
+ /** Property name or function that reads a value from an item. */
1460
+ type AcpSearchSelectAccessor<T, R> = keyof T | ((item: T) => R);
1461
+ /** Context of the `#option` template. */
1462
+ interface AcpSearchSelectOptionContext<T> {
1463
+ $implicit: T;
1464
+ group: T | null;
1465
+ }
1466
+ /** Payload of `optionSelected`. */
1467
+ interface AcpSearchSelectSelection<T, V = unknown> {
1468
+ value: V;
1469
+ item: T;
1470
+ group: T | null;
1471
+ }
1472
+
1473
+ interface OptionVm<T> {
1474
+ key: string;
1475
+ label: string;
1476
+ value: unknown;
1477
+ source: T;
1478
+ group: T | null;
1479
+ }
1480
+ /** `label === null` holds loose options rendered without `mat-optgroup`. */
1481
+ interface GroupVm<T> {
1482
+ label: string | null;
1483
+ options: OptionVm<T>[];
1484
+ }
1485
+ /** Matches `1` with `'1'`, useful when ids come as strings from forms or query params. */
1486
+ declare const acpSearchSelectLooseEquals: (a: unknown, b: unknown) => boolean;
1487
+ /** Lowercase and strip accents, so "camion" matches "Camión". */
1488
+ declare const acpSearchSelectNormalize: (text: string) => string;
1489
+ /**
1490
+ * Searchable select built on `mat-autocomplete`. Accepts flat or one-level tree lists:
1491
+ * an item whose `children` is an array renders as a group.
1492
+ * Works with `ngModel`, reactive forms and `[(value)]`.
1493
+ */
1494
+ declare class AcpSearchSelect<T = any> implements ControlValueAccessor, DoCheck {
1495
+ private readonly document;
1496
+ private readonly ngControl;
1497
+ private readonly parentForm;
1498
+ private readonly parentFormGroup;
1499
+ readonly items: _angular_core.InputSignal<T[] | null | undefined>;
1500
+ readonly bindLabel: _angular_core.InputSignal<AcpSearchSelectAccessor<T, string>>;
1501
+ readonly bindValue: _angular_core.InputSignal<AcpSearchSelectAccessor<T, unknown>>;
1502
+ readonly children: _angular_core.InputSignal<AcpSearchSelectAccessor<T, T[] | undefined>>;
1503
+ readonly groupLabel: _angular_core.InputSignal<AcpSearchSelectAccessor<T, string>>;
1504
+ readonly compareWith: _angular_core.InputSignal<(a: unknown, b: unknown) => boolean>;
1505
+ /** Custom match. Receives the item and the normalized query. */
1506
+ readonly filterFn: _angular_core.InputSignal<((item: T, query: string) => boolean) | null>;
1507
+ /** Set to `false` when `items` already come filtered from the server (see `searchChange`). */
1508
+ readonly localFilter: _angular_core.InputSignalWithTransform<boolean, unknown>;
1509
+ /** Value written when the field is cleared, e.g. `0` for "all". */
1510
+ readonly emptyValue: _angular_core.InputSignal<unknown>;
1511
+ readonly label: _angular_core.InputSignal<string>;
1512
+ readonly placeholder: _angular_core.InputSignal<string>;
1513
+ readonly hint: _angular_core.InputSignal<string>;
1514
+ readonly errorText: _angular_core.InputSignal<string>;
1515
+ readonly noResultsText: _angular_core.InputSignal<string>;
1516
+ readonly loadingText: _angular_core.InputSignal<string>;
1517
+ readonly clearLabel: _angular_core.InputSignal<string>;
1518
+ readonly appearance: _angular_core.InputSignal<MatFormFieldAppearance>;
1519
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
1520
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1521
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1522
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1523
+ readonly value: _angular_core.ModelSignal<unknown>;
1524
+ readonly optionSelected: _angular_core.OutputEmitterRef<AcpSearchSelectSelection<T, unknown>>;
1525
+ readonly cleared: _angular_core.OutputEmitterRef<void>;
1526
+ /** Raw text typed by the user; debounce it in the consumer for server-side search. */
1527
+ readonly searchChange: _angular_core.OutputEmitterRef<string>;
1528
+ private readonly input;
1529
+ private readonly trigger;
1530
+ private readonly inputEl;
1531
+ readonly optionTemplate: _angular_core.Signal<TemplateRef<AcpSearchSelectOptionContext<T>> | undefined>;
1532
+ /** Text typed by the user; `null` while not searching. */
1533
+ protected readonly query: _angular_core.WritableSignal<string | null>;
1534
+ private readonly formDisabled;
1535
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
1536
+ private onChange;
1537
+ private onTouched;
1538
+ protected readonly errorStateMatcher: ErrorStateMatcher;
1539
+ constructor();
1540
+ /** The inner `matInput` has no `NgControl`, so it never refreshes its error state by itself. */
1541
+ ngDoCheck(): void;
1542
+ private readonly groups;
1543
+ protected readonly filteredGroups: _angular_core.Signal<GroupVm<T>[]>;
1544
+ private readonly selected;
1545
+ protected readonly text: _angular_core.Signal<string>;
1546
+ protected readonly hasValue: _angular_core.Signal<boolean>;
1547
+ protected readonly displayWith: (option: OptionVm<T> | string | null) => string;
1548
+ /** Clears the selection and the search text. */
1549
+ clear(): void;
1550
+ protected selectAll(event: Event): void;
1551
+ protected onInput(event: Event): void;
1552
+ /** Leaving the field without picking drops the typed text and shows the selection again. */
1553
+ protected onBlur(): void;
1554
+ /** The panel also closes while typing (e.g. no results yet); keep the text in that case. */
1555
+ protected onClosed(): void;
1556
+ protected onSelected(event: MatAutocompleteSelectedEvent): void;
1557
+ writeValue(value: unknown): void;
1558
+ registerOnChange(fn: (value: unknown) => void): void;
1559
+ registerOnTouched(fn: () => void): void;
1560
+ setDisabledState(isDisabled: boolean): void;
1561
+ private setValue;
1562
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpSearchSelect<any>, never>;
1563
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AcpSearchSelect<any>, "acp-search-select", ["acpSearchSelect"], { "items": { "alias": "items"; "required": true; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "children": { "alias": "children"; "required": false; "isSignal": true; }; "groupLabel": { "alias": "groupLabel"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "localFilter": { "alias": "localFilter"; "required": false; "isSignal": true; }; "emptyValue": { "alias": "emptyValue"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "optionSelected": "optionSelected"; "cleared": "cleared"; "searchChange": "searchChange"; }, ["optionTemplate"], never, true, never>;
1564
+ }
1565
+
1587
1566
  declare class UserIcon {
1588
1567
  size: _angular_core.InputSignal<string>;
1589
1568
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserIcon, never>;
@@ -4051,53 +4030,47 @@ declare class AcpCheckboxGroup implements AfterViewInit, OnDestroy, ControlValue
4051
4030
  }
4052
4031
 
4053
4032
  /**
4054
- * Card appearance variants
4033
+ * Card appearance variants. Mirrors Angular Material's `MatCardAppearance`
4034
+ * (`elevated` maps to Material's `raised`).
4055
4035
  */
4056
- type AcpCardAppearance = 'default' | 'outlined' | 'elevated' | 'filled' | 'interactive' | 'compact';
4036
+ type AcpCardAppearance = 'elevated' | 'outlined' | 'filled';
4057
4037
  /**
4058
- * Card elevation levels (Material Design)
4038
+ * Card elevation levels, mapped to `--mat-sys-level{n}`. Only applies to `elevated` cards.
4059
4039
  */
4060
4040
  type AcpCardElevation = 0 | 1 | 2 | 3 | 4 | 5;
4061
4041
  /**
4062
- * Card padding options
4042
+ * Content padding options.
4063
4043
  */
4064
4044
  type AcpCardPadding = 'none' | 'small' | 'medium' | 'large';
4065
4045
  /**
4066
- * Card background color variants (Material Design)
4046
+ * Card color variants based on Material Design 3 system roles.
4067
4047
  */
4068
- type AcpCardBackgroundColor = 'primary' | 'primary-container' | 'secondary' | 'secondary-container' | 'error' | 'error-container' | 'surface' | 'surface-variant' | 'surface-container-highest' | 'surface-container-high' | 'surface-container' | 'surface-container-low' | 'surface-container-lowest' | 'inverse-surface' | 'disabled-bg';
4048
+ type AcpCardColor = 'primary' | 'primary-container' | 'secondary' | 'secondary-container' | 'tertiary' | 'tertiary-container' | 'error' | 'error-container' | 'surface' | 'surface-variant' | 'surface-container-highest' | 'surface-container-high' | 'surface-container' | 'surface-container-low' | 'surface-container-lowest' | 'inverse-surface' | 'disabled-bg';
4069
4049
  /**
4070
- * Card image aspect ratio
4050
+ * Media aspect ratio.
4071
4051
  */
4072
4052
  type AcpCardImageRatio = '1:1' | '4:3' | '16:9' | '21:9' | '3:2' | '3:4';
4073
4053
  /**
4074
- * Card configuration interface
4054
+ * Horizontal alignment of the actions slot (same as `mat-card-actions[align]`).
4055
+ */
4056
+ type AcpCardActionsAlign = 'start' | 'end';
4057
+ /**
4058
+ * Application-wide or subtree defaults for `acp-card`.
4059
+ * Provide them with `provideAcpCardDefaults()` or the `ACP_CARD_DEFAULT_OPTIONS` token.
4060
+ * Inputs set on an individual card always win.
4075
4061
  */
4076
4062
  interface AcpCardConfig {
4077
4063
  appearance?: AcpCardAppearance;
4078
4064
  elevation?: AcpCardElevation;
4079
4065
  rounded?: boolean | number;
4080
- hover?: boolean;
4081
- clickable?: boolean;
4082
- outlined?: boolean;
4083
- loading?: boolean;
4084
- disabled?: boolean;
4085
4066
  padding?: AcpCardPadding;
4067
+ color?: AcpCardColor;
4068
+ hoverable?: boolean;
4069
+ actionsAlign?: AcpCardActionsAlign;
4086
4070
  imageRatio?: AcpCardImageRatio;
4087
- fullHeight?: boolean;
4088
- fullWidth?: boolean;
4089
- }
4090
- /**
4091
- * Card badge configuration
4092
- */
4093
- interface AcpCardBadge {
4094
- content: string | number;
4095
- color?: 'primary' | 'secondary' | 'accent' | 'error' | 'success' | 'warning' | 'info';
4096
- position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
4097
4071
  }
4098
4072
  /**
4099
- * Pass Through options for card sections
4100
- * Allows customization of classes, styles, and attributes for each section
4073
+ * Pass-through classes and styles for a single card section.
4101
4074
  */
4102
4075
  interface AcpCardPassThroughSection {
4103
4076
  class?: string | string[] | Record<string, boolean>;
@@ -4116,135 +4089,209 @@ interface AcpCardPassThroughOptions {
4116
4089
  footer?: AcpCardPassThroughSection | undefined;
4117
4090
  }
4118
4091
 
4092
+ /**
4093
+ * Defaults for every `acp-card` in the injector tree. Mirrors `MAT_CARD_CONFIG`.
4094
+ * Can also be provided at component level: `providers: [{ provide: ACP_CARD_DEFAULT_OPTIONS, useValue }]`.
4095
+ */
4096
+ declare const ACP_CARD_DEFAULT_OPTIONS: InjectionToken<AcpCardConfig>;
4097
+ /**
4098
+ * Registers application-wide card defaults, e.g.:
4099
+ * `provideAcpCardDefaults({ appearance: 'outlined', rounded: 16 })`.
4100
+ */
4101
+ declare function provideAcpCardDefaults(defaults: AcpCardConfig): EnvironmentProviders;
4102
+
4103
+ /**
4104
+ * Typed slot directives for `acp-card`. Preferred over `#title`-style template refs:
4105
+ * they are type-checked, discoverable and never collide with refs of nested components.
4106
+ *
4107
+ * @example
4108
+ * ```html
4109
+ * <acp-card>
4110
+ * <ng-template acpCardTitle>Order #123</ng-template>
4111
+ * <p>Body</p>
4112
+ * <ng-template acpCardActions><acp-button text="Open" /></ng-template>
4113
+ * </acp-card>
4114
+ * ```
4115
+ */
4116
+ declare class AcpCardHeader {
4117
+ readonly templateRef: TemplateRef<any>;
4118
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardHeader, never>;
4119
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardHeader, "ng-template[acpCardHeader]", never, {}, {}, never, never, true, never>;
4120
+ }
4121
+ declare class AcpCardMedia {
4122
+ readonly templateRef: TemplateRef<any>;
4123
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardMedia, never>;
4124
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardMedia, "ng-template[acpCardMedia]", never, {}, {}, never, never, true, never>;
4125
+ }
4126
+ declare class AcpCardAvatar {
4127
+ readonly templateRef: TemplateRef<any>;
4128
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardAvatar, never>;
4129
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardAvatar, "ng-template[acpCardAvatar]", never, {}, {}, never, never, true, never>;
4130
+ }
4131
+ declare class AcpCardTitle {
4132
+ readonly templateRef: TemplateRef<any>;
4133
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardTitle, never>;
4134
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardTitle, "ng-template[acpCardTitle]", never, {}, {}, never, never, true, never>;
4135
+ }
4136
+ declare class AcpCardSubtitle {
4137
+ readonly templateRef: TemplateRef<any>;
4138
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardSubtitle, never>;
4139
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardSubtitle, "ng-template[acpCardSubtitle]", never, {}, {}, never, never, true, never>;
4140
+ }
4141
+ declare class AcpCardActions {
4142
+ readonly templateRef: TemplateRef<any>;
4143
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardActions, never>;
4144
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardActions, "ng-template[acpCardActions]", never, {}, {}, never, never, true, never>;
4145
+ }
4146
+ declare class AcpCardFooter {
4147
+ readonly templateRef: TemplateRef<any>;
4148
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCardFooter, never>;
4149
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AcpCardFooter, "ng-template[acpCardFooter]", never, {}, {}, never, never, true, never>;
4150
+ }
4151
+ declare const ACP_CARD_SLOTS: readonly [typeof AcpCardHeader, typeof AcpCardMedia, typeof AcpCardAvatar, typeof AcpCardTitle, typeof AcpCardSubtitle, typeof AcpCardActions, typeof AcpCardFooter];
4152
+
4119
4153
  declare class AcpCard {
4120
- readonly appearance: _angular_core.InputSignal<AcpCardAppearance>;
4121
- readonly elevation: _angular_core.InputSignal<AcpCardElevation>;
4122
- readonly rounded: _angular_core.InputSignal<number | boolean>;
4123
- readonly hover: _angular_core.InputSignalWithTransform<boolean, unknown>;
4154
+ private readonly defaults;
4155
+ readonly title: _angular_core.InputSignal<string | undefined>;
4156
+ readonly subtitle: _angular_core.InputSignal<string | undefined>;
4157
+ readonly appearance: _angular_core.InputSignal<AcpCardAppearance | undefined>;
4158
+ readonly color: _angular_core.InputSignal<AcpCardColor | undefined>;
4159
+ readonly elevation: _angular_core.InputSignal<AcpCardElevation | undefined>;
4160
+ /** `true` = theme radius, `false` = square, number = radius in px. */
4161
+ readonly rounded: _angular_core.InputSignal<number | boolean | undefined>;
4162
+ readonly padding: _angular_core.InputSignal<AcpCardPadding | undefined>;
4163
+ readonly hoverable: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
4164
+ readonly actionsAlign: _angular_core.InputSignal<AcpCardActionsAlign | undefined>;
4165
+ /** Aspect ratio applied to the media slot. Media keeps its natural size when unset. */
4166
+ readonly imageRatio: _angular_core.InputSignal<AcpCardImageRatio | undefined>;
4124
4167
  readonly clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
4125
- readonly outlined: _angular_core.InputSignalWithTransform<boolean, unknown>;
4126
4168
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
4127
- readonly padding: _angular_core.InputSignal<AcpCardPadding>;
4128
- readonly imageRatio: _angular_core.InputSignal<AcpCardImageRatio>;
4169
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
4129
4170
  readonly fullHeight: _angular_core.InputSignalWithTransform<boolean, unknown>;
4130
4171
  readonly fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
4131
- readonly backgroundColor: _angular_core.InputSignal<AcpCardBackgroundColor | undefined>;
4172
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
4132
4173
  readonly passThrough: _angular_core.InputSignal<AcpCardPassThroughOptions>;
4133
- headerTemplate: TemplateRef<any>;
4134
- mediaTemplate: TemplateRef<any>;
4135
- avatarTemplate: TemplateRef<any>;
4136
- titleTemplate: TemplateRef<any>;
4137
- subtitleTemplate: TemplateRef<any>;
4138
- actionsTemplate: TemplateRef<any>;
4139
- footerTemplate: TemplateRef<any>;
4140
- get role(): string;
4141
- get tabindex(): string | null;
4142
- get ariaDisabled(): string | null;
4174
+ /** Emitted on click, Enter or Space when `clickable` and not disabled/loading. */
4175
+ readonly clicked: _angular_core.OutputEmitterRef<MouseEvent | KeyboardEvent>;
4176
+ private readonly headerDir;
4177
+ private readonly mediaDir;
4178
+ private readonly avatarDir;
4179
+ private readonly titleDir;
4180
+ private readonly subtitleDir;
4181
+ private readonly actionsDir;
4182
+ private readonly footerDir;
4183
+ private readonly headerRef;
4184
+ private readonly mediaRef;
4185
+ private readonly avatarRef;
4186
+ private readonly titleRef;
4187
+ private readonly subtitleRef;
4188
+ private readonly actionsRef;
4189
+ private readonly footerRef;
4190
+ readonly headerTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4191
+ readonly mediaTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4192
+ readonly avatarTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4193
+ readonly titleTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4194
+ readonly subtitleTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4195
+ readonly actionsTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4196
+ readonly footerTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
4197
+ readonly hasTitleGroup: _angular_core.Signal<boolean>;
4198
+ readonly resolvedAppearance: _angular_core.Signal<AcpCardAppearance>;
4199
+ readonly matAppearance: _angular_core.Signal<"filled" | "outlined" | "raised">;
4200
+ readonly resolvedPadding: _angular_core.Signal<AcpCardPadding>;
4201
+ readonly resolvedColor: _angular_core.Signal<AcpCardColor | undefined>;
4202
+ readonly resolvedHoverable: _angular_core.Signal<boolean>;
4203
+ readonly resolvedActionsAlign: _angular_core.Signal<AcpCardActionsAlign>;
4204
+ readonly mediaRatio: _angular_core.Signal<string | undefined>;
4205
+ readonly interactive: _angular_core.Signal<boolean>;
4206
+ readonly shape: _angular_core.Signal<string | null>;
4207
+ readonly elevationShadow: _angular_core.Signal<string | null>;
4208
+ readonly hostClasses: _angular_core.Signal<string>;
4209
+ onActivate(event: MouseEvent): void;
4210
+ onKeyActivate(event: Event): void;
4143
4211
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpCard, never>;
4144
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AcpCard, "acp-card", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "hover": { "alias": "hover"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "outlined": { "alias": "outlined"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "imageRatio": { "alias": "imageRatio"; "required": false; "isSignal": true; }; "fullHeight": { "alias": "fullHeight"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "passThrough": { "alias": "passThrough"; "required": false; "isSignal": true; }; }, {}, ["headerTemplate", "mediaTemplate", "avatarTemplate", "titleTemplate", "subtitleTemplate", "actionsTemplate", "footerTemplate"], ["*"], true, never>;
4212
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AcpCard, "acp-card", ["acpCard"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "actionsAlign": { "alias": "actionsAlign"; "required": false; "isSignal": true; }; "imageRatio": { "alias": "imageRatio"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullHeight": { "alias": "fullHeight"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "passThrough": { "alias": "passThrough"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, ["headerDir", "mediaDir", "avatarDir", "titleDir", "subtitleDir", "actionsDir", "footerDir", "headerRef", "mediaRef", "avatarRef", "titleRef", "subtitleRef", "actionsRef", "footerRef"], ["*"], true, never>;
4145
4213
  }
4146
4214
 
4147
- type AcpKpiCardColor = 'primary' | 'secondary' | 'success' | 'success-light' | 'warning' | 'warning-light' | 'error' | 'error-light' | 'info' | 'info-light' | 'neutral' | 'white' | 'custom';
4215
+ type AcpKpiCardColor = 'primary' | 'secondary' | 'success' | 'success-light' | 'warning' | 'warning-light' | 'error' | 'error-light' | 'info' | 'info-light' | 'neutral' | 'surface' | 'custom';
4148
4216
  type AcpKpiCardVariant = 'default' | 'elevated' | 'outlined' | 'filled' | 'tonal';
4149
4217
  type AcpKpiCardSize = 'xs' | 'sm' | 'md' | 'lg';
4218
+ /** Horizontal alignment of header, value and text. */
4219
+ type AcpKpiCardAlign = 'start' | 'center' | 'end';
4220
+ /** Direction of the change. `none` hides the trend icon. */
4150
4221
  type AcpKpiCardTrend = 'up' | 'down' | 'neutral' | 'none';
4222
+ /** Whether the change is good or bad for the business; drives the delta badge color. */
4223
+ type AcpKpiCardTrendSentiment = 'positive' | 'negative' | 'neutral';
4151
4224
  interface AcpKpiCardTrendConfig {
4152
4225
  icon: string;
4153
- color: AcpKpiCardColor;
4154
4226
  ariaLabel: string;
4155
4227
  }
4156
- interface AcpKpiCardLayout {
4157
- title: boolean;
4158
- subtitle: boolean;
4159
- value: boolean;
4160
- description: boolean;
4161
- trend: boolean;
4162
- percentage: boolean;
4163
- icon: boolean;
4164
- avatar: boolean;
4165
- actions: boolean;
4166
- footer: boolean;
4167
- progress: boolean;
4168
- }
4169
4228
 
4170
4229
  declare class AcpKpiCard {
4171
- title: _angular_core.InputSignal<string | undefined>;
4172
- subtitle: _angular_core.InputSignal<string | undefined>;
4173
- value: _angular_core.InputSignal<string | number | undefined>;
4174
- description: _angular_core.InputSignal<string | undefined>;
4175
- footer: _angular_core.InputSignal<string | undefined>;
4176
- variant: _angular_core.InputSignal<AcpKpiCardVariant>;
4177
- color: _angular_core.InputSignal<AcpKpiCardColor>;
4178
- size: _angular_core.InputSignal<AcpKpiCardSize>;
4179
- icon: _angular_core.InputSignal<string | undefined>;
4180
- svgIcon: _angular_core.InputSignal<string | undefined>;
4181
- avatar: _angular_core.InputSignal<string | undefined>;
4182
- avatarInitials: _angular_core.InputSignal<string | undefined>;
4183
- trend: _angular_core.InputSignal<AcpKpiCardTrend>;
4184
- percentage: _angular_core.InputSignal<string | number | undefined>;
4185
- percentageFormat: _angular_core.InputSignal<"number" | "percent">;
4186
- progress: _angular_core.InputSignal<number | undefined>;
4187
- progressColor: _angular_core.InputSignal<AcpKpiCardColor>;
4188
- loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
4189
- disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
4190
- clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
4191
- selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
4192
- routerLink: _angular_core.InputSignal<string | any[] | null>;
4193
- href: _angular_core.InputSignal<string | null>;
4194
- ariaLabel: _angular_core.InputSignal<string | undefined>;
4195
- tooltip: _angular_core.InputSignal<string | undefined>;
4196
- clicked: _angular_core.OutputEmitterRef<void>;
4197
- actionClicked: _angular_core.OutputEmitterRef<string>;
4198
- isHovered: _angular_core.WritableSignal<boolean>;
4199
- iconTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4200
- avatarTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4201
- footerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4202
- actionsTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4203
- isTrending: _angular_core.Signal<boolean>;
4204
- trendConfig: _angular_core.Signal<_acontplus_ng_components.AcpKpiCardTrendConfig>;
4205
- effectiveIcon: _angular_core.Signal<string | undefined>;
4206
- trendColor: _angular_core.Signal<AcpKpiCardColor>;
4207
- hasHeader: _angular_core.Signal<boolean>;
4208
- hasFooter: _angular_core.Signal<boolean>;
4209
- hasActions: _angular_core.Signal<boolean>;
4210
- hostClasses: _angular_core.Signal<string>;
4230
+ private readonly defaultLocale;
4231
+ readonly title: _angular_core.InputSignal<string | undefined>;
4232
+ readonly subtitle: _angular_core.InputSignal<string | undefined>;
4233
+ /** Numbers are formatted with `Intl.NumberFormat`; strings are shown as-is. */
4234
+ readonly value: _angular_core.InputSignal<string | number | null | undefined>;
4235
+ readonly valueFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
4236
+ readonly prefix: _angular_core.InputSignal<string | undefined>;
4237
+ readonly suffix: _angular_core.InputSignal<string | undefined>;
4238
+ readonly description: _angular_core.InputSignal<string | undefined>;
4239
+ readonly footer: _angular_core.InputSignal<string | undefined>;
4240
+ /** BCP 47 locale for number formatting. Defaults to the app `LOCALE_ID`. */
4241
+ readonly locale: _angular_core.InputSignal<string | undefined>;
4242
+ readonly variant: _angular_core.InputSignal<AcpKpiCardVariant>;
4243
+ readonly color: _angular_core.InputSignal<AcpKpiCardColor>;
4244
+ readonly size: _angular_core.InputSignal<AcpKpiCardSize>;
4245
+ readonly align: _angular_core.InputSignal<AcpKpiCardAlign>;
4246
+ readonly icon: _angular_core.InputSignal<string | undefined>;
4247
+ readonly svgIcon: _angular_core.InputSignal<string | undefined>;
4248
+ readonly avatar: _angular_core.InputSignal<string | undefined>;
4249
+ readonly avatarInitials: _angular_core.InputSignal<string | undefined>;
4250
+ readonly percentage: _angular_core.InputSignal<string | number | null | undefined>;
4251
+ readonly percentageFormat: _angular_core.InputSignal<"number" | "percent">;
4252
+ /** Direction of the change. Inferred from the sign of `percentage` when unset. */
4253
+ readonly trend: _angular_core.InputSignal<AcpKpiCardTrend | undefined>;
4254
+ /** Invert the badge color for metrics where a decrease is good (costs, churn, errors). */
4255
+ readonly lowerIsBetter: _angular_core.InputSignalWithTransform<boolean, unknown>;
4256
+ /** Comparison context shown next to the change, e.g. "vs last month". */
4257
+ readonly trendLabel: _angular_core.InputSignal<string | undefined>;
4258
+ /** Show the trend arrow inside the change badge. */
4259
+ readonly showTrendIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
4260
+ readonly progress: _angular_core.InputSignal<number | undefined>;
4261
+ readonly progressColor: _angular_core.InputSignal<AcpKpiCardColor | undefined>;
4262
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
4263
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
4264
+ readonly clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
4265
+ readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
4266
+ readonly routerLink: _angular_core.InputSignal<string | any[] | null>;
4267
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
4268
+ readonly menuAriaLabel: _angular_core.InputSignal<string>;
4269
+ readonly tooltip: _angular_core.InputSignal<string | undefined>;
4270
+ /** Emitted on click, Enter or Space when `clickable`. */
4271
+ readonly clicked: _angular_core.OutputEmitterRef<void>;
4272
+ readonly iconTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4273
+ readonly avatarTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4274
+ readonly footerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4275
+ readonly actionsTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
4276
+ private readonly resolvedLocale;
4277
+ readonly formattedValue: _angular_core.Signal<string | null>;
4278
+ readonly formattedDelta: _angular_core.Signal<string | null>;
4279
+ readonly resolvedTrend: _angular_core.Signal<AcpKpiCardTrend>;
4280
+ readonly trendConfig: _angular_core.Signal<_acontplus_ng_components.AcpKpiCardTrendConfig>;
4281
+ readonly sentiment: _angular_core.Signal<AcpKpiCardTrendSentiment>;
4282
+ readonly hasHeader: _angular_core.Signal<boolean>;
4283
+ readonly hasFooter: _angular_core.Signal<boolean>;
4284
+ readonly interactive: _angular_core.Signal<boolean>;
4285
+ readonly hostClasses: _angular_core.Signal<string>;
4211
4286
  onCardClick(): void;
4212
- onActionClick(action: string, event: Event): void;
4213
- onMouseEnter(): void;
4214
- onMouseLeave(): void;
4287
+ onCardKey(event: Event): void;
4215
4288
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AcpKpiCard, never>;
4216
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AcpKpiCard, "acp-kpi-card", ["acpKpiCard"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "footer": { "alias": "footer"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "svgIcon": { "alias": "svgIcon"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "percentage": { "alias": "percentage"; "required": false; "isSignal": true; }; "percentageFormat": { "alias": "percentageFormat"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "progressColor": { "alias": "progressColor"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "actionClicked": "actionClicked"; }, ["iconTemplate", "avatarTemplate", "footerTemplate", "actionsTemplate"], never, true, never>;
4289
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AcpKpiCard, "acp-kpi-card", ["acpKpiCard"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "footer": { "alias": "footer"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "svgIcon": { "alias": "svgIcon"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "percentage": { "alias": "percentage"; "required": false; "isSignal": true; }; "percentageFormat": { "alias": "percentageFormat"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "lowerIsBetter": { "alias": "lowerIsBetter"; "required": false; "isSignal": true; }; "trendLabel": { "alias": "trendLabel"; "required": false; "isSignal": true; }; "showTrendIcon": { "alias": "showTrendIcon"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "progressColor": { "alias": "progressColor"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "menuAriaLabel": { "alias": "menuAriaLabel"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, ["iconTemplate", "avatarTemplate", "footerTemplate", "actionsTemplate"], never, true, never>;
4217
4290
  }
4218
4291
 
4219
4292
  declare const KPI_CARD_TREND_CONFIGS: Record<AcpKpiCardTrend, AcpKpiCardTrendConfig>;
4220
- declare function formatValue(value: number | string, format?: string): string;
4221
-
4222
- declare const KPI_CARD_TOKENS: {
4223
- SIZE_SM: string;
4224
- SIZE_MD: string;
4225
- SIZE_LG: string;
4226
- VARIANT_DEFAULT: string;
4227
- VARIANT_ELEVATED: string;
4228
- VARIANT_OUTLINED: string;
4229
- VARIANT_FILLED: string;
4230
- VARIANT_TONAL: string;
4231
- COLOR_PRIMARY: string;
4232
- COLOR_SECONDARY: string;
4233
- COLOR_SUCCESS: string;
4234
- COLOR_SUCCESS_LIGHT: string;
4235
- COLOR_WARNING: string;
4236
- COLOR_WARNING_LIGHT: string;
4237
- COLOR_ERROR: string;
4238
- COLOR_ERROR_LIGHT: string;
4239
- COLOR_INFO: string;
4240
- COLOR_INFO_LIGHT: string;
4241
- COLOR_NEUTRAL: string;
4242
- COLOR_CUSTOM: string;
4243
- TREND_UP: string;
4244
- TREND_DOWN: string;
4245
- TREND_NEUTRAL: string;
4246
- TREND_NONE: string;
4247
- };
4293
+ /** Infers the trend direction from a numeric or numeric-string delta (`'+12.5'`, `-3`). */
4294
+ declare function inferKpiTrend(delta: number | string | null | undefined): AcpKpiCardTrend;
4248
4295
 
4249
4296
  declare class Branding {
4250
4297
  readonly logo: _angular_core.InputSignal<string | null>;
@@ -5394,5 +5441,5 @@ declare class StatusDisplayPipe implements PipeTransform {
5394
5441
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<StatusDisplayPipe, "statusDisplay", true>;
5395
5442
  }
5396
5443
 
5397
- export { ACP_ACTIVE_DATE_DEBOUNCE, ACP_BADGE_COLORS, ACP_BADGE_SHAPES, ACP_BADGE_SIZES, ACP_BADGE_VARIANTS, ACP_DATE_OPTION_TYPE, ACP_DEFAULT_DATE_OPTIONS, ACP_DIALOG_ACTIONS, ACP_DIALOG_DATA, ACP_DIALOG_DEFAULT_OPTIONS, ACP_DIALOG_TITLEBAR, ACP_DRAWER_DATA, ACP_DRAWER_DEFAULT_OPTIONS, ACP_POPOVER_CONTENT, ACP_POPOVER_DEFAULT_OPTIONS, ACP_POPOVER_SCROLL_STRATEGY, AcpAlert, AcpBadge, AcpButton, AcpCard, AcpCheckboxBase, AcpCheckboxGroup, AcpContextMenu, AcpContextMenuDirective, AcpContextMenuPanel, AcpContextMenuService, AcpDateRangeInput, AcpDialog, AcpDialogActions, AcpDialogContainer, AcpDialogContent, AcpDialogRef, AcpDialogService, AcpDialogTitlebar, AcpDrawer, AcpDrawerConfig, AcpDrawerContainer, AcpDrawerRef, AcpHeader, AcpHeaderActions, AcpHeaderBranding, AcpHeaderCenter, AcpHeaderEnd, AcpHeaderLanguage, AcpHeaderNotifications, AcpHeaderStart, AcpHeaderTheme, AcpHeaderWorkspace, AcpKpiCard, AcpPopover, AcpPopoverContent, AcpPopoverTarget, AcpPopoverTrigger, AcpSelectDateOption, AcpShellLayout, AcpShellSlotHeader, AcpShellSlotSidebar, AcpShellSlotSidebarFooter, AcpShellSlotToolbar, AcpShellSlotTopmenu, AcpSidebar, AcpSidebarBranding, AcpSidebarContent, AcpSidebarHeader, AcpSidebarToggle, AcpSidebarUserPanel, AcpTopmenu, AcpTopmenuPanel, AdvancedDialogService, Branding, Button, CONTEXT_MENU_DATA, CONTEXT_MENU_ITEMS, DATA_GRID_DEFAULT_OPTIONS, DataGrid, DateRangePicker, DialogWrapper, DialogZIndexService, DynamicCard, DynamicSelect, GetTotalPipe, IconRegistryService, InputChip, KPI_CARD_TOKENS, KPI_CARD_TREND_CONFIGS, KeyboardNavigationService, NavAccordionDirective, NavAccordionItemDirective, NavAccordionToggleDirective, OverlayService, Pagination, SidemenuComponent, Spinner, StatusDisplayPipe, SvgIcon, TREND_CONFIGS, TabulatorTable, ThemeSwitcher, ThemeToggle, ToUpperCase, UserIcon, UserMenu, UserPanel, _AcpPopoverContentBase, formatValue, provideAcpDialogDefaults };
5398
- export type { AcpAlertType, AcpBadgeColor, AcpBadgeShape, AcpBadgeSize, AcpBadgeTrend, AcpBadgeTrendConfig, AcpBadgeVariant, AcpButtonAppearance$1 as AcpButtonAppearance, AcpButtonColor$1 as AcpButtonColor, AcpButtonSize, AcpButtonType$1 as AcpButtonType, AcpButtonVariant$1 as AcpButtonVariant, AcpCardAppearance, AcpCardBackgroundColor, AcpCardBadge, AcpCardConfig, AcpCardElevation, AcpCardImageRatio, AcpCardPadding, AcpCardPassThroughOptions, AcpCardPassThroughSection, AcpCheckboxGroupOption, AcpContextMenuItem, AcpContextMenuItemContext, AcpContextMenuOpenConfig, AcpContextMenuPosition, AcpContextMenuRef, AcpContextMenuTriggerConfig, AcpDialogAction, AcpDialogActionClick, AcpDialogActionState, AcpDialogActionsOutlet, AcpDialogCloseConfig, AcpDialogComponentLoader, AcpDialogConfig, AcpDialogContainerData, AcpDialogContentFunction, AcpDialogContentInput, AcpDialogDirection, AcpDialogHeaderConfig, AcpDialogResolvedContent, AcpDialogRestoreFocus, AcpDialogSize, AcpDialogTitlebarOutlet, AcpDir, AcpHeaderAction, AcpHeaderActionEvent, AcpHeaderBrandingConfig, AcpHeaderConfig, AcpHeaderPos, AcpHeaderUserMenuConfig, AcpHeaderUserMenuItem, AcpHeaderUserMenuItemEvent, AcpKpiCardColor, AcpKpiCardLayout, AcpKpiCardSize, AcpKpiCardTrend, AcpKpiCardTrendConfig, AcpKpiCardVariant, AcpLanguageItem, AcpNavPos, AcpNotificationItem, AcpPopoverDefaultOptions, AcpPopoverPanel, AcpPopoverPosition, AcpPopoverPositionEnd, AcpPopoverPositionStart, AcpPopoverTriggerEvent, AcpSelectedDateEvent, AcpThemeVariant, AcpTopmenuChildItem, AcpTopmenuItem, AcpTopmenuPermissions, AcpTopmenuTag, AcpWorkspaceItem, AutoFocusTarget, DataGridButtonType, DataGridCellTemplate, DataGridColumn, DataGridColumnButton, DataGridColumnButtonBadge, DataGridColumnButtonPop, DataGridColumnButtonTooltip, DataGridColumnPinOption, DataGridColumnPinValue, DataGridColumnTag, DataGridColumnTagValue, DataGridColumnType, DataGridColumnTypeParameter, DataGridDefaultOptions, DataGridMenuItem, DataGridRowClassFormatter, DataGridRowSelectionFormatter, DataGridSortProp, DateRangePickerOptions, DateRangeValue, DialogSize, DialogType, DialogWrapperConfig, DrawerPosition, FocusableElement, IAcpSelectDateOption, IconRegistryConfig, MatCustomDialogConfig, MenuItem, MenuPermissions, MenuTag, PaginationOptions, PopoverCloseReason, TabulatorColumn, TabulatorConfig, TabulatorEventHandlers, TabulatorTheme, UserMenuItem, UserMenuSelectedEvent, UserProfile };
5444
+ export { ACP_ACTIVE_DATE_DEBOUNCE, ACP_BADGE_COLORS, ACP_BADGE_SHAPES, ACP_BADGE_SIZES, ACP_BADGE_VARIANTS, ACP_CARD_DEFAULT_OPTIONS, ACP_CARD_SLOTS, ACP_DATE_OPTION_TYPE, ACP_DEFAULT_DATE_OPTIONS, ACP_DIALOG_ACTIONS, ACP_DIALOG_DATA, ACP_DIALOG_DEFAULT_OPTIONS, ACP_DIALOG_TITLEBAR, ACP_DRAWER_DATA, ACP_DRAWER_DEFAULT_OPTIONS, ACP_POPOVER_CONTENT, ACP_POPOVER_DEFAULT_OPTIONS, ACP_POPOVER_SCROLL_STRATEGY, AcpAlert, AcpBadge, AcpButton, AcpCard, AcpCardActions, AcpCardAvatar, AcpCardFooter, AcpCardHeader, AcpCardMedia, AcpCardSubtitle, AcpCardTitle, AcpCheckboxBase, AcpCheckboxGroup, AcpContextMenu, AcpContextMenuDirective, AcpContextMenuPanel, AcpContextMenuService, AcpDateRangeInput, AcpDialog, AcpDialogActions, AcpDialogContainer, AcpDialogContent, AcpDialogRef, AcpDialogService, AcpDialogTitlebar, AcpDrawer, AcpDrawerConfig, AcpDrawerContainer, AcpDrawerRef, AcpHeader, AcpHeaderActions, AcpHeaderBranding, AcpHeaderCenter, AcpHeaderEnd, AcpHeaderLanguage, AcpHeaderNotifications, AcpHeaderStart, AcpHeaderTheme, AcpHeaderWorkspace, AcpKpiCard, AcpPopover, AcpPopoverContent, AcpPopoverTarget, AcpPopoverTrigger, AcpSearchSelect, AcpSelectDateOption, AcpShellLayout, AcpShellSlotHeader, AcpShellSlotSidebar, AcpShellSlotSidebarFooter, AcpShellSlotToolbar, AcpShellSlotTopmenu, AcpSidebar, AcpSidebarBranding, AcpSidebarContent, AcpSidebarHeader, AcpSidebarToggle, AcpSidebarUserPanel, AcpTopmenu, AcpTopmenuPanel, AdvancedDialogService, Branding, Button, CONTEXT_MENU_DATA, CONTEXT_MENU_ITEMS, DATA_GRID_DEFAULT_OPTIONS, DataGrid, DateRangePicker, DialogWrapper, DialogZIndexService, DynamicSelect, GetTotalPipe, IconRegistryService, InputChip, KPI_CARD_TREND_CONFIGS, KeyboardNavigationService, NavAccordionDirective, NavAccordionItemDirective, NavAccordionToggleDirective, OverlayService, Pagination, SidemenuComponent, Spinner, StatusDisplayPipe, SvgIcon, TREND_CONFIGS, TabulatorTable, ThemeSwitcher, ThemeToggle, ToUpperCase, UserIcon, UserMenu, UserPanel, _AcpPopoverContentBase, acpSearchSelectLooseEquals, acpSearchSelectNormalize, inferKpiTrend, provideAcpCardDefaults, provideAcpDialogDefaults };
5445
+ export type { AcpAlertType, AcpBadgeColor, AcpBadgeShape, AcpBadgeSize, AcpBadgeTrend, AcpBadgeTrendConfig, AcpBadgeVariant, AcpButtonAppearance$1 as AcpButtonAppearance, AcpButtonColor$1 as AcpButtonColor, AcpButtonSize, AcpButtonType$1 as AcpButtonType, AcpButtonVariant$1 as AcpButtonVariant, AcpCardActionsAlign, AcpCardAppearance, AcpCardColor, AcpCardConfig, AcpCardElevation, AcpCardImageRatio, AcpCardPadding, AcpCardPassThroughOptions, AcpCardPassThroughSection, AcpCheckboxGroupOption, AcpContextMenuItem, AcpContextMenuItemContext, AcpContextMenuOpenConfig, AcpContextMenuPosition, AcpContextMenuRef, AcpContextMenuTriggerConfig, AcpDialogAction, AcpDialogActionClick, AcpDialogActionState, AcpDialogActionsOutlet, AcpDialogCloseConfig, AcpDialogComponentLoader, AcpDialogConfig, AcpDialogContainerData, AcpDialogContentFunction, AcpDialogContentInput, AcpDialogDirection, AcpDialogHeaderConfig, AcpDialogResolvedContent, AcpDialogRestoreFocus, AcpDialogSize, AcpDialogTitlebarOutlet, AcpDir, AcpHeaderAction, AcpHeaderActionEvent, AcpHeaderBrandingConfig, AcpHeaderConfig, AcpHeaderPos, AcpHeaderUserMenuConfig, AcpHeaderUserMenuItem, AcpHeaderUserMenuItemEvent, AcpKpiCardAlign, AcpKpiCardColor, AcpKpiCardSize, AcpKpiCardTrend, AcpKpiCardTrendConfig, AcpKpiCardTrendSentiment, AcpKpiCardVariant, AcpLanguageItem, AcpNavPos, AcpNotificationItem, AcpPopoverDefaultOptions, AcpPopoverPanel, AcpPopoverPosition, AcpPopoverPositionEnd, AcpPopoverPositionStart, AcpPopoverTriggerEvent, AcpSearchSelectAccessor, AcpSearchSelectOptionContext, AcpSearchSelectSelection, AcpSelectedDateEvent, AcpThemeVariant, AcpTopmenuChildItem, AcpTopmenuItem, AcpTopmenuPermissions, AcpTopmenuTag, AcpWorkspaceItem, AutoFocusTarget, DataGridButtonType, DataGridCellTemplate, DataGridColumn, DataGridColumnButton, DataGridColumnButtonBadge, DataGridColumnButtonPop, DataGridColumnButtonTooltip, DataGridColumnPinOption, DataGridColumnPinValue, DataGridColumnTag, DataGridColumnTagValue, DataGridColumnType, DataGridColumnTypeParameter, DataGridDefaultOptions, DataGridMenuItem, DataGridRowClassFormatter, DataGridRowSelectionFormatter, DataGridSortProp, DateRangePickerOptions, DateRangeValue, DialogSize, DialogType, DialogWrapperConfig, DrawerPosition, FocusableElement, IAcpSelectDateOption, IconRegistryConfig, MatCustomDialogConfig, MenuItem, MenuPermissions, MenuTag, PaginationOptions, PopoverCloseReason, TabulatorColumn, TabulatorConfig, TabulatorEventHandlers, TabulatorTheme, UserMenuItem, UserMenuSelectedEvent, UserProfile };