@eagami/ui 5.56.0 → 5.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eagami/ui",
3
- "version": "5.56.0",
3
+ "version": "5.58.0",
4
4
  "description": "Lightweight, accessible, themeable Angular UI component library and icon set built on CSS custom properties",
5
5
  "author": "Michal Wiraszka <michal@eagami.com>",
6
6
  "license": "MIT",
@@ -191,6 +191,55 @@ $target-size-min: 24px;
191
191
  user-select: none;
192
192
  }
193
193
 
194
+ // Floating surface of a menu-like list, sized in em so it scales with the host
195
+ // component's `size`. Positioned by the host `<ea-popover>`; the background is
196
+ // the caller's to set.
197
+ @mixin menu-surface {
198
+ overflow-y: auto;
199
+ min-width: 10em;
200
+ padding: 0.25em 0;
201
+ border: var(--border-width-thin) solid var(--color-border-default);
202
+ border-radius: var(--radius-md);
203
+ box-shadow: var(--shadow-lg);
204
+ @include elevated-surface-border;
205
+ }
206
+
207
+ // Row of a menu-like list. `$disabled` is the selector marking a row that cannot
208
+ // be activated, which is left out of the hover and focus highlight.
209
+ @mixin menu-row($disabled) {
210
+ display: flex;
211
+ align-items: center;
212
+ gap: 0.5em;
213
+ width: 100%;
214
+ padding: 0.5em 0.75em;
215
+ // Buttons do not inherit font-size by default, so take the list's; every
216
+ // dimension here is in em and scales with it
217
+ font-size: inherit;
218
+ text-align: start;
219
+ font-family: var(--font-family-sans);
220
+ border: none;
221
+ background: transparent;
222
+ color: var(--color-text-primary);
223
+ cursor: pointer;
224
+ transition: var(--transition-colors);
225
+
226
+ // state-hover (a translucent wash) reads on the elevated menu surface in both
227
+ // themes; bg-muted collapses onto that surface's shade in dark mode.
228
+ &:hover:not(#{$disabled}),
229
+ &:focus-visible:not(#{$disabled}) {
230
+ background-color: var(--color-state-hover);
231
+
232
+ @media (forced-colors: active) {
233
+ background-color: Highlight;
234
+ color: HighlightText;
235
+ }
236
+ }
237
+
238
+ &:focus-visible {
239
+ outline: none;
240
+ }
241
+ }
242
+
194
243
  // Strips the geometry the UA stylesheet forces on a `[popover]` element (a
195
244
  // centred, viewport-filling, scrollable box) so a surface promoted into the top
196
245
  // layer keeps the box it has in the normal layer. Colour and spacing chrome
@@ -56,6 +56,7 @@ export interface EagamiMessages {
56
56
  };
57
57
  breadcrumbs: {
58
58
  label: string;
59
+ showHidden: string;
59
60
  };
60
61
  chart: {
61
62
  /** Announced role of a chart's plot, in place of the generic "group". */
@@ -135,6 +136,10 @@ export interface EagamiMessages {
135
136
  };
136
137
  dropdown: {
137
138
  placeholder: string;
139
+ clear: string;
140
+ dialogLabel: string;
141
+ searchPlaceholder: string;
142
+ searchEmpty: string;
138
143
  };
139
144
  fieldLabel: {
140
145
  /** Accessible name of the button that reveals a field label's help. */
@@ -1679,6 +1684,8 @@ export declare class BarChartComponent {
1679
1684
  export type BreadcrumbsSeparator = 'chevron' | 'slash';
1680
1685
  /** Visual size of the breadcrumb trail. */
1681
1686
  export type BreadcrumbsSize = EaSize;
1687
+ /** What a trail wider than its container does: move levels into a menu, or scroll sideways. */
1688
+ export type BreadcrumbsOverflow = 'menu' | 'scroll';
1682
1689
  /** Single entry in a breadcrumb trail. */
1683
1690
  export interface BreadcrumbItem {
1684
1691
  label: string;
@@ -1691,24 +1698,77 @@ export interface BreadcrumbClickEvent {
1691
1698
  index: number;
1692
1699
  event: MouseEvent;
1693
1700
  }
1701
+ /** A breadcrumb paired with its position in the full trail. */
1702
+ interface IndexedBreadcrumb {
1703
+ item: BreadcrumbItem;
1704
+ index: number;
1705
+ }
1694
1706
  /**
1695
1707
  * Navigation trail that shows the user's location within a hierarchy. Items
1696
1708
  * with an `href` render as links, others render as buttons; the final item is
1697
- * always treated as the current page and is non-interactive.
1709
+ * always treated as the current page and is non-interactive. Levels that go
1710
+ * past `maxItems`, or that the container has no room for, move into a menu
1711
+ * behind a button after the first item, earliest levels first, and return to
1712
+ * the trail as room opens up.
1698
1713
  */
1699
1714
  export declare class BreadcrumbsComponent {
1700
- private readonly i18n;
1715
+ protected readonly i18n: EagamiI18nService;
1716
+ private readonly popover;
1717
+ protected readonly expandEl: import("@angular/core").Signal<ElementRef<HTMLButtonElement> | undefined>;
1718
+ private readonly menuEl;
1719
+ private readonly sizerEl;
1720
+ private readonly sizerItemEls;
1721
+ private readonly sizerExpandEl;
1701
1722
  readonly items: import("@angular/core").InputSignal<BreadcrumbItem[]>;
1702
1723
  readonly separator: import("@angular/core").InputSignal<BreadcrumbsSeparator>;
1703
1724
  /** Visual size of the breadcrumb trail. */
1704
1725
  readonly size: import("@angular/core").InputSignal<EaSize>;
1726
+ /**
1727
+ * Most items shown in the trail at once. The earliest levels after the first
1728
+ * item move into a menu to stay within it. Never fewer than two.
1729
+ */
1730
+ readonly maxItems: import("@angular/core").InputSignal<number | undefined>;
1731
+ /**
1732
+ * What happens when the trail is wider than its container. `menu` moves as
1733
+ * many levels as it takes into a menu, earliest first, keeping the first and
1734
+ * last item in the trail. `scroll` keeps every level and scrolls sideways.
1735
+ */
1736
+ readonly overflow: import("@angular/core").InputSignal<BreadcrumbsOverflow>;
1705
1737
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
1706
1738
  /** Fires when a non-disabled, non-final breadcrumb is activated. */
1707
1739
  readonly clicked: import("@angular/core").OutputEmitterRef<BreadcrumbClickEvent>;
1740
+ protected readonly menuId: string;
1741
+ protected readonly menuOpen: import("@angular/core").WritableSignal<boolean>;
1742
+ private menuPinned;
1743
+ private readonly menuFocusPending;
1744
+ /** Levels the container has no room for, counted from the one after the first item. */
1745
+ private readonly crowdedOut;
1708
1746
  /** Accessible label for the breadcrumb nav, falling back to the active locale. */
1709
1747
  readonly resolvedAriaLabel: import("@angular/core").Signal<string>;
1748
+ private readonly indexed;
1749
+ private readonly menuCount;
1750
+ /** Items in the trail, each carrying its index into the full list. */
1751
+ protected readonly crumbs: import("@angular/core").Signal<IndexedBreadcrumb[]>;
1752
+ /** Items moved into the menu, in trail order. */
1753
+ protected readonly menuCrumbs: import("@angular/core").Signal<IndexedBreadcrumb[]>;
1754
+ constructor();
1710
1755
  isLast(index: number): boolean;
1711
1756
  handleClick(item: BreadcrumbItem, index: number, event: MouseEvent): void;
1757
+ protected toggleMenu(): void;
1758
+ protected handleExpandKeydown(event: KeyboardEvent): void;
1759
+ protected handleExpandEnter(): void;
1760
+ protected handleHoverLeave(event: MouseEvent): void;
1761
+ protected handleMenuClick(crumb: IndexedBreadcrumb, event: MouseEvent): void;
1762
+ protected handleMenuKeydown(event: KeyboardEvent): void;
1763
+ protected closeMenu(restoreFocus?: boolean): void;
1764
+ private openMenu;
1765
+ private menuItems;
1766
+ /**
1767
+ * Works out how many levels the container has no room for. The widths come
1768
+ * from the sizer, which lays out the whole trail whatever is collapsed, so
1769
+ * the answer never depends on what is currently in the menu.
1770
+ */
1771
+ private fit;
1712
1772
  static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbsComponent, never>;
1713
1773
  static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbsComponent, "ea-breadcrumbs", never, {
1714
1774
  "items": {
@@ -1726,6 +1786,16 @@ export declare class BreadcrumbsComponent {
1726
1786
  "required": false;
1727
1787
  "isSignal": true;
1728
1788
  };
1789
+ "maxItems": {
1790
+ "alias": "maxItems";
1791
+ "required": false;
1792
+ "isSignal": true;
1793
+ };
1794
+ "overflow": {
1795
+ "alias": "overflow";
1796
+ "required": false;
1797
+ "isSignal": true;
1798
+ };
1729
1799
  "ariaLabel": {
1730
1800
  "alias": "aria-label";
1731
1801
  "required": false;
@@ -3500,6 +3570,11 @@ export type DatePickerFormat = 'short' | 'medium' | 'long';
3500
3570
  export type DatePickerWeekStart = 0 | 1;
3501
3571
  /** Value accepted via `writeValue`: a `Date`, ISO/parseable string, or `null`. */
3502
3572
  export type DatePickerValue = Date | string | null;
3573
+ /** Span of dates that includes both its start and its end. */
3574
+ export interface DatePickerDateRange {
3575
+ start: Date;
3576
+ end: Date;
3577
+ }
3503
3578
  interface CalendarDay {
3504
3579
  date: Date;
3505
3580
  day: number;
@@ -3513,10 +3588,10 @@ interface CalendarDay {
3513
3588
  * Date field with a calendar popover. The date can be typed straight into the
3514
3589
  * field in any reasonable shape (ISO, all-numeric in the locale's field order,
3515
3590
  * or with a month name) and is rewritten in the configured `format` on commit.
3516
- * Supports `min`/`max` bounds, configurable week start, locale-aware formatting
3517
- * via `Intl.DateTimeFormat`, and full keyboard navigation (arrows,
3518
- * PageUp/PageDown, Home/End, Enter, Escape). Integrates with Angular forms via
3519
- * `ControlValueAccessor`.
3591
+ * Supports `min`/`max` bounds, disabled weekdays and dates, configurable week
3592
+ * start, locale-aware formatting via `Intl.DateTimeFormat`, and full keyboard
3593
+ * navigation (arrows, PageUp/PageDown, Home/End, Enter, Escape). Integrates
3594
+ * with Angular forms via `ControlValueAccessor`.
3520
3595
  */
3521
3596
  export declare class DatePickerComponent implements ControlValueAccessor {
3522
3597
  protected readonly fieldEl: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
@@ -3540,6 +3615,10 @@ export declare class DatePickerComponent implements ControlValueAccessor {
3540
3615
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
3541
3616
  readonly minDate: import("@angular/core").InputSignal<Date | null>;
3542
3617
  readonly maxDate: import("@angular/core").InputSignal<Date | null>;
3618
+ /** Weekdays that cannot be picked, numbered as `Date.getDay()` does: 0 for Sunday through 6 for Saturday. */
3619
+ readonly disabledWeekdays: import("@angular/core").InputSignal<readonly number[]>;
3620
+ /** Individual dates and ranges that cannot be picked, on top of the `minDate` and `maxDate` bounds. */
3621
+ readonly disabledDates: import("@angular/core").InputSignal<readonly (Date | DatePickerDateRange)[]>;
3543
3622
  readonly format: import("@angular/core").InputSignal<DatePickerFormat>;
3544
3623
  readonly weekStartsOn: import("@angular/core").InputSignal<DatePickerWeekStart>;
3545
3624
  readonly locale: import("@angular/core").InputSignal<string | undefined>;
@@ -3628,7 +3707,8 @@ export declare class DatePickerComponent implements ControlValueAccessor {
3628
3707
  protected handleInputKeydown(event: KeyboardEvent): void;
3629
3708
  private commitDraft;
3630
3709
  private applyValue;
3631
- private isOutOfRange;
3710
+ private isUnavailable;
3711
+ private covers;
3632
3712
  handleGridKeydown(event: KeyboardEvent): void;
3633
3713
  /** Called by `<ea-popover>` when the user clicks outside the picker. */
3634
3714
  onPopoverCloseRequested(): void;
@@ -3705,6 +3785,16 @@ export declare class DatePickerComponent implements ControlValueAccessor {
3705
3785
  "required": false;
3706
3786
  "isSignal": true;
3707
3787
  };
3788
+ "disabledWeekdays": {
3789
+ "alias": "disabledWeekdays";
3790
+ "required": false;
3791
+ "isSignal": true;
3792
+ };
3793
+ "disabledDates": {
3794
+ "alias": "disabledDates";
3795
+ "required": false;
3796
+ "isSignal": true;
3797
+ };
3708
3798
  "format": {
3709
3799
  "alias": "format";
3710
3800
  "required": false;
@@ -4146,12 +4236,16 @@ export type DropdownSize = EaSize;
4146
4236
  * Single-select dropdown with a custom popup list. Supports keyboard
4147
4237
  * navigation (arrow keys, Enter/Space to select, Escape to close), closes
4148
4238
  * on outside click or viewport scroll/resize, and integrates with Angular
4149
- * forms via `ControlValueAccessor`. Positioning, dismissal, and SSR-safe
4150
- * scroll handling are provided by `<ea-popover>`.
4239
+ * forms via `ControlValueAccessor`. Optionally offers a clear button on the
4240
+ * trigger and a search field above the options. Positioning, dismissal, and
4241
+ * SSR-safe scroll handling are provided by `<ea-popover>`.
4151
4242
  */
4152
4243
  export declare class DropdownComponent implements ControlValueAccessor {
4153
4244
  private readonly elRef;
4154
- private readonly i18n;
4245
+ private readonly popover;
4246
+ private readonly searchEl;
4247
+ protected readonly i18n: EagamiI18nService;
4248
+ private readonly injector;
4155
4249
  readonly label: import("@angular/core").InputSignal<string | undefined>;
4156
4250
  /** Optional icon component rendered before the label text. */
4157
4251
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
@@ -4164,16 +4258,21 @@ export declare class DropdownComponent implements ControlValueAccessor {
4164
4258
  readonly disabled: import("@angular/core").InputSignal<boolean>;
4165
4259
  readonly readonly: import("@angular/core").InputSignal<boolean>;
4166
4260
  readonly required: import("@angular/core").InputSignal<boolean>;
4261
+ /** Shows a clear button on the trigger while an option is selected. */
4262
+ readonly clearable: import("@angular/core").InputSignal<boolean>;
4263
+ /** Adds a search field above the options that filters them as the user types. */
4264
+ readonly searchable: import("@angular/core").InputSignal<boolean>;
4167
4265
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
4168
4266
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
4169
4267
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
4170
4268
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
4171
4269
  readonly id: import("@angular/core").InputSignal<string>;
4172
4270
  readonly value: import("@angular/core").ModelSignal<string>;
4173
- /** Fires with the new value when the user selects an option. */
4271
+ /** Fires with the new value when the user selects an option or clears the selection. */
4174
4272
  readonly changed: import("@angular/core").OutputEmitterRef<string>;
4175
4273
  readonly isOpen: import("@angular/core").WritableSignal<boolean>;
4176
4274
  readonly focusedIndex: import("@angular/core").WritableSignal<number>;
4275
+ protected readonly searchTerm: import("@angular/core").WritableSignal<string>;
4177
4276
  private readonly _formDisabled;
4178
4277
  private typeaheadQuery;
4179
4278
  private typeaheadTimer;
@@ -4189,21 +4288,29 @@ export declare class DropdownComponent implements ControlValueAccessor {
4189
4288
  private readonly optionGroups;
4190
4289
  /** Whether the consumer supplied groups, which the list exposes as ARIA groups. */
4191
4290
  protected readonly grouped: import("@angular/core").Signal<boolean>;
4192
- /** Every option in the order given, flattened across groups; drives all index maths. */
4291
+ /** Every option in the order given, flattened across groups. */
4193
4292
  private readonly flatOptions;
4194
- /** Groups to render, each option carrying its index into the flattened list. */
4293
+ private readonly filteredGroups;
4294
+ /** Options matching the search text, flattened across groups; drives all index maths. */
4295
+ protected readonly filteredOptions: import("@angular/core").Signal<SelectOption[]>;
4296
+ /** Groups to render, each option carrying its index into the filtered list. */
4195
4297
  protected readonly renderedGroups: import("@angular/core").Signal<RenderedGroup[]>;
4196
4298
  protected readonly selectedIndex: import("@angular/core").Signal<number>;
4197
4299
  readonly selectedLabel: import("@angular/core").Signal<string>;
4198
4300
  /** Placeholder text, falling back to the active locale's translation. */
4199
4301
  readonly resolvedPlaceholder: import("@angular/core").Signal<string>;
4200
4302
  readonly triggerLabelledBy: import("@angular/core").Signal<string | null>;
4303
+ protected readonly showClear: import("@angular/core").Signal<boolean>;
4304
+ protected readonly listboxId: import("@angular/core").Signal<string>;
4305
+ /** Id of the keyboard-focused option, for `aria-activedescendant`. */
4306
+ protected readonly activeOptionId: import("@angular/core").Signal<string | null>;
4201
4307
  readonly triggerClasses: import("@angular/core").Signal<{
4202
4308
  [x: string]: boolean;
4203
4309
  'ea-dropdown__trigger--error': boolean;
4204
4310
  'ea-dropdown__trigger--open': boolean;
4205
4311
  'ea-dropdown__trigger--disabled': boolean;
4206
4312
  'ea-dropdown__trigger--readonly': boolean;
4313
+ 'ea-dropdown__trigger--clearable': boolean;
4207
4314
  }>;
4208
4315
  readonly menuClasses: import("@angular/core").Signal<{
4209
4316
  [x: string]: boolean;
@@ -4218,15 +4325,23 @@ export declare class DropdownComponent implements ControlValueAccessor {
4218
4325
  select(option: SelectOption): void;
4219
4326
  /** Closes the dropdown list without changing the current value. */
4220
4327
  close(): void;
4328
+ protected clear(): void;
4221
4329
  /** Moves keyboard focus to the dropdown trigger. */
4222
4330
  focus(): void;
4223
4331
  /** Called by `<ea-popover>` when the user clicks outside the dropdown. */
4224
4332
  onPopoverCloseRequested(): void;
4225
4333
  handleKeydown(event: KeyboardEvent): void;
4334
+ protected onSearchInput(term: string): void;
4335
+ protected handleSearchKeydown(event: KeyboardEvent): void;
4336
+ protected onMenuMousedown(event: MouseEvent): void;
4337
+ private commit;
4338
+ private startSearch;
4339
+ private focusFirstMatch;
4226
4340
  private selectFocusedOrOpen;
4227
4341
  private focusEdge;
4228
4342
  /** Keeps the keyboard-focused option visible inside the scrolling listbox. */
4229
4343
  private setFocusedIndex;
4344
+ private scrollOptionIntoView;
4230
4345
  private handleTypeahead;
4231
4346
  private moveFocus;
4232
4347
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
@@ -4276,6 +4391,16 @@ export declare class DropdownComponent implements ControlValueAccessor {
4276
4391
  "required": false;
4277
4392
  "isSignal": true;
4278
4393
  };
4394
+ "clearable": {
4395
+ "alias": "clearable";
4396
+ "required": false;
4397
+ "isSignal": true;
4398
+ };
4399
+ "searchable": {
4400
+ "alias": "searchable";
4401
+ "required": false;
4402
+ "isSignal": true;
4403
+ };
4279
4404
  "hint": {
4280
4405
  "alias": "hint";
4281
4406
  "required": false;
@@ -7738,6 +7863,7 @@ export declare class TabComponent implements OnInit, OnDestroy {
7738
7863
  readonly disabled: import("@angular/core").InputSignal<boolean>;
7739
7864
  readonly id: import("@angular/core").InputSignal<string>;
7740
7865
  readonly isActive: import("@angular/core").Signal<boolean>;
7866
+ protected readonly vertical: import("@angular/core").Signal<boolean>;
7741
7867
  ngOnInit(): void;
7742
7868
  ngOnDestroy(): void;
7743
7869
  static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
@@ -7768,6 +7894,8 @@ export declare class TabComponent implements OnInit, OnDestroy {
7768
7894
  export type TabsVariant = 'underline' | 'filled';
7769
7895
  /** Visual size of the tabs. */
7770
7896
  export type TabsSize = EaSize;
7897
+ /** Whether the tab bar runs along the top of the panel or down its side. */
7898
+ export type TabsOrientation = 'horizontal' | 'vertical';
7771
7899
  /**
7772
7900
  * Tab bar paired with content panels. Child `ea-tab` components register
7773
7901
  * themselves automatically and the active panel is shown based on the
@@ -7778,6 +7906,8 @@ export declare class TabsComponent {
7778
7906
  readonly registeredTabs: import("@angular/core").WritableSignal<TabComponent[]>;
7779
7907
  readonly variant: import("@angular/core").InputSignal<TabsVariant>;
7780
7908
  readonly size: import("@angular/core").InputSignal<EaSize>;
7909
+ /** Places the tab bar above the panel, or in a column beside it. */
7910
+ readonly orientation: import("@angular/core").InputSignal<TabsOrientation>;
7781
7911
  /** Accessible name for the tablist, announced by screen readers. */
7782
7912
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
7783
7913
  readonly activeTab: import("@angular/core").ModelSignal<string>;
@@ -7802,6 +7932,11 @@ export declare class TabsComponent {
7802
7932
  "required": false;
7803
7933
  "isSignal": true;
7804
7934
  };
7935
+ "orientation": {
7936
+ "alias": "orientation";
7937
+ "required": false;
7938
+ "isSignal": true;
7939
+ };
7805
7940
  "ariaLabel": {
7806
7941
  "alias": "ariaLabel";
7807
7942
  "required": false;
@@ -7864,6 +7999,12 @@ export declare class TooltipDirective implements OnDestroy {
7864
7999
  * to the viewport, which no value can push the bubble past.
7865
8000
  */
7866
8001
  readonly maxWidth: import("@angular/core").InputSignal<number | undefined>;
8002
+ /**
8003
+ * Wait in ms before the bubble appears on hover or keyboard focus, so a
8004
+ * pointer passing over the trigger does not flash it. Leaving the trigger
8005
+ * within the wait cancels the bubble.
8006
+ */
8007
+ readonly showDelay: import("@angular/core").InputSignal<number>;
7867
8008
  /**
7868
8009
  * Grace period in ms before a bubble the viewport clamp made scrollable hides
7869
8010
  * after the pointer leaves, long enough to cross the gap onto the bubble and
@@ -7881,6 +8022,7 @@ export declare class TooltipDirective implements OnDestroy {
7881
8022
  private placedPosition;
7882
8023
  private templateView;
7883
8024
  private scrollable;
8025
+ private showTimer;
7884
8026
  private hideTimer;
7885
8027
  private pointerInside;
7886
8028
  private readonly tooltipId;
@@ -7903,6 +8045,8 @@ export declare class TooltipDirective implements OnDestroy {
7903
8045
  private controlled;
7904
8046
  ngOnDestroy(): void;
7905
8047
  private syncPointerListeners;
8048
+ private requestShow;
8049
+ private cancelPendingShow;
7906
8050
  private show;
7907
8051
  private shrinkToContent;
7908
8052
  private requestHide;
@@ -7943,6 +8087,11 @@ export declare class TooltipDirective implements OnDestroy {
7943
8087
  "required": false;
7944
8088
  "isSignal": true;
7945
8089
  };
8090
+ "showDelay": {
8091
+ "alias": "showDelay";
8092
+ "required": false;
8093
+ "isSignal": true;
8094
+ };
7946
8095
  "dismissDelay": {
7947
8096
  "alias": "dismissDelay";
7948
8097
  "required": false;
@@ -8112,8 +8261,8 @@ export interface TextareaSelection {
8112
8261
  }
8113
8262
  /**
8114
8263
  * Multiline text field that mirrors the `ea-input` API. Supports configurable
8115
- * `resize` direction and `maxlength`, exposes the caret through
8116
- * `getSelection()` and `insertText()`, and integrates with Angular
8264
+ * `resize` direction, `maxlength` and a character count, exposes the caret
8265
+ * through `getSelection()` and `insertText()`, and integrates with Angular
8117
8266
  * forms via `ControlValueAccessor`.
8118
8267
  */
8119
8268
  export declare class TextareaComponent implements ControlValueAccessor {
@@ -8136,6 +8285,8 @@ export declare class TextareaComponent implements ControlValueAccessor {
8136
8285
  readonly required: import("@angular/core").InputSignal<boolean>;
8137
8286
  readonly resize: import("@angular/core").InputSignal<TextareaResize>;
8138
8287
  readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
8288
+ /** Shows the number of characters typed below the field, against `maxlength` when one is set. */
8289
+ readonly showCount: import("@angular/core").InputSignal<boolean>;
8139
8290
  /** Optional pixel ceiling for the textarea's height. Beyond it, the inner
8140
8291
  * field scrolls vertically instead of growing. */
8141
8292
  readonly maxHeight: import("@angular/core").InputSignal<number | undefined>;
@@ -8158,6 +8309,8 @@ export declare class TextareaComponent implements ControlValueAccessor {
8158
8309
  readonly hasError: import("@angular/core").Signal<boolean>;
8159
8310
  readonly showError: import("@angular/core").Signal<boolean>;
8160
8311
  readonly showHint: import("@angular/core").Signal<boolean>;
8312
+ protected readonly countText: import("@angular/core").Signal<string>;
8313
+ protected readonly describedBy: import("@angular/core").Signal<string | null>;
8161
8314
  readonly wrapperClasses: import("@angular/core").Signal<{
8162
8315
  [x: string]: boolean;
8163
8316
  'ea-textarea-wrapper--error': boolean;
@@ -8260,6 +8413,11 @@ export declare class TextareaComponent implements ControlValueAccessor {
8260
8413
  "required": false;
8261
8414
  "isSignal": true;
8262
8415
  };
8416
+ "showCount": {
8417
+ "alias": "showCount";
8418
+ "required": false;
8419
+ "isSignal": true;
8420
+ };
8263
8421
  "maxHeight": {
8264
8422
  "alias": "maxHeight";
8265
8423
  "required": false;