@eagami/ui 0.12.0 → 1.0.1

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.
@@ -3,6 +3,11 @@ import { OnDestroy, ElementRef, TemplateRef, AfterViewInit, OnInit } from '@angu
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
  import * as _eagami_ui from '@eagami/ui';
5
5
 
6
+ /**
7
+ * Container for expandable content sections. By default only one item can be
8
+ * open at a time; set `multi` to allow several to stay expanded together.
9
+ * Provides a built-in chevron animation and supports per-item disabling.
10
+ */
6
11
  declare class AccordionComponent {
7
12
  readonly multi: _angular_core.InputSignal<boolean>;
8
13
  readonly expandedItems: _angular_core.WritableSignal<Set<string>>;
@@ -12,6 +17,11 @@ declare class AccordionComponent {
12
17
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionComponent, "ea-accordion", never, { "multi": { "alias": "multi"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
13
18
  }
14
19
 
20
+ /**
21
+ * Single expandable section within an `ea-accordion`. Each item exposes a
22
+ * header button with the supplied `label` and reveals its projected content
23
+ * when expanded. Must be rendered inside an `ea-accordion`.
24
+ */
15
25
  declare class AccordionItemComponent {
16
26
  private readonly accordion;
17
27
  readonly value: _angular_core.InputSignal<string>;
@@ -24,32 +34,53 @@ declare class AccordionItemComponent {
24
34
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionItemComponent, "ea-accordion-item", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
25
35
  }
26
36
 
37
+ /** Semantic colour scheme of an alert. Drives icon and palette. */
27
38
  type AlertVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
39
+ /**
40
+ * Inline banner for surfacing semantic messages such as success confirmations,
41
+ * warnings, or errors. Optionally dismissible, with a two-way `visible`
42
+ * binding and an automatically chosen ARIA role based on severity.
43
+ */
28
44
  declare class AlertComponent {
29
45
  readonly variant: _angular_core.InputSignal<AlertVariant>;
30
46
  readonly dismissible: _angular_core.InputSignal<boolean>;
31
47
  readonly visible: _angular_core.ModelSignal<boolean>;
48
+ /** Fires when the user dismisses the alert via its close button. */
32
49
  readonly dismissed: _angular_core.OutputEmitterRef<void>;
33
50
  readonly alertClasses: _angular_core.Signal<{
34
51
  [x: string]: boolean;
35
52
  }>;
53
+ readonly role: _angular_core.Signal<"alert" | "status">;
54
+ /** Hides the alert and emits `dismissed`. */
36
55
  dismiss(): void;
37
56
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertComponent, never>;
38
57
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertComponent, "ea-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; "dismissed": "dismissed"; }, never, ["*"], true, never>;
39
58
  }
40
59
 
41
- type AutocompleteSize = 'sm' | 'md' | 'lg';
42
- interface AutocompleteOption {
60
+ /**
61
+ * Common option shape used by single-select form controls
62
+ * (autocomplete, dropdown, segmented).
63
+ */
64
+ interface SelectOption {
43
65
  value: string;
44
66
  label: string;
45
67
  disabled?: boolean;
46
68
  }
69
+
70
+ /** Visual size of the autocomplete input. */
71
+ type AutocompleteSize = 'sm' | 'md' | 'lg';
72
+ /**
73
+ * Text input paired with a filtered suggestion list. Filters options by
74
+ * case-insensitive substring match, supports arrow-key navigation, and
75
+ * implements `ControlValueAccessor` for use with reactive and template-driven
76
+ * forms.
77
+ */
47
78
  declare class AutocompleteComponent implements ControlValueAccessor {
48
79
  private readonly inputEl;
49
80
  private readonly hostEl;
50
81
  readonly label: _angular_core.InputSignal<string | undefined>;
51
82
  readonly placeholder: _angular_core.InputSignal<string>;
52
- readonly options: _angular_core.InputSignal<AutocompleteOption[]>;
83
+ readonly options: _angular_core.InputSignal<SelectOption[]>;
53
84
  readonly size: _angular_core.InputSignal<AutocompleteSize>;
54
85
  readonly disabled: _angular_core.InputSignal<boolean>;
55
86
  readonly readonly: _angular_core.InputSignal<boolean>;
@@ -61,24 +92,31 @@ declare class AutocompleteComponent implements ControlValueAccessor {
61
92
  readonly emptyMessage: _angular_core.InputSignal<string>;
62
93
  readonly id: _angular_core.InputSignal<string>;
63
94
  readonly value: _angular_core.ModelSignal<string>;
64
- readonly optionSelected: _angular_core.OutputEmitterRef<AutocompleteOption>;
65
- readonly valueChanged: _angular_core.OutputEmitterRef<string>;
95
+ /** Fires when the user picks an option from the suggestion list. */
96
+ readonly selected: _angular_core.OutputEmitterRef<SelectOption>;
97
+ /** Fires whenever the input text changes, including on free-text edits. */
98
+ readonly changed: _angular_core.OutputEmitterRef<string>;
99
+ /** Fires when the input receives focus. */
100
+ readonly focused: _angular_core.OutputEmitterRef<FocusEvent>;
101
+ /** Fires when the input loses focus. */
102
+ readonly blurred: _angular_core.OutputEmitterRef<FocusEvent>;
66
103
  readonly isOpen: _angular_core.WritableSignal<boolean>;
67
- readonly focused: _angular_core.WritableSignal<boolean>;
104
+ readonly isFocused: _angular_core.WritableSignal<boolean>;
68
105
  readonly focusedIndex: _angular_core.WritableSignal<number>;
69
106
  private readonly _formDisabled;
70
107
  private justSelected;
71
108
  private onChange;
72
109
  private onTouched;
73
110
  readonly isDisabled: _angular_core.Signal<boolean>;
74
- readonly resolvedStatus: _angular_core.Signal<"default" | "error">;
111
+ readonly hasError: _angular_core.Signal<boolean>;
75
112
  readonly showError: _angular_core.Signal<boolean>;
76
113
  readonly showHint: _angular_core.Signal<boolean>;
77
- readonly filteredOptions: _angular_core.Signal<AutocompleteOption[]>;
114
+ readonly filteredOptions: _angular_core.Signal<SelectOption[]>;
78
115
  readonly showList: _angular_core.Signal<boolean>;
79
116
  readonly showEmpty: _angular_core.Signal<boolean>;
80
117
  readonly wrapperClasses: _angular_core.Signal<{
81
118
  [x: string]: boolean;
119
+ 'ea-autocomplete__wrapper--error': boolean;
82
120
  'ea-autocomplete__wrapper--focused': boolean;
83
121
  'ea-autocomplete__wrapper--disabled': boolean;
84
122
  }>;
@@ -87,27 +125,39 @@ declare class AutocompleteComponent implements ControlValueAccessor {
87
125
  registerOnTouched(fn: () => void): void;
88
126
  setDisabledState(isDisabled: boolean): void;
89
127
  handleInput(event: Event): void;
90
- handleFocus(): void;
91
- handleBlur(): void;
128
+ handleFocus(event: FocusEvent): void;
129
+ handleBlur(event: FocusEvent): void;
92
130
  handleKeydown(event: KeyboardEvent): void;
93
- selectOption(option: AutocompleteOption): void;
131
+ /** Programmatically selects the given option, updating the value and closing the list. */
132
+ selectOption(option: SelectOption): void;
133
+ /** Closes the suggestion list without changing the current value. */
94
134
  close(): void;
135
+ /** Moves keyboard focus to the underlying text input. */
136
+ focus(): void;
95
137
  private moveFocus;
96
138
  onDocumentClick(event: Event): void;
97
139
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutocompleteComponent, never>;
98
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutocompleteComponent, "ea-autocomplete", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxResults": { "alias": "maxResults"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "optionSelected": "optionSelected"; "valueChanged": "valueChanged"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
140
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutocompleteComponent, "ea-autocomplete", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxResults": { "alias": "maxResults"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "selected": "selected"; "changed": "changed"; "focused": "focused"; "blurred": "blurred"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
99
141
  }
100
142
 
143
+ /** Crop mask shape applied to the exported image. */
101
144
  type AvatarEditorShape = 'circle' | 'square';
145
+ /** Result of a successful crop, providing both a `Blob` and a data URL. */
102
146
  interface AvatarEditorCropEvent {
103
147
  blob: Blob;
104
148
  dataUrl: string;
105
149
  }
150
+ /** Persisted pan/zoom state, suitable for restoring an in-progress edit. */
106
151
  interface AvatarEditorCropState {
107
152
  zoom: number;
108
153
  offsetX: number;
109
154
  offsetY: number;
110
155
  }
156
+ /**
157
+ * Canvas-based image editor for cropping avatars. Supports drag-and-drop
158
+ * upload, mouse/touch panning, zoom via slider or scroll wheel, and exports
159
+ * the cropped image as either a `Blob` or a data URL.
160
+ */
111
161
  declare class AvatarEditorComponent implements OnDestroy {
112
162
  readonly canvasEl: _angular_core.Signal<ElementRef<HTMLCanvasElement> | undefined>;
113
163
  readonly fileInputEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
@@ -122,17 +172,24 @@ declare class AvatarEditorComponent implements OnDestroy {
122
172
  readonly exportQuality: _angular_core.InputSignal<number>;
123
173
  readonly exportType: _angular_core.InputSignal<string>;
124
174
  readonly cropState: _angular_core.InputSignal<AvatarEditorCropState | null | undefined>;
175
+ /** Fires when the user finalises a crop via {@link exportCrop}; payload contains both `Blob` and data URL. */
125
176
  readonly cropped: _angular_core.OutputEmitterRef<AvatarEditorCropEvent>;
177
+ /** Fires when a file is chosen from disk or dropped onto the editor. */
126
178
  readonly fileSelected: _angular_core.OutputEmitterRef<File>;
179
+ /** Fires when the current image is cleared via the remove control. */
127
180
  readonly removed: _angular_core.OutputEmitterRef<void>;
128
- readonly fileError: _angular_core.OutputEmitterRef<string>;
129
- readonly cropStateChange: _angular_core.OutputEmitterRef<AvatarEditorCropState>;
181
+ /** Fires with a human-readable message when validation fails (wrong type, oversized file, etc.). */
182
+ readonly errored: _angular_core.OutputEmitterRef<string>;
183
+ /** Fires whenever the user pans or zooms the image; useful for persisting in-progress crops. */
184
+ readonly cropStateChanged: _angular_core.OutputEmitterRef<AvatarEditorCropState>;
130
185
  readonly hasImage: _angular_core.WritableSignal<boolean>;
131
186
  readonly isDragOver: _angular_core.WritableSignal<boolean>;
132
187
  readonly isAtOriginal: _angular_core.WritableSignal<boolean>;
133
188
  readonly isLoading: _angular_core.Signal<boolean>;
134
189
  readonly zoom: _angular_core.WritableSignal<number>;
135
190
  readonly canRevert: _angular_core.Signal<boolean>;
191
+ /** True when the visible crop is darker than mid-grey; drives the `--on-light` class on the overlay so the "Change photo" affordance stays readable. */
192
+ readonly isImageDark: _angular_core.WritableSignal<boolean>;
136
193
  private image;
137
194
  private offsetX;
138
195
  private offsetY;
@@ -160,6 +217,7 @@ declare class AvatarEditorComponent implements OnDestroy {
160
217
  onDragLeave(event: DragEvent): void;
161
218
  onDrop(event: DragEvent): void;
162
219
  onFileSelected(event: Event): void;
220
+ /** Opens the native file picker dialog. */
163
221
  openFilePicker(): void;
164
222
  onMouseDown(event: MouseEvent): void;
165
223
  onTouchStart(event: TouchEvent): void;
@@ -172,11 +230,17 @@ declare class AvatarEditorComponent implements OnDestroy {
172
230
  private onTouchMove;
173
231
  private onTouchEnd;
174
232
  private onWheel;
233
+ onCanvasKeydown(event: KeyboardEvent): void;
234
+ /** Sets the zoom level, clamped to the configured `minZoom`/`maxZoom` range. */
175
235
  setZoom(value: number): void;
176
236
  onZoomInput(event: Event): void;
237
+ /** Clears the loaded image and resets pan/zoom to defaults. */
177
238
  removeImage(): void;
239
+ /** Marks the current image and crop state as the baseline for {@link revertImage}. */
178
240
  captureOriginal(): void;
241
+ /** Restores the image and crop state captured by the most recent {@link captureOriginal}. */
179
242
  revertImage(): void;
243
+ /** Renders the current crop to an offscreen canvas, emits `cropped`, and resolves with the resulting `Blob`. */
180
244
  exportCrop(): Promise<Blob>;
181
245
  private loadFromUrl;
182
246
  private loadFile;
@@ -186,14 +250,32 @@ declare class AvatarEditorComponent implements OnDestroy {
186
250
  private getDrawParams;
187
251
  private clampOffset;
188
252
  private draw;
253
+ /**
254
+ * Samples the visible crop region and stores whether it's darker than
255
+ * mid-grey, so the hover overlay can flip its label and icon between
256
+ * white (on dark photos) and black (on light photos).
257
+ *
258
+ * Restricts sampling to the inscribed circle for circle crops to ignore
259
+ * the soon-to-be-masked corners. Uses Rec. 601 perceptual luminance
260
+ * weights; transparent pixels and CORS-tainted canvases default to a
261
+ * "dark" assumption (white ink).
262
+ */
263
+ private updateImageDarkness;
189
264
  private emitCropStateChange;
190
265
  private clearCanvas;
191
266
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarEditorComponent, never>;
192
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarEditorComponent, "ea-avatar-editor", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": false; "isSignal": true; }; "currentSrc": { "alias": "currentSrc"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; "isSignal": true; }; "minZoom": { "alias": "minZoom"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "exportQuality": { "alias": "exportQuality"; "required": false; "isSignal": true; }; "exportType": { "alias": "exportType"; "required": false; "isSignal": true; }; "cropState": { "alias": "cropState"; "required": false; "isSignal": true; }; }, { "cropped": "cropped"; "fileSelected": "fileSelected"; "removed": "removed"; "fileError": "fileError"; "cropStateChange": "cropStateChange"; }, never, never, true, never>;
267
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarEditorComponent, "ea-avatar-editor", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": false; "isSignal": true; }; "currentSrc": { "alias": "currentSrc"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; "isSignal": true; }; "minZoom": { "alias": "minZoom"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "exportQuality": { "alias": "exportQuality"; "required": false; "isSignal": true; }; "exportType": { "alias": "exportType"; "required": false; "isSignal": true; }; "cropState": { "alias": "cropState"; "required": false; "isSignal": true; }; }, { "cropped": "cropped"; "fileSelected": "fileSelected"; "removed": "removed"; "errored": "errored"; "cropStateChanged": "cropStateChanged"; }, never, never, true, never>;
193
268
  }
194
269
 
270
+ /** Diameter (or side length) preset for an avatar. */
195
271
  type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
272
+ /** Outline of the avatar — round or rounded-square. */
196
273
  type AvatarShape = 'circle' | 'square';
274
+ /**
275
+ * Compact image used to represent a user or entity. Falls back to initials
276
+ * when no `src` is provided, then to a generic user icon when neither image
277
+ * nor initials are available.
278
+ */
197
279
  declare class AvatarComponent {
198
280
  readonly src: _angular_core.InputSignal<string | undefined>;
199
281
  readonly alt: _angular_core.InputSignal<string>;
@@ -211,8 +293,14 @@ declare class AvatarComponent {
211
293
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarComponent, "ea-avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
212
294
  }
213
295
 
296
+ /** Semantic colour scheme of a badge. */
214
297
  type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
298
+ /** Visual size of a badge. */
215
299
  type BadgeSize = 'sm' | 'md' | 'lg';
300
+ /**
301
+ * Compact pill-shaped indicator used to communicate status, counts, or labels
302
+ * inline with surrounding content.
303
+ */
216
304
  declare class BadgeComponent {
217
305
  readonly variant: _angular_core.InputSignal<BadgeVariant>;
218
306
  readonly size: _angular_core.InputSignal<BadgeSize>;
@@ -223,31 +311,48 @@ declare class BadgeComponent {
223
311
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "ea-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
224
312
  }
225
313
 
314
+ /** Visual style of the separator rendered between breadcrumb items. */
226
315
  type BreadcrumbsSeparator = 'chevron' | 'slash';
316
+ /** Single entry in a breadcrumb trail. */
227
317
  interface BreadcrumbItem {
228
318
  label: string;
229
319
  href?: string;
230
320
  disabled?: boolean;
231
321
  }
322
+ /** Payload emitted when a breadcrumb is activated. */
232
323
  interface BreadcrumbClickEvent {
233
324
  item: BreadcrumbItem;
234
325
  index: number;
235
326
  event: MouseEvent;
236
327
  }
328
+ /**
329
+ * Navigation trail that shows the user's location within a hierarchy. Items
330
+ * with an `href` render as links, others render as buttons; the final item is
331
+ * always treated as the current page and is non-interactive.
332
+ */
237
333
  declare class BreadcrumbsComponent {
238
334
  readonly items: _angular_core.InputSignal<BreadcrumbItem[]>;
239
335
  readonly separator: _angular_core.InputSignal<BreadcrumbsSeparator>;
240
336
  readonly ariaLabel: _angular_core.InputSignal<string>;
241
- readonly itemClicked: _angular_core.OutputEmitterRef<BreadcrumbClickEvent>;
337
+ /** Fires when a non-disabled, non-final breadcrumb is activated. */
338
+ readonly clicked: _angular_core.OutputEmitterRef<BreadcrumbClickEvent>;
242
339
  isLast(index: number): boolean;
243
340
  handleClick(item: BreadcrumbItem, index: number, event: MouseEvent): void;
244
341
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbsComponent, never>;
245
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbsComponent, "ea-breadcrumbs", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
342
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbsComponent, "ea-breadcrumbs", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
246
343
  }
247
344
 
345
+ /** Visual style of a button — drives colour and emphasis. */
248
346
  type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
347
+ /** Visual size of a button. */
249
348
  type ButtonSize = 'sm' | 'md' | 'lg';
349
+ /** HTML `type` attribute applied to the underlying `<button>` element. */
250
350
  type ButtonType = 'button' | 'submit' | 'reset';
351
+ /**
352
+ * Standard action button supporting primary, secondary, ghost, and danger
353
+ * variants. Includes a loading state that swaps the label for a spinner while
354
+ * preserving the rendered width.
355
+ */
251
356
  declare class ButtonComponent {
252
357
  readonly variant: _angular_core.InputSignal<ButtonVariant>;
253
358
  readonly size: _angular_core.InputSignal<ButtonSize>;
@@ -257,6 +362,7 @@ declare class ButtonComponent {
257
362
  readonly fullWidth: _angular_core.InputSignal<boolean>;
258
363
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
259
364
  readonly ariaCurrent: _angular_core.InputSignal<string | undefined>;
365
+ /** Fires when the button is activated; suppressed while disabled or loading. */
260
366
  readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
261
367
  readonly isDisabled: _angular_core.Signal<boolean>;
262
368
  readonly hostClasses: _angular_core.Signal<{
@@ -270,9 +376,18 @@ declare class ButtonComponent {
270
376
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "ea-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaCurrent": { "alias": "aria-current"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
271
377
  }
272
378
 
379
+ /** Visual style of a card surface. */
273
380
  type CardVariant = 'elevated' | 'outlined' | 'filled';
381
+ /** Padding preset applied to the card's content area. */
274
382
  type CardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
383
+ /** Horizontal alignment of card header content. */
275
384
  type CardHeaderAlign = 'start' | 'center' | 'end';
385
+ /**
386
+ * Surface for grouping related content. Provides optional `header` and
387
+ * `footer` content slots and supports elevated, outlined, and filled
388
+ * variants. The card shadow can be customised per instance via the
389
+ * `--ea-card-shadow` CSS custom property.
390
+ */
276
391
  declare class CardComponent {
277
392
  readonly variant: _angular_core.InputSignal<CardVariant>;
278
393
  readonly padding: _angular_core.InputSignal<CardPadding>;
@@ -284,26 +399,40 @@ declare class CardComponent {
284
399
  'ea-card--full-width': boolean;
285
400
  }>;
286
401
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardComponent, never>;
287
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardComponent, "ea-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "headerAlign": { "alias": "headerAlign"; "required": false; "isSignal": true; }; "headerDivider": { "alias": "headerDivider"; "required": false; "isSignal": true; }; }, {}, never, ["[eaCardHeader]", "*", "[eaCardFooter]"], true, never>;
402
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardComponent, "ea-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "headerAlign": { "alias": "headerAlign"; "required": false; "isSignal": true; }; "headerDivider": { "alias": "headerDivider"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=header]", "*", "[slot=footer]"], true, never>;
288
403
  }
289
404
 
405
+ /** Visual size of a checkbox. */
290
406
  type CheckboxSize = 'sm' | 'md' | 'lg';
407
+ /**
408
+ * Boolean form control with support for an indeterminate visual state. Pairs
409
+ * a visually hidden native input with a custom checkmark and integrates with
410
+ * Angular forms via `ControlValueAccessor`.
411
+ */
291
412
  declare class CheckboxComponent implements ControlValueAccessor {
292
413
  readonly label: _angular_core.InputSignal<string | undefined>;
414
+ readonly hint: _angular_core.InputSignal<string | undefined>;
415
+ readonly errorMsg: _angular_core.InputSignal<string | undefined>;
293
416
  readonly size: _angular_core.InputSignal<CheckboxSize>;
294
417
  readonly disabled: _angular_core.InputSignal<boolean>;
295
418
  readonly required: _angular_core.InputSignal<boolean>;
296
419
  readonly indeterminate: _angular_core.InputSignal<boolean>;
420
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
297
421
  readonly id: _angular_core.InputSignal<string>;
298
422
  readonly checked: _angular_core.ModelSignal<boolean>;
423
+ /** Fires with the new checked state whenever the user toggles the checkbox. */
299
424
  readonly changed: _angular_core.OutputEmitterRef<boolean>;
300
425
  private readonly _formDisabled;
301
426
  readonly isDisabled: _angular_core.Signal<boolean>;
427
+ readonly hasError: _angular_core.Signal<boolean>;
428
+ readonly showError: _angular_core.Signal<boolean>;
429
+ readonly showHint: _angular_core.Signal<boolean>;
302
430
  readonly hostClasses: _angular_core.Signal<{
303
431
  [x: string]: boolean;
304
432
  'ea-checkbox--disabled': boolean;
305
433
  'ea-checkbox--checked': boolean;
306
434
  'ea-checkbox--indeterminate': boolean;
435
+ 'ea-checkbox--error': boolean;
307
436
  }>;
308
437
  private onChange;
309
438
  private onTouched;
@@ -313,11 +442,14 @@ declare class CheckboxComponent implements ControlValueAccessor {
313
442
  setDisabledState(isDisabled: boolean): void;
314
443
  handleChange(): void;
315
444
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
316
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "ea-checkbox", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
445
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "ea-checkbox", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
317
446
  }
318
447
 
448
+ /** Vertical density preset for table rows and header cells. */
319
449
  type DataTableDensity = 'compact' | 'comfortable' | 'spacious';
320
- type SortDirection = 'asc' | 'desc' | null;
450
+ /** Sort direction; `null` means no sort is applied. */
451
+ type DataTableSortDirection = 'asc' | 'desc' | null;
452
+ /** Column definition for the data table, including optional cell/header templates. */
321
453
  interface DataTableColumn<T = Record<string, unknown>> {
322
454
  key: string;
323
455
  label: string;
@@ -333,10 +465,17 @@ interface DataTableColumn<T = Record<string, unknown>> {
333
465
  $implicit: DataTableColumn<T>;
334
466
  }>;
335
467
  }
468
+ /** Current sort state — which column is sorted and in which direction. */
336
469
  interface DataTableSortState {
337
470
  column: string;
338
- direction: SortDirection;
339
- }
471
+ direction: DataTableSortDirection;
472
+ }
473
+ /**
474
+ * Table for tabular data with sortable columns, sticky headers, and density
475
+ * presets. Supports striping, borders, hoverable rows, and custom cell or
476
+ * header templates via `ng-template`. Sort state is exposed as a two-way
477
+ * `model()` binding.
478
+ */
340
479
  declare class DataTableComponent<T = Record<string, unknown>> {
341
480
  readonly columns: _angular_core.InputSignal<DataTableColumn<T>[]>;
342
481
  readonly data: _angular_core.InputSignal<T[]>;
@@ -348,7 +487,8 @@ declare class DataTableComponent<T = Record<string, unknown>> {
348
487
  readonly bordered: _angular_core.InputSignal<boolean>;
349
488
  readonly noDataText: _angular_core.InputSignal<string>;
350
489
  readonly sort: _angular_core.ModelSignal<DataTableSortState>;
351
- readonly sortChange: _angular_core.OutputEmitterRef<DataTableSortState>;
490
+ /** Fires whenever the sort column or direction changes via header click. */
491
+ readonly sorted: _angular_core.OutputEmitterRef<DataTableSortState>;
352
492
  readonly noDataTemplate: _angular_core.Signal<TemplateRef<unknown> | undefined>;
353
493
  readonly hostClasses: _angular_core.Signal<{
354
494
  [x: string]: boolean;
@@ -362,30 +502,37 @@ declare class DataTableComponent<T = Record<string, unknown>> {
362
502
  onHeaderClick(col: DataTableColumn<T>): void;
363
503
  trackByFn(_index: number, item: T): unknown;
364
504
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataTableComponent<any>, never>;
365
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableComponent<any>, "ea-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "noDataText": { "alias": "noDataText"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; "sortChange": "sortChange"; }, ["noDataTemplate"], ["ea-paginator"], true, never>;
505
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableComponent<any>, "ea-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "noDataText": { "alias": "noDataText"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; "sorted": "sorted"; }, ["noDataTemplate"], ["ea-paginator"], true, never>;
366
506
  }
367
507
 
508
+ /** Visual size of each digit cell. */
368
509
  type CodeInputSize = 'sm' | 'md' | 'lg';
369
- type CodeInputStatus = 'default' | 'error' | 'success';
510
+ /**
511
+ * Verification code entry made up of one input per digit. Auto-advances on
512
+ * input, supports paste of the full code at once, and integrates with Angular
513
+ * forms via `ControlValueAccessor`.
514
+ */
370
515
  declare class CodeInputComponent implements ControlValueAccessor {
371
516
  readonly digitEls: _angular_core.Signal<readonly ElementRef<HTMLInputElement>[]>;
372
517
  readonly label: _angular_core.InputSignal<string | undefined>;
518
+ readonly placeholder: _angular_core.InputSignal<string>;
373
519
  readonly length: _angular_core.InputSignal<number>;
374
520
  readonly size: _angular_core.InputSignal<CodeInputSize>;
375
- readonly status: _angular_core.InputSignal<CodeInputStatus>;
376
521
  readonly hint: _angular_core.InputSignal<string | undefined>;
377
522
  readonly errorMsg: _angular_core.InputSignal<string | undefined>;
378
523
  readonly disabled: _angular_core.InputSignal<boolean>;
524
+ readonly readonly: _angular_core.InputSignal<boolean>;
379
525
  readonly required: _angular_core.InputSignal<boolean>;
380
526
  readonly id: _angular_core.InputSignal<string>;
381
527
  readonly value: _angular_core.ModelSignal<string>;
382
528
  readonly focusedIndex: _angular_core.WritableSignal<number>;
383
529
  private readonly _formDisabled;
530
+ /** Fires with the full code once every digit has been entered. */
384
531
  readonly completed: _angular_core.OutputEmitterRef<string>;
385
532
  private onChange;
386
533
  private onTouched;
387
534
  readonly isDisabled: _angular_core.Signal<boolean>;
388
- readonly resolvedStatus: _angular_core.Signal<CodeInputStatus>;
535
+ readonly hasError: _angular_core.Signal<boolean>;
389
536
  readonly showError: _angular_core.Signal<boolean>;
390
537
  readonly showHint: _angular_core.Signal<boolean>;
391
538
  readonly digits: _angular_core.Signal<string[]>;
@@ -399,15 +546,20 @@ declare class CodeInputComponent implements ControlValueAccessor {
399
546
  handlePaste(event: ClipboardEvent): void;
400
547
  handleFocus(index: number): void;
401
548
  handleBlur(): void;
549
+ /** Moves keyboard focus to the next empty digit (or the last one when full). */
402
550
  focus(): void;
403
551
  private focusDigit;
404
552
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeInputComponent, never>;
405
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeInputComponent, "ea-code-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "length": { "alias": "length"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "completed": "completed"; }, never, never, true, never>;
553
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeInputComponent, "ea-code-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "length": { "alias": "length"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "completed": "completed"; }, never, never, true, never>;
406
554
  }
407
555
 
556
+ /** Visual size of the date picker trigger. */
408
557
  type DatePickerSize = 'sm' | 'md' | 'lg';
558
+ /** Locale-aware date format used for the displayed value. */
409
559
  type DatePickerFormat = 'short' | 'medium' | 'long';
560
+ /** First day of the week in the calendar grid (0 = Sunday, 1 = Monday). */
410
561
  type DatePickerWeekStart = 0 | 1;
562
+ /** Value accepted via `writeValue` — a `Date`, ISO/parseable string, or `null`. */
411
563
  type DatePickerValue = Date | string | null;
412
564
  interface CalendarDay {
413
565
  date: Date;
@@ -418,13 +570,21 @@ interface CalendarDay {
418
570
  isDisabled: boolean;
419
571
  isFocused: boolean;
420
572
  }
573
+ /**
574
+ * Calendar popover for selecting a single date. Supports `min`/`max` bounds,
575
+ * configurable week start, locale-aware formatting via `Intl.DateTimeFormat`,
576
+ * and full keyboard navigation (arrows, PageUp/PageDown, Home/End, Enter,
577
+ * Escape). Integrates with Angular forms via `ControlValueAccessor`.
578
+ */
421
579
  declare class DatePickerComponent implements ControlValueAccessor {
422
580
  private readonly hostEl;
423
581
  private readonly triggerEl;
582
+ private readonly injector;
424
583
  readonly label: _angular_core.InputSignal<string | undefined>;
425
584
  readonly placeholder: _angular_core.InputSignal<string>;
426
585
  readonly size: _angular_core.InputSignal<DatePickerSize>;
427
586
  readonly disabled: _angular_core.InputSignal<boolean>;
587
+ readonly readonly: _angular_core.InputSignal<boolean>;
428
588
  readonly required: _angular_core.InputSignal<boolean>;
429
589
  readonly hint: _angular_core.InputSignal<string | undefined>;
430
590
  readonly errorMsg: _angular_core.InputSignal<string | undefined>;
@@ -435,6 +595,7 @@ declare class DatePickerComponent implements ControlValueAccessor {
435
595
  readonly locale: _angular_core.InputSignal<string | undefined>;
436
596
  readonly id: _angular_core.InputSignal<string>;
437
597
  readonly value: _angular_core.ModelSignal<Date | null>;
598
+ /** Fires when the selected date changes, including when cleared. */
438
599
  readonly changed: _angular_core.OutputEmitterRef<Date | null>;
439
600
  readonly isOpen: _angular_core.WritableSignal<boolean>;
440
601
  readonly viewYear: _angular_core.WritableSignal<number>;
@@ -444,11 +605,12 @@ declare class DatePickerComponent implements ControlValueAccessor {
444
605
  private onChange;
445
606
  private onTouched;
446
607
  readonly isDisabled: _angular_core.Signal<boolean>;
447
- readonly resolvedStatus: _angular_core.Signal<"default" | "error">;
608
+ readonly hasError: _angular_core.Signal<boolean>;
448
609
  readonly showError: _angular_core.Signal<boolean>;
449
610
  readonly showHint: _angular_core.Signal<boolean>;
450
611
  readonly triggerClasses: _angular_core.Signal<{
451
612
  [x: string]: boolean;
613
+ 'ea-date-picker__trigger--error': boolean;
452
614
  'ea-date-picker__trigger--open': boolean;
453
615
  'ea-date-picker__trigger--disabled': boolean;
454
616
  }>;
@@ -460,10 +622,17 @@ declare class DatePickerComponent implements ControlValueAccessor {
460
622
  registerOnChange(fn: (value: Date | null) => void): void;
461
623
  registerOnTouched(fn: () => void): void;
462
624
  setDisabledState(isDisabled: boolean): void;
625
+ /** Toggles the calendar popover between open and closed. */
463
626
  toggle(): void;
627
+ /** Opens the calendar popover and moves focus to the focused day cell. */
464
628
  open(): void;
629
+ /** Closes the calendar popover. */
465
630
  close(): void;
631
+ private focusFocusedDayCell;
632
+ /** Moves keyboard focus to the trigger button. */
633
+ focus(): void;
466
634
  selectDay(day: CalendarDay): void;
635
+ /** Clears the selected date and emits `changed` with `null`. */
467
636
  clear(event: Event): void;
468
637
  goToPrevMonth(): void;
469
638
  goToNextMonth(): void;
@@ -480,10 +649,17 @@ declare class DatePickerComponent implements ControlValueAccessor {
480
649
  private addDays;
481
650
  private addMonths;
482
651
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatePickerComponent, never>;
483
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent, "ea-date-picker", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
652
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent, "ea-date-picker", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
484
653
  }
485
654
 
655
+ /** Width preset of the dialog panel. */
486
656
  type DialogSize = 'sm' | 'md' | 'lg' | 'full';
657
+ /**
658
+ * Modal dialog backed by the native `<dialog>` element. Uses `showModal()`
659
+ * for browser-managed focus trapping, supports backdrop and Escape dismissal,
660
+ * and exposes `header`, default, and `footer` content slots. The `open` state
661
+ * is a two-way `model()` binding.
662
+ */
487
663
  declare class DialogComponent {
488
664
  private readonly dialogEl;
489
665
  private previouslyFocused;
@@ -492,8 +668,11 @@ declare class DialogComponent {
492
668
  readonly closeOnEscape: _angular_core.InputSignal<boolean>;
493
669
  readonly showClose: _angular_core.InputSignal<boolean>;
494
670
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
671
+ readonly id: _angular_core.InputSignal<string>;
495
672
  readonly open: _angular_core.ModelSignal<boolean>;
673
+ /** Fires once the dialog has been shown via `showModal()`. */
496
674
  readonly opened: _angular_core.OutputEmitterRef<void>;
675
+ /** Fires when the dialog closes (via close button, backdrop, or Escape). */
497
676
  readonly closed: _angular_core.OutputEmitterRef<void>;
498
677
  readonly panelClasses: _angular_core.Signal<{
499
678
  [x: string]: boolean;
@@ -503,10 +682,15 @@ declare class DialogComponent {
503
682
  handleBackdropClick(event: MouseEvent): void;
504
683
  handleCancel(event: Event): void;
505
684
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogComponent, never>;
506
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogComponent, "ea-dialog", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["[slot=header]", "*", "[slot=footer]"], true, never>;
685
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogComponent, "ea-dialog", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["[slot=header]", "*", "[slot=footer]"], true, never>;
507
686
  }
508
687
 
688
+ /** Orientation of the divider rule. */
509
689
  type DividerOrientation = 'horizontal' | 'vertical';
690
+ /**
691
+ * Thin separator used to visually divide content. Renders horizontally by
692
+ * default and may include an optional centred label (e.g. "or").
693
+ */
510
694
  declare class DividerComponent {
511
695
  readonly orientation: _angular_core.InputSignal<DividerOrientation>;
512
696
  readonly label: _angular_core.InputSignal<string | undefined>;
@@ -518,8 +702,16 @@ declare class DividerComponent {
518
702
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DividerComponent, "ea-divider", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
519
703
  }
520
704
 
705
+ /** Edge of the viewport from which the drawer slides in. */
521
706
  type DrawerPosition = 'left' | 'right' | 'top' | 'bottom';
707
+ /** Size of the drawer panel along its primary axis. */
522
708
  type DrawerSize = 'sm' | 'md' | 'lg' | 'full';
709
+ /**
710
+ * Side panel backed by the native `<dialog>` element for browser-managed
711
+ * focus trapping. Slides in from a configurable edge, supports backdrop and
712
+ * Escape dismissal, and exposes `header`, default, and `footer` content
713
+ * slots. The `open` state is a two-way `model()` binding.
714
+ */
523
715
  declare class DrawerComponent {
524
716
  private readonly drawerEl;
525
717
  private previouslyFocused;
@@ -529,8 +721,11 @@ declare class DrawerComponent {
529
721
  readonly closeOnEscape: _angular_core.InputSignal<boolean>;
530
722
  readonly showClose: _angular_core.InputSignal<boolean>;
531
723
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
724
+ readonly id: _angular_core.InputSignal<string>;
532
725
  readonly open: _angular_core.ModelSignal<boolean>;
726
+ /** Fires once the drawer has been shown via `showModal()`. */
533
727
  readonly opened: _angular_core.OutputEmitterRef<void>;
728
+ /** Fires when the drawer closes (via close button, backdrop, or Escape). */
534
729
  readonly closed: _angular_core.OutputEmitterRef<void>;
535
730
  readonly panelClasses: _angular_core.Signal<{
536
731
  [x: string]: boolean;
@@ -540,29 +735,33 @@ declare class DrawerComponent {
540
735
  handleBackdropClick(event: MouseEvent): void;
541
736
  handleCancel(event: Event): void;
542
737
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawerComponent, never>;
543
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "ea-drawer", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["[slot=header]", "*", "[slot=footer]"], true, never>;
738
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "ea-drawer", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["[slot=header]", "*", "[slot=footer]"], true, never>;
544
739
  }
545
740
 
741
+ /** Visual size of the dropdown trigger. */
546
742
  type DropdownSize = 'sm' | 'md' | 'lg';
547
- interface DropdownOption {
548
- value: string;
549
- label: string;
550
- disabled?: boolean;
551
- }
743
+ /**
744
+ * Single-select dropdown with a custom popup list. Supports keyboard
745
+ * navigation (arrow keys, Enter/Space to select, Escape to close), closes
746
+ * on outside click or viewport scroll/resize, and integrates with Angular
747
+ * forms via `ControlValueAccessor`.
748
+ */
552
749
  declare class DropdownComponent implements ControlValueAccessor {
553
750
  private readonly elRef;
554
751
  private readonly menuEl;
555
752
  private readonly destroyRef;
556
753
  readonly label: _angular_core.InputSignal<string | undefined>;
557
754
  readonly placeholder: _angular_core.InputSignal<string>;
558
- readonly options: _angular_core.InputSignal<DropdownOption[]>;
755
+ readonly options: _angular_core.InputSignal<SelectOption[]>;
559
756
  readonly size: _angular_core.InputSignal<DropdownSize>;
560
757
  readonly disabled: _angular_core.InputSignal<boolean>;
758
+ readonly readonly: _angular_core.InputSignal<boolean>;
561
759
  readonly required: _angular_core.InputSignal<boolean>;
562
760
  readonly hint: _angular_core.InputSignal<string | undefined>;
563
761
  readonly errorMsg: _angular_core.InputSignal<string | undefined>;
564
762
  readonly id: _angular_core.InputSignal<string>;
565
763
  readonly value: _angular_core.ModelSignal<string>;
764
+ /** Fires with the new value when the user selects an option. */
566
765
  readonly changed: _angular_core.OutputEmitterRef<string>;
567
766
  readonly isOpen: _angular_core.WritableSignal<boolean>;
568
767
  readonly focusedIndex: _angular_core.WritableSignal<number>;
@@ -570,12 +769,13 @@ declare class DropdownComponent implements ControlValueAccessor {
570
769
  private onChange;
571
770
  private onTouched;
572
771
  readonly isDisabled: _angular_core.Signal<boolean>;
573
- readonly resolvedStatus: _angular_core.Signal<"default" | "error">;
772
+ readonly hasError: _angular_core.Signal<boolean>;
574
773
  readonly showError: _angular_core.Signal<boolean>;
575
774
  readonly showHint: _angular_core.Signal<boolean>;
576
775
  readonly selectedLabel: _angular_core.Signal<string>;
577
776
  readonly triggerClasses: _angular_core.Signal<{
578
777
  [x: string]: boolean;
778
+ 'ea-dropdown__trigger--error': boolean;
579
779
  'ea-dropdown__trigger--open': boolean;
580
780
  'ea-dropdown__trigger--disabled': boolean;
581
781
  }>;
@@ -584,18 +784,30 @@ declare class DropdownComponent implements ControlValueAccessor {
584
784
  registerOnChange(fn: (value: string) => void): void;
585
785
  registerOnTouched(fn: () => void): void;
586
786
  setDisabledState(isDisabled: boolean): void;
787
+ /** Toggles the dropdown list between open and closed. */
587
788
  toggle(): void;
588
- select(option: DropdownOption): void;
789
+ /** Programmatically selects the given option, closing the list. */
790
+ select(option: SelectOption): void;
791
+ /** Closes the dropdown list without changing the current value. */
589
792
  close(): void;
793
+ /** Moves keyboard focus to the dropdown trigger. */
794
+ focus(): void;
590
795
  handleKeydown(event: KeyboardEvent): void;
591
796
  private moveFocus;
592
797
  onDocumentClick(event: Event): void;
593
798
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownComponent, never>;
594
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownComponent, "ea-dropdown", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
799
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownComponent, "ea-dropdown", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
595
800
  }
596
801
 
802
+ /** Variant of the wordmark — 1: "eagami", 2: "handcrafted by eagami", 3: "eagami design system", 4: with tagline. */
597
803
  type EagamiWordmarkVariant = 1 | 2 | 3 | 4;
804
+ /** Layout of the wordmark — `stacked` for multi-line, `inline` for a single line with em-dash separators. */
598
805
  type EagamiWordmarkLayout = 'stacked' | 'inline';
806
+ /**
807
+ * Branded eagami wordmark logo. Scales continuously from a single `size`
808
+ * pixel value and supports four content variants paired with stacked or
809
+ * inline layouts.
810
+ */
599
811
  declare class EagamiWordmarkComponent {
600
812
  readonly variant: _angular_core.InputSignal<EagamiWordmarkVariant>;
601
813
  readonly layout: _angular_core.InputSignal<EagamiWordmarkLayout>;
@@ -608,16 +820,25 @@ declare class EagamiWordmarkComponent {
608
820
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EagamiWordmarkComponent, "ea-eagami-wordmark", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
609
821
  }
610
822
 
823
+ /** Visual size of the empty-state block. */
611
824
  type EmptyStateSize = 'sm' | 'md' | 'lg';
825
+ /** Heading level used for the title so it fits the surrounding document outline. */
826
+ type EmptyStateHeadingLevel = 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
827
+ /**
828
+ * Pattern for "no results" or "nothing here yet" screens. Combines an
829
+ * optional title and description with `[slot=media]` (icon or illustration)
830
+ * and `[slot=actions]` (follow-up buttons) content slots.
831
+ */
612
832
  declare class EmptyStateComponent {
613
833
  readonly title: _angular_core.InputSignal<string | undefined>;
614
834
  readonly description: _angular_core.InputSignal<string | undefined>;
615
835
  readonly size: _angular_core.InputSignal<EmptyStateSize>;
836
+ readonly headingLevel: _angular_core.InputSignal<EmptyStateHeadingLevel>;
616
837
  readonly hostClasses: _angular_core.Signal<{
617
838
  [x: string]: boolean;
618
839
  }>;
619
840
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
620
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "ea-empty-state", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=media]", "[slot=actions]"], true, never>;
841
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "ea-empty-state", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "headingLevel": { "alias": "headingLevel"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=media]", "[slot=actions]"], true, never>;
621
842
  }
622
843
 
623
844
  declare class AlertCircleIconComponent {
@@ -631,8 +852,9 @@ declare class AlertTriangleIconComponent {
631
852
  }
632
853
 
633
854
  declare class AppleIconComponent {
855
+ readonly brand: _angular_core.InputSignal<boolean>;
634
856
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AppleIconComponent, never>;
635
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppleIconComponent, "ea-icon-apple", never, {}, {}, never, never, true, never>;
857
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AppleIconComponent, "ea-icon-apple", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
636
858
  }
637
859
 
638
860
  declare class ArrowDownIconComponent {
@@ -741,8 +963,9 @@ declare class EyeIconComponent {
741
963
  }
742
964
 
743
965
  declare class FacebookIconComponent {
966
+ readonly brand: _angular_core.InputSignal<boolean>;
744
967
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FacebookIconComponent, never>;
745
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FacebookIconComponent, "ea-icon-facebook", never, {}, {}, never, never, true, never>;
968
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FacebookIconComponent, "ea-icon-facebook", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
746
969
  }
747
970
 
748
971
  declare class FileIconComponent {
@@ -756,8 +979,9 @@ declare class FilterIconComponent {
756
979
  }
757
980
 
758
981
  declare class GithubIconComponent {
982
+ readonly brand: _angular_core.InputSignal<boolean>;
759
983
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<GithubIconComponent, never>;
760
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<GithubIconComponent, "ea-icon-github", never, {}, {}, never, never, true, never>;
984
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GithubIconComponent, "ea-icon-github", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
761
985
  }
762
986
 
763
987
  declare class GoogleIconComponent {
@@ -871,8 +1095,9 @@ declare class XCircleIconComponent {
871
1095
  }
872
1096
 
873
1097
  declare class XTwitterIconComponent {
1098
+ readonly brand: _angular_core.InputSignal<boolean>;
874
1099
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<XTwitterIconComponent, never>;
875
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<XTwitterIconComponent, "ea-icon-x-twitter", never, {}, {}, never, never, true, never>;
1100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<XTwitterIconComponent, "ea-icon-x-twitter", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
876
1101
  }
877
1102
 
878
1103
  declare class XIconComponent {
@@ -880,16 +1105,22 @@ declare class XIconComponent {
880
1105
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<XIconComponent, "ea-icon-x", never, {}, {}, never, never, true, never>;
881
1106
  }
882
1107
 
1108
+ /** Visual size of the input. */
883
1109
  type InputSize = 'sm' | 'md' | 'lg';
884
- type InputStatus = 'default' | 'error' | 'success';
1110
+ /** HTML `type` attribute applied to the underlying `<input>`. */
885
1111
  type InputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';
1112
+ /**
1113
+ * Single-line text field with label, hint, and error message support.
1114
+ * Includes a built-in show/hide toggle for `password` inputs and integrates
1115
+ * with Angular forms via `ControlValueAccessor`. Prefix and suffix content
1116
+ * can be projected via the `prefix` and `suffix` slots.
1117
+ */
886
1118
  declare class InputComponent implements ControlValueAccessor, AfterViewInit {
887
1119
  readonly inputEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
888
1120
  readonly label: _angular_core.InputSignal<string | undefined>;
889
1121
  readonly type: _angular_core.InputSignal<InputType>;
890
1122
  readonly placeholder: _angular_core.InputSignal<string>;
891
1123
  readonly size: _angular_core.InputSignal<InputSize>;
892
- readonly status: _angular_core.InputSignal<InputStatus>;
893
1124
  readonly hint: _angular_core.InputSignal<string | undefined>;
894
1125
  readonly errorMsg: _angular_core.InputSignal<string | undefined>;
895
1126
  readonly disabled: _angular_core.InputSignal<boolean>;
@@ -900,20 +1131,23 @@ declare class InputComponent implements ControlValueAccessor, AfterViewInit {
900
1131
  readonly showPasswordToggle: _angular_core.InputSignal<boolean>;
901
1132
  readonly id: _angular_core.InputSignal<string>;
902
1133
  readonly value: _angular_core.ModelSignal<string>;
903
- readonly focused: _angular_core.WritableSignal<boolean>;
1134
+ readonly isFocused: _angular_core.WritableSignal<boolean>;
904
1135
  readonly passwordVisible: _angular_core.WritableSignal<boolean>;
905
1136
  private readonly _formDisabled;
906
- readonly inputFocused: _angular_core.OutputEmitterRef<FocusEvent>;
907
- readonly inputBlurred: _angular_core.OutputEmitterRef<FocusEvent>;
1137
+ /** Fires when the input receives focus. */
1138
+ readonly focused: _angular_core.OutputEmitterRef<FocusEvent>;
1139
+ /** Fires when the input loses focus. */
1140
+ readonly blurred: _angular_core.OutputEmitterRef<FocusEvent>;
908
1141
  private onChange;
909
1142
  private onTouched;
910
1143
  readonly isDisabled: _angular_core.Signal<boolean>;
911
1144
  readonly effectiveType: _angular_core.Signal<InputType>;
912
- readonly resolvedStatus: _angular_core.Signal<InputStatus>;
1145
+ readonly hasError: _angular_core.Signal<boolean>;
913
1146
  readonly showError: _angular_core.Signal<boolean>;
914
1147
  readonly showHint: _angular_core.Signal<boolean>;
915
1148
  readonly wrapperClasses: _angular_core.Signal<{
916
1149
  [x: string]: boolean;
1150
+ 'ea-input-wrapper--error': boolean;
917
1151
  'ea-input-wrapper--focused': boolean;
918
1152
  'ea-input-wrapper--disabled': boolean;
919
1153
  'ea-input-wrapper--readonly': boolean;
@@ -926,50 +1160,83 @@ declare class InputComponent implements ControlValueAccessor, AfterViewInit {
926
1160
  handleInput(event: Event): void;
927
1161
  handleFocus(event: FocusEvent): void;
928
1162
  handleBlur(event: FocusEvent): void;
1163
+ /** Toggles the password reveal state for `type="password"` inputs. */
929
1164
  togglePasswordVisibility(): void;
1165
+ /** Moves keyboard focus to the underlying native input element. */
930
1166
  focus(): void;
931
1167
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
932
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "ea-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "showPasswordToggle": { "alias": "showPasswordToggle"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputFocused": "inputFocused"; "inputBlurred": "inputBlurred"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
1168
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "ea-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "showPasswordToggle": { "alias": "showPasswordToggle"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "focused": "focused"; "blurred": "blurred"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
933
1169
  }
934
1170
 
1171
+ /** Placement of the menu list relative to its trigger. */
935
1172
  type MenuPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
1173
+ /**
1174
+ * Popup action menu attached to any focusable element via the
1175
+ * `[eaMenuTrigger]` directive. Supports keyboard navigation
1176
+ * (arrow keys, Home/End), closes on outside click or Escape, and restores
1177
+ * focus to the trigger on close.
1178
+ */
936
1179
  declare class MenuComponent {
937
- private readonly elRef;
1180
+ private readonly injector;
938
1181
  private readonly listEl;
939
1182
  readonly placement: _angular_core.InputSignal<MenuPlacement>;
940
1183
  readonly disabled: _angular_core.InputSignal<boolean>;
941
1184
  readonly ariaLabel: _angular_core.InputSignal<string>;
1185
+ readonly id: _angular_core.InputSignal<string>;
942
1186
  readonly open: _angular_core.ModelSignal<boolean>;
1187
+ /** Fires when the menu opens. */
943
1188
  readonly opened: _angular_core.OutputEmitterRef<void>;
1189
+ /** Fires when the menu closes. */
944
1190
  readonly closed: _angular_core.OutputEmitterRef<void>;
945
- readonly menuId: _angular_core.WritableSignal<string>;
946
1191
  private triggerEl;
947
1192
  private readonly triggerRect;
948
1193
  readonly listClasses: _angular_core.Signal<{
949
1194
  [x: string]: boolean;
950
1195
  }>;
951
1196
  readonly listStyle: _angular_core.Signal<Record<string, string>>;
1197
+ /** Toggles the menu open state, anchoring it to the given trigger element. */
952
1198
  toggleAt(triggerEl: HTMLElement): void;
1199
+ /** Opens the menu anchored to the given trigger element and focuses the first item. */
953
1200
  openAt(triggerEl: HTMLElement): void;
954
- close(): void;
1201
+ /**
1202
+ * Closes the menu if it is open. Pass `restoreFocus: true` to return focus
1203
+ * to the trigger element (used when closing via Escape or item activation;
1204
+ * not used on outside click, where the user has chosen a new focus target).
1205
+ */
1206
+ close(restoreFocus?: boolean): void;
1207
+ private getEnabledItems;
1208
+ private focusFirstItem;
1209
+ onKeydown(event: KeyboardEvent): void;
955
1210
  onDocumentClick(event: Event): void;
956
1211
  onEscape(): void;
957
1212
  onViewportChange(): void;
958
1213
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuComponent, never>;
959
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "ea-menu", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
1214
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "ea-menu", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
960
1215
  }
961
1216
 
1217
+ /** Visual style of a menu item — `danger` for destructive actions. */
962
1218
  type MenuItemVariant = 'default' | 'danger';
1219
+ /**
1220
+ * Selectable row inside an `ea-menu`. Supports leading icons via the `icon`
1221
+ * content slot, a disabled state, and a `danger` variant for destructive
1222
+ * actions. Activating an item closes its parent menu.
1223
+ */
963
1224
  declare class MenuItemComponent {
964
1225
  private readonly menu;
965
1226
  readonly disabled: _angular_core.InputSignal<boolean>;
966
1227
  readonly variant: _angular_core.InputSignal<MenuItemVariant>;
967
- readonly itemClicked: _angular_core.OutputEmitterRef<MouseEvent>;
1228
+ /** Fires when the item is activated; the parent menu closes immediately afterwards. */
1229
+ readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
968
1230
  handleClick(event: MouseEvent): void;
969
1231
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuItemComponent, never>;
970
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuItemComponent, "ea-menu-item", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, ["[slot=icon]", "*"], true, never>;
1232
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuItemComponent, "ea-menu-item", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["[slot=icon]", "*"], true, never>;
971
1233
  }
972
1234
 
1235
+ /**
1236
+ * Wires a focusable host element (typically a button) to an `ea-menu`,
1237
+ * handling click and keyboard activation (ArrowDown/Enter/Space to open,
1238
+ * Escape to close) and applying the appropriate ARIA attributes.
1239
+ */
973
1240
  declare class MenuTriggerDirective {
974
1241
  private readonly el;
975
1242
  readonly menu: _angular_core.InputSignal<MenuComponent>;
@@ -979,20 +1246,29 @@ declare class MenuTriggerDirective {
979
1246
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MenuTriggerDirective, "[eaMenuTrigger]", never, { "menu": { "alias": "eaMenuTrigger"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
980
1247
  }
981
1248
 
982
- type PaginatorPlacement = 'left' | 'center' | 'right';
1249
+ /** Horizontal alignment of paginator controls within their container. */
1250
+ type PaginatorAlign = 'left' | 'center' | 'right';
1251
+ /** Snapshot of the paginator's page and page size. */
983
1252
  interface PaginatorState {
984
1253
  page: number;
985
1254
  pageSize: number;
986
1255
  }
1256
+ /**
1257
+ * Page navigation control with previous/next buttons, numbered page jumps,
1258
+ * an optional page-size selector, and a range label. Exposes `page` and
1259
+ * `pageSize` as two-way `model()` bindings and emits a single `changed`
1260
+ * event whenever either changes.
1261
+ */
987
1262
  declare class PaginatorComponent {
988
1263
  readonly totalItems: _angular_core.InputSignal<number>;
989
1264
  readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
990
1265
  readonly showPageSizeSelector: _angular_core.InputSignal<boolean>;
991
1266
  readonly showRangeLabel: _angular_core.InputSignal<boolean>;
992
- readonly placement: _angular_core.InputSignal<PaginatorPlacement>;
1267
+ readonly align: _angular_core.InputSignal<PaginatorAlign>;
993
1268
  readonly disabled: _angular_core.InputSignal<boolean>;
994
1269
  readonly page: _angular_core.ModelSignal<number>;
995
1270
  readonly pageSize: _angular_core.ModelSignal<number>;
1271
+ /** Fires when the user changes either the current page or the page size. */
996
1272
  readonly changed: _angular_core.OutputEmitterRef<PaginatorState>;
997
1273
  readonly totalPages: _angular_core.Signal<number>;
998
1274
  readonly rangeStart: _angular_core.Signal<number>;
@@ -1000,22 +1276,32 @@ declare class PaginatorComponent {
1000
1276
  readonly canGoPrev: _angular_core.Signal<boolean>;
1001
1277
  readonly canGoNext: _angular_core.Signal<boolean>;
1002
1278
  readonly visiblePages: _angular_core.Signal<(number | "ellipsis")[]>;
1279
+ /** Navigates to the given page, clamped into the valid range. */
1003
1280
  goToPage(page: number): void;
1281
+ /** Navigates to the previous page if one exists. */
1004
1282
  prevPage(): void;
1283
+ /** Navigates to the next page if one exists. */
1005
1284
  nextPage(): void;
1006
1285
  onPageSizeChange(event: Event): void;
1007
1286
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PaginatorComponent, never>;
1008
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginatorComponent, "ea-paginator", never, { "totalItems": { "alias": "totalItems"; "required": true; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "showRangeLabel": { "alias": "showRangeLabel"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; "pageSize": "pageSizeChange"; "changed": "changed"; }, never, never, true, never>;
1287
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginatorComponent, "ea-paginator", never, { "totalItems": { "alias": "totalItems"; "required": true; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "showRangeLabel": { "alias": "showRangeLabel"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; "pageSize": "pageSizeChange"; "changed": "changed"; }, never, never, true, never>;
1009
1288
  }
1010
1289
 
1290
+ /** Semantic colour scheme of the progress bar. */
1011
1291
  type ProgressBarVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
1292
+ /** Visual height of the progress bar. */
1012
1293
  type ProgressBarSize = 'sm' | 'md' | 'lg';
1294
+ /**
1295
+ * Linear progress indicator supporting both determinate (driven by `value`
1296
+ * and `max`) and indeterminate modes. Optionally renders an inline label
1297
+ * and/or the current percentage.
1298
+ */
1013
1299
  declare class ProgressBarComponent {
1014
1300
  readonly value: _angular_core.InputSignal<number>;
1015
1301
  readonly max: _angular_core.InputSignal<number>;
1016
1302
  readonly variant: _angular_core.InputSignal<ProgressBarVariant>;
1017
1303
  readonly size: _angular_core.InputSignal<ProgressBarSize>;
1018
- readonly label: _angular_core.InputSignal<string>;
1304
+ readonly label: _angular_core.InputSignal<string | undefined>;
1019
1305
  readonly showValue: _angular_core.InputSignal<boolean>;
1020
1306
  readonly indeterminate: _angular_core.InputSignal<boolean>;
1021
1307
  readonly percentage: _angular_core.Signal<number>;
@@ -1028,29 +1314,51 @@ declare class ProgressBarComponent {
1028
1314
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressBarComponent, "ea-progress-bar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1029
1315
  }
1030
1316
 
1317
+ /** Visual size shared by all radios in the group. */
1031
1318
  type RadioSize = 'sm' | 'md' | 'lg';
1319
+ /** Layout direction for radios within the group. */
1032
1320
  type RadioOrientation = 'vertical' | 'horizontal';
1321
+ /**
1322
+ * Composite single-select control made up of `ea-radio` children. Manages
1323
+ * shared state (name, size, disabled) for its options and integrates with
1324
+ * Angular forms via `ControlValueAccessor`.
1325
+ */
1033
1326
  declare class RadioGroupComponent implements ControlValueAccessor {
1327
+ readonly id: _angular_core.InputSignal<string>;
1034
1328
  readonly name: _angular_core.InputSignal<string>;
1035
1329
  readonly size: _angular_core.InputSignal<RadioSize>;
1036
1330
  readonly orientation: _angular_core.InputSignal<RadioOrientation>;
1037
1331
  readonly disabled: _angular_core.InputSignal<boolean>;
1332
+ readonly required: _angular_core.InputSignal<boolean>;
1333
+ readonly label: _angular_core.InputSignal<string | undefined>;
1334
+ readonly hint: _angular_core.InputSignal<string | undefined>;
1335
+ readonly errorMsg: _angular_core.InputSignal<string | undefined>;
1038
1336
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1039
1337
  readonly value: _angular_core.ModelSignal<string>;
1338
+ /** Fires with the new value when an option is selected. */
1040
1339
  readonly changed: _angular_core.OutputEmitterRef<string>;
1041
1340
  private readonly _formDisabled;
1042
1341
  readonly isDisabled: _angular_core.Signal<boolean>;
1342
+ readonly hasError: _angular_core.Signal<boolean>;
1343
+ readonly showError: _angular_core.Signal<boolean>;
1344
+ readonly showHint: _angular_core.Signal<boolean>;
1043
1345
  private onChange;
1044
1346
  private onTouched;
1045
1347
  writeValue(val: string): void;
1046
1348
  registerOnChange(fn: (value: string) => void): void;
1047
1349
  registerOnTouched(fn: () => void): void;
1048
1350
  setDisabledState(isDisabled: boolean): void;
1351
+ /** Programmatically selects the option with the given value. */
1049
1352
  select(val: string): void;
1050
1353
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroupComponent, never>;
1051
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroupComponent, "ea-radio-group", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, ["*"], true, never>;
1354
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroupComponent, "ea-radio-group", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, ["*"], true, never>;
1052
1355
  }
1053
1356
 
1357
+ /**
1358
+ * Single radio option used inside an `ea-radio-group`. Inherits its size and
1359
+ * disabled state from the parent group and selecting it updates the group's
1360
+ * value.
1361
+ */
1054
1362
  declare class RadioComponent {
1055
1363
  private readonly group;
1056
1364
  readonly value: _angular_core.InputSignal<string>;
@@ -1071,45 +1379,63 @@ declare class RadioComponent {
1071
1379
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioComponent, "ea-radio", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1072
1380
  }
1073
1381
 
1382
+ /** Visual size of the segmented control. */
1074
1383
  type SegmentedSize = 'sm' | 'md' | 'lg';
1075
- interface SegmentedOption {
1076
- value: string;
1077
- label: string;
1078
- disabled?: boolean;
1079
- }
1384
+ /**
1385
+ * Compact toggle button group for picking one of a small set of options
1386
+ * (e.g. List/Grid/Kanban or Light/Dark). Implements `radiogroup` semantics
1387
+ * and `ControlValueAccessor`, with full keyboard support
1388
+ * (arrow keys, Home/End, Enter/Space).
1389
+ */
1080
1390
  declare class SegmentedComponent implements ControlValueAccessor {
1081
1391
  readonly buttonEls: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
1082
- readonly options: _angular_core.InputSignal<SegmentedOption[]>;
1392
+ readonly options: _angular_core.InputSignal<SelectOption[]>;
1393
+ readonly label: _angular_core.InputSignal<string | undefined>;
1394
+ readonly hint: _angular_core.InputSignal<string | undefined>;
1395
+ readonly errorMsg: _angular_core.InputSignal<string | undefined>;
1083
1396
  readonly size: _angular_core.InputSignal<SegmentedSize>;
1084
1397
  readonly disabled: _angular_core.InputSignal<boolean>;
1398
+ readonly required: _angular_core.InputSignal<boolean>;
1085
1399
  readonly fullWidth: _angular_core.InputSignal<boolean>;
1086
1400
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1087
1401
  readonly id: _angular_core.InputSignal<string>;
1088
1402
  readonly value: _angular_core.ModelSignal<string>;
1403
+ /** Fires with the new value when the user selects a different option. */
1089
1404
  readonly changed: _angular_core.OutputEmitterRef<string>;
1090
1405
  private readonly _formDisabled;
1091
1406
  private onChange;
1092
1407
  private onTouched;
1093
1408
  readonly isDisabled: _angular_core.Signal<boolean>;
1094
- readonly enabledOptions: _angular_core.Signal<SegmentedOption[]>;
1409
+ readonly hasError: _angular_core.Signal<boolean>;
1410
+ readonly showError: _angular_core.Signal<boolean>;
1411
+ readonly showHint: _angular_core.Signal<boolean>;
1412
+ readonly enabledOptions: _angular_core.Signal<SelectOption[]>;
1095
1413
  readonly hostClasses: _angular_core.Signal<{
1096
1414
  [x: string]: boolean;
1097
1415
  'ea-segmented--full-width': boolean;
1098
1416
  'ea-segmented--disabled': boolean;
1417
+ 'ea-segmented--error': boolean;
1099
1418
  }>;
1100
1419
  writeValue(val: string): void;
1101
1420
  registerOnChange(fn: (value: string) => void): void;
1102
1421
  registerOnTouched(fn: () => void): void;
1103
1422
  setDisabledState(isDisabled: boolean): void;
1104
- isSelected(option: SegmentedOption): boolean;
1105
- isOptionDisabled(option: SegmentedOption): boolean;
1106
- select(option: SegmentedOption): void;
1423
+ isSelected(option: SelectOption): boolean;
1424
+ isOptionDisabled(option: SelectOption): boolean;
1425
+ /** Programmatically selects the given option. */
1426
+ select(option: SelectOption): void;
1107
1427
  handleKeydown(event: KeyboardEvent, index: number): void;
1108
1428
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedComponent, never>;
1109
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedComponent, "ea-segmented", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
1429
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedComponent, "ea-segmented", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
1110
1430
  }
1111
1431
 
1432
+ /** Shape preset of a skeleton placeholder. */
1112
1433
  type SkeletonVariant = 'text' | 'circle' | 'rect';
1434
+ /**
1435
+ * Loading placeholder rendered as a pulsing block in one of three shapes.
1436
+ * Honours `prefers-reduced-motion` by suppressing the pulse animation when
1437
+ * the user has expressed that preference.
1438
+ */
1113
1439
  declare class SkeletonComponent {
1114
1440
  readonly variant: _angular_core.InputSignal<SkeletonVariant>;
1115
1441
  readonly width: _angular_core.InputSignal<string | undefined>;
@@ -1124,7 +1450,14 @@ declare class SkeletonComponent {
1124
1450
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonComponent, "ea-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1125
1451
  }
1126
1452
 
1453
+ /** Visual size of the slider track and thumb. */
1127
1454
  type SliderSize = 'sm' | 'md' | 'lg';
1455
+ /**
1456
+ * Single-value range input controlled with pointer drag or full keyboard
1457
+ * navigation (arrows, PageUp/PageDown, Home/End). Supports configurable
1458
+ * `min`, `max`, and `step`, optional value display, and integrates with
1459
+ * Angular forms via `ControlValueAccessor`.
1460
+ */
1128
1461
  declare class SliderComponent implements ControlValueAccessor {
1129
1462
  readonly trackEl: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
1130
1463
  readonly label: _angular_core.InputSignal<string | undefined>;
@@ -1142,6 +1475,7 @@ declare class SliderComponent implements ControlValueAccessor {
1142
1475
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1143
1476
  readonly id: _angular_core.InputSignal<string>;
1144
1477
  readonly value: _angular_core.ModelSignal<number>;
1478
+ /** Fires with the new (snapped, clamped) numeric value whenever the slider moves. */
1145
1479
  readonly changed: _angular_core.OutputEmitterRef<number>;
1146
1480
  private readonly _formDisabled;
1147
1481
  readonly dragging: _angular_core.WritableSignal<boolean>;
@@ -1150,11 +1484,12 @@ declare class SliderComponent implements ControlValueAccessor {
1150
1484
  readonly isDisabled: _angular_core.Signal<boolean>;
1151
1485
  readonly clampedValue: _angular_core.Signal<number>;
1152
1486
  readonly percent: _angular_core.Signal<number>;
1153
- readonly resolvedStatus: _angular_core.Signal<"default" | "error">;
1487
+ readonly hasError: _angular_core.Signal<boolean>;
1154
1488
  readonly showError: _angular_core.Signal<boolean>;
1155
1489
  readonly showHint: _angular_core.Signal<boolean>;
1156
1490
  readonly hostClasses: _angular_core.Signal<{
1157
1491
  [x: string]: boolean;
1492
+ 'ea-slider--error': boolean;
1158
1493
  'ea-slider--disabled': boolean;
1159
1494
  'ea-slider--dragging': boolean;
1160
1495
  }>;
@@ -1170,10 +1505,15 @@ declare class SliderComponent implements ControlValueAccessor {
1170
1505
  private updateFromPointer;
1171
1506
  private commitValue;
1172
1507
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SliderComponent, never>;
1173
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SliderComponent, "ea-slider", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "showMinMaxLabels": { "alias": "showMinMaxLabels"; "required": false; "isSignal": true; }; "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
1508
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SliderComponent, "ea-slider", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "showMinMaxLabels": { "alias": "showMinMaxLabels"; "required": false; "isSignal": true; }; "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "changed": "changed"; }, never, never, true, never>;
1174
1509
  }
1175
1510
 
1511
+ /** Visual size of the spinner. */
1176
1512
  type SpinnerSize = 'sm' | 'md' | 'lg';
1513
+ /**
1514
+ * SVG loading indicator with an accessible `role="status"`. Uses the `label`
1515
+ * input as the accessible name announced to assistive technology.
1516
+ */
1177
1517
  declare class SpinnerComponent {
1178
1518
  readonly size: _angular_core.InputSignal<SpinnerSize>;
1179
1519
  readonly label: _angular_core.InputSignal<string>;
@@ -1184,23 +1524,37 @@ declare class SpinnerComponent {
1184
1524
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpinnerComponent, "ea-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1185
1525
  }
1186
1526
 
1527
+ /** Visual size of the switch. */
1187
1528
  type SwitchSize = 'sm' | 'md' | 'lg';
1529
+ /**
1530
+ * On/off toggle styled as a sliding switch. Backed by a visually hidden
1531
+ * native checkbox and integrates with Angular forms via
1532
+ * `ControlValueAccessor`.
1533
+ */
1188
1534
  declare class SwitchComponent implements ControlValueAccessor {
1189
1535
  readonly label: _angular_core.InputSignal<string | undefined>;
1536
+ readonly hint: _angular_core.InputSignal<string | undefined>;
1537
+ readonly errorMsg: _angular_core.InputSignal<string | undefined>;
1190
1538
  readonly size: _angular_core.InputSignal<SwitchSize>;
1191
1539
  readonly disabled: _angular_core.InputSignal<boolean>;
1540
+ readonly required: _angular_core.InputSignal<boolean>;
1192
1541
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
1193
1542
  readonly id: _angular_core.InputSignal<string>;
1194
1543
  readonly checked: _angular_core.ModelSignal<boolean>;
1544
+ /** Fires with the new checked state whenever the user toggles the switch. */
1195
1545
  readonly changed: _angular_core.OutputEmitterRef<boolean>;
1196
1546
  private readonly _formDisabled;
1197
1547
  private onChange;
1198
1548
  private onTouched;
1199
1549
  readonly isDisabled: _angular_core.Signal<boolean>;
1550
+ readonly hasError: _angular_core.Signal<boolean>;
1551
+ readonly showError: _angular_core.Signal<boolean>;
1552
+ readonly showHint: _angular_core.Signal<boolean>;
1200
1553
  readonly hostClasses: _angular_core.Signal<{
1201
1554
  [x: string]: boolean;
1202
1555
  'ea-switch--checked': boolean;
1203
1556
  'ea-switch--disabled': boolean;
1557
+ 'ea-switch--error': boolean;
1204
1558
  }>;
1205
1559
  writeValue(val: boolean): void;
1206
1560
  registerOnChange(fn: (value: boolean) => void): void;
@@ -1208,9 +1562,14 @@ declare class SwitchComponent implements ControlValueAccessor {
1208
1562
  setDisabledState(isDisabled: boolean): void;
1209
1563
  handleChange(): void;
1210
1564
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SwitchComponent, never>;
1211
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SwitchComponent, "ea-switch", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
1565
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SwitchComponent, "ea-switch", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
1212
1566
  }
1213
1567
 
1568
+ /**
1569
+ * Single tab within an `ea-tabs` group. Registers itself with the parent on
1570
+ * init, exposes its `value` and `label`, and shows its projected content
1571
+ * when active.
1572
+ */
1214
1573
  declare class TabComponent implements OnInit, OnDestroy {
1215
1574
  private readonly tabs;
1216
1575
  readonly value: _angular_core.InputSignal<string>;
@@ -1224,29 +1583,50 @@ declare class TabComponent implements OnInit, OnDestroy {
1224
1583
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "ea-tab", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1225
1584
  }
1226
1585
 
1586
+ /** Visual style of the tab bar. */
1227
1587
  type TabsVariant = 'underline' | 'filled';
1588
+ /** Visual size of the tabs. */
1228
1589
  type TabsSize = 'sm' | 'md' | 'lg';
1590
+ /**
1591
+ * Tab bar paired with content panels. Child `ea-tab` components register
1592
+ * themselves automatically and the active panel is shown based on the
1593
+ * `activeTab` two-way binding. Supports keyboard navigation
1594
+ * (arrow keys, Home/End).
1595
+ */
1229
1596
  declare class TabsComponent {
1230
1597
  readonly registeredTabs: _angular_core.WritableSignal<TabComponent[]>;
1231
1598
  readonly variant: _angular_core.InputSignal<TabsVariant>;
1232
1599
  readonly size: _angular_core.InputSignal<TabsSize>;
1233
1600
  readonly activeTab: _angular_core.ModelSignal<string>;
1234
- readonly tabChange: _angular_core.OutputEmitterRef<string>;
1601
+ /** Fires with the value of the newly active tab. */
1602
+ readonly changed: _angular_core.OutputEmitterRef<string>;
1603
+ /** Registers a child tab so it appears in the tab bar; called automatically by `ea-tab`. */
1235
1604
  registerTab(tab: TabComponent): void;
1605
+ /** Removes a previously registered child tab; called automatically by `ea-tab`. */
1236
1606
  unregisterTab(tab: TabComponent): void;
1607
+ /** Programmatically activates the tab with the given value. */
1237
1608
  selectTab(value: string): void;
1238
1609
  handleKeydown(event: KeyboardEvent): void;
1239
1610
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsComponent, never>;
1240
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsComponent, "ea-tabs", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; "tabChange": "tabChange"; }, never, ["*"], true, never>;
1611
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsComponent, "ea-tabs", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; "changed": "changed"; }, never, ["*"], true, never>;
1241
1612
  }
1242
1613
 
1243
- type TagVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
1614
+ /** Semantic colour scheme of a tag. */
1615
+ type TagVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
1616
+ /** Visual size of a tag. */
1244
1617
  type TagSize = 'sm' | 'md' | 'lg';
1618
+ /**
1619
+ * Inline label commonly used to represent filters, categories, or selected
1620
+ * items. When `removable`, renders a close button that emits `removed`; the
1621
+ * accessible name of that button is configurable via `removeLabel`.
1622
+ */
1245
1623
  declare class TagComponent {
1246
1624
  readonly variant: _angular_core.InputSignal<TagVariant>;
1247
1625
  readonly size: _angular_core.InputSignal<TagSize>;
1248
1626
  readonly removable: _angular_core.InputSignal<boolean>;
1249
1627
  readonly disabled: _angular_core.InputSignal<boolean>;
1628
+ readonly removeLabel: _angular_core.InputSignal<string>;
1629
+ /** Fires when the user activates the remove button on a `removable` tag. */
1250
1630
  readonly removed: _angular_core.OutputEmitterRef<void>;
1251
1631
  readonly hostClasses: _angular_core.Signal<{
1252
1632
  [x: string]: boolean;
@@ -1254,18 +1634,23 @@ declare class TagComponent {
1254
1634
  }>;
1255
1635
  onRemove(event: MouseEvent): void;
1256
1636
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagComponent, never>;
1257
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "ea-tag", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
1637
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "ea-tag", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
1258
1638
  }
1259
1639
 
1640
+ /** Visual size of the textarea. */
1260
1641
  type TextareaSize = 'sm' | 'md' | 'lg';
1261
- type TextareaStatus = 'default' | 'error' | 'success';
1642
+ /** Axis along which the user is allowed to resize the textarea. */
1262
1643
  type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
1644
+ /**
1645
+ * Multiline text field that mirrors the `ea-input` API. Supports configurable
1646
+ * `rows`, `resize` direction, and `maxlength`, and integrates with Angular
1647
+ * forms via `ControlValueAccessor`.
1648
+ */
1263
1649
  declare class TextareaComponent implements ControlValueAccessor {
1264
1650
  readonly textareaEl: _angular_core.Signal<ElementRef<HTMLTextAreaElement> | undefined>;
1265
1651
  readonly label: _angular_core.InputSignal<string | undefined>;
1266
1652
  readonly placeholder: _angular_core.InputSignal<string>;
1267
1653
  readonly size: _angular_core.InputSignal<TextareaSize>;
1268
- readonly status: _angular_core.InputSignal<TextareaStatus>;
1269
1654
  readonly hint: _angular_core.InputSignal<string | undefined>;
1270
1655
  readonly errorMsg: _angular_core.InputSignal<string | undefined>;
1271
1656
  readonly disabled: _angular_core.InputSignal<boolean>;
@@ -1276,18 +1661,21 @@ declare class TextareaComponent implements ControlValueAccessor {
1276
1661
  readonly maxlength: _angular_core.InputSignal<number | undefined>;
1277
1662
  readonly id: _angular_core.InputSignal<string>;
1278
1663
  readonly value: _angular_core.ModelSignal<string>;
1279
- readonly focused: _angular_core.WritableSignal<boolean>;
1664
+ readonly isFocused: _angular_core.WritableSignal<boolean>;
1280
1665
  private readonly _formDisabled;
1281
- readonly textareaFocused: _angular_core.OutputEmitterRef<FocusEvent>;
1282
- readonly textareaBlurred: _angular_core.OutputEmitterRef<FocusEvent>;
1666
+ /** Fires when the textarea receives focus. */
1667
+ readonly focused: _angular_core.OutputEmitterRef<FocusEvent>;
1668
+ /** Fires when the textarea loses focus. */
1669
+ readonly blurred: _angular_core.OutputEmitterRef<FocusEvent>;
1283
1670
  private onChange;
1284
1671
  private onTouched;
1285
1672
  readonly isDisabled: _angular_core.Signal<boolean>;
1286
- readonly resolvedStatus: _angular_core.Signal<TextareaStatus>;
1673
+ readonly hasError: _angular_core.Signal<boolean>;
1287
1674
  readonly showError: _angular_core.Signal<boolean>;
1288
1675
  readonly showHint: _angular_core.Signal<boolean>;
1289
1676
  readonly wrapperClasses: _angular_core.Signal<{
1290
1677
  [x: string]: boolean;
1678
+ 'ea-textarea-wrapper--error': boolean;
1291
1679
  'ea-textarea-wrapper--focused': boolean;
1292
1680
  'ea-textarea-wrapper--disabled': boolean;
1293
1681
  'ea-textarea-wrapper--readonly': boolean;
@@ -1299,43 +1687,72 @@ declare class TextareaComponent implements ControlValueAccessor {
1299
1687
  handleInput(event: Event): void;
1300
1688
  handleFocus(event: FocusEvent): void;
1301
1689
  handleBlur(event: FocusEvent): void;
1690
+ /** Moves keyboard focus to the underlying native textarea element. */
1302
1691
  focus(): void;
1303
1692
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
1304
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "ea-textarea", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "textareaFocused": "textareaFocused"; "textareaBlurred": "textareaBlurred"; }, never, never, true, never>;
1693
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "ea-textarea", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "focused": "focused"; "blurred": "blurred"; }, never, never, true, never>;
1305
1694
  }
1306
1695
 
1696
+ /** Semantic colour scheme of a toast. */
1307
1697
  type ToastVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
1698
+ /** A single live toast notification rendered by `ea-toast`. */
1308
1699
  interface Toast {
1309
1700
  id: number;
1310
1701
  message: string;
1311
1702
  variant: ToastVariant;
1312
1703
  duration: number;
1313
1704
  }
1705
+ /** Optional configuration for a toast — defaults to `default` variant and 4s duration. */
1314
1706
  interface ToastOptions {
1315
1707
  variant?: ToastVariant;
1316
1708
  duration?: number;
1317
1709
  }
1710
+ /**
1711
+ * Application-wide notification service. Use the convenience methods
1712
+ * (`success`, `error`, `warning`, `info`) to push a toast, or call
1713
+ * {@link show} for full control. A single `<ea-toast />` outlet must be
1714
+ * present in the app for toasts to appear.
1715
+ */
1318
1716
  declare class ToastService {
1319
1717
  private nextId;
1320
1718
  readonly toasts: _angular_core.WritableSignal<Toast[]>;
1719
+ /** Shows a toast and returns its id; pass `duration: 0` to disable auto-dismiss. */
1321
1720
  show(message: string, options?: ToastOptions): number;
1721
+ /** Shows a `success` toast and returns its id. */
1322
1722
  success(message: string, duration?: number): number;
1723
+ /** Shows an `error` toast and returns its id. */
1323
1724
  error(message: string, duration?: number): number;
1725
+ /** Shows a `warning` toast and returns its id. */
1324
1726
  warning(message: string, duration?: number): number;
1727
+ /** Shows an `info` toast and returns its id. */
1325
1728
  info(message: string, duration?: number): number;
1729
+ /** Removes the toast with the given id, if it is still active. */
1326
1730
  dismiss(id: number): void;
1731
+ /** Removes all currently visible toasts. */
1327
1732
  clear(): void;
1328
1733
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastService, never>;
1329
1734
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ToastService>;
1330
1735
  }
1331
1736
 
1737
+ /**
1738
+ * Outlet that renders the stack of active toasts produced by
1739
+ * {@link ToastService}. Place a single `<ea-toast />` once in the root
1740
+ * template so toasts created from anywhere in the app are surfaced.
1741
+ */
1332
1742
  declare class ToastComponent {
1333
1743
  protected readonly toastService: ToastService;
1744
+ protected getRole(toast: Toast): 'alert' | 'status';
1334
1745
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastComponent, never>;
1335
1746
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "ea-toast", never, {}, {}, never, never, true, never>;
1336
1747
  }
1337
1748
 
1749
+ /** Placement of the tooltip relative to its host element. */
1338
1750
  type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
1751
+ /**
1752
+ * Attaches a positioned tooltip to its host element. Shows on hover and
1753
+ * focus, hides on leave/blur or Escape, and wires up `aria-describedby` so
1754
+ * the tooltip text is announced to assistive technology.
1755
+ */
1339
1756
  declare class TooltipDirective implements OnDestroy {
1340
1757
  private readonly el;
1341
1758
  private readonly renderer;
@@ -1350,10 +1767,12 @@ declare class TooltipDirective implements OnDestroy {
1350
1767
  ngOnDestroy(): void;
1351
1768
  private show;
1352
1769
  private hide;
1770
+ private appendDescribedBy;
1771
+ private removeDescribedBy;
1353
1772
  private positionTooltip;
1354
1773
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TooltipDirective, never>;
1355
1774
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TooltipDirective, "[eaTooltip]", never, { "eaTooltip": { "alias": "eaTooltip"; "required": true; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1356
1775
  }
1357
1776
 
1358
1777
  export { AccordionComponent, AccordionItemComponent, AlertCircleIconComponent, AlertComponent, AlertTriangleIconComponent, AppleIconComponent, ArrowDownIconComponent, ArrowLeftIconComponent, ArrowRightIconComponent, ArrowUpIconComponent, AutocompleteComponent, AvatarComponent, AvatarEditorComponent, BadgeComponent, BellIconComponent, BreadcrumbsComponent, ButtonComponent, CalendarIconComponent, CameraIconComponent, CardComponent, CheckCircleIconComponent, CheckIconComponent, CheckboxComponent, ChevronDownIconComponent, ChevronLeftIconComponent, ChevronRightIconComponent, ChevronUpIconComponent, ChevronsUpDownIconComponent, ClockIconComponent, CodeInputComponent, CopyIconComponent, DataTableComponent, DatePickerComponent, DialogComponent, DividerComponent, DownloadIconComponent, DrawerComponent, DropdownComponent, EagamiIconComponent, EagamiWordmarkComponent, EmptyStateComponent, ExternalLinkIconComponent, EyeIconComponent, EyeOffIconComponent, FacebookIconComponent, FileIconComponent, FilterIconComponent, GithubIconComponent, GoogleIconComponent, HeartIconComponent, ImageIconComponent, InfoIconComponent, InputComponent, LinkIconComponent, LoaderIconComponent, LogOutIconComponent, MailIconComponent, MenuComponent, MenuIconComponent, MenuItemComponent, MenuTriggerDirective, MicrosoftIconComponent, MinusIconComponent, MoreHorizontalIconComponent, PaginatorComponent, PencilIconComponent, PlusIconComponent, ProgressBarComponent, RadioComponent, RadioGroupComponent, RotateCcwIconComponent, SearchIconComponent, SegmentedComponent, SettingsIconComponent, SkeletonComponent, SliderComponent, SpinnerComponent, StarIconComponent, SwitchComponent, TabComponent, TabsComponent, TagComponent, TextareaComponent, ToastComponent, ToastService, TooltipDirective, TrashIconComponent, UploadIconComponent, UserIconComponent, XCircleIconComponent, XIconComponent, XTwitterIconComponent };
1359
- export type { AlertVariant, AutocompleteOption, AutocompleteSize, AvatarEditorCropEvent, AvatarEditorCropState, AvatarEditorShape, AvatarShape, AvatarSize, BadgeSize, BadgeVariant, BreadcrumbClickEvent, BreadcrumbItem, BreadcrumbsSeparator, ButtonSize, ButtonType, ButtonVariant, CardHeaderAlign, CardPadding, CardVariant, CheckboxSize, CodeInputSize, CodeInputStatus, DataTableColumn, DataTableDensity, DataTableSortState, DatePickerFormat, DatePickerSize, DatePickerValue, DatePickerWeekStart, DialogSize, DividerOrientation, DrawerPosition, DrawerSize, DropdownOption, DropdownSize, EagamiWordmarkLayout, EagamiWordmarkVariant, EmptyStateSize, InputSize, InputStatus, InputType, MenuItemVariant, MenuPlacement, PaginatorPlacement, PaginatorState, ProgressBarSize, ProgressBarVariant, RadioOrientation, RadioSize, SegmentedOption, SegmentedSize, SkeletonVariant, SliderSize, SortDirection, SpinnerSize, SwitchSize, TabsSize, TabsVariant, TagSize, TagVariant, TextareaResize, TextareaSize, TextareaStatus, Toast, ToastOptions, ToastVariant, TooltipPosition };
1778
+ export type { AlertVariant, AutocompleteSize, AvatarEditorCropEvent, AvatarEditorCropState, AvatarEditorShape, AvatarShape, AvatarSize, BadgeSize, BadgeVariant, BreadcrumbClickEvent, BreadcrumbItem, BreadcrumbsSeparator, ButtonSize, ButtonType, ButtonVariant, CardHeaderAlign, CardPadding, CardVariant, CheckboxSize, CodeInputSize, DataTableColumn, DataTableDensity, DataTableSortDirection, DataTableSortState, DatePickerFormat, DatePickerSize, DatePickerValue, DatePickerWeekStart, DialogSize, DividerOrientation, DrawerPosition, DrawerSize, DropdownSize, EagamiWordmarkLayout, EagamiWordmarkVariant, EmptyStateHeadingLevel, EmptyStateSize, InputSize, InputType, MenuItemVariant, MenuPlacement, PaginatorAlign, PaginatorState, ProgressBarSize, ProgressBarVariant, RadioOrientation, RadioSize, SegmentedSize, SelectOption, SkeletonVariant, SliderSize, SpinnerSize, SwitchSize, TabsSize, TabsVariant, TagSize, TagVariant, TextareaResize, TextareaSize, Toast, ToastOptions, ToastVariant, TooltipPosition };